一:前言

如果网络中的所有设备都是使用集线器或者交换机进行连接,那么这个网络称为局域网(LAN)。如果将两个局域网连接起来,那么需要路由器。复杂的网络中,可能包含了成千上万的局域网,而这些局域网是由成千上万的路由器连接起来的。

互联网本身是由无数局域网和路由器组成的一个集合

二:IPv4头(固定长度20字节)

Wireshark协议分析之IPv4协议

版本(version):IP所使用的版本

首部长度(Header Length):IP头的长度

服务类型(Type of Service):优先级标志位和服务类型标志位,被路由器用来进行流量的优先排序

总长度(Total Length):IP头与数据包中数据的长度

标识符(Identification):一个唯一的标识数字,用来识别一个数据包或者被分片数据包的次序

标志(FLags):用来识别一个数据包是否是一组分片数据包的一部分

片偏移(Fragment Offset):一个数据包是一个分片,这个域中的值就会被用来将数据包以正确的顺序重新组装

生存时间(Time to Live):用来定义数据包的生存周期,以经过路由器的跳数/秒数进行描述

        死循环会引发各种问题,导致程序或者os的崩溃。当收到ttl为1,则不会进行转发。

协议(Protocol):用来识别在数据包序列中上层协议数据包的类型

首部校验和(Header Checksum):一个错误检测机制,用来确认IP头的内容没有被损坏或者篡改

源地址(Source IP Address):发出数据包的主机的IP地址

目的地址(Destination IP  Address):数据包目的地的IP地址

选项(Options):保留作额外的IP选项。包含这源站选路和时间戳的一些选项

数据(Data):使用IP传递的实际数据

Wireshark协议分析之IPv4协议

可以看出IPv4协议的头部占20字节,Total length为60,故数据部分的长度为40字节

三:IP分片

数据包分片将一个数据流分为更小的片段,它是IP用于解决跨越不同类型网络时可靠传输的一个特性。

一个数据包的分片主要基于第2层数据链路协议所使用的最大传输单元(MTU)的大小,以及使用这些第2层协议的设备配置情况。在多数情况下,第2层所使用的数据链路协议是以太网。

以太网默认的MTU是1500,也就是说以太网上所能传输的最大报文大小是1500字节(并不包括14字节的以太网头本身)

当一个设备准备传输一个IP数据包时,它将会比较这个数据包的大小,以及MTU,用来决定是否需要将这个数据包分片。如果数据包大小大于MTU,那么这个数据包就会被分片,分片步骤如下

  1. 设备将数据分为若干个将要接下来进行传输的数据包
  2. 每个IP头的总长度字段会被设置成每个分片的片段长度
  3. 除了最后一个分片数据包外,之前所有分片数据包的标志位都被标识为1
  4. IP头中分片部分的分片偏移将会被设置
  5. 数据包被发送出去

Wireshark协议分析之IPv4协议

看上图地址10.10.0.3向一个地址为192.168.0.128的设备发送ping请求,由于请求包太大,被分为3部分传输

第一个数据包

Wireshark协议分析之IPv4协议

根据More fagements 和Fragement offset可以判定这个数据包是分片数据包中的一部分

 

第二个数据包

Wireshark协议分析之IPv4协议

第二个 数据包的IP头,同样被设定了标志位,但是这里的分片偏移值是185(以8个字节为单位:140),意味着1500字节的MTU,减去了IP头部的20字节

 

第三个数据包

Wireshark协议分析之IPv4协议

这个数据包并没有设定为更多的分片标志位,意外着是最后一个分片,其片偏移值设置为370(实际为2960)

虽然网络上被分片的数据包不怎么常见,但是明白数据包为什么会分片是有用的,当遇到时,可以诊断问题所在或认出丢失的分片

关于IP数据包分片的计算问题,可以看https://blog.csdn.net/qq_39112646/article/details/86763757

相关文章: