UDP:用户数据报协议

2019-05-14  本文已影响0人  食梦狸猫

udp是一种简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报

2.43.15.png

UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是不保证它们能到达目的地。

UDP首部:

2.45.40.png

端口号表示发送进程和接收进程。UDP长度字段表示UDP首部和UDP数据的字节长度。IP数据报的长度是指整个数据报长度。所以UDP数据报长度=IP数据报长度-IP首部长度

UDP检验和只覆盖UDP首部和UDP数据,IP首部的检验和也只覆盖IP的首部。UDP的检验和是可选的,而TCP的检验和是必须的。

UDP数据报和TCP数据报都包含一个12字节的伪首部,目的是为了计算检验和。伪首部包含的IP首部一些字段,是为了让UDP两次检查数据是否已经到达目的地。


2.53.47.png

IP分片

物理网络层一般要限制每次发送数据帧的最大长度。当IP层收到一份要发送的IP数据报时,要判断向本地哪个接口发送数据,查询并获取该接口的MTU。如果需要分片,分片这个过程可以发生在发送端主机上,也可以发生在中间路由器上。

当把一份IP数据报进行分片后,只有到达了目的地才能进行重新组装。重新组装的过程由目的端的IP层来完成。已经分片后的数据报也可能再进行分片。

在IP首部中。

当数据报的这些片到达目的端后可能会失序,但在IP首部中有足够的信息让接受端正确的组装这些片。

缺点:即使只丢失了其中一片数据也要对整个数据报进行重传。

ICMP不可达差错(需要分片)

当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片的标志比特。
可用于判断到达目的端的路途中最小MTU是多少。


3.20.47.png

如果路由器没有提供这种新的ICMP差错报文格式,那么下一站MTU会被设为0

最大UDP数据报长度

理论上,UDP数据报中用户数据的最大长度为IP数据报最大长度减去IP首部和UDP首部=65507字节。
但是大多数实现所提供的长度比这个最大值小:

IP能发送或接收特定长度的数据报并不意味着接收应用程序可以读到该长度的数据。UDP编程接口允许程序指定每次返回的最大字节数。如果接收到的数据报长度大于应用程序所能处理的长度,那么处理结果取决于编程接口的实现。

ICMP源站抑制差错

当一个系统接收数据报的速度比其处理速度快时,可能产生这个差错(一个系统没有缓存并丢弃了数据,也不一定要求发送源站抑制报文)
格式:


3.42.33.png

UDP服务器的设计

对于服务器,它启动后处于休眠状态,等待客户端请求的到来。

上一篇下一篇

猜你喜欢

热点阅读