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包,之后双方都可以挂断电话,结束通话。

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

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

相关推荐
黄沐阳35 分钟前
AP配置(leaderAP组网模式)
运维·网络·智能路由器
Lgnazio1 小时前
OSPF 知识点总结
网络·智能路由器
Marvin13113 小时前
LiveQing视频推流点播流媒体常见问题-分屏展示页面如何显示直播间的名称多分屏视频画面监控
网络·音视频·视频分屏监控·liveqing视频流媒体
厦门辰迈智慧科技有限公司6 小时前
水库安全“守护者”:智能雨水情监测预报系统
运维·网络·物联网·安全·监测
SamtecChina20236 小时前
应用科普 | 漫谈6G通信的未来
大数据·网络·人工智能·科技
千码君20166 小时前
计算机网络:如何将一个B类IP地址分为4个子网
网络·tcp/ip·计算机网络·子网掩码·借位计算·子网位·与运算
鹿鸣天涯6 小时前
Kali Linux 2025.2基于MITRE ATT&CK框架
linux·运维·网络
网络安全大学堂6 小时前
【网络安全入门基础教程】TCP/IP协议深入解析(非常详细)零基础入门到精通,收藏这一篇就够了
网络协议·tcp/ip·web安全·计算机·黑客·程序员·编程
结城7 小时前
深度解析 TCP 三次握手与四次挥手:从原理到 HTTP/HTTPS 的应用
tcp/ip·http·https
稚肩8 小时前
DHCP 握手原理
开发语言·网络协议