IP分片技术

 
IP分片技术
链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的MTU是1500,你可以用 netstat -i 命令查看这个值。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据部分大于1472字节,就会出现分片现象。

IP首部包含了分片和重组所需的信息:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|       Identification     |R|DF|MF|   Fragment Offset   |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|<-------------16-------------->|<--3-->|<---------13---------->|

Identification:发送端发送的IP数据包标识字段都是一个唯一值,该值在分片时被复制到每个片中。

R:保留未用。

DF:Don't Fragment,“不分片”位,如果将这一比特置1 ,IP层将不对数据报进行分片。

MF:More Fragment,“更多的片”,除了最后一片外,其他每个组成数据报的片都要把该比特置1。

Fragment Offset:该片偏移原始数据包开始处的位置。偏移的字节数是该值乘以8。

另外,当数据报被分片后,每个片的总长度值要改为该片的长度值
------------------------------------------------------------------------------------------------------------------------------------
ip分片知识及igmp知识点 2006-4-23 23:31:00


1) tos应该只指定其中一个bit,同时指定几个是没有意义的。至于是不是允许的或
   者说接收者如何处理这种报文依赖于具体实现,有可能出错。
2) IP分片和完整IP报文几乎拥有同样的IP头,id域对于每个分片都是一致的,这样
   才能在重组的时候识别出来自同一IP报文的分片。flags占用了最高的3bit,按从
   左到右表示从高到低,最左bit保留,应该置零,如果非零有什么后果不清楚;中
   间bit置1表示不得对该IP报文分片,如果路由因为MTU缘故必须分片才能发送这种
   不可分片IP报文的时候,就先废弃该IP报文然后用ICMP通知源主机废弃原因,如
   果不是特殊需要不应该置1;最右bit置1表示该报文不是最后一个IP分片。
3) 完整单包IP报文的flags最右bit为零,同时fragment offset为零。第一个IP分片
   的flags最右bit为1,同时fragment offset为零。最后一个IP分片的flags最右
   bit为0,此时fragment offset必不为零。fragment offset与flags共用两个字节,
   前者占用了低13bit。fragment offset给出的偏移是相对完整IP报文数据区而言
   的,以8bytes为单位。
4) 重组发生在最终目的主机上,中间路由不对分片重组。重组发生在所有分片到达
   之后。一般最终目的主机在收到一个IP分片(不一定是第一个分片)的时候启动一
   个定时器,如果超时而分片仍未到齐,则废弃具有相同id的所有已到达分片,意
   味着丢失一个分片就丢失了完整IP报文,此时IP层本身不会负责重传,需要上层
   协议自己意识到需要重传了。

   可以想象,故意发送部分IP分片而不是全部,导致目标主机总是等待分片消耗占
   用系统资源。某些分片风暴攻击就是这种原理。

5) IP分片的total_len给出的是这个IP分片的总长度,而不是完整IP报文总长度。
6) 使用UDP很容易导致IP分片,而很难强迫TCP发送一个需要进行分片的报文。

1) IGMP版本目前为1,类型只有两种,1表示组播路由器发出的查询,2表示组内主机
   发出的响应。校验和是针对8字节的IGMP报文的。未用域必须清零。
2) 两个有效IGMP报文例子

   IGMP响应(2)
   TTL    = 1
   所加入的组地址
   目的IP = 组地址
   源IP   = 本机IP

   IGMP查询(1)
   TTL    = 1
   组地址 = 0
   目的IP = 224.0.0.1
   源IP   = 组播路由器IP

3) 主机上某个进程在本机某个接口上加入某个组时,如果前面没有本机其他进程加
   入该组,则发送一个IGMP响应。本机会维护相关信息,直到所有本机进程退出该
   组。

   进程离开某个组时并不发送IGMP响应。当本机所有进程退出所有组后,如果有组
   播路由器发送查询报文,本机不做IGMP响应。

   组播路由器定时发送查询,这个查询报文的组地址固定为0,目标IP为224.0.0.1。

4) 224.0.0.0 - 239.255.255.255的D类地址属于组播地址。但是224.0.0.0不能用于
   任何组。224.0.0.1表示局域网内所有拥有组播能力的主机、路由器,每个网络接
   口初始化后如果拥有组播能力,会自动加入该组,即使没有本机进程明确加入该
   组,不会因为加入该组而发送IGMP响应。组播地址可以作为目标IP出现,但不能
   作为源IP出现。

   224.0.0.0 - 224.0.0.255之间的组播地址如果出现在目标IP上,无论TTL多大,
   组播路由器也不会转发这种报文,这种报文只能出现在局域网内。显然这里包括
   了224.0.0.1。

5) TTL为0的组播报文根本就无法出主机,为1表示组播报文只能在局域网内传送。如
   果想被组播路由器转发出去,必须设置更大的TTL。

上述描述是W.Richard.Stevens对4.x BSD实现的描述,现在可能有变化。版本和类型
共用一个字节,版本占用高4bit,所以很多头文件里定义0x11、0x12这样的宏,至于
0x16、0x17,注释解释得比较清楚。

组内成员主机收到IGMP查询后,会在随机时间段内作出响应,因为组播导致组内其他
成员主机均收到响应,不仅仅是发出查询报文的主机,所以其余成员主机不再响应,
避免了响应风暴。非组内成员主机可以发送查询报文,但它一定收不到相应的IGMP响
应。不是只有组播路由器才可以发送IGMP查询,其他IGMP查询报文的数据有所区别,
比如目的IP不一定是224.0.0.1,可以是某个其他组播地址,组地址也不一定是0,可
以是某个确定的组地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值