WireShark深度分析IP数据包分片

IP协议

互联网协议 IP 是 Internet Protocol 的缩写,中文缩写为“网协”。IP 协议是位于 OSI 模型中第三层的协议,其主要目的就是使得网络间能够互联通信。前面介绍了 ARP 协议, 该协议用在第二层处理单一网络中的通信。与其类似,第三层则负责跨网络通信的地址。在 这层上工作的不止一个协议,但是最普遍的就是互联网协议(IP)、互联网协议地址(Internet Protocol Address,又译为网际协议地址),缩写为 IP 地址(IP Address)。在上一章介绍了 ARP 协议,通过分析包可以发现它是依靠 MAC 地址发送数据 的。但是,这样做有一个重大的缺点。当 ARP 以广播方式发送数据包时,需要确保所有设 备都要接收到该数据包。这样,不仅传输效率低,而且局限在发送者所在的子网络。也就是 说,如果两台计算机不在同一个子网络,广播是传不过去的。这种设计是合理的,否则互联 网上每一台计算机都会受到所有包,将会导致网络受到危害。 互联网是无数子网共同组成的一个巨型网络。度娘:https://baike.baidu.com/item/IP/224599?fr=ge_ala

一,IP协议理论介绍:

WireShark抓包深度分析IP协议包

解释版本字段占用 4 bit,用来标示当前使用的 IP 协议版本,只有 IPv4(0100) 和 IPv6(0110) 两个版本区分。 首部长度 首部长度表示占32bit的数目,也就是有多少个4字节(32bit/8=4字节),比如首部长度是5,就表示有5个4字节,也就是20个字节。 而用来表示首部长度的字段是4bit,这样一来它可表示的最大长度就是二进制的「1111」,也就是2^4-1=15,也就是最大可以是 15个4字节,也就是15*4=60个字节,也就是说首部的最大长度是60个字节,而通过图可以看出来固定的部分占20字节,那可选项部分的最大长度就是40字节。

IP协议理论介绍

解释服务类型,英文全称 Type of Service。用来标示是一个什么类型的应用正在使用IP协议。 前面 3 个bit 用来标示优先级,但现在已经被忽略了。接着 4 个bit 用来标示子类型,每一个bit分别代表最小延迟、最大吞吐量、最高可靠性、最小费用。例如 Telnet 应用要求最小延迟,所以这4个bit分别是 「1000」。 最后一个bit是保留位,但必须是0。 但是现在很少有应用支持 TOS,所以了解一下就可以了。这属于理想很丰满,现实很骨感的一个体现。标准是标准,但是实现上会有一定差异。 总长度字段 IP 报文除了首部还要携带数据,总长度字段指整个 IP 报文的长度,单位是字节。总长度字段占2个字节,16bit,这样算下来,总共可以表示2^15-1 ,也就是65535个字节。虽然可以表示这么多字节,但是绝多数情况下都不会一次性传输这么大的数据量,会有很多因素影响每个数据报的最大值。 数据报的最大长度主要和上层应用限制和MTU限制有关系。 例如DNS服务就限制数据报最大长度为 512字节。 另外我们常用的以太网 MTU (最大传输单元)就是 1500字节,所以在以太网上的报文不能超过 1500字节。 可以用 netstat -in 查看本机网络接口的 MTU。

一,IP协议理论介绍:

WireShark抓包深度分析IP协议包

解释版本字段占用 4 bit,用来标示当前使用的 IP 协议版本,只有 IPv4(0100) 和 IPv6(0110) 两个版本区分。 首部长度 首部长度表示占32bit的数目,也就是有多少个4字节(32bit/8=4字节),比如首部长度是5,就表示有5个4字节,也就是20个字节。 而用来表示首部长度的字段是4bit,这样一来它可表示的最大长度就是二进制的「1111」,也就是2^4-1=15,也就是最大可以是 15个4字节,也就是15*4=60个字节,也就是说首部的最大长度是60个字节,而通过图可以看出来固定的部分占20字节,那可选项部分的最大长度就是40字节。

IP协议理论介绍

