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

相关推荐
白毛大侠5 小时前
理解 Go 接口:eface 与 iface 的区别及动态性解析
开发语言·网络·golang
黄筱筱筱筱筱筱筱8 小时前
HCIA网络设备管理
网络
s19134838482d9 小时前
vlan实验报告
运维·服务器·网络
FlDmr4i2810 小时前
使用Gemini3+ui-ux-pro-max skill开发款查询本地ip插件
tcp/ip·ui·ux
2601_9495394511 小时前
家用新能源 SUV 核心技术科普:后排娱乐、空间工程与混动可靠性解析
大数据·网络·人工智能·算法·机器学习
南湖北漠11 小时前
奇奇怪怪漫画里面的蛞蝓是带壳的那种鼻涕虫
网络·人工智能·计算机网络·其他·安全·生活
ofoxcoding11 小时前
GPT-5.4 vs Claude Opus 4.6 实测对比:2026 年该选哪个模型写代码?
网络·gpt·ai
Agent产品评测局11 小时前
企业发票管理自动化落地,验真归档全流程实现方法:2026企业级智能体选型与实测指南
运维·网络·人工智能·ai·chatgpt·自动化
OPHKVPS12 小时前
WebRAT恶意软件借GitHub伪造漏洞利用程序传播
网络·安全·github
程序猿编码12 小时前
eBPF代理:让SSH进程“溯源”,找到背后的客户端IP
linux·tcp/ip·ssh·ebpf