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

 

posted @ 2021-05-28 22:58  wooooc  阅读(169)  评论(0)    收藏  举报