【计网全栈通关】第 7 篇:传输层核心——TCP 连接管理、可靠传输与流量控制

0. 前言:进程通信的"守护神"

网络层(IP 协议)只负责把数据报从一台主机送到另一台主机,但它不保证"一定送到",也不管送到后给哪个程序。传输层(Transport Layer)则实现了进程到进程的逻辑通信。

本章我们将死磕传输层的王者------TCP 协议。它在不可靠的 IP 层之上,通过复杂的握手、确认和窗口机制,为应用层筑起了一道"可靠"的墙。

1. 传输层基本概念:端口与套接字

1.1 端口号 (Port)

端口号长 16 位,范围 0 \sim 65535。

  • 熟知端口 (0~1023): 分配给标准服务。

    • FTP: 21, SSH: 22, Telnet: 23, SMTP: 25

    • DNS: 53, HTTP: 80, HTTPS: 443

  • 注册端口 (1024~49151): 需按规定申请。

  • 动态端口 (49152~65535): 留给客户进程暂用。

1.2 套接字 (Socket)

套接字是传输层与应用层的接口。

套接字 Socket = (IP 地址 : 端口号)

408 考点: 每一条 TCP 连接唯一地被通信两端的两个端点(套接字)所确定。

2. TCP 报文段首部深度解析 ✨

TCP 报文不仅包含数据,其 20 字节的固定首部隐藏着连接控制的所有秘密。

字段 长度 功能
源/目的端口 各 16 位 确定收发端进程。
序号 (seq) 32 位 本报文段所发送数据的第一个字节的序号。
确认号 (ack) 32 位 期望收到对方下一个报文段的数据的第一个字节序号。
数据偏移 4 位 首部长度(以 4 字节为单位)。最大 15 \\times 4 = 60 字节。
控制位 (Flags) 6 位 URG, ACK, PSH, RST, SYN, FIN
窗口 (Window) 16 位 接收窗口 (rwnd),指明接收方目前允许对方发送的数据量。
校验和 16 位 检验范围包括首部、数据和伪首部(408 易混淆点)。

核心控制位说明:

  • ACK: 确认位。仅当 ACK=1 时确认号才有效。

  • SYN: 同步位。连接建立时用来同步序号。

  • FIN: 终止位。用于释放连接。

3. TCP 连接管理:三次握手与四次挥手 (408 核心图表)

3.1 三次握手 (Three-way Handshake)

目标:确认双方收发能力正常,同步初始序号 (ISN)。

  1. 第一步 (Client -> Server): SYN=1, seq=x。客户端进入 SYN-SENT 状态。

  2. 第二步 (Server -> Client): SYN=1, ACK=1, seq=y, ack=x+1。服务端进入 SYN-RCVD 状态。

  3. 第三步 (Client -> Server): ACK=1, seq=x+1, ack=y+1。客户端进入 ESTABLISHED。服务端收到后也进入 ESTABLISHED

💡 考研党深度思考:为什么不是两次握手? 为了防止失效的连接请求报文段突然又传送到了服务端,产生脏连接。两次握手只能保证服务端收到了请求,不能保证客户端知道服务端已经准备好了。

3.2 四次挥手 (Four-way Handshake)

由于 TCP 是全双工的,每个方向的连接必须单独释放。

  1. 第一步 (Client -> Server): FIN=1, seq=u。客户端进入 FIN-WAIT-1

  2. 第二步 (Server -> Client): ACK=1, ack=u+1, seq=v。服务端进入 CLOSE-WAIT(半关闭),客户端进入 FIN-WAIT-2

  3. 第三步 (Server -> Client): FIN=1, ACK=1, ack=u+1, seq=w。服务端进入 LAST-ACK

  4. 第四步 (Client -> Server): ACK=1, ack=w+1, seq=u+1。客户端进入 TIME-WAIT

3.3 TIME-WAIT 状态的意义

客户端必须等待 2MSL (最长报文段寿命) 时间才能关闭。

  1. 保证可靠关闭: 确保最后一个 ACK 报文能到达服务端。

  2. 防止新旧报文混淆: 让本连接持续时间内产生的所有报文都从网络中消失。

4. TCP 可靠传输机制

TCP 通过以下四个手段在不可靠的 IP 网络上实现可靠性:

  1. 序号: 字节流编号。

  2. 确认: 确认号 ack=N 表示前 N-1 字节已收到。

  3. 重传:

    • 超时重传: 计时器超时未收到 ACK(RTO 算法计算)。

    • 冗余确认 (快速重传): 收到 3 个相同的 ACK,立即重传,不需等计时器。

  4. 校验和: 保证内容未受损。

5. TCP 流量控制 (Flow Control) ✨

流量控制是为了防止发送方发得太快,淹没接收方的缓冲区。

5.1 滑动窗口机制

  • rwnd (接收窗口): 接收方告知发送方自己还能收多少。

  • 公式: 发送方的窗口大小 = \\min(接收窗口 rwnd, 拥塞窗口 cwnd)

5.2 零窗口与持续计时器

若接收方告知 rwnd=0,发送方停止发送。

  • 风险: 死锁(接收方缓存空了发送通知,但通知丢了)。

  • 解决: 持续计时器。发送方定时发送一个 零窗口探测报文

🛠 考研与三级避坑指南

5.1 408 深度计算案例

5.2 三级网络技术必背

  • UDP 与 TCP 区别:

    • TCP: 面向连接、可靠、字节流、首部 20B、全双工。

    • UDP: 无连接、尽力而为、面向报文、首部 8B(源端口、目端口、长度、校验和)。

  • 常见协议对应关系:

    • 运行在 TCP 上:HTTP, FTP, Telnet, SMTP。

    • 运行在 UDP 上:DNS, SNMP, TFTP, DHCP。

总结

TCP 协议是计算机网络中逻辑最严密、设计最巧妙的部分。对于考研党,请务必背熟三次握手/四次挥手的所有报文段细节 ;对于三级党,请务必区分 UDP 和 TCP 的报文头长度及应用层协议对应关系

下一篇预告:【传输层·拥塞控制】。我们将讨论 TCP 如何感知网络拥堵,以及 408 必考的拥塞窗口曲线图。

版权声明:本文为【计网全栈通关】系列,转载请注明出处。

相关推荐
GitLqr5 小时前
玩转 WebSocket:从原理到 Flutter 实战
websocket·网络协议·flutter
REDcker6 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
ANSIOT7 小时前
安朔科技蓝牙无感开锁方案,靠近自动解锁
网络·科技·物联网
微硬创新7 小时前
耐达讯自动化 CC-Link IE 转 PROFINET网关在污水厂智能化升级实战
人工智能·物联网·网络协议·自动化·信息与通信
晏宁科技YaningAI8 小时前
VoIP系统的工程实现模型:从信令控制到媒体传输的完整架构解析
网络·人工智能·架构·系统架构·信息与通信
神奇霸王龙10 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
TlSfoward12 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记12 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发12 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
RD_daoyi13 小时前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