彻底理解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,表示不再发送数据,但还能接收数据。这要求挥手过程分为两步,先有一方完成发送任务,然后等待对方完成发送,再进行最终的关闭。

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

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

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

相关推荐

02-26 09:15
已编辑
蚌埠学院 golang
点赞 评论 收藏
分享
评论
6
22
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
11086次浏览 95人参与
# 你的实习产出是真实的还是包装的? #
1960次浏览 42人参与
# MiniMax求职进展汇总 #
24121次浏览 309人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7643次浏览 43人参与
# 简历第一个项目做什么 #
31749次浏览 341人参与
# 重来一次,我还会选择这个专业吗 #
433551次浏览 3926人参与
# 米连集团26产品管培生项目 #
6040次浏览 216人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187211次浏览 1122人参与
# 牛客AI文生图 #
21447次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152456次浏览 888人参与
# 研究所笔面经互助 #
118967次浏览 577人参与
# 简历中的项目经历要怎么写? #
310370次浏览 4219人参与
# AI时代,哪些岗位最容易被淘汰 #
63836次浏览 828人参与
# 面试紧张时你会有什么表现? #
30513次浏览 188人参与
# 你今年的平均薪资是多少? #
213146次浏览 1039人参与
# 你怎么看待AI面试 #
180146次浏览 1258人参与
# 高学历就一定能找到好工作吗? #
64331次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76546次浏览 374人参与
# 我的求职精神状态 #
448136次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363523次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160677次浏览 1112人参与
# 校招笔试 #
471210次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务