博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
什么是IP分片技术
阅读量:2221 次
发布时间:2019-05-08

本文共 1799 字,大约阅读时间需要 5 分钟。

链路层具有最大传输单元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。
另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。

 

 

 

我们都知道,在以太网中,如果源主机向目标主机发送的数据包大于网关
MTU ,则该数据包在传输过程中会被
IP 协议分片传输,具体的分片过程是怎样的呢?我们通过协议分析软件抓包来进行详细的查看(抓包软件使用科来网络分析系统)。
因为以太网默认的
MTU 值为
1500Byte ,所以,为了达到分片的效果,我们应该传输大于
1500Byte 字节的数据包,才能使该数据包分段传输。
我们从本机(
192.168.6.11 )发送一个
2000 字节的数据包到局域网的另一台主机(
192.168.0.208 )为例,在传输的过程中,开启软件抓包,就能够查看到详细的分片结果。
我们以
ping 为例,在
Windows 命令提示符下输入:
ping 192.168.0.208 –l 2000
通过科来网络分析系统抓包,我们看到,该数据包被分片了,由于我们重复
Ping
4 次,所以,抓到了
4 次同样的请求与回显的数据包。如下图:
          查看详细的数据包解码(见下图):
    
  
分析:因为
ping 的长度是
2000 字节,大于了
MTU 的值,所以会分片发送
, 如上图。捕获的这个数据包总长度为
1500 字节,更多分段位置
1 ,表示还有数据分段。
s, 偏移量为
0 ,需要注意的是
IP 头部的总长度字段值(这里是
1500 字节)并不全是数据的净载荷长度,这里还包括了
IP 以及
ICMP 的头部长度,分别是
20 字节和
8 字节。
另外,
IP 协议的头部总长度并不一定就是
MTU
1500 字节,这个值与网络环境、操作系统等因素有关。
     下图是第一个分片包。
 
分析:
IP 字段的标识
0x787F ,与第一个包相同,说明这是同一个数据包,只是被分片了。
     偏移量为
185 ,表示相对第一个包的位置,以便接收主机根据偏移量进行数据重组。
     需要注意的是此处分片包并没有
ICMP 字段,接收主机会可以根据偏移重组成完整的
ICMP 数据包。
最后,我们来计算一下该数据包的长度:第一个数据包的总长度为
1500 字节,减去
IP 头部长度
20 字节,减去
ICMP 头部长度
8 字节,即
1500-20-8
1472 字节;第二个数据包的总长度为
548 字节,减去
IP 头部长度
20 字节,即
548-20
528 字节,两个数据包的净载荷
1472+528
2000 ,正好是我们发送的数据长度。

转载地址:http://apjfb.baihongyu.com/

你可能感兴趣的文章
Oracle PL/SQL语言初级教程之完整性约束
查看>>
PL/SQL学习笔记
查看>>
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>
AJAX 初次体验!推荐刚学看这个满好的!
查看>>
AJAX 设计制作 在公司弄的 非得要做出这个养的 真晕!
查看>>
Linux 查看文件大小
查看>>
Java并发编程:线程池的使用
查看>>
redis单机及其集群的搭建
查看>>
Java多线程学习
查看>>
检查Linux服务器性能
查看>>
Java 8新的时间日期库
查看>>
Chrome开发者工具
查看>>
【LEETCODE】102-Binary Tree Level Order Traversal
查看>>