IP协议协议--IP分片
来源:互联网 发布:淘宝充值中心 靠谱 编辑:程序博客网 时间:2024/06/10 20:12
《Linux高性能服务器编程》阅读笔记:
1. IP分片的概念
如图,当IP数据报超过帧的MTU(最大传输单元)时,它将会被分片传输。分片能发生在发送端或者中转路由器,且在传输过程中可能被多次分片。在最后的目标机器上这些分片才会被内核的的IP模块重新组装。
在IPv4的头部信息中有3个字段专门为IP分片服务的:
一个IP数据报的每个分片都具有自己的IP头部信息,它们都具有相同的标识值,但是具有不同的位偏移,且除了最后一个分片外,其他分片都将设置MF标志。此外,每个分片的IP头部的总长度字段将被设置为该分片的长度。
以太网帧的MTU是1500字节,因此它的数据部分最大为1480字节(IP头部占用20字节)。为观察IP分片的数据报,这里采用ICMP协议发送一个长度为1501字节的IP数据报,其中IP头部占用20字节,ICMP报文占据1481字节。1481字节的ICMP数据报中含8字节ICMP头部,其他1473字节为数据部分。长度为1504的IP数据报被拆分为2个IP分片:
(1) 第1个IP分片:1480字节ICMP数据报文(含8字节的ICMP头部信息) + 20 字节IP头部信息 = 1500字节的IP数据报,设置了MF位
(2) 第2个IP分片:1字节的ICMP数据报文(不含8字节的ICMP头部信息) + 20 字节的IP头部信息 = 21字节的IP数据包,没有设置MF位
用户要发送的以太网帧:
分片后:
注:分片1的IP头部信息的MF(More Fragment)位被置为1,分片2的该位不设置,即为0
事实上,ICMP报文的头部长度取决于ICMP报文的类型且变化范围很大。这里以8字节为例,因为接下来的用例用到了ping程序,ping应用程序使用的ICMP回显和应答报文的头部长度都是8字节。
2. 用tcpdump命令观察IP分片
机器1:Ubuntu14.04 IP地址为192.168.239.136机器2:Ubuntu11.04 IP地址为192.168.239.145
用机器1来ping机器1,每次传送1473字节的数据(这是ICMP的数据部分)以引起IP分片,用tcpdump抓取过程中双方交换的数据包:
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes1. IP (tos 0x0, ttl 64, id 52457, offset 0, flags [+], proto ICMP (1), length 1500) 192.168.239.136 > 192.168.239.145: ICMP echo request, id 4938, seq 1, length 14802. IP (tos 0x0, ttl 64, id 52457, offset 1480, flags [none], proto ICMP (1), length 21) 192.168.239.136 > 192.168.239.145: ip-proto-13. IP (tos 0x0, ttl 64, id 36694, offset 0, flags [+], proto ICMP (1), length 1500) 192.168.239.145 > 192.168.239.136: ICMP echo reply, id 4938, seq 1, length 14804. IP (tos 0x0, ttl 64, id 36694, offset 1480, flags [none], proto ICMP (1), length 21) 192.168.239.145 > 192.168.239.136: ip-proto-1
一条ping命令对应两个IP数据报,以第一条ping语句的IP数据报为例:
(1) 两个IP分片的标识值52457,说明它们是同一个IP数据报的分片
(2) 第1个分片的位偏移为0,第2个为1480。显然,第2个分片的位偏移实际上就是第一个分片的ICMP报文的长度
(3) 第1个分片中“flags[+]”即设置了MF标志,表示还有后续分片;第2个分片中“flags[none]”即没有设置MF位
(4) 两个IP分片的长度分别1500字节和21字节
- IP协议协议--IP分片
- 【网络协议】TCP分段与IP分片
- 《网络协议》IP 分片与 TCP 分段
- 【网络协议】TCP分段与IP分片
- 【网络协议】TCP分段与IP分片
- 协议头详解一:IP及IP分片
- IP协议的学习笔记_01 ---IP分片
- TCP/IP协议栈 --- 网络层(IP 首部 和分片)
- TCP/IP协议栈关于IP分片重组
- IP协议
- IP协议
- IP协议
- IP协议
- IP协议
- IP协议
- IP协议
- IP协议
- IP协议
- 01分数规划入门
- Linux Shell编程--双括号
- Java学习笔记2:变量
- ip包头字段详解
- 未来人工智能在将会给我们带来什么影响?
- IP协议协议--IP分片
- Shell小探
- iOS打包上传 ERROR ITMS-90168解决方案
- 使用CSS3的@media来编写响应式的页面
- 学习贪心ing,set的初学
- 第五天学习
- 简单使用numpy.tile()
- UITableView 优化整理
- git 创建分支的一些命令