(六)网络通讯基建者UDP协议

UDP协议

一.概要

 TCP协议具有严谨的结构,拥塞控制,滑动窗口,超时重传等机制,在复杂多变的网络环境下TCP是能确保数据的安全可靠,实现端到端的传送,但传送速度以及通讯质量在某种情况下会出现不适用的情况,比如远程视频,会议等,在网络拥塞或丢包的环境,视频将会在收到数据包后才继续播放,极有可能会出现断断续续的观影体验。

 这时UDP被利用了起来,UDP是一种用户数据包协议,不依靠链接,相比TCP更简洁,头部只有8个字节,而且功能上支持一对一,一对多,多对多的交互通讯,拥有较好的实时性,适用于对高速传输和实时性有较高的通信或广播通信。

 但它没有TCP那么严谨,拥有超时重传等可靠机制,只是在IP数据包的服务上添加了一些功能,多路复用和多路分解以及检查数据完整的功能,其实TCP也是基于UDP进行封装改造的。

二.UDP

  • 结构
    UDP结构很简单,有两个字段,首部字段和数据字段,首部字段很简单,只有8个字节,由四个字节组成,每个字段占用2个字节。
    在这里插入图片描述
    • 16位源端口号是发送方设定的发送端口。
    • 16位目的端口号指向数据需要由那个端口接收处理。
    • 16位UDP长度,UDP的数据报的长度(包括首部和数据)其最小值为8(只有首部),最大是65535(排除0)字节,数据部分是65528(减去口部)字节
    • 检测UDP数据报在传输中是否有错,有错则丢弃,如果不想校验,可以令该字段为0.
  • 主要特点
  1. UDP不需要建立连接。
  2. UDP开销低,首部只有8个字节,最小携带数据也是8个字节。
  3. UDP支持一对一,一对多,多对多的交互通讯。
  4. UDP会尽最大努力交付,不可靠交付,发送出去的数据就不管了。
  5. UDP是面向报文的,发送方的UDP应用程序发送的报文,在运输层时被UDP协议加上首部后就交给IP层了。
  6. UDP对应用层发下来的报文,既不合并,也不拆分,而是保留报文的边界,应用层发送多少个数据,UDP都会加上首部来区分边界。
  7. UDP没有拥塞等机制,不会因为网络拥塞就降低发送速率了,对于实时应用很适用。
  • UDP的校验和

    在UDP计算校验和时,会在UDP数据包上添加12个字节的伪首部,其中的信息是从数据报所在IP分组头的分组头中提取,伪首部只用来计算校验和,并不是真正的UDP首部。伪首部既不向下传送也不向上递交,而仅仅是为了校验数据的完整,例如校验UDP数据包,IP地址的完整性。
    在这里插入图片描述

    • 如何计算校验和

    在这里插入图片描述

  1. 当数据从应用层发送下来的时候,已经知道了要发送的目的IP,以及源IP地址(IP协议需要指定),UDP会在数据加上UDP头部后,在加上一个虚拟的伪首部用来计算。
  2. 加上伪首部后,把UDP整个数据包看成是由许多16位的子串连接起来,不足为16位的,添加0补充,通过相加得到结果后,如果相加的过程中产生超过16位的17位,需要把17位回卷到第一位相加。
  3. 按二进制的反码计算求和,对求和结果进行反码(按位取反),得到最终的校验和,填入UDP头部的校验和中。
  4. 当UDP数据报达到接收端时,由UDP从IP层获取IP信息,组装起一个伪首部,,通过按二进制反码计算出来的和,与UDP数据包的校验和相加,得到的结果等于全1的,则认为这个数据包是完整的,如果不是,这个包是有错误的,丢去,并上传错误给应用层(有需要)。

三.知识补充

  1. UDP校验和是用来干嘛的?
    当UDP把加上首部后交给IP层(网络层)处理,IP层会进行IP分片(以太网帧),把过大的数据切成多条符合MTU传送标准大小,当UDP数据报文被切分多个数据发送出去后,其中有一片数据由于某种原因在网络受影响了,在接收端IP层重组后,上交到运输层,使用检验和校验数据出错,认为这个包丢失了。注意 (MTU默认是1500字节,去掉协议头(IP协议头20个字节,UDP协议头8个字节,TCP协议头20个字节)的话,大概UDP为1472字节,TCP为1460)
  2. 能不能让UDP也具备安全可靠的传送机制?
    UDP协议具有高效的实时性,但在安全可靠方面上是有缺陷的,在网络拥塞的情况下,也不会有选择的去调整发送大小,极有可能产生丢包,但是它的扩展性很强,可以通过在应用层添加自定义的检验,或重传机制,避免数据的丢失,具体如何让数据更加安全可靠,得看自定义的安全机制强不强大。
  3. UDP如何一对多,多对一?
     1.一方面,UDP可以使用多播,或者广播的机制对数据进行传送,但会有些地方不适用,例如广播只能允许在本地,这是必然的,不然你广播整个网络,网络不得瘫痪,所以为了防止这类问题,加了许多规则。
     2.另一方面UDP还可以使用多路复用以及多路分解,不同于TCP,它的套接字可以识别多个从不同设备不同的套接字传送过来数据包(只要目的地址以及端口一致)
  4. 关于UDP的为什么会丢包?
    可以参考下IP协议的分片和重组,但IP层的分片生存周期到了,或者丢失了,整个数据不完整会被丢失了,只有完整的数据IP层才上传到运输层。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨守星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值