传输层协议基础
TCP(传输控制协议)和UDP(用户数据报协议)是互联网传输层的两大核心协议。IP层负责将数据包从源地址路由到目标地址,但不保证可靠性;TCP和UDP在IP层之上提供不同级别的传输保障。
TCP:可靠传输
TCP通过一系列机制保证数据可靠传输:
三次握手建立连接:
- 客户端发送 SYN(同步)包
- 服务端返回 SYN-ACK(同步确认)包
- 客户端发送 ACK(确认)包,连接建立
可靠性保障机制:
- 序列号:每个数据包有序列号,接收方按序重组
- 确认应答(ACK):接收方确认每个包,未收到ACK则重传
- 流量控制:滑动窗口机制,防止发送方速度超过接收方处理能力
- 拥塞控制:慢启动、拥塞避免,防止网络过载
- 四次挥手断开:确保双方数据都传输完毕再断开
TCP的代价:建立连接需要1.5个RTT,每个数据包需要确认,重传机制引入延迟,头部开销20字节。
UDP:低延迟传输
UDP是无连接协议,发送数据前不建立连接,不保证数据到达、不保证顺序、不重传丢失数据。
UDP的优点:
- 低延迟:无需握手,立即发送
- 低开销:头部只有8字节(TCP是20字节)
- 灵活性:应用层可自行实现所需的可靠性机制
- 广播支持:支持一对多广播和组播
UDP的缺点:可能丢包、乱序、重复,需要应用层处理。
核心对比
- 连接方式:TCP面向连接 / UDP无连接
- 可靠性:TCP保证可靠 / UDP不保证
- 顺序:TCP保证有序 / UDP不保证
- 速度:TCP较慢(有确认机制)/ UDP较快
- 头部大小:TCP 20字节 / UDP 8字节
- 流量控制:TCP有 / UDP无
- 应用场景:TCP适合文件传输 / UDP适合实时音视频
应用场景选择
选TCP的场景:
- 网页浏览(HTTP/HTTPS):内容完整性要求高
- 文件下载/上传(FTP、SFTP):不能丢数据
- 邮件(SMTP、IMAP):必须完整传达
- 数据库连接(MySQL、Redis):事务性操作不能丢失
- API调用:接口响应必须完整
选UDP的场景:
- 实时音视频(视频通话、直播):丢帧比延迟更可接受
- 在线游戏:位置同步要求低延迟,偶尔丢包可接受
- DNS查询:一次性小请求,快速响应优先
- IoT传感器数据:高频小数据,丢部分可接受
- QUIC协议(HTTP/3):基于UDP自实现可靠性
现代趋势:基于UDP的可靠协议
QUIC(HTTP/3的传输层)是Google开发的基于UDP的传输协议,结合了TCP的可靠性和UDP的低延迟。它在UDP之上自行实现:
- 独立流的可靠传输(一路丢包不影响其他流)
- 0-RTT快速重连
- 内置TLS加密
- 连接迁移(网络切换不断线)
这说明”纯UDP不可靠”的问题完全可以在应用层解决,同时获得比TCP更低的延迟。
总结
TCP通过握手、确认、重传机制提供可靠有序的传输,适合对数据完整性要求高的场景;UDP牺牲可靠性换取低延迟,适合实时性要求高、允许少量丢包的场景。现代网络应用越来越多地选择在UDP上自实现可靠性(如QUIC),兼顾两者优势。