运输层 :UDP用户数据报协议

1.相关概念

UDP数据包产生,上层应用产生数据,但是这与真正发送的IP数据报数量并没有什么联系,并且UDP报文并不是一种可靠的协议

我们必须关注IP数据报的长度,如果超过MTU(在链路层的一种限制),则应该进行分片

2UDP报文

16位源端口号(发送进程)|16位目的端口号(接受进程)|16位UDP长度(指的是UDP数据报首部和数据的长度)|16位检验和(计算包括伪首部-><32位源IP地址,32位目的IP地址,4位0,八位协议,16位UDP长度>,如果校验和为0,则发送全1,如果发送的是0,则证明没有开启UDP,校验和采用IP数据保一样的校验方式)|数据(可以是奇数的数据,但是如果是奇数的数据,则在校验和的时候,应该填充字节)

注意:现在的UDP校验功能一般是开启的


典型的UDP数据报TCP/IP详解P110页

bsdi.1108 (端口)> svr4.discard:udp 1024

2:IP分片


IP数据报超过了MTU,必须进行分片,列如在以太网中,MTU通常是1500

举例

bsdi.1116 > svr4.discard:udp 1473(frag 26304:1480@0+)

bsdi.1116>svr4.discard:(frag 26304:1@1480)

udp,即使用的是UDP协议,1473说明原来数据报的长度,因为MTU=1500,所以去掉IP首部,剩余1480,去掉UDP首部,剩余1472,所以超出一个字节需要进行分片

ICMP:internet控制报文协议 PING 查看ICMP目的不可达差错(需要分片)

3:应用程序采用MTU发现机制(应用程序使用UDP协议)

在发送UDP的时候其实是最好不要分片的,因为分片会增加消耗,如果没有进行分片,则在遇到MTU较小的条件下,就会发送会ICMP目的段不可达差错报文,如果路由器支持返回下一跳MTU,则直接可以利用此MTU如果没有,则猜测一个,进行发送,采用MTU发现机制的UDP会定期设置DF(不准分片标志),以确定MTU是否发生变化。

4:UDP和ARP之间的交互

列如有 bsdi % sock -u -i -n1 -w8192 svr4 discard

因为因为分成了六个报文,所以发送了六个ARP请求报文,但是在收到ARP应答报文的时候,只发送了一份
UDP报文,这份UDP报文是分片之后最后的一份,,返回7个ARP应答,不需要理会,在收到UDP报文的时候,不管哪一段,接收端都应该启动一个定时器,如果定时器超时,还没有收到其他的
UDP分片报文,则发挥ICMP组装超时报文(如果有这个功能的话)

5:UDP服务器的设计

UDP服务器采用输入队列方式处理接收到的数据,在这种方法中,会出现数据溢出,溢出的数据会进行丢弃

UDP服务器可以限制本地IP,限制远端IP地址





posted @ 2016-09-12 09:04  SmileLion_LY  阅读(277)  评论(0编辑  收藏  举报