【计算机网络】TCP三次握手和四次挥手

  • 客户端--发送带有 SYN 标志的数据包--一次握手--服务端
  • 服务端--发送带有 SYN/ACK 标志的数据包--二次握手--客户端
  • 客户端--发送带有带有 ACK 标志的数据包--三次握手--服务端

为什么是三次握手而不是两次握手?

在不可靠的网络中,可能会出现包传输延迟变化大,存在重传的报文段、存在保温重排序等现象,三次握手可以防止因为已经失效的请求报文突然又传到服务器引起错误。

三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的

第一次握手:客户端什么都不能确认;服务端确认了对方发送正常,自己接收正常

第二次握手:客户端确认了:自己发送、接收正常,对方发送、接收正常;服务端确认了:对方发送正常,自己接收正常

第三次握手:客户端确认了:自己发送、接收正常,对方发送、接收正常;服务端确认了:自己发送、接收正常,对方发送、接收正常

所以三次握手就能确认双发收发功能都正常,缺一不可。

第2次握手传回了ACK,为什么还要传回SYN?

接收端传回发送端所发送的ACK是为了告诉客户端,我接收到的信息确实就是你所发送的信号了,这表明从客户端到服务端的通信是正常的。而回传SYN则是为了建立并确认从服务端到客户端的通信。

为什么要四次挥手?

客户端和服务端都可以发起关闭连接请求,此时需要四次挥手来进行连接关闭。这里以客户端主动发起连接关闭请求:

第一次挥手:他需要向服务端发起FIn包表示要关闭连接,自己进入终止等待1状态

第二次挥手:服务端收到FIN包发送一个ACK包,表示资金进入关闭等待状态 ,客户端进入终止等待2状态。服务端此时还可以发送未发送的数据,客户端还可以接受数据。

第三次挥手:待上述服务端发送完数据后,发送一个FIN包,进入最后确认状态

第四次挥手:客户端收到FIN包后,回复ACK包,进入超时等待状态,经过超时时间后关闭连接。而服务端收到ACK后,立即关闭连接。

为什么客户端需要等待超时时间?为了保证接收端已收到ACK包。假设客户端发出ACK包后就释放连接,万一ACK包在网络上丢失,服务端会停留在最后确认状态。而等待时间内,服务端没有接收到ACK包,会重发FIN包,客户端响应FIN包重发ACK包并刷新超时时间,保证在不可靠的网络中进行可靠的断开连接确认。

相关推荐
DianSan_ERP13 小时前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅14 小时前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
gihigo199814 小时前
基于TCP协议实现视频采集与通信
网络协议·tcp/ip·音视频
2501_9462055215 小时前
晶圆机器人双臂怎么选型?适配2-12寸晶圆的末端效应器有哪些?
服务器·网络·机器人
linux kernel15 小时前
第七部分:高级IO
服务器·网络
数字护盾(和中)16 小时前
BAS+ATT&CK:企业主动防御的黄金组合
服务器·网络·数据库
~远在太平洋~16 小时前
Debian系统如何删除多余的kernel
linux·网络·debian
龙仔72517 小时前
在麒麟V10服务器安全加固,sshd防暴力破解加固,实现“密码错误3次封IP”的需求
服务器·tcp/ip·安全
unfeeling_17 小时前
Keepalived实验
linux·服务器·网络
坐吃山猪17 小时前
OpenClaw04_Gateway常见问题
网络·gateway·openclaw