彻底理解TCP三次握手和四次挥手



### 三次握手的原因

1. **防止历史包重放攻击**:如果只有两次握手,服务器无法确认客户端是否真的收到了它的响应。假设有延迟的旧的连接请求到达服务器,服务器误以为是新的连接请求并回复SYN+ACK,而实际上客户端并未请求,这可能导致服务器资源被无效占用。三次握手通过客户端的最终ACK确认,确保了请求的新鲜性和双方的同步。

2. **确保双方都具备发送和接收能力**:第一次握手(客户端发SYN),服务器知道了客户端的发送能力;第二次握手(服务器回SYN+ACK),客户端知道了服务器的接收能力和发送能力;第三次握手(客户端回ACK),服务器确认了客户端的接收能力。这样,双方都确认了对方的发送和接收能力,为数据传输打下了可靠的基础。

### 为什么不采用二次握手

- 二次握手中,客户端发送SYN请求建立连接,服务器回应SYN+ACK,此时服务器认为连接已建立并可能分配资源准备接收数据。但若客户端的SYN请求或服务器的SYN+ACK响应在网络中丢失,将导致一方认为连接已建立而另一方则不然,造成误解和资源浪费。三次握手通过客户端的最后确认,消除了这种不确定性。

### 四次挥手的原因

1. **确保数据完全传输**:四次挥手的第一次,客户端发送FIN表示没有更多数据要发送;第二次,服务器回复ACK确认收到FIN;此时,服务器可能还有数据需要发送给客户端,所以连接不能立即关闭。当服务器完成数据发送后,进行第三次挥手,发送自己的FIN;最后,客户端回复ACK,确认收到服务器的FIN,至此连接彻底关闭。

2. **半关闭状态**:TCP支持半关闭状态,即一方向另一方发送了FIN,表示不再发送数据,但还能接收数据。这要求挥手过程分为两步,先有一方完成发送任务,然后等待对方完成发送,再进行最终的关闭。

### 为什么不采用三次挥手

- 在考虑半关闭的情况下,如果尝试用三次挥手关闭连接,可能会在服务器仍有数据需要发送给客户端时就错误地关闭了连接,导致数据丢失。因此,四次挥手确保了在任何一方准备好关闭连接之前,数据传输可以完全结束,保证了数据的完整性。

总之,三次握手和四次挥手的设计都是为了在复杂多变的网络环境中提供一种可靠且高效的连接管理机制,确保数据的准确无误传输和连接的有序建立与关闭。
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 12:10
点赞 评论 收藏
分享
星辰再现:裁员给校招生腾地方
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 12:31
以前小时候我最痛恨出轨、偷情的人,无论男女,为什么会出轨?现在我成了自己最讨厌的人,没想到分享的东西在牛客会被这么多人看,大家的评价都很中肯,我也认同,想过一一回复,但我还是收声了,我想我应该说说这件事,这件事一直压在我心里,是个很大的心结,上面说了人为什么出轨,我大概能明白了。我们大一下半年开始恋爱,开始恋爱,我给出了我铭记3年的承诺,我对她好一辈子,我永远不会背叛,我责任心太重,我觉得跟了我,我就要照顾她一辈子,我们在一起3年我都没有碰过她,她说往东我就往东,她说什么我做什么,她要我干什么,我就干什么!在学校很美好,中途也出过一些小插曲,比如男闺蜜、男闺蜜2号等等等。但我都强迫她改掉了,我...
牛客刘北:两个缺爱的人是没有办法好好在一起的,但世界上哪有什么是非对错?你后悔你们在一起了,但是刚刚在一起的美好也是真的呀,因为其他人的出现,你开始想要了最开始的自己,你的确对不起自己,21岁的你望高物远,你完全可以不谈恋爱,去过你想要的生活,你向往自由,在一起之后,你要想的不是一个人,而是两个人,你不是变心了,就像你说的,你受够了,你不想包容了,冷静几天是你最优的选择,爱人先爱己。
社会教会你的第一课
点赞 评论 收藏
分享
评论
6
19
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务