TCP为什么要三次握手?

TCP三次握手协议是为了在不可靠的互联网环境中可靠地建立起一个连接,三次握手可以确保两端的发送和接收能力都是正常的。

那么,为什么是三次而不是二次或四次握手呢?

为什么不是二次握手?

如果是二次握手,即客户端发送一个SYN到服务器,服务器回复一个SYN-ACK给客户端,此时就建立连接。

这种情况下,如果第一个SYN请求在网络中延迟了,并且客户端重新发送了SYN后建立了连接,那么当延迟的SYN请求到达服务器后,服务器会认为是新的连接请求,而此时客户端不会理会服务器的回应,导致服务器一直等待,浪费资源。

为什么不是四次握手?

四次握手会增加额外的延迟和复杂性,并且第四个握手并没有提供三次握手已经解决的问题的任何额外保证。

三次握手已经能够确认双方的发送和接收能力都是正常的,进一步的确认只会增加一次往返时间,降低建立连接的效率。

三次握手建立连接的过程:

  1. 客户端发送SYN:客户端选择一个随机的序列号x发送一个SYN报文,并进入SYN_SENT状态。

  2. 服务器发送SYN-ACK):服务器收到SYN报文,选择自己的序列号y,并发送一个SYN-ACK报文,服务器进入SYN_RCVD状态。

  3. 客户端发送ACK:客户端收到SYN-ACK报文后,会发送一个ACK报文,然后进入ESTABLISHED状态。

数据传输结束之后的四次挥手:

TCP的连接终止则需要四次挥手,这是因为TCP连接是全双工的,即通信双方都可以同时发送和接收信息。终止连接时,每个方向都需要单独关闭,所以就需要四次挥手。

  1. 客户端发送FIN:客户端决定数据发送完毕后,发送一个FIN报文。

  2. 服务器ACK:服务器收到这个FIN报文,发送一个ACK报文确认,并进入CLOSE_WAIT状态。

  3. 服务器发送FIN:服务器准备好关闭连接时,发送一个FIN报文。

  4. 客户端ACK:客户端收到FIN后,发送一个ACK报文,然后进入TIME_WAIT状态。经过一段时间后确保服务器收到ACK报文之后,客户端关闭连接。

生活中的例子:

可以将三次握手比作电话通话。当你拨打一个电话号码时,对方接听(第一次握手),你们开始互相问候确认对方能听到(第二次握手),然后你们开始对话(第三次握手)。

如果只问候一次,你可能不确定对方是否真的听到你;如果问候多次,就显得冗余和不效率。

通话结束后,你说"再见"挂断电话(第一次挥手),对方说"再见"后也挂断(第二次挥手),这样确保了双方都明白通话结束。

在电话通话快结束的时候:

你先说"你还什么别的吗,没有我就要挂了"(第一次挥手),等待对方回应,相当于发送了FIN包。

对方回应"等我想想还有什么"(第二次挥手),相当于对方发送了ACK包,但对方可能还有点儿事要处理,所以通话还未立刻结束。

过了一会儿,对方确认说"好了,我也没话了,那挂了"(第三次挥手),这时候对方发送了FIN包。

你回应"知道了,挂了"(第四次挥手),对应发送ACK包,之后双方都可以挂断电话,结束通话。

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注我会非常感激!@小郑说编程

相关推荐
网络研究院19 小时前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智19 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest19 小时前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
shushangyun_19 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
2601_9618451519 小时前
粉笔行测题库|系统班|刷题
网络·百度·微信·微信公众平台·facebook·新浪微博
程序员mine19 小时前
HTTPS-TLS加密与证书完全指南(中)
网络协议·https·ssl
程序猿阿伟20 小时前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome
之歆20 小时前
现代 HTTP 客户端深度解析:Fetch 与 Axios
chrome·网络协议·http
InHand云飞小白20 小时前
无人值守站点网络困境?工业级路由器IR315破解连接难题
网络·物联网·4g·工业路由器·4g路由器·iiot·蜂窝路由器
森G21 小时前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt