UDP:用户数据报协议

1. 引言

UDP是一个简单的面向数据报的运输层协议:进程的每一个输出操做都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。
UDP数据报封装成一份IP数据报的格式如图。算法

UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,可是并不保证他们能到达目的地。
应用程序必须关心IP数据报的长度。若是它超过忘了的MTU,那么就要对IP数据报进行分片,若是须要,源端到目的端之间的每一个忘了都要进行分片,并不仅是发送端主机链接第一个网络才这样。网络

2. UDP首部

如图:blog

(1)16位源端口号:端口号表示发送进程和接收进程,TCP和UDP用目的端口号来分用来自IP层的数据的过程。因为IP层已经把IP数据报分配给TCP或UDP(根据IP首部中协议字段值),所以TCP端口号由TCP来查看,而UDP端口号由UDP来查看。TCP端口号与UDP端口号是相互独立的。尽管相互独立,若是TCP和UDP同时提供某种知名服务,两个协议一般选择相同的端口号。这纯粹是为了使用方便,而不是协议自己要求。
(2)16位目的端口号
(3)16位UDP长度:UDP首部和UDP数据的字节长度。该字段的最小值为8字节(发送一份0字节的UDP数据报是能够的)。这个UDP长度是冗余的。由于UP数据报长度是IP数据报全程,所以UDP数据报长度是全长减去IP首部的长度。
(4)16位UDP检验和:UDP检验和覆盖UDP首部和UDP数据。IP首部的检验和,它只覆盖IP的首部--并不覆盖UP数据报中的任何数据。UDP和TCp在首部中都有覆盖他们首部和数据的检验和。UDP的检验和是可选的,而TCP的检验和是必须的。进程

3. UDP校验和

尽管UDP检验和的基本计算方法与IP首部检验和计算方法相相似(16bit字的二进制反码和),可是他们之间存在不一样的地方。首先,UDP数据报的长度能够为奇数字节,可是检验和算法是把若干个16bit字相加。
解决方法是必要时在最后增长填充字节0,折只是为了检验和的计算(也就是说,可能增长的填充字节不被传送)。
其次,UDP数据报和TCp端都包含一个12字节长的伪首部,它是为了计算校验和而设置的。伪首部包含IP收一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地。(例如,IP没有接受地址不是本主机的数据报,以及IP没有吧应传给另外一高层的数据报传给UDP)
UDP数据报中的伪首部格式如图:it

上图中,特意举了一个奇数长度的数据报例子,所以在计算检验和时须要加上填充字段。二进制

若是发送端没有计算检验和而接收端检测到检验和有差错,那么UDP数据报就要被悄悄丢弃,不产生任何差错报文(当IP层检测到IP首部检验和有差错时也这样作)。
UDP检验和是一个端到端的检验和。它由发送端计算,而后由接收端验证。其目的是为了发现UDP首部和数据在发送端到接收端之间发生的任何改动。
不是全部的以太网数据帧都是IP数据报,至少以太网还要使用ARP协议。不是全部的IP数据报都是UDP或TCP数据,由于ICMP也用IP传送数据。程序

相关文章
相关标签/搜索