解释服务类型,英文全称 Type of Service。用来标示是一个什么类型的应用正在使用IP协议。 前面 3 个bit 用来标示优先级,但现在已经被忽略了。接着 4 个bit 用来标示子类型,每一个bit分别代表最小延迟、最大吞吐量、最高可靠性、最小费用。例如 Telnet 应用要求最小延迟,所以这4个bit分别是 「1000」。 最后一个bit是保留位,但必须是0。 但是现在很少有应用支持 TOS,所以了解一下就可以了。这属于理想很丰满,现实很骨感的一个体现。标准是标准,但是实现上会有一定差异。 总长度字段 IP 报文除了首部还要携带数据,总长度字段指整个 IP 报文的长度,单位是字节。总长度字段占2个字节,16bit,这样算下来,总共可以表示2^15-1 ,也就是65535个字节。虽然可以表示这么多字节,但是绝多数情况下都不会一次性传输这么大的数据量,会有很多因素影响每个数据报的最大值。 数据报的最大长度主要和上层应用限制和MTU限制有关系。 例如DNS服务就限制数据报最大长度为 512字节。 另外我们常用的以太网 MTU (最大传输单元)就是 1500字节,所以在以太网上的报文不能超过 1500字节。 可以用 netstat -in 查看本机网络接口的 MTU。

实例分析:

一个完整数据包,在被切割分片时,无论切割成几片,同一个数据包ID的值是不变的,同时MF位被置1,MF(more fragments)=1,表示数据包需要被切割分片处理,后续还有分片,FO(Fragment offset)表示偏移量,开始分片FO=0,单位是 8 字节 , 偏移量相当于 0 字节

WireShark深度分析IP数据包分片
WireShark深度分析IP数据包分片
在H3C设备上,修改MTU(Maximum Transmission Unit)值的命令是mtu size,其中size是你想要设置的MTU大小。
例如,如果你想要将接口GE0/0/1的MTU值修改为100,你可以使用以下命令:

[H3C] interface GigabitEthernet 0/0/1
[H3C-GigabitEthernet0/0/1] mtu 100

ip mtu或mtu 100同时执行,默认ip mtu生效
在执行这些命令之后,你需要执行display interface GigabitEthernet 0/0/1来查看接口的MTU值是否已经被修改。
  • 在H3C G0/0接口上配置修改MTU=100,我们ping -s 200 -c 1 192.168.0.200 然后用抓包看ip分片情况,网络拓扑如下图:
WireShark深度分析IP数据包分片
WireShark深度分析IP数据包分片
  • 在路由MSR36-20_1命令行ping -s 200 -c 1 192.168.0.200
[H3C-GigabitEthernet0/0]ping -s 200 -c 1 192.168.0.200
Ping 192.168.0.200 (192.168.0.200): 200 data bytes, press CTRL+C to break
200 bytes from 192.168.0.200: icmp_seq=0 ttl=255 time=1.000 ms

WireShark抓包分析:

  • 抓包可以看出ip.id不变ip.id=0x0063,MF=1,开始切割分片第1片FO=0第1个分片续包如下图:
WireShark深度分析IP数据包分片
  • ip.id=0x0063,MF=1,开始切割分片第2片FO=80,第2个分片续包如下图
WireShark深度分析IP数据包分片
  • ip.id=0x0063,MF=0,结束分片FO=160,通上一个包大小80个字节,第3个分片续包如下图
WireShark深度分析IP数据包分片
  • ip.id=0x0063,MF=0,结束分片FO=0,第4个续包如下图
WireShark深度分析IP数据包分片
  • 综上分析,WireShark给出了专家分析的信息,分片成3个包,第1个包80,第2个包80,第3个包48如下图:
WireShark深度分析IP数据包分片

WireShark抓包深度分析IP协议包:https://www.hao0564.com/4456.html

2 评论

  1. ip.addr == 192.168.3.1 and http contains “password”
    ip.addr == 192.0.2.1
    ip.flags.mf ==1
    ip.proto == 1
    ip.addr == 192.168.3.134 and ip.flags == 1

    http contains “password”
    ftp contains “password”
    http.request.method == get
    http.request.method == post
    http.response
    http.response.code == 200
    http.host == http://www.baidu.com

    tcp.dstport==443
    tcp.flags.syn==1
    tcp.flags.fin==1

    icmp.code == 0
    icmp.type == 8

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注