主题
传输层基础
端口与 Socket
端口用于区分传输层端点,TCP 与 UDP 各有独立端口空间。Socket 是应用读写网络端点的操作系统接口。
已建立的 TCP 连接通常由本地和远端的 IP 与端口四元组标识。监听 Socket 和已连接 Socket 有不同职责。
TCP 与 UDP 的服务语义和报文结构
TCP 提供有序可靠字节流,首部包含序列号、确认号、标志位和窗口。UDP 首部包含源端口、目的端口、长度和校验和,保留数据报边界。
| 维度 | TCP | UDP |
|---|---|---|
| 连接 | 握手建立连接,维护双端状态 | 直接发送数据报 |
| 交付 | 有序字节流,提供确认与重传 | 独立数据报,可能丢失、重复或乱序 |
| 流量与拥塞 | 协议内建控制机制 | 应用协议负责所需的控制 |
| 基本首部 | 20 字节,可带选项 | 8 字节 |
UDP 不提供连接建立、重传或有序交付,应用协议可自行实现这些机制。
TCP 字节流、UDP 数据报与消息边界
TCP 的一次写入可被多次读取,多次写入也可在一次读取中返回。UDP 一次接收对应一个数据报,接收缓冲区不足时可能截断。
TCP 的消息边界由应用协议定义。TCP 段、写入调用和应用消息之间没有固定对应关系。
应用层消息分帧(定长、分隔符、长度前缀)
定长直接按固定字节数切分,分隔符需要约定转义,长度前缀先解析长度再累计负载。一次读取可能只拿到半帧,也可能包含多帧。
长度前缀要约定字节序、长度单位和最大帧长。读取方保留尚未凑齐的字节。
