【计算机网络】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包并刷新超时时间,保证在不可靠的网络中进行可靠的断开连接确认。

相关推荐
威联通安全存储1 小时前
制造业数据防勒索:QNAP 快照与 WORM 实践
网络·python
号码认证服务3 小时前
客户看到来电显示公司名会更愿意接听吗?企业号码认证提升ROI
服务器·网络·c++·经验分享·智能手机·云计算·php
万法若空3 小时前
HevSocks5Tunnel 安装配置详细教程
网络·socks5
山栀shanzhi3 小时前
TCP 三次握手四次挥手
服务器·tcp/ip·php
Vodka~4 小时前
一根网线——Windows共享网络给Linux访问互联网
linux·网络·windows
打码人的日常分享4 小时前
大模型及智能体安全风险防范与治理策略(PPT)
运维·网络·数据库·安全·云计算·制造
汤愈韬4 小时前
hcip-security_防火墙高可靠技术3_防火墙链路高可靠技术
网络·网络协议·网络安全
云边云科技_云网融合4 小时前
大模型聚合时代:云边云科技 AI 网关轻量化赋能企业落地
大数据·运维·网络·人工智能
Hello_Embed5 小时前
USB 学习指南+软硬件框架
网络·笔记·stm32·嵌入式·ai编程
网络与设备以及操作系统学习使用者5 小时前
ARP报文保护触发与解决详解
运维·网络·学习·华为