TCP和UDP有什么区别?
重要内容
| 特性 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接的协议(三次握手、四次挥手) | 无连接的协议 |
| 可靠性 | 保证数据完整性和顺序(提供数据校验、重传机制) | 不保证数据正确到达 |
| 流量/拥塞控制 | 提供流量控制和拥塞控制 | / |
| 数据包头大小 | 包含序列号、确认号、窗口大小等信息(至少20字节) | 包含源端口、目的端口、长度和校验和(仅8字节) |
| 应用场景 | 需要可靠传输的场景(网页浏览(HTTP/HTTPS)、电子邮件(SMTP)等等) | 实时性要求高的场景(视频流媒体(如Zoom)、在线游戏、DNS查询等等) |
扩展知识
UDP 报文段结构
- 通过端口号可以使目的主机将应用数据交给运行在目的端系统中的相应进程
- 长度字段指示了在UDP报文段中的字节数(首部加数据)
- 接收方使用检验和来检查在该报文段中是否出现了差错
TCP 报文段结构
- 32 比特的序号字段和32比特的确认号字段:被用于TCP发送方和接收方用来实现可靠数据传输服务
- 4 比特的首部长度字段:指示了以32比特的字为单位的TCP首部长度(由于TCP选项字段的原因,TCP首部的长度是可变的)
- 6 比特的标志字段
- CWR和ECE:主要用于在明确拥塞通告中
- ACK:用于指示确认字段中的值是有效的,即该报文段包括一个对已被成功接收报文段的确认
- RST、SYN和FIN:用于连接建立和拆除
- 在实践中,PSH、URG和紧急数据指针并没有使用
- 16 比特的接收窗口字段:用于流量控制(该字段用于指示接收方愿意接受的字节数量)
- 因特网校验和:检验和用于确定当UDP报文段从源到达目的地移动时,其中的比特是否发生了改变
- 可选与变长的选项字段:用于发送方与接收方协商最大报文段长度 MSS 或在高速网络环境下用作窗口调节因子时使用