一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情。
一、UDP 提供的服务
- UDP 是属于轻量级运输协议,仅仅提供一种不可靠的数据传输服务。
- UDP 只是做了运输层协议能够做的最少工作,例如,复用功能、分解功能和少量差错检测功能。
- 在使用 UDP 协议发送报文时,发送方与接收方没有握手,所以 UDP 是无连接的。
二、UDP 传输的优势
- 更为精细地控制数据发送。只要 UDP 接收到数据,它就会将数据打包进 UDP 报文随即传递给网络层。对比 TCP 传输协议,当源和目的之间的链路拥塞时,会触发 TCP 的拥塞控制机制,从而遏制运输层 TCP 发送方。
- 不需要建立连接。UDP 不需要任何准备就可以进行数据的传输了,所以 UDP 不会有建立连接的时延。而TCP 需要先建立连接(三次握手)之后才可以传输数据。
- 不需要连接状态。UDP 不需要跟踪和维护连接状态,而 TCP 需要维护端系统中的连接状态。例如,接收和发送缓存、拥塞控制参数、序号和确认号参数。
- 更小的首部开销。UDP 首部仅仅有 8 字节,而 TCP 需要高达 20 字节。
三、UDP 传输的缺点
- 当网络处于重压状态运行时,此时就需要 UDP 承载网络管理数据,从而避免 TCP 创建连接时延。
- UDP 中缺乏拥塞控制机制,所以会导致 UDP 发送方和接收方之间的高丢包率。例如,当每个人都启动流式高比特率视频而不使用拥塞控制时,就会导致路由器大量分组溢出。
四、UDP 报文格式
- 源端口:源端口号。在需要对方回信时选用。不需要时可用全 0。
- 目的端口:目的端口号。终点交付报文时必须使用。
- 长度:UDP 用户数据报的长度,其最小值是 8(仅有首部)。
- 检验和:检测 UDP 用户数据报在传输中是否有错。有错就丢弃。
检验和执行方法
- 把报文分成 2 个字节一块(即 16 比特,最后一块不够 16 比特的进行补全 0),进行相加。如果发生了溢出就要进行 回卷。
- 最后得出的结果在进行一次反码操作,就是检验和了。
- 在接收方得到数据后,进行所有 16 比特相加操作后,如果有一位为 0 说明发生了差错了,反之没有发生差错。