TCP的三次握手和四次挥手······详解

1、三次握手

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

如图大致为三次握手的流程图:

当客户端对服务端发起连接时,会先发一个包 连接请求数据,去询问能否建立连接,该数据包称为 "SYN"包

然后,如果对方同意连接,那么对方将会回复一个 "SYN+ACK"包

客户端收到后,回复一个 "ACK"包,连接就建立了

因为该过程中,互相发送了三包数据,所以称为 "三次握手"

但是为什么是 "三次握手" , 而不是 "两次握手",明明服务端回复完 "SYN+ACK"包后就能建立连接

这是为了防止已失效的请求报文,忽然又传到服务器,从而引起错误

比如:

当发送请求包时,因为某些原因,该包并没有到达服务器,在某个节点产生了滞留 ,然而客户端为了建立连接会重新发送 "SYN"包 ,正常送达后回复 "SYN+ACK"包建立连接,但是,第一个包 滞留的包突然恢复,又送达到服务端,这时服务端会误以为客户端 发送了一个连接请求 ,这时,服务端认为是两个连接 ,二客户端认为只有一个连接,造成了状态不一致。

如果在 "三次握手"的情况下

客户端没有回复 "ACK"包,就无法建立连接,解决了网络信道不可靠的问题

2、四次挥手

四次挥手大致流程图

第一次挥手

客户端向服务端发送 "FIN"包 ,表示要关闭连接,自己则进入终止等待1状态,这是第一次挥手,如图

第二次挥手

服务端接收到 "FIN"包 ,回复一个 "ACK"包 ,表示自己进入关闭等待状态 ,而客户端同时进入终止等待2状态,这是第二次挥手,如图

PS:服务端此时还可以发送未发送的数据,而客户端也还可以接收数据

第三次挥手

待服务端发送完数据后,会发送一个 "FIN"包 ,进入最后确认状态,这是第三次挥手

第四次挥手

客户端收到后,回复 "ACK"包 ,进入超时等待状态 ,经过超时时间后关闭连接 ,而服务端收到 "ACK"包立即关闭连接

为什么客户端需要 "等待超时时间"

这是为了保证 服务端已收到 "ACK"包 ,因为假设客户端发送完 "ACK"包后就断开连接 ,一旦 "ACK"包在网络中丢失 ,服务端就一直停留在最后确认状态。

而有了 "等待超时时间"

服务端会因为没有收到 "ACK"包,会对客户端重新"FIN"包 ,此时,客户端会 对服务端发送 "ACK"包 ,并且刷新超时时间,这也是为了在不可靠的网络连接中,可以可靠进行地连接断开。

相关推荐
zjun10013 分钟前
TCP专栏-1.TCP协议概念说明
网络·网络协议·tcp/ip
德迅云安全杨德俊41 分钟前
DDoS 解析与防御体系
网络·安全·web安全·ddos
xingpanvip42 分钟前
星盘接口开发文档:星相日历接口指南
android·开发语言·前端·css·php·lua
国科安芯1 小时前
商业航天电机控制领域抗辐射 MCU 芯片应用研究
网络·单片机·嵌入式硬件·安全性测试
Lentou1 小时前
日志轮询策略
linux·服务器·网络
星融元asterfusion1 小时前
如何为您的网络选择正确的PTP配置文件:一份实用指南
网络·ptp·时间同步
光路科技2 小时前
一文讲透DHCP Snooping:从原理到工业网络实践
网络
威联通安全存储2 小时前
穿透宿主机内核:QNAP Virtualization Station 硬件直通解析
网络·nas
BenD-_-2 小时前
CVE-2026-31431 Copy Fail:Linux 内核本地提权漏洞风险与缓解
linux·网络·安全
YOU OU2 小时前
网络初识(java)
网络