一·TCP协议
1、TCP简介
TCP(传输控制协议)是互联网核心协议之一,属于传输层协议,提供可靠的、面向连接的数据传输服务。工作在IP协议之上,通常使用端口号标识应用(如80-HTTP、443-HTTPS)。
2、TCP核心特性
-
可靠性
- 数据包确认(ACK)、重传机制、顺序控制确保数据完整到达。
-
面向连接
- 通信前需通过三次握手建立连接,结束后通过四次挥手释放连接。
-
流量控制
- 滑动窗口机制动态调整发送速率,避免接收方过载。
-
拥塞控制
- 通过慢启动、拥塞避免等算法适应网络状况(如Reno、CUBIC算法)。
3、TCP报文结构
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options (if any) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
关键字段:
- 源/目的端口(各16位):标识应用进程。
- 序列号(32位):数据字节流的编号。
- 确认号(32位):期望收到的下一字节序号。
- 标志位(6位):SYN(建立连接)、ACK(确认)、FIN(关闭连接)等。
4、TCP连接管理
1. 三次握手(建立连接)
2. 四次挥手(释放连接)
5、TCP的优缺点
优点
优点 | 说明 |
---|---|
可靠传输 | 数据不丢失、不重复、按序到达 |
全双工通信 | 双方可同时收发数据 |
自适应网络 | 动态调整速率避免拥塞 |
缺点
缺点 | 说明 |
---|---|
头部开销大 | 最小20字节(不含选项) |
延迟敏感场景弱 | 重传机制导致延迟波动(游戏/视频通话可能选UDP) |
连接管理复杂 | 握手/挥手增加延迟 |
6、TCP的应用场景
场景 | 协议示例 | 原因 |
---|---|---|
网页浏览 | HTTP/HTTPS | 需保证文本/图片完整加载 |
文件传输 | FTP、SFTP | 防止文件损坏 |
电子邮件 | SMTP、IMAP | 邮件内容不可丢失 |
数据库访问 | MySQL、PostgreSQL | 事务数据一致性 |
二·UDP协议
1、UDP简介
UDP(用户数据报协议)是一种无连接的、不可靠的传输层协议,工作在IP协议之上,使用端口号标识应用(如53-DNS、123-NTP)。其设计目标是轻量高效,因为是无连接传输,所以在传输大量数据包的时候会发生丢包情况,对比tcp的三次握手显得不安全。不过在视频传输等对完整性要求不高的时候,udp的快速传输就显得重要了。
2、UDP核心特性
- 无连接
- 无需握手,直接发送数据(低延迟)。
- 不可靠传输
- 无确认(ACK)、重传、顺序控制,数据可能丢失或乱序。
- 头部开销小
- 固定8字节头部(TCP至少20字节)。
- 支持广播/多播
- 可同时向多个主机发送数据(如视频直播)。
3、UDP报文结构
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- 关键字段:
- 源/目的端口(各16位):标识应用进程。
- 长度(16位):整个UDP报文的字节数(含头部)。
- 校验和(16位):可选,用于检测数据错误。
4、UDP的优缺点
优点
优点 | 说明 |
---|---|
低延迟 | 无握手、无拥塞控制,实时性极佳 |
高效 | 头部仅8字节,适合小数据包 |
多播支持 | 适合视频会议、在线直播 |
缺点
缺点 | 说明 |
---|---|
不可靠 | 丢包、重复、乱序需应用层处理 |
无流量控制 | 可能淹没接收方(需自定义限速) |
易受攻击 | 伪造源IP的UDP洪水攻击(如DNS放大攻击) |
5、UDP的应用场景
场景 | 协议示例 | 选择原因 |
---|---|---|
实时音视频 | RTP、WebRTC | 延迟敏感,少量丢包可接受 |
在线游戏 | QUIC(部分)、游戏引擎协议 | 需要快速响应 |
DNS查询 | DNS | 短连接,一次请求即完成 |
物联网 | CoAP、MQTT-SN | 低功耗设备资源有限 |
tcp和udp的对比
特性 | UDP | TCP |
---|---|---|
连接性 | ❌ 无连接 | ✅ 面向连接 |
可靠性 | ❌ 不保证交付 | ✅ 确认+重传 |
顺序性 | ❌ 可能乱序 | ✅ 按序到达 |
速度 | ⚡ 极快(无控制开销) | 🐢 较慢(握手/拥塞控制) |
头部大小 | 8字节 | 20~60字节 |
多播支持 | ✅ 支持 | ❌ 不支持 |
三·sctp
1、SCTP简介
SCTP(流控制传输协议)是由IETF设计的面向消息的传输层协议,结合了TCP的可靠性和UDP的多流特性,默认使用端口号标识应用(如SCTP的默认端口与TCP/UDP独立)。
2、SCTP核心特性
-
多流(Multi-Streaming)
- 在单个连接内支持多个独立的逻辑数据流(避免TCP的队头阻塞问题)。
-
多宿主(Multi-Homing)
- 终端可绑定多个IP地址,自动切换故障路径(提高容错性)。
-
消息边界保留
- 传输消息而非字节流(类似UDP,但保证顺序和可靠性)。
-
选择性确认(SACK)
- 仅重传丢失的数据块(非整个窗口),提高效率。
3、SCTP报文结构
plaintext
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port Number | Destination Port Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Verification Tag |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Chunk 1 (Mandatory) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Chunk N (Optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
关键字段:
- 块(Chunk) :SCTP的基本数据单元,每个块包含类型、标志和长度。
- 验证标签(Verification Tag) :防止旧连接的重复报文干扰。
4、SCTP的优缺点
优点
优点 | 说明 |
---|---|
抗队头阻塞 | 多流设计避免单个流阻塞整体传输 |
高可靠性 | 支持ACK、重传和拥塞控制(类似TCP) |
网络容错 | 多宿主切换提升链路可靠性 |
消息边界 | 适合传输离散消息(如信令协议) |
缺点
缺点 | 说明 |
---|---|
兼容性有限 | 部分防火墙/NAT设备不支持 |
部署复杂 | 需操作系统和应用程序显式支持 |
头部开销 | 比UDP大(但小于TCP的复杂控制) |
5、SCTP的应用场景
场景 | 协议示例 | 选择原因 |
---|---|---|
电信信令 | SIGTRAN(SS7 over IP) | 多流+高可靠性需求 |
WebRTC | 数据通道(DataChannel) | 避免TCP队头阻塞 |
物联网 | 关键设备通信 | 多宿主容错 |
金融交易 | 低延迟+可靠传输 | 替代部分TCP场景 |
三者的对比
特性 | SCTP | TCP | UDP |
---|---|---|---|
连接性 | ✅ 面向连接 | ✅ 面向连接 | ❌ 无连接 |
可靠性 | ✅ 可靠传输 | ✅ 可靠传输 | ❌ 不可靠 |
多流支持 | ✅ 独立多流 | ❌ 单字节流 | ❌ 单数据报 |
多宿主 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
消息边界 | ✅ 保留 | ❌ 字节流 | ✅ 保留 |