tcp的三次握手四次挥手
TCP报文的报头结构:
其中与握手和挥手相关的有:
1.序列号(sequence number, seq)
2.确认号(acknoledgement number, ack)
3.标志位中的ACK确认标志、SYN同步标志、FIN结束标志
握手流程:
我认为这张图已经很详细了,以前会比较困惑服务器是如何被动地从CLOSED状态变成LISTEN状态,事实上服务器上的服务正确启动后,就已经是LISTEN状态了,这与客户端是否发送请求没有关联
1.为什么是3次握手
3次是保证双方互相明确对方能收能发的最小值
2.为什么不是2次
如果只有2次握手,一个“已失效的连接请求报文段”传到服务端也会建立连接,从而产生错误
3.为什么不是4次
4次虽然会增加可靠程度但是会浪费大量资源
挥手流程:
同样的,我认为这张图也很详细了
1.为什么等待2MSL,结果导向帮助理解
如果A第4次挥手后B没有收到,B会重传第3次挥手(我把它叫做“假想的第5次挥手”),B发出假想的第5次挥手时A等待了至多1MSL(第4次挥手最大存活时间)。等第5次挥手到达A,又会花费至多1MSL(假象的第5次挥手最大存活时间)。那么A明确B不能收到自己的第4次挥手需要至多2MSL。所以A需要等待2MSL才能判断B是否收到了第4次挥手。
参考文档:
1.https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc
2.https://www.zhihu.com/question/24853633
3.https://www.zhihu.com/question/67013338
原文:https://www.cnblogs.com/wooooc/p/14824061.html