UDP与IP分片

本文介绍了UDP的特点,包括无连接、低开销,并详细解析了UDP校验和的计算过程。此外,还探讨了IP分片的原因,如MTU限制,以及分片与重组的机制,强调了路径MTU发现的重要性。

UDP与IP分片

一、UDP

1. UDP特点

udp-ip-split-1

它不提供差错纠正队列管理重复消除流量控制拥塞控制。它提供差错检测,包含我们在传输层中碰到的第一个真实的端到端(end-to-end)校验和。

我们可能考虑到这种可靠性和保护性的缺失,而会一般认为使用UDP一点好处也没有。但是,这是不对的。因为它的无连接特征,它要比其他的传输协议使用更少的开销。UDP请求头只有8字节,一般的IP协议请求头20字节,TCP协议请求头20字节,更少的开销意味着更高的效率。另外,广播和组播操作更多直接使用像UDP这样的无连接传输。

2. UDP校验和

UDP校验和是我们遇到的第一个端到端传输层校验和。什么是端到端:它由初始的发送方计算得到,由最终的目的方校验。

对比ICMP协议有一个端到端的校验和,因为它不传输数据,只提供诊断和控制信息。而且它既不是一个网络层协议,也不是一个传输层协议,而是位于两者之间。(我个人认为ICMP协议是对IP协议的一个补充,应该算是网络层协议)

对比IP协议的校验和,它只检验头部,不校验数据。UDP检验和需要检验头部和数据体。

udp-ip-split-2

udp-ip-split-3

udp-ip-split-4

UDP数据报长度可以是奇数个字节, 而校验和算法只相加16位字(总是偶数个字节)。 UDP的处理过程是在奇数长度的数据报尾部追加一个值为0的填充(虚)字节,这仅仅是为了校验和的计算与验证。

UDP (也包括TCP)计算它的校验和时包含了(仅仅)衍生自IPv4头部的字段的一个12字节的伪头部

3. 实际计算过程

udp-ip-split-5

首先将数据报的校验和字段值设置为0。将整个数据报看成16位字的序列,计算16位二进制反码和。这个16位二进制反码和被存储在校验和字段中。

二进制反码加法可通过“循环进位(end-round-Carry)加法”实现:当使用传统(二进制补码)加法产生一个进位时,这个进位以二进制值1加在高位。

发送与接收使用相同的算法进行计算,如果接收的数据计算的结果是0,则为检验成功

udp-ip-split-6

例子:

计算反码和:[45 00] + [00 ff] + [fb d1] + [40 00] + [80 06] + [00 00] + [0a 1e] + [0a 53] + [6e f2] + [44 04] = c9 3d + 2 = c9 3f

取反:~(c9 3f) = 36 c0

校验和字段本质上是其余数据反码和的取反

可以看出:生成校验和与验证只用了加法和取反操作,效率非常高。

影响:

一个UDP/IPv4数据报穿过一个NAT时,不仅IP层头部的校验和要被修改,而且UDP伪头部的校验和也必须被正确地修改,因为IP层的地址/UDP层的端口号可能会改变。因此NAT通常因同时修改分组中协议的多层而违反分层规则。

4. UDP相关的其它知识点

UDP-Lite或UDPLite的协议通过修改传统的UDP协议,提供了部分校验和来

解决这个问题。这些校验和只覆盖每个UDP数据报里的一部分负载。

二、IP分片

为什么要分片?链路层通常对可传输的每个帧的最大长度有一个上限。为了

保持IP数据报抽象与链路层细节的一致和分离, IP引人了分片和重组。

udp-ip-split-7

1. MTU和路径MTU

MTU:在很多链路层网络(例如以太网)中,携带高层协议PDU的帧大小是有限制的。以太网有效载荷的字节数通常被限制为1500。链路层的这种特征被称为最大传输单元(MTU)。

路径MTU:当两台主机之间跨越多个网络通信时,每条链路可能有不同大小的MTU。在包含所有链路的整个网络路径上,最小的MTU称为路径MTU。

路径MTU发现机制(PMTUD):传统的PMTUD使用ICMP协议的PTB消息(见第8章)来获得一个最大分组大小,其沿着一条路由路径传输不会引人分片。

udp-ip-split-8

IP层经常基于每个目的地址缓存一个PMTUD信息,并且当没有更新时就让它超时。

特点:路径MTU不会永远不变。路径MTU不需要在两个方向上相同。

2. 分片与重组

udp-ip-split-9

IPv4中的分片可以在原始发送方主机和端到端路径上的任何中间路由器上进行。值得一提的是,数据报分片自身也可被分片。IPv6中的分片有些不一样,它只允许源主机进行分片。

当一个IP数据报被分片了,直到它到达最终目的地才会被重组。原因是同一数据报的不同分片可能经由不同的路径到达相同的目的地。如果发生这种情况,路径上的路由器通常没有能力来重组原始的数据报,因为它们都只能看到所有分片的一个子集。

有更大偏移量的分片要比第一个分片优先投递。好处是:如果最后一个分片先被投递,接收主机就可以确定所需的缓存空间的最大值,以重组整个数据报。

一个数据报的任何一个分片首先到达时, IP层就得启动一个计时器。且收到新的分片也不会被重置。因此,计时器给出了同一数据报分片之间可被分隔的最大间隔时间的 限度。一般的超时时间是30s或60s。

如果不这样做的话,不能到达的分片可能会最终导致接收方用尽缓存,留下一种攻击机会。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值