UDP协议

本文详细介绍了UDP数据包的格式与作用,包括源端口号、目的端口号、UDP长度及检验和等内容,并深入探讨了分片、路径MTU发现机制、ARP洪泛等网络传输过程中的关键技术。

UDP数据包

  • 进程的每一个输出操作都会生成一个UDP数据包,如下UDP数据包的格式:

162158_6aXw_1383479.png

  • 源端口号,目的端口号;用于区分发送进程与接受进程,参见后面的'UDP端点'介绍.

  • UDP长度:指定了整个UDP数据包的长度,字节为单位.最小可以为8,表明该UDP数据包不携带任何数据.

  • 检验和:

  1. 若'数据'的长度为奇数字节,则会填充一个字节0x00.再添加12个字节的伪首部,注意伪首部以及填充字节均不会被发送.如下图:

  2. 按照常规的检验和算法计算检验和.若计算结果为 0,则将0xFFFF存入检验和字段中.

  3. 接收方在接受到一份UDP数据包之后,若检验和字段为0,则表明发送方没有计算检验和.

162733_aTLI_1383479.png

分片

  • 主机在收到一份待转发的IP数据包,在经过IP选路为其确定下一跳的地址以及出口接口后,若出口接口的MTU<IP数据包的长度,则需要对该IP数据包进行分片.在IP首部中与分片有关的字段:IP数据包总长度,标识,标志,片偏移.

165035_F4w8_1383479.png

  • 在分片之后,每一个IP分片都作为一个独立的IP数据包进行传送,并且仍可以继续被分片!此时注意:

    • 分片1的所有分片都要设置'更多的片'位,哪怕是最后一片,这是应该的,

    • 分片2,3的所有分片的偏移都要加上当前分片的片偏移,这也是理所当然!

  • 若出口接口的MTU<IP数据包的长度,并且IP数据包设置了'不分片'位,则此时会产生一个ICMP差错报文,格式如下:

165430_ZO1h_1383479.png

路径MTU发现机制

  • 问题就是:欲发现主机A到主机B之间的最小MTU值,其中假设A,B之间由若干个路由器链接,并且路径不会改变,其实关键就2点,如下:

  • MTU 值的个数是有限的,因此在程序中可以设置一个由近似值构成的表

  • 即当主机A收到'需要分片但设置了不分片'ICMP差错报文后,若报文中设置了'下一站网络的MTU'(即其值不为0),则使用该MTU再一次发送报文,否则取表中下一个最大的MTU值来发送报文.

ARP洪泛

  • 网络接口在收到一份IP数据包,以及它下一跳地址后,需要发送ARP请求来获取下一跳地址对应的MAC地址,在发送请求之后,等到响应之前,网络接口会将该IP数据包缓存起来,在收到响应之后在从缓存中取出IP数据包然后构建数据帧发送出去.ARP洪泛就是:

  • 网络接口收到IP数据包P1,下一跳的地址A1,然后网络接口发送ARP请求获取A1的硬件地址并将P1缓存起来.若在等待响应之间网络接口又收到了IP数据包P2,下一跳地址仍为A1,则此时网络接口仍会发送ARP请求获取A1的硬件地址(因为此时ARP高速缓存中并不存在A1的硬件地址),然后将P2也缓存起来,并且此时会覆盖之前缓存的P1,所以网络接口在收到A1的硬件地址之后只会发送P2,而不再发送P1!.

组装超时差错

  • 主机A对主机B发送一分IP数据包,该IP数据包在发送过程被分成了A1,A2,A3,...,An片;

  • 在第一个数据报片到达主机B时(假设为Ai),主机B便会启动一个定时器,若在定时器超时之后仍有分片尚未到达,则主机B会丢弃之前接受的所有分片,并发送一份组装超时的ICMP差错报文.

  • 若在定时器超时之前,所有分片都已到达,则A1,...,An片会合并为一个IP数据包片然后交付给上层协议.

源站抑制差错

  • 任何系统(主机或路由器)在其缓存区耗完时,都可以发送一份源站抑制差错报文,以告诉发送方当前系统已经没有足够的缓存来接受数据,请求发送方减缓发送速度.

  • 源站抑制差错报文的格式同一般的ICMP差错报文的格式,除了类型,代码字段不一样.

UDP端点

  • 准备的说,UDP应该是依据UDP端点来区分发送进程与接受进程的,如下:

173429_S5t1_1383479.png

  • 一个端点由4元组(本地IP地址,本地端口,远端IP地址,远端端口)唯一确定,每一个端点都具有自己的缓存区,并且与进程一一对应(见下面有一个反例).

  • 如下表,是进程允许创建的UDP端点的种类,当主机的UDP层在收到UDP数据包之后,首先根据UDP数据包的目的端口号确定候选UDP端点列表,如上图,若目的端口号为5,则候选UDP端点列表有3个UDP端点.然后再根据下表中指定的匹配优先级确定最佳UDP端点,然后将数据放入该UDP端点的缓存中,等待相关进程接受.

174420_luzK_1383479.png其中*表示匹配任何端口或IP地址.表中第一行的端点的优先级最高,

多个进程使用相同的UDP端点

  • 当UDP数据报到达的目的 IP地址为广播地址或多播地址,而且在目的 IP地址和端口号处有多个端点时,就向每个端点传送一份数据报的复制(端点的本地IP地址可以含有星号,它可匹配任何目的IP地址).

  • 如果UDP数据报到达的是一个单播地址,那么只向其中一个端点传送一份数据报的复制.选择哪个端点传送数据取决于各个不同的系统实现.
















































































转载于:https://my.oschina.net/u/1383479/blog/303514

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值