• 网络层—简单的面试问题


    TCP

    在面试的时候,如果问大家,TCP 的三次握手,大家一般准备下,都会很容易的回答上这个问题。但是如果这样问:TCP 为什么要三次握手,二次行不行?你还会吗?其次,大家都知道TCP 有个特点:是可靠传输,那问题来了:TCP 是怎么保证可靠传输的?难道就因为三次握手了。

    问题1: TCP 为什么要三次握手,二次行不行?

    图片

    如果是2次握手,就会出现下面的情况:

    1.客户端发送syn同步报文给server端时,如果因为网络环境不好,此时网络发生了超时。
    2.等待一段时间后,发现没有接受到服务端的ack确认报文时,客户端会启用超时重传策略,重新syn发送报文给server。
    3.这个时候服务端收到syn报文后,给客户端发送一个ack确认报文,此时,客户端和服务端建立了链接。但是当后续的某个时候,服务端收到了之前因为超时而晚到的syn报文,server端就认为又要建立一个连接。这就出现问题了。

    问题2: TCP 是怎么保证可靠传输的?

    TCP 是怎么保证可靠传输的?(怎么保证报文:无差错、 不丢失、 不重复、 按序到达)

    可靠传输在 TCP 层面是通过【停止等待协议】实现的:

    图片

    无差错情况

    无差错情况下,客户端会按顺序的发送一个报文,得到 server 端响应后发送下一个报文。

    • 客户端发送分组报文M1, server 端给客户端确认。

    • 客户端发送分组报文M2, server 端给客户端确认。

    • 客户端发送分组报文M3, server 端给客户端确认。

    超时重传

    如果因为网络等情况,在一定时间内,客户端没有收到 server 端的反馈:
    客户端再次发送报文;

    确认丢失

    如果因为网络等情况,在一定时间内,客户端没有收到 server 端的反馈:
    客户端再次发送报文;

    • 是 server 端没有发送成功导致客户端没有收到反馈;

    • server 端会收到重复的M1报文,丢掉新收到的报文,给客户端回复;

    确认迟到

    如果因为网络等情况,在一定时间内,客户端没有收到 server 端的反馈:
    客户端再次发送报文;

    • 如果是 server 端在规定时间内没有发给客户端反馈;

    • server 端收到重复的M1报文后,丢掉新收到的报文,给客户端回复;

    • 客户端多次收到 server 端反馈,客户端只处理收到的第一次,后面几次就不做响应了。

    还有一些问题?

    比如:

    • TCP 是面向字节流的还是面向报文的?

    • TCP 和 UDP 的区别?希望答的深入一点。 

    • get 和 post 请求方法的区别?【如果回答 get 的请求参数是拼接在url后面,post是放在方法体里面的,这是非常简单的,需要回答专业和深刻点,按照语义来,(安全、幂等、可缓存的)】

    今天的分享就到这里了,最近在整理这些面试题的时候,发现知道表面的还是非常不够的,需要理解深入,知道其底层的运行机制。

    欢迎关注【无量测试之道】公众号,回复【领取资源】
    Python编程学习资源干货、
    Python+Appium框架APP的UI自动化、
    Python+Selenium框架Web的UI自动化、
    Python+Unittest框架API自动化、

    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

     添加关注,让我们一起共同成长!

  • 相关阅读:
    C# 读取JSON
    checkbox与说明文字无法对齐的问题
    C#判断一个string是否为数字
    C# 调用系统winmm.dll 播放音乐wav mp3
    C#导出EXCEL的几种方法
    C#遍历DataSet中数据的几种方法总结
    cookie 简单用法
    JQGrid 在页面加载时展开SubGrid
    Echarts 设置地图上文字大小及颜色
    Echarts 地图上显示数值
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/14422517.html
Copyright © 2020-2023  润新知