学习进度记录
基本信息
| 项目 | 内容 |
|---|---|
| 日期 | 2026.5.9 |
| 所花时间(包括上课) | 2小时 |
| 代码量(行) | 0 |
| 博客量(篇) | 1 |
| 了解到的知识点 | 计算机网络:运输层(传输层) |
知识点详解:运输层(Transport Layer)
运输层是 TCP/IP 协议栈的第四层,位于网络层之上、应用层之下。它的主要职责是为运行在不同主机上的应用进程提供逻辑通信服务。今天系统学习了运输层的核心概念:端口、多路复用/多路分解、UDP 与 TCP 协议、可靠传输原理、流量控制、拥塞控制等。
1. 运输层的功能
- 多路复用与多路分解:发送方将多个应用进程的数据封装成段,通过同一个网络层接口发送;接收方根据端口号将数据交付给正确的进程。
- 差错检测:通过校验和检测段是否受损(UDP 可选,TCP 强制)。
- 可靠数据传输(TCP):保证数据无差错、按顺序、不丢失、不重复。
- 流量控制(TCP):避免发送方淹没接收方。
- 拥塞控制(TCP):避免网络过载。
2. 端口(Port)
- 端口号 16 位,范围 0~65535。
- 知名端口(0-1023):绑定常用服务(HTTP:80, HTTPS:443, FTP:21, SSH:22)。
- 注册端口(1024-49151):用户进程使用。
- 动态/私有端口(49152-65535):临时分配。
- 套接字(Socket)= IP地址 + 端口号,唯一标识一个通信端点。
3. UDP(User Datagram Protocol)
- 无连接:发送前无需建立连接,直接发送数据报。
- 不可靠:不保证交付、顺序、不重复。
- 面向报文:应用层报文直接作为 UDP 载荷,不拆分也不合并。
- 头部小:8 字节(源端口、目的端口、长度、校验和)。
- 适用场景:实时性要求高、允许丢失的应用(如 DNS、视频会议、VoIP、在线游戏)。
4. TCP(Transmission Control Protocol)
- 面向连接:通信前需三次握手建立连接,结束后四次挥手释放。
- 可靠传输:通过序号、确认、重传、校验和等保证数据正确、按序到达。
- 全双工:双方可同时发送数据。
- 字节流:应用层数据被看成无结构的字节流,TCP 自行分段发送。
- 头部格式:20 字节固定 + 选项(最大 40 字节)。关键字段:
- 源端口、目的端口
- 序号(seq)
- 确认号(ack)
- 数据偏移(首部长度)
- 标志位:SYN, ACK, FIN, RST, PSH, URG
- 窗口大小(用于流量控制)
- 校验和
- 紧急指针
5. 可靠传输机制
- 序号:为每个发送的字节编号,接收方按序重组。
- 确认与重传:发送方启动定时器,若未收到 ACK 则重传。
- 累积确认:ACK 序号表示该序号之前的所有字节都已收到。
- 超时重传:RTO(Retransmission Timeout)动态计算,基于 RTT 估计。
- 快速重传:收到 3 个重复 ACK 立即重传,不等待超时。
6. 流量控制(滑动窗口)
- 接收方通过通告窗口(rwnd)告诉发送方自己的可用缓存大小。
- 发送方发送的数据总量不能超过 rwnd,避免接收方溢出。
7. 拥塞控制
TCP 使用四种算法避免网络拥塞:
- 慢启动:初始拥塞窗口(cwnd)小,每收到一个 ACK,cwnd 加倍(指数增长),直到达到慢启动阈值 ssthresh。
- 拥塞避免:达到 ssthresh 后,cwnd 线性增加(每 RTT 加 1 MSS)。
- 快速重传:收到 3 个重复 ACK 时,立即重传丢失的报文。
- 快速恢复:快速重传后,将 ssthresh 设为 cwnd/2,cwnd = ssthresh + 3,然后进入拥塞避免(新Reno 实现)。
8. TCP 连接的建立与释放
-
三次握手:
- Client → Server: SYN, seq=x
- Server → Client: SYN+ACK, seq=y, ack=x+1
- Client → Server: ACK, ack=y+1
-
四次挥手:
- 主动关闭方 → FIN
- 被动方 → ACK
- 被动方 → FIN
- 主动方 → ACK 并等待 2MSL 后关闭
9. UDP 与 TCP 对比
| 特性 | UDP | TCP |
|---|---|---|
| 连接 | 无连接 | 面向连接 |
| 可靠性 | 不可靠 | 可靠 |
| 顺序 | 不保证 | 保证按序 |
| 流量控制 | 无 | 有(滑动窗口) |
| 拥塞控制 | 无 | 有 |
| 报文边界 | 有(保留应用层报文) | 无(字节流) |
| 头部开销 | 8 字节 | 20 字节 + 选项 |
| 适用场景 | 实时、容忍丢包 | 文件、网页、邮件 |
10. 今日复习总结
今天用 2 小时学习了运输层的核心知识点,包括 UDP 和 TCP 的协议特点、可靠传输原理、流量控制和拥塞控制。虽然没有编写代码,但通过画 TCP 状态转换图、模拟滑动窗口过程,加深了对运输层工作机制的理解。运输层是网络编程的基础,下一步计划:用 Python 的 socket 库实现简单的 TCP 聊天程序,并抓包分析三次握手和四次挥手。
运输层是连接应用与网络的桥梁。UDP 的轻快和 TCP 的稳健,如同生活中的快慢选择,各有其道。
