UDP详解

作者: lizb | 来源:发表于2019-01-21 16:18 被阅读24次

    上一篇分析了TCP,接下来再来看看传输层的另外一个协议:UDP

    简介:

    UDP( User Datagram Protocol )是一个面向数据报的协议,其特点有:

    无连接: UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以 UDP 是一种无连接的数据传输协议。

    不可靠:UDP中的每个数据报都是一个独立的信息,包括完整的源或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的,而且在网络质量不好的环境下,UDP 协议数据包丢失可能比较严重。

    高速率: 因为UDP不必进行收发数据的确认,而且资源消耗小,处理速度快,所以它的实时性更好,传输速率更高。有时候速度比数据完整性重要,在比如视频会议、电话通信等,丢失几帧画面、声音是可以接受的,不会对接收结果产生太大影响。但在需要数据安全接受的环境下,就宜采用TCP。

    数据报结构

    数据报

    伪首部:UDP和TCP都包含一个12字节长的伪首部,目的是为了计算[校验和],通过伪首部的校验,UDP可以确定该数据报是不是发给本机的。伪首部并非UDP中实际的有效成分,它只是一个虚拟的数据结构,其中的信息是从数据报所在IP分组头的分组头中提取的,既不向下传送也不向上递交,而仅仅是为计算[校验和]。这个[校验和]校验了UDP用户数据的源端口号和目的端口号以及UDP用户数据报的数据部分,又检验了IP数据报的源IP地址和目的地址,从而保证UDP数据报能够到达正确的目的地。因此,伪报头中包含IP地址并且作为计算校验和需要考虑的一部分。最终目的端根据伪报头和数据单元计算校验和以验证通信数据在传输过程中没有改变而且到达了正确的目的地址。

    UDP长度:包括UDP首部和UDP数据的字节长度。

    校验和:UDP校验和和TCP的校验和一样,都覆盖了UDP首部和UDP数据,只是UDP的校验和是可选的,而TCP的校验和是必须的。为了计算一份数据报的检验和,首先把检验和字段置为0。然后,对首部中每个16bit进行二进制反码求和(整个首部看成是由一串16bit的字组成),结果存在检验和字段中。当收到一份数据报后,同样对首部中每个16bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么接收方就丢弃收到的数据报。

    IP分片:以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492个字节。数据链路层的这个特性称作MTU,即最大传输单元。不同类型的网络大多数都有一个上限。如果IP层有一个数据报要传输,而且其数据的长度比链路层的MTU还大,那么IP层就需要进行分片,把数据报分成若干片,这样每一片都小于MTU。当数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其它分组独立。这样虽然会导致数据报的这些分片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确的组装这些分片。

    UDP分片

    优化:在网络通讯中,需要尽量避免发生分片和重组,因为分片重组对网络性能影响较大。数据包发送时选择合适的MTU大小对提高通讯性能很有必要。MTU大小的选择有协议协商方式,通过全路径的MTU发现机制,找到整条路径的最小MTU(也就是路径MTU),然后报文发送式小于等于路径MTU,这就避免了数据传输过程中产生分片,从而提高数据转发性能。MTU的协议发现机制由于安全等方面的原因,并不能总是生效,这时候就需要根据网络的特性选择合理的MTU。

    相关文章

      网友评论

        本文标题:UDP详解

        本文链接:https://www.haomeiwen.com/subject/tqrcjqtx.html