Linux经典面试题:TCP为啥握手3次,挥手却是4次

这个面试题主要分为两个方面回答:第一为啥三次握手就可以建立连接,第二是为啥挥手的时候不是三次或者五次,而是四次。我们先把TCP建立连接、传输数据和断开连接整个时序图贴出来,然后再慢慢分析。

Linux经典面试题:TCP为啥握手3次,挥手却是4次

当握手的时候,客户端发送SYN后服务端返回SYN+ACK,客户端返回ACK就可以建立连接,称为三次握手。那为啥是三次,三次握手的目的为了交换对方seq,第一次是客户端发送自己的seq,第二次是服务端确认客户端seq并且发送自己的seq,第三次是客户端确认服务端seq,总计三次便可以互相确认对方的seq。如果四次就有些浪费了,如果两次无法确认两个seq。

那为啥挥手的时候需要四次呢?因为TCP是全双工的,所谓全双工是相互可以发送和接收数据,客户端方式FIN 只是告诉服务端自己的数据已经发完了,你那边可以关闭后续的数据接收了,但此时,客户端是可以接收数据的,服务端可以继续发送数据给客户端。直到服务端也发送FIN后,表示服务端也发送完了,请求客户端关闭接收,这个连接才真正被双方释放。

这里需要注意,这些都是理论分析。但在工程实践上面可以更加灵活,譬如我们经常将发送的数据和第三次握手的ACK一起发送,或者将服务端挥手的FIN和ACK一起发送,从而节省发包个数,提升效率。

至于为啥需要TIME_WAIT 在之前的文章中:TCP漫谈之为啥需要timewait状态 已经介绍了。

展开阅读全文

页面更新:2024-03-08

标签:目的   时序   四次   服务端   客户端   个数   节省   灵活   效率   状态   两个   理论   方式   经典   数据   工程   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top