1. UDP协议
1.1 概述
用户数据包协议UDP (User Datagram Protocol),提供无连接的、尽最大努力的数据传输服务(不保证数据传输的可靠性),数据传输单位为 用户数据包。
- 无连接:不需要建立连接,也不需要释放连接,减少了开销和发送数据的时延。
- 最大努力的数据传输服务:不保证数据传输的可靠性,没有超时和重传功能。
- 面向报文:发送方对应用程序交下来的服务,添加首部后就向下交付给IP层,不合并,也不拆分,保留文本的边界。UDP一次性交付一个完整的报文,因此应用程序一定要选择合适大小的报文,报文太长IP层需要进行分片,太短会导致IP数据包的相对长度过大,效率过低。接收方,去除首部后就交给应用程序。如下图所示(该图出自《计算机网络第七版》,谢希仁老师编著,下同)。
- 没有拥塞控制:网络出现的拥塞不会使源主机的发送速率降低。对实时应用非常重要。例如:IP电话、实时视频会议、允许丢失数据但不允许有太大时延(即这些应用可以卡一下,但是要保证其实时性)。
- 支持一对一、一对多、多对一、多对多的交互通信。
- 首部开销小,只有8个字节,TCP首部需要20个字节。
1.1 首部格式和端口分用
UDP 由数据字段 和 首部字段。 首部字段很简单,只有 8 个字节,由四个字段构成。
- 源端口 : 源端口号, 需要对方回复时选用 ,不需要时可全用 0 。
- 目的端口号 : 目的端口号,交付报文必须使用。
- 长度:UDP 数据包长度 ,最小值为 8 。
- 检验和:检测UDP 用户数据包在 传输 中 是否有错 。 有错就丢弃 。
UDP 分用 , 根据首部中的目的端口号,将UDP数据报通过响应的端口,上交给最后的终点:应用进程。如下图所示。
如果接受方 UDP 发现收到的报文不正确, 丢弃该报文, 并由 ICMP 发送“端口不可达”差错报文给主机 。
2. TCP 协议
传输控制协议TCP (Transmission Control Protocol),提供面向连接、可靠的数据传输服务,其数据传输的单位为报文段。
- 面向连接 : 在使用 TCP 协议之前,必须建立TCP连接,在传送数据完毕之后,必须释放连接。
- TCP连接只能有两个端点:点对点 即一对一。
- TCP提供可靠交付的服务。通过TCP连接传送的数据无差错、不丢失、不重复、并且按序到达。
- TCP提供全双工通信。通信双方的应用进程任何时候都可以发送数据。
- TCP 连接两端都设有发送缓存,接受缓存,用来储存临时通信的数据。发送时,应用程序把数据传送给TCP的缓存,就可以做其他事了。接收时,TCP把收到的数据放入缓存,上层应用程序在合适的时候读取缓存。
- 面向字节流: TCP中的流指的是流入到进程或从进程中流出的字节序列。”面向字节流 的含义“ 应用程序和TCP是一次一个数据块(大小不等)。如下图所示:
参考文献:
- 计算机网络/谢希仁编著. ——7版 ——北京:电子工业出版社,2017.1