UDP协议

2017-10-11  本文已影响0人  wayyyy

UDP协议是一个简单的面向数据报的运输层协议。进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。
这与面向字节流协议的TCP不同,应用层产生的全体数据与真正发送的单个IP数据报可能没什么关系。

特点
UDP报文格式
UDP报文格式.png
IP分片

IP层要发送一份数据报时,要查询接口的MTU,并将IP数据报长度与其比较,如果需要则要进行分片。分片可以发生在原始发送端主机上面,也可以发生在中间路由器上。

当IP数据报被分片后,每一片都成为一个独立的分组,具有自己的IP首部,任何运输层首部只会出现在第1片数据报分片中。并在选择路由时与其他分组独立。当数据报的这些片到达目的端时,可能会发生失序,但是在IP首部中有足够多的信息让接收端能正确组装这些数据报片。

尽管IP分片过程是透明的,但即使只丢失一片数据也要重传整个数据报,因为IP层没有超时重传机制。由更高层来负责超时和重传(TCP 有超时和重传机制,但UDP没有)。当来自TCP报文段的某一片丢失了后,TCP超时后会重发整个TCP报文段,该报文段对应于一份IP数据报,没有办法只重传数据报中的一个数据报片。

以太网上,数据帧的最大长度是1500字节,其中1472字节给数据(1500 - IP首部为20字节 - UDP首部为8字节)。

IP报文.png

现在假定我们发送一个数据内容为1473长度的报文,则会发生IP分片。

IP分片.png
ICMP不可达差错

发生ICMP不可达差错的一种情况就是:当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)的标志比特。
如果某个程序需要判断到达目的端的路途中最小MTU是多少(路径MTU发现机制)。那么这个差错就可以被程序利用。

这种情况下的ICMP不可达差错报文格式如图所示:

上一篇 下一篇

猜你喜欢

热点阅读