大家好!
我是小黄,很高兴又跟大家见面啦 !
今天更新的是:
- 09 论数据如何被切片的-IP切片及IP首部讲解。
- 往期检索:程序设计学习笔记——目录
创建时间:2021年1月23日
软件: eNsp_Client 、SecureCRT 、MindMaster
- 先放一张思维导图,大致知道操作系统的具体功能和目标,然后再一一展开叙述。
论数据如何被切片的-IP切片及IP首部讲解:
1. IP分片 :
- 分片:网络中转发的IP报文的长度可以不同,但如果报文长度超过了数据链路所支持的最大长度,则报文就需要分割成若干个较小的片段才能够在链路上传输。将报文分割成多个片段的过程叫做分片。
1. 1 IPv4报头示意图:
- 4位版本号:IP协议的版本,ipv4就值为4
- 4位头部长度:指这个报头一共有多少个字节,其中1个数表示4字节
4位能表示到15(头部长度为1111时),因此报头最多4*15=60个字节 - 8位服务类型:
其中3位表示优先权字段,现在已经忽略。
然后4位为TOS字段,这四位互斥,只能一位取1,分别表示最小延迟,最大吞吐量,最高可靠性和最小消费。
然后还有1位保留,必须为0; - 16位总长度:指整个ip数据报即报头+数据的大小。
其中一个数表示一个字节。由于ip所在网络层 的 下一层链路层封装为帧,而帧的最大传输单元(MTU)的上限为1500个字节(这里都用以太网的帧举例)。
因此这个2^16个字节的长度就远远超过了它下层的限制,所以ip数据报如果超过1500个字节,会被分片传输。
这就会有一个问题,如果ip数据报的大小为1501,那么就会被分为2片。一个片的数据为1500字节,另一片的数据为1字节,后者显然很不划算(
分片带来的性能消耗
)
- 16位标识:标识了每个发送的数据报,初值是随机的,之后每发一个数据报值+1。
- 3位标识字段:
- 第一位保留
- 第二位表示是否禁止下层链路层把ip封装成帧的时候使用分片机制,如果这个设置了,那么ip数据报就不会分片,如果ip数据报超过1500字节(以太网是1500,其他的不一定),那么这个ip数据报就被丢弃,返回差错报文。
- 第三位表示 此ip数据报是否有 更多的数据报分片。
1. 2 分片机制 ( 标识、标志、片偏移 )
- 接收端根据分片报文中的
标识符(Identification),标志(Flags),及片偏移(Fragment Offset)字段
对分片报文进行重组。
- 标识符 :用于识别属于同一个数据包的分片,以区别于同一主机或其他主机发送的其它数据包分片,保证分片被正确的重新组合。
- 标志字段 :用于判断是否已经收到最后一个分片。
- 最高位 :
是保留位 , 没有意义 。
- 中间位 :
DF 位 , Don’t Fragment ; DF = 1 时 , 禁止分片 ; DF = 0 时 , 允许分片 。
- 最低位 :
MF 位 , More Fragment ; MF = 1 时 , 后面还有分片 ; MF = 0 时 , 本分片就是该分组的最后一个分片 , 后面没有分片 。
只有 DF = 0 时 , MF 才有意义 。
- 片偏移字段 :表示每个分片在原始报文中的位置。第一个分片的片偏移为0,第二个分片的片偏移表示紧跟第一个分片后的第一个比特的位置。
1. 3 IPv4分片的示意图:
分片编号 | IPv4报文字节数 | 分片偏移量(F0) | 用户数据字节数 |
---|---|---|---|
0 | 1500=20(IPv4 Header)+8(UDP Header)+1472(用户数据) | 0 | 1472 |
1 | 1500=20(IPv4 Header)+1480(用户数据) | 185=1480/8 | 1480 |
2 | 1500=20(IPv4 Header)+1480(用户数据) | 370=1480*2/8 | 1480 |
3 | 1500=20(IPv4 Header)+1480(用户数据) | 555=1480*3/8 | 1480 |
4 | 68=20(IPv4 Header)+48(用户数据) | 740=1480*4/8 | 48 |
累计 | 6068字节 | ----- | 5690字节 |
注:
分片现象发生在IP层(网络层)。被分片的数据是来自上层,也就是TCP/UDP层。
因此,首个分片带有TCP Header或UDP Header,其余分片不带。最后一个分片的IPv4报文长度 ≤ MTU字节数;其他分片的IPv4报文长度 == MTU字节数
More Fragments(MF)标志。
这个标志是IPv4 Header中的一个字段。More Fragments的意思是“更多的分片”。MF=1的确切含义是:本IPv4包是分片IPv4包 AND 后续还有分片;MF=0的确切含义为:本IPv4包不是分片IPv4包 OR 后续不再有分片。
4.Fragment Offset (FO)分片偏移量。
FO也是IPv4 Header中的一个字段。FO表示特定分片相对于原始未分片IP报文起始位置偏移量(参见图中左侧的红色虚线)。FO的单位是:8字节。例如FO=185,偏移量实际值为185*8=1480字节。
1. 4 为什么会产生IP分片:
- 每一种物理网络都会规定链路层数据帧的最大长度,称为链路层MTU(Maximum Transmission Unit).
IP协议在传输数据包时,若IP数据报加上数据帧头部后长度大于MTU,则将数据报文分为若干分片进行传输,并在目标系统中进行重组 。
- 举例说明:比如说,在以太网环境中可传输最大IP报文大小(MTU)为1500字节。如果要传输的数据帧大小超过1500字节,即IP数据报长度大于1472(1500-20-8=1472,普通数据报)字节,则需要分片之后进行传输。
注:
最大传送单元 MTU
: MTU 是 链路层可封装数据 的上限 。MTU 值
: 以太网的 最大传送单元 MTU 是 1500 15001500 字节 。什么时候进行分片?
: 链路层的数据部分 , 就是 IP 分组 , 该分组的 MTU 是 1500 字节 , 当网络层的 IP 分组超过 1500 字节, 此时就要进行分片 。
1. 5 实验演示分片:
实验设备:eNSP 、Wireshark
实验步骤:
- eNSP上搭建如下实验环境:PC 、AR2220
- 配置PC端上的IP地址与子网掩码、路由端的IP地址
- 在PC端上ping 192.168.1.2 验证实验环境是否搭建成功。
- 在PC端进行数据抓包:ping 192.168.1.2 查看数据包情况
- 向192.168.1.2发送3000字节大小的数据包:ping 192.168.1.2 -L 3000 查看数据包的情况
- 根据抓取到的数据包情况来进行分析:
为什么前两个是IPv4,第三个为ICMP数据包呢?因为前两个IPv4数据包是从后面分割出去的,并不含ICMP报文。
- 搭建环境:
- 验证实验环境是否搭建成功
- 第一次抓包的ping 192.168.1.1 看抓包情况(都是ICMP数据包)
- 向192.168.1.2 发送3000字节的数据包之后的情况(可以看到数据包中包含ICMP和IPv4的数据包、说明此时数据发生了 分片)
- 查看分包情况是否跟理论一致
- 第一片分包情况
2. TTL值 :
- 报文在网段间转发时,如果网络设备上的路由规划不合理,就可能会出现环路,导致报文在网络中无限循环,无法到达目的端。环路发生后,所有发往这个目的地的报文都会被循环转发,随着这种报文逐渐增多,网络将会发生拥塞。
TTL值诞生的目的:避免出现环路。
2. 1 实验演示TTL值:
实验设备:eNSP 、Wireshark
实验步骤:
- eNSP上搭建如下实验环境:PC 、AR2220
- 配置PC端上的IP地址与子网掩码、路由端的IP地址
- 配置每个路由使其可以互通。
ip route-static 目标IP GigabitEthernet 出接口 下一跳
路由1:ip route-static 23.1.1.0 24 GigabitEthernet 0/0/0 12.1.1.2
路由2:ip route-static 192.168.1.0 24 GigabitEthernet 0/0/0 12.1.1.1
路由3:ip route-static 192.168.1.0 24 GigabitEthernet 0/0/1 23.1.1.2- 配置PC端出口网关:路由1出口的地址192.168.1.2
- 在PC端上23.1.1.3 验证实验环境是否搭建成功。
- 在每个出接口上进行抓包来进行TTL值分析。ping 23.1.1.3
- 想从路由1上ping 路由3需要进行配置:
- 配置实验环境:
- 数据抓包进行分析TTL值:
补充说明:
不同的操作系统的TTL值不同。可以用来探测系统
win系统:XP 128 、7 64 、10 128
Linux系统:64
UNINE系统:255
每次经过一个路由设备转发TTL值减一,当TTL值为0时将丢弃数据包
3. 其他应用层协议 :
各位路过的朋友,如果觉得可以学到些什么的话,点个赞 再走吧,欢迎各位路过的大佬评论,指正错误,也欢迎有问题的小伙伴评论留言,私信。
每个小伙伴的关注都是本人更新博客的动力!!!
请微信搜索【 在下小黄 】文章更新将在第一时间阅读 !
把握现在 ,展望未来 ,加油 !
由于水平有限 ,写的难免会有些不足之处 ,恳请各位大佬不吝赐教 !