文章总结: 本文详细解析TCP协议的核心机制,重点阐述三次握手建立连接、可靠数据传输及四次挥手终止连接的过程。通过具体报文分析展示192.168.1.1与192.168.1.2间的通信实例,说明序列号、确认号、标志位等关键字段作用,并强调TCP面向连接、流量控制、拥塞控制等特性对可靠传输的保障。最后指出TCP适用于网页、邮件等重准确性场景,但实时应用可能优选UDP。 综合评分: 72 文章分类: 技术标准,网络协议,其他
网络协议—TCP协议(三次握手,四次挥手)
原创
老五 老五
老五说网络
2026年4月17日 16:01 陕西
在小说阅读器读本章
去阅读
一、基本概念
TCP(Transmission Control Protocol,传输控制协议)是互联网协议族中最为重要的协议之一,它工作在OSI七层模型的传输层,为应用程序提供可靠的、面向连接的通信服务。以下是TCP协议的一些关键特性及其工作机制的简要说明:
- 面向连接,在数据传输之前,TCP要求双方建立一个连接。这通常通过三次握手来完成。
- 可靠性,TCP通过确认机制保证数据包能够到达目的地。如果发送方没有收到确认信息,它将重新发送数据包。序列号用于确保数据包按照正确的顺序重组,并检测重复的数据包。
- 流量控制,TCP使用滑动窗口机制进行流量控制,以防止快速发送方压垮慢速接收方。
- 拥塞控制,为了避免网络过载,TCP实现了一系列拥塞控制算法,比如慢启动、拥塞避免、快速重传和快速恢复等。
- 数据分段与重组,大的数据块会被分割成更小的段进行传输,每个段都会被赋予序列号以便在接收端正确重组。
- 连接终止,当通信结束时,TCP需要通过四次挥手的过程来断开连接,确保双方都有机会完成必要的清理工作。
二、工作流程
1、建立连接 – 三次握手
- 客户端发送SYN(同步序列编号)报文给服务器。
- 服务器回复SYN-ACK报文给客户端。
- 客户端再发ACK(确认)报文给服务器,连接建立。
2、数据传输
- 发送方根据接收方提供的窗口大小调整发送速率,同时利用序列号和确认号确保数据可靠传输。
3、断开连接 – 四次挥手
-
主动关闭方发送FIN报文请求关闭连接。
-
被动关闭方回应ACK报文,同意关闭输入流。
-
被动关闭方随后也可能发送自己的FIN报文请求关闭输出流。
-
最后主动关闭方回应ACK报文,确认所有操作完成,连接彻底关闭。
三、数据报文解析:
1、拓扑
2、数据报文分析
第一步:TCP三次握手(建立连接)
1、客户端192.168.1.1发起建立连接
- Source: 192.168.1.1:13761 → Dest: 192.168.1.2:hosts2-ns — 客户端(192.168.1.1)发起连接请求。
- Flags: [SYN] Seq: 0 — 发送 SYN 包,初始序列号为 0
- Win: 64512 MSS: 1460 TSV: 591102 — 指定最大分段大小(MSS)为 1460 字节,窗口大小 64512。时间戳(TSV)用于 RTT 测量。
2、服务器192.168.1.2响应SYN+ACK
- Source: 192.168.1.2:hosts2-ns → Dest: 192.168.1.1:13761 — 服务器(192.168.1.2)响应 SYN+ACK
- Flags: [SYN, ACK] Seq: 0 Ack: 1 — 确认客户端的 SYN(Ack=1),自己的初始序列号为 0
- Win: 65160 MSS: 1460 — 返回自己的 MSS 和窗口大小。
3、客户端192.168.1.1发送ACK确认收到SYN
- Source: 192.168.1.1:13761 → Dest: 192.168.1.2:hosts2-ns
- Flags: [ACK] Seq: 1 Ack: 1 — 客户端192.168.1.1发送ACK确认收到SYN
- Win: 65160 — 窗口大小 64512
三次握手正式建立完成
第二步:数据传输
4、客户端发送一个18字节的报文
- Source: 192.168.1.1 (13761) Dest: 192.168.1.2 (hosts2-ns)
- Flags: [PSH, ACK]Seq: 1 → Seq: 19 (Len=18) Ack: 1 — 客户端发送一个包含 18 字节数据 的报文。标志位 PSH 表示“推”数据,要求接收方立即交付给应用层。序列号从 1 到 19(共 18 字节)。ACK=1 表示已确认服务器的序列号 1。
5、服务器确认收到客户端的 18 字节数据
- Source: 192.168.1.2 (hosts2-ns) Dest: 192.168.1.1 (13761)
- Flags: [ACK] Ack: 19 — 确认号变为 19,表示期望下一个字节是第 19 字节
数据传输完成(单向)
第三步:TCP 四次挥手(关闭连接)
6、服务器192.168.1.2主动发起关闭连接
- Source: 192.168.1.2 (hosts2-ns) Dest: 192.168.1.1 (13761)
- Flags: [FIN, ACK] Seq: 1 Ack: 19— 发送 FIN 包,表示它不再发送数据。Seq=1:表示它的最后一个数据字节是第 1 字节(序列号从 0 开始),现在用 FIN 占一个序号。Ack=19:确认已收到客户端发来的 18 字节数据(到 Seq=18)。
7、客户端192.168.1.1响应服务器的 FIN
- Source: 192.168.1.1 (13761) Dest: 192.168.1.2 (hosts2-ns)
- Flags: [ACK] Seq: 19 Ack: 2 — 发送 ACK,确认收到了服务器的 FIN。Ack=2:表示确认了服务器的 FIN(FIN 占一个序列号,所以是 1+1=2)。Seq=19:当前客户端发送的下一个序列号是 19(因为之前只发了 18 字节数据)。
8、客户端192.168.1.1也想关闭连接,发送自己的 FIN
- Source: 192.168.1.1 (13761) Dest: 192.168.1.2 (hosts2-ns)
- Flags: [FIN, ACK] Seq: 19 Ack: 2 — Seq=19:表示客户端接下来要发送 FIN(但不带数据)。Ack=2:再次确认服务器的 FIN 已收到。同时携带 ACK 标志,表示这是一个“FIN + ACK”组合包。
9、服务器192.168.1.2回应客户端的 FIN
- Source: 192.168.1.2 (hosts2-ns) Dest: 192.168.1.1 (13761)
- Flags: [ACK] Seq: 2 Ack: 20 — Ack=20:确认收到客户端的 FIN。
- Seq=2:服务器自己的下一个序列号是 2(上一次是 1)
四次挥手完成(连接正常关闭)
四、总结
TCP协议的设计使得它非常适合于那些对数据准确性要求高的应用,如网页浏览、电子邮件和文件传输等。然而,由于其复杂的机制,TCP并不适用于所有类型的网络通信,特别是对于实时性要求极高的应用场景,例如语音通话或视频会议,可能更倾向于使用UDP(用户数据报协议)。
公众号:老五说网络
长按左侧二维码关注
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:老五说网络 老五 老五《网络协议—TCP协议(三次握手,四次挥手)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论