TCP 三次握手和四次挥手

为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。

1 TCP 三次握手漫画图解

如下图所示,下面的两个机器人通过3次握手确定了对方能正确接收和发送消息(图片来源网络)。

简单示意图:

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

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

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

2 为什么要三次握手

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

第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常

第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常

第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常

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

3 为什么要四次挥手

断开一个 TCP 连接则需要"四次挥手":

  • 客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送

  • 服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号

  • 服务器-关闭与客户端的连接,发送一个FIN给客户端

  • 客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

相关推荐
垆边人似月.2 小时前
RDMA项目踩坑(一):为什么最后一块数据必须使用实际长度?
网络·c/c++·rdma·高性能io·tcp与rdma
YH_Analytics2 小时前
2026 高压 E-House 市场深度分析报告市场格局
网络·数据库
zl_dfq2 小时前
Windows 下 UDP 套接字编程指南
网络·windows·udp
日常筹谋记2 小时前
数据中心逆变设备运维|通讯对接、动环接入与多系统联动方案科普
运维·网络
上海研博数据3 小时前
HY-K 太阳能控制器协议|水利物联太阳能供电系统接入指南
网络
zerwave3 小时前
从慢订阅者到发布者:LiteBus 如何用 Unix Socket 背压保护可靠 Topic
网络·机器人·unix
piaoyiren4 小时前
Python FTP 服务端项目详细功能文档
网络·数据库·python
半杯咖啡半行码4 小时前
QML进阶实战(二):异步网络、性能优化与工程化落地
网络·qt·性能优化·qml
悟天特斯4 小时前
安防一体化:从“各管各的“到“全局联动“
java·大数据·网络·人工智能·物联网
骑着蜗牛撵大象3274 小时前
手写一个 HTTP 服务器:从 socket 到 epoll,Linux 上到底怎么把请求变成响应
linux·服务器·网络·http·epoll·socket编程·并发模型