互联网协议 IP 是 Internet Protocol 的缩写,中文缩写为“网协”。IP 协议是位于 OSI 模型中第三层的协议,其主要目的就是使得网络间能够互联通信。前面介绍了 ARP 协议, 该协议用在第二层处理单一网络中的通信。与其类似,第三层则负责跨网络通信的地址。在 这层上工作的不止一个协议,但是最普遍的就是互联网协议(IP)

1. IP协议介绍

互联网协议地址(Internet Protocol Address,又译为网际协议地址),缩写为 IP 地址(IP Address)。在上一章介绍了 ARP 协议,通过分析包可以发现它是依靠 MAC 地址发送数据 的。但是,这样做有一个重大的缺点。当 ARP 以广播方式发送数据包时,需要确保所有设 备都要接收到该数据包。这样,不仅传输效率低,而且局限在发送者所在的子网络。也就是 说,如果两台计算机不在同一个子网络,广播是传不过去的。这种设计是合理的,否则互联 网上每一台计算机都会受到所有包,将会导致网络受到危害。 互联网是无数子网共同组成的一个巨型网络。

图中就是一个简单的互联网环境,这里列出了两个子网络。如果想要所有电脑都在同 一个子网络内,这几乎是不可能的。所以,需要找一种方法来区分那些 MAC 地址属于同一 个子网络,那些不是。如果是同一个子网络,就采用广播方式发送。否则就采用“路由”发 送。这也是在 OSI 七层模型中“网络层”产生的原因。

它的作用就是引进一套新的地址,使得用户能够区分不同的计算机是否属于同一个子网 络。这套地址就叫做“网络地址”,简称“网址”。但是,人们一般叫做是 IP 地址。这样 每台计算机就有了两种地址,一种是是 MAC 地址,另一种是网络地址(IP 地址)。但是, 这两种地址之间没有任何联系,MAC 地址是绑定在网卡上的,网络地址是管理员分配的, 它们只是随机组合在一起。

2. IP地址

IP 地址是 IP 协议提供的一种统一的地址格式。它为互联网上的每一个网络和每一台主 机分配一个逻辑地址,以此来屏蔽物理地址的差异。IP 地址分为 IPv4(IP 协议的第四版) 和 IPv6(IP 协议第六版)两大类。目前,最广泛使用的是 IPv4。在该版本中规定,该地址 是由 32 个二进制位组成,用来标识连接到网络的设备。由于让用户记住一串 32 位长的 01 字符确实比较困难,所以 IP 地址采用点分四组的表示法。

在点分四组表示法中,以 A、B、C、D 的形式构成 IP 地址的四组 1 和 0。它们分别转 换为十进制 0 到 255 之间的数,如图 3.2 所示。

图 3.2 显示了 IPv4 地址 11000000.10101000.00000000.00000001,进行了点分四组的表 示法。从图 3.2 中,可以看到这样一串 32 位长的数字很不容易记住或者表示。但是采用点 分四组的表示法,就可以将以上一个很长的字符串表示为 192.168.0.1。这样,用户就比较容 易记住。

3. IP地址的构成

IP 地址之所以会被分成四个单独的部分,是因为每个 IP 地址都包含两个部分,分别是 网络地址和主机地址。网络地址用来标识设备所连接到的局域网,而主机地址则标识这个网 络中的设备本身。例如,IP 地址 172.16.254.1 是一个 32 位的地址。假设它的网络部分是前 24 位(192.168.254),那么主机部分就是后 8 位(1)。处于同一个子网络的计算机,它们 IP 地址的网络部分必定是相同的。也就是说 172.16.254.2 应该与 172.16.254.1 处在同一个子 网络。

但是,只查看 IP 地址是无法判断网络部分的。这时候就需要使用另一个参数“子网掩 码”来判断。所谓的“子网掩码”就是表示子网络特征的一个参数。它在形式上等同于 IP 地址,也是一个 32 位二进制数字。它的网络部分全部为 1,主机部分全部为 0。

下面以IP地址10.10.1.22为例,其二进制形式为00001010.00001010.00000001.00010110。 为了能够区分出 IP 地址的每一个部分,将使用子网掩码来表示。在本例中,10.10.1.22 的子 网掩码是 11111111.11111111.00000000.00000000。这就意味着 IP 地址的前一半(10.10 或者 00001010.00001010)是网络地址,而后一半(1.22 或者 00000001.00010110)表示是该网络 上的主机,如图 3.3 所示。

在 该 图 中 的 子 网 掩 码 也 可 以 写 成 点 分 四 组 的 形 式 。 比 如 子 网 掩 码11111111.11111111.0000000.000000,可以被写成 255.255.0.0。

IP 地址和子网掩码为简便起见,通常会被些成无类型域间选路(Classless Inter Domain Routing,CIDR)的形式。在这种形式下,一个完整的 IP 地址后面会有一个左斜杠(/), 以及一个用来表示 IP 地址中网络部分位数的数字。例如,IP 地址 10.10.1.22 和网络掩码 255.255.0.0,在 CIDR 表示法下就会被写成 10.10.1.22/16 的形式。

4. 捕获IP数据包

1)什么是 IP 数据报

TCP/IP 协议定义了一个在因特网上传输的包,称为 IP 数据报(IP Datagram)。IP 数据 报是一个与硬件无关的虚拟包,由首部(header)和数据两部分组成。首部部分主要包括版 本、长度、IP 地址等信息。数据部分一般用来传送其它的协议,如 TCP、UDP、ICMP 等。

IP 数据报的“首部”部分的长度为 20 到 60 个字节,整个数据报的总长度最大为 65535 字节。因此,理论上一个数据报的“数据”部分,最长为 65515 字节。由于以太网数据报的 “数据”部分,最长只有 1500 字节。因此如果 IP 数据报超过了 1500 字节,就需要分割成 几个以太网数据报分开发送了。

2)TTL

捕获 IP 协议包和其它包有点区别,因为在 IP 协议中涉及到一个 TTL(time-to-live,生 存时间)值问题。TTL 值指定数据包被路由器丢弃之前允许通过的网段数量。当数据包每 经过一个路由器,其 TTL 值将会减一。关于 TTL 的详细信息,在后面进行介绍。下面将介 绍捕获 IP 协议包,Wireshark 的位置。

为了证明 TTL 值的变化,本例中选择使用三个路由器来捕获数据包。捕获 IP 协议数据 包的实验环境,如图 3.4 所示。

从图中,可以看到使用两个路由器,将三台主机分割成两个网段。这三台主机的 IP 地址,在图 3.4 中已经标出。在本例中,Wireshark 可以在 PC1 和 PC2 任意一台主机上运行。 但是,不可以在 PC3 上运行。因为,在后面将会分别分析同网段和不同网段中 IP 协议包。 如果在 PC3 上捕获数据包,只能捕获同网段的 IP 数据包。

3) 捕获数据包

① 访问一个网页

打开浏览器,访问 http://www.baidu.com 网站,将捕获到如图所示的界面。

从该界面的 Protocol 列,可以看到捕获到有 DNS、TCP、HTTP 等协议的包。在这些包 中,都包含由 IP 头部的详细信息。但是,这样可能会影响对 IP 协议包的分析。

② 执行 ping 命令

为了不受很多协议的影响,这里通过执行 ping 命令仅捕获 ICMP 协议的数据包。此时 在主机 PC1 上执行 ping 命令,分别 pingPC2 和 PC3。执行命令如下所示:

C:\Users\Administrator>ping 192.168.5.4 C:\Users\Administrator>ping 192.168.6.103

执行以上命令后,捕获到的数据包如图所示。

图 捕获到的 IP 协议包

从该界面的 Protocol 列,可以看到都是 ICMP 协议的包,而且每个包的颜色也都是相同 的。虽然从该界面看到捕获到的数据包很多,但是只需要分析其中两个包,就可以很清楚的 理解 IP 协议包格式。此时,用户还可以使用 IP 的显示过滤器对数据包进行过滤。如过滤仅 显示主机 PC3(192.168.6.103)的数据包,输入过滤器 ip.addr==192.168.6.103,显示界面如图所示。

从该界面可以看到,以上数据包都是发送/来自 192.168.6.103 的数据包。

4) 捕获 IP 分片数据包

在上面提到说,如果一个数据包超过 1500 个字节时,就需要将该包进行分片发送。通 常情况下,是不会出现这种情况的。但是为了帮助用户更清晰的理解 IP 协议,下面通过使 用 ICMP 包,来产生 IP 分片数据包。本节将介绍如何捕获到 IP 分片数据包。

使用 ICMP 包进行测试时,如果不指定包的大小可能无法查看到被分片的数据包。由于 IP 首部占用 20 个字节,ICMP 首部占 8 个字节,所以捕获到 ICMP 包大小最大为 1472 字节。 但是一般情况下,ping 命令默认的大小都不会超过 1472 个字节。这样,发送的 ICMP 报文 就可以顺利通过,不需要经过分片后再传输。如果想要捕获到 IP 分片包,需要指定发送的 ICMP 包必须大于 1472 字节。

捕获 IP 分片的数据包。具体操作步骤如下所示:

(1)启动 Wireshark 捕获工具。

(2)在 Wireshark 主界面的菜单栏中依次选择 Capture|Options,或者单击工具栏中的 (显示捕获选项)图标打开 Wireshark 捕获选项窗口,如图所示。

图 捕获选项界面

(3)在该界面设置捕获接口、捕获过滤器及捕获文件的位置。这里将捕获的数据保存 到 ip-fragment.pcapng 捕获文件中,如图 3.10 所示。以上信息配置完后,单击 Start 按钮开始 捕获数据包,如图 所示。

图 开始捕获数据包

此时在主机 PC1 上执行 ping 命令,以产生 ICMP 数据包。执行命令如下所示:

C:\Users\lyw>ping 192.168.5.4 -l 3000

在该命令中,使用-l 选项指定捕获包的大小为 3000 字节。执行以上命令后,将显示如 下所示的信息:

正在 Ping 192.168.5.4 具有 3000 字节的数据:

来自 192.168.5.4 的回复: 字节=3000 时间=5ms TTL=64

来自 192.168.5.4 的回复: 字节=3000 时间=5ms TTL=64

来自 192.168.5.4 的回复: 字节=3000 时间=5ms TTL=64

来自 192.168.5.4 的回复: 字节=3000 时间=5ms TTL=64

从以上输出信息中,可以看到捕获到每个包的大小都为 3000 字节。这时候,返回到 Wireshark 界面停止捕获数据,将显示如图所示的界面。

图   IP 分片数据包

从该界面可以很清楚的看到,和前面捕获到的数据包不同。在该界面 Protocol 列,显示 了 IPv4 协议的包。这是因为发送的数据包过大,所以经过了分片后发送的。

5、IP数据报首部格式

源 IP 地址和目的 IP 地址都是 IPv4 数据报首部最重要的组成部分。但是,在首部固定 部分的后面还有一些可选字段,并且其长度是可变的。下面将详细介绍 IP 数据报首部格式, 如表 3-1 所示。

表 3-1  IP数据报首部格式

IP协议

偏移位

0~3

4~7

8~15

16~18

19~31

0

版本

首部长度

服务类型

总长度

32

标识符

标记

分段偏移

64

存活时间

1

首部校验和

96

源IP地址

128

目的IP地址

160

选项

160或192+

数据

在表 3-1 中,每个字段代表的含义如下所示:

· 版本号:指 IP 协议所使用的版本。通信双方使用的 IP 协议版本必须一致。目前广 泛使用的 IP 协议版本号为 4,即 IPv4。

· 首部长度:IP 的首部长度,可表示的最大十进制数值是 15。注意,该字段所表示 的单位是 32 位字长(4 个字节)。因此,当 IP 首部长度为 1111(即十进制的 15) 时,首部长度就达到 60 字节。当 IP 分组的首部长度不是 4 字节的整数倍时,必须利用最后的填充字段加以填充。

· 服务类型:优先级标志位和服务类型标志位,被路由器用来进行流量的优先排序。

· 总长度:指 IP 首部和数据报中数据之后的长度,单位为字节。总长度字段为 16 位, 因此数据报的最大长度为 216-1=65535 字节。

· 标识符:一个唯一的标识数字,用来识别一个数据报或者被分片数据包的次序。

   · 标识:用来标识一个数据报是否是一组分片数据报的一部分。标志字段中的最低位 记为 MF(More Fragment)。MF=1 即表示后面“还有分片”的数据报。MF=0 表 示这已是若干数据包分片中的最后一个。标志字段中间的一位记为 DF(Don't Fragment),意思是“不能分片”。只有当 DF=0 时,才允许分片。

· 分片偏移:一个数据报是一个分片,这个域中的值就会被用来将数据报以正确的顺 序重新组装。

   · 存活时间:用来定义数据报的生存周期,以经过路由器的条数/秒数进行描述。

   · 协议:用来识别在数据包序列中上层协议数据报的类型。如,ICMP则协议值为1,TCP协议值为6,UDP协议值为17;更多的请自行百度

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

   · 源 IP 地址:发出数据报的主机的 IP 地址。

   · 目的 IP 地址:数据报目的地的 IP 地址。

· 选项:保留作额外的 IP 选项。它包含着源站选路和时间戳的一些选项。

· 数据:使用 IP 传递的实际数据

1)存活时间 TTL

存活时间(TTL)值定义了在该数据报被丢弃之前,所能经历的时间,或者能够经过的 最大路由数目。TTL 在数据报被创建时就会被定义,而且通常在每次被发往一个路由器的 时候减 1。

例如,如果一个数据报的存活时间是 2,那么当它到达第一个路由器的时候,其 TTL 会被减为 1,并会被发向第二个路由。这个路由接着会将 TTL 减为 0。这时,如果这个数据 报的最终目的地不在这个网络中,那么这个数据报就会被丢弃,如图 3.13 所示。

图 3.13就是数据报经过路由器后,TTL 值的变化。由于 TTL 的值在技术上还是基于时间的,一个非常繁忙的路由器可能会将 TTL 的值减去不止 1。但是通常情况下,还是可以 认为一个路由器设备在多数情况下只会将 TTL 的值减去 1。

了解 TTL 值的变化是非常重要的。一般用户通常所关心的一个数据报的生存周期,只 是其从源前往目的地所花去的时间。但是考虑到一个数据报想要通过互联网发往一台主机需 要经过数十个路由器。在这个数据报的路径上,它可能会碰到被错误配置的路由器,而失去 其到达最终目的地的路径。在这种情况下,这个路由器可能会做很多事情,其中一件就是将 数据报发向一个网络,而产生一个死循环。如果出现死循环这种情况,可能导致一个程序或 者整个操作系统崩溃。同样的,如果数据报在网络上传输时,数据报可能会在路由器直接持 续循环,随着循环数据报的增多,网络中可用的带宽将会减少,直至拒绝服务(DoS)的情 况出现。IP 首部中的 TTL 域,就是为了防止出现这种潜在的问题。

2)IP分片

数据报分片是将一个数据流分为更小的片段,是 IP 用于解决跨越不同类型网络时可靠 传输的一个特性。一个数据报的分片主要是基于第二层数据链路层所使用的最大传输单元 (Maximum Transmission Unit,MTU)的大小,以及使用这些二层协议的设备配置情况。 在多数情况下,第二层所使用的数据链路协议是以太网,以太网的 MTU 是 1500。也就是说, 以太网的网络上能传输的最大数据报大小是 1500 字节(不包括 14 字节的以太网头本身)。

当一个设备准备传输一个 IP 数据报时,它将会比较这个数据报的大小,以及将要把这 个数据报传送出去的网络接口 MTU,用于决定是否需要将这个数据报分片。如果数据报的 大小大于 MTU,那么这个数据报就会被分片。将一个数据报分片包括下列几个步骤,如下 所示:

(1)设备将数据分为若干个可成功进行传输的数据报。

(2)每个 IP 首部的总长度域会被设置为每个分片的片段长度。

(3)更多分片标志将会在数据流的所有数据报中设置为 1,除了最后一个数据报。

(4)IP 头中分片部分的分片偏移将会被设置。

(5)数据报被发送出去

6、分析 IP 数据包

通过前面对 IP 协议的详细介绍及数据包的捕获,现在就可以来分析 IP 数据包了。

1)分析IP首部

这里以捕获文件的第一帧为例,介绍 IP 数据包首部,如图 3.14 所示。

在该图中从 Packet Details 面板中,可以看到有 IPv4 协议的包。这里就详细介绍在该包 中的详细信息,如下所示:

Frame 1: 74 bytes on wire (592 bits), 74 bytes captured (592 bits) on interface 0

以上信息表示是第一帧信息,其大小为 74 个字节。

Ethernet II, Src: Elitegro_3f:c3:e5 (00:19:21:3f:c3:e5), Dst: Giga-Byt_eb:46:8d (50:e5:49:eb:46:8d)

以上信息表示是以太网帧头部信息。其中,源 MAC 地址为 00:19:21:3f:c3:e5,目标 MAC 地址为 50:e5:49:eb:46:8d。

Internet Protocol Version 4, Src: 192.168.5.2 (192.168.5.2), Dst: 192.168.5.4 (192.168.5.4)

以上信息表示IPv4包头部信息。其中源IP地址为192.168.5.2,目标IP地址为192.168.5.4。 在该包首部中还有很多其它字段的信息,下面将介绍该包中展开的所有信息。如下所示:

以上信息包括 IP 包首部的所有字段,对应到包首部格式中,如表 3-2 所示。

表 3-2  IP包首部格式

IP协议

偏移位

0~3

4~7

8~15

16~18

19~31

0

4

20

0x00

60

32

0x050e

0x00

0

64

64

ICMP(1)

0xea5c

96

192.168.5.2

128

192.168.5.4

160

160或192+

在该包中最后一行信息如下所示:

Internet Control Message Protocol

以上信息表示 ICMP 协议包信息。关于该协议的分析,在后面进行介绍。

2)分析IP数据包中TTL的变化

前面介绍过 TTL 值是经过路由器后才发送变化。也就是说如果在同一网段中传输数据 包时,TTL 值是不变的。只有与非同网段的主机进行通信时,该数据包的 TTL 值才会发生 变化。下面通过分析捕获文件,来确定 TTL 值是否是这样变化的。

① 分析同网段中数据包的 TTL 值

这里同样以捕获文件为例,分析同网段 TTL 值的变化。在 ip.pcapng 捕获文 件中,1~8 帧都是主机 PC1(192.168.5.2)和 PC2(192.168.5.4)之间的通信。这八帧可以 说是 4 个完整的数据包,也就是通过 ICMP 协议的发送和响应包。这里以 ip.pcapng 捕获文 件中的 3、4 帧为例,分析这两个包中的 TTL 值。其中,3、4 帧的信息如图 3.15 所示。

从该界面的 Packet List 面板中,Info 列可以看到 3、 4 帧包信息分别是 Echo(ping)request (请求)和 Echo(ping)reply(响应)。也就是说 192.168.5.2(PC1)发给 192.168.5.4 的 包是一个请求包,192.168.5.4(PC2)的包是一个响应包。其中,这两台主机是在同一个网 络中,所以这两个包的 TTL 值应该相同。下面分别来看这两个包中 IP 包首部的相信信息。

第三帧的 IP 包首部信息如下所示:

Internet Protocol Version 4, Src: 192.168.5.2 (192.168.5.2), Dst: 192.168.5.4 (192.168.5.4)

Version: 4          #IP 协议版本号

Header length: 20 bytes       #首部长度

Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))            #服务标识符

Total Length: 60         #总长度

Identification: 0x050f (1295)      #标识符

Flags: 0x00         #标志

0... .... = Reserved bit: Not set     #保留位

.0.. .... = Don't fragment: Not set     #不进行分片

..0. .... = More fragments: Not set     #更多分片

Fragment offset: 0        #分片偏移

Time to live: 64         #生存期

Protocol: ICMP (1)        #协议

Header checksum: 0xea5b [validation disabled]   #首部校验和

Source: 192.168.5.2 (192.168.5.2)     #源 IP 地址

Destination: 192.168.5.4 (192.168.5.4)    #目标 IP 地址

[Source GeoIP: Unknown]       #源 IP 地理位置

[Destination GeoIP: Unknown]      #目标 IP 地理位置

以上信息是第三针中 IPv4 首部的详细信息。从中可以看到,该包中的 TTL 值是 64。 第四帧的 IP 包首部信息如下所示

Internet Protocol Version 4, Src: 192.168.5.4 (192.168.5.4), Dst: 192.168.5.2 (192.168.5.2)

Version: 4          #IP 协议版本号

Header length: 20 bytes       #首部长度

Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))            #服务标识符

Total Length: 60         #总长度

Identification: 0xc71d (50973)      #标识符

Flags: 0x00         #标志

0... .... = Reserved bit: Not set     #保留位

.0.. .... = Don't fragment: Not set     #不进行分片

..0. .... = More fragments: Not set     #更多分片

Fragment offset: 0        #分片偏移

Time to live: 64         #生存期

Protocol: ICMP (1)        #协议

Header checksum: 0x284d [validation disabled]   #首部校验和

[Good: False]

[Bad: False]

Source: 192.168.5.4 (192.168.5.4)     #源 IP 地址

Destination: 192.168.5.2 (192.168.5.2)    #目标 IP 地址

[Source GeoIP: Unknown]       #源 IP 地理位置

[Destination GeoIP: Unknown]      #目标 IP 地理位置

从以上信息中,可以看到每个字段的信息都和第三帧 IP 包首部的信息都相同。这两个 包中的生存期(TTL),没有发生变化。这是因为,主机 PC1 和 PC2 在同一个网段内,它 们之间传输的数据不需要经过路由器。

② 分析不同网段中数据包的 TTL 值

下面以捕获文件为例,分析不同网段 TTL 值的变化。在 ip.pcapng 捕获文件 中,9-16 帧是两台(PC1 和 PC3)不同网段主机之间通信的数据包,如图 3.16 所示。

在该界面显示的包同样是四个完整的 ICMP 包,一个是请求包,一个是响应包。这里分 析 9、10 帧中 IPv4 首部的详细信息,如下所示。

第 9 帧 IPv4 首部信息,如下所示:

Internet Protocol Version 4, Src: 192.168.5.2 (192.168.5.2), Dst: 192.168.6.103 (192.168.6.103)

Version: 4          #IP 协议版本号

Header length: 20 bytes       #首部长度

Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))            #服务标识符

Total Length: 60         #总长度

Identification: 0x0512 (1298)     #标识符

Flags: 0x00         #标志

0... .... = Reserved bit: Not set     #保留位

.0.. .... = Don't fragment: Not set     #不进行分片

..0. .... = More fragments: Not set     #更多分片

Fragment offset: 0        #分片偏移

Time to live: 64         #生存期

Protocol: ICMP (1)        #协议

Header checksum: 0xe8f5 [validation disabled]     #首部校验和

[Good: False]

[Bad: False]

Source: 192.168.5.2 (192.168.5.2)   #源 IP 地址

Destination: 192.168.6.103 (192.168.6.103)    #目标 IP 地址

[Source GeoIP: Unknown]       #源 IP 地理位置

[Destination GeoIP: Unknown]      #目标 IP 地理位置

以上包信息,是主机 PC1 发送给 PC3 的 IP 包首部信息。其中,TTL 值为 64。

第 10 帧 IPv4 首部信息,如下所示:

Internet Protocol Version 4, Src: 192.168.6.103 (192.168.6.103), Dst: 192.168.5.2 (192.168.5.2)

Version: 4          #IP 协议版本号

Header length: 20 bytes       #首部长度

Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))            #服务标识符

Total Length: 60         #总长度

Identification: 0xa206 (41478)      #标识符

Flags: 0x00         #标志

0... .... = Reserved bit: Not set     #保留位

.0.. .... = Don't fragment: Not set     #不进行分片

..0. .... = More fragments: Not set     #更多分片

Fragment offset: 0        #分片偏移

Time to live: 63         #生存期

Protocol: ICMP (1)        #协议

Header checksum: 0x4d01 [validation disabled]    #首部校验和

[Good: False]

[Bad: False]

Source: 192.168.6.103 (192.168.6.103)    #源 IP 地址

Destination: 192.168.5.2 (192.168.5.2)    #目标 IP 地址

[Source GeoIP: Unknown]       #源 IP 地理位置

[Destination GeoIP: Unknown]      #目标 IP 地理位置

以上包信息,是主机 PC3 发送给 PC1 的 IP 包首部信息。从以上信息中,可以看到该 IPv4 首部中 TTL 值为 63。由此可以说明,PC3 发送回 PC1 的数据包经过了一个路由器。

③ IP 分片数据包分析

下面以捕获文件为例,详细分析 IP 分片。打开 ip-fragment.pcapng 捕获文件,显示界面如图 3.17 所示。

在该捕获文件中,也是捕获了四个 ping 包。1~6 帧是一个完整的 ping 包,其中 1~3 帧 是 ping 请求包,4~6 帧是 ping 响应包。也就是说,将第一个 ping 请求包,分为了 1~3 个数 据包。下面将详细分析 1~3 帧的详细信息。

⑴ 第 1 帧数据包

第 1 帧数据包详细信息如图 3.18 所示。

从该界面的 Packet Details 面板中,可以看到有四行信息。分别如下所示:

Frame 1: 1514 bytes on wire (12112 bits), 1514 bytes captured (12112 bits) on interface 0

以上信息表示第 1 帧数据包的信息,其大小为 1514 字节。

Ethernet II, Src: Elitegro_3f:c3:e5 (00:19:21:3f:c3:e5), Dst: Giga-Byt_eb:46:8d (50:e5:49:eb:46:8d)

以上信息表示以太网帧头部信息。其中源 MAC 地址为 00:19:21:3f:c3:e5,目标 MAC 地 址为 50:e5:49:eb:46:8d。

Internet Protocol Version 4, Src: 192.168.5.2 (192.168.5.2), Dst: 192.168.5.4 (192.168.5.4)

以上信息表示 IPv4 头部信息。在该头部包括了具体的详细信息。展开该行信息,内容 如下所示:

Internet Protocol Version 4, Src: 192.168.5.2 (192.168.5.2), Dst: 192.168.5.4 (192.168.5.4)

Version: 4         #IP 协议版本

Header length: 20 bytes      #首部长度

Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))           #服务标识符

0000 00.. = Differentiated Services Codepoint: Default (0x00)

.... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)

Total Length: 1500       #总长度

Identification: 0x05a3 (1443)     #标识符

Flags: 0x01 (More Fragments)     #标志

0... .... = Reserved bit: Not set    #保留位

.0.. .... = Don't fragment: Not set    #不能分片。这里的值为 0,表示可以进行 分片

..1. .... = More fragments: Set    #更多分片。这里的值为 1,表示还有分片 的数据包

Fragment offset: 0       #分片偏移

Time to live: 64        #生存期

Protocol: ICMP (1)       #协议

Header checksum: 0xc427 [validation disabled]  #首部校验和

[Good: False]

[Bad: False]

Source: 192.168.5.2 (192.168.5.2)    #源 IP 地址

Destination: 192.168.5.4 (192.168.5.4)   #目标 IP 地址

[Source GeoIP: Unknown]      #源 IP 地理位置

[Destination GeoIP: Unknown]     #目标 IP 地理位置

Reassembled IPv4 in frame: 3     #重组 IPv4 包

Data (1480 bytes)        #数据

Data: 0800cfd0000100016162636465666768696a6b6c6d6e6f70...

[Length: 1480]        #长度为 1480 字节

以上信息是第 1 帧 IPv4 首部的详细信息。从以上更多分片和分片偏移域部分,可以判定该数据包是分片数据包的一部分。这是后被分片的数据包,就会有一个大于 0 的分片偏移 或者就是设定了更多标志为。从以上信息,可以看到更多分片标志位被设定,也就是接收设 备应该等待接收序列中的另一个数据包。分片偏移为 0,表示这个数据包是这一系列分片中 的第一个包。所以,后面至少还有一个包。接下来看第二帧包信息。以上信息对应的 IPv4 首部格式中,显示结果如表 3-3 所示

⑵ 第 2 帧数据包

第 2 帧数据包详细信息如图 3.19 所示。

从 Wireshark 的 Packet Details 面板中,可以看到有四行详细信息。而且包大小,和第一 个数据包的大小相同。下面将分析该包的详细信息,如下所示。

Frame 2: 1514 bytes on wire (12112 bits), 1514 bytes captured (12112 bits) on interface 0

以上信息表示,这是第 2 帧的详细信息。其中,该包的大小为 1514 个字节。

Ethernet II, Src: Elitegro_3f:c3:e5 (00:19:21:3f:c3:e5), Dst: Giga-Byt_eb:46:8d (50:e5:49:eb:46:8d)

以上信息表示以太网帧头部信息。其中,源 MAC 地址为 00:19:21:3f:c3:e5,目标 MAC 地址为 50:e5:49:eb:46:8d。

Internet Protocol Version 4, Src: 192.168.5.2 (192.168.5.2), Dst: 192.168.5.4 (192.168.5.4)

以上信息表示 IPv4 首部的详细信息。下面将详细分析该包中每个字段的值,如下所示:

Internet Protocol Version 4, Src: 192.168.5.2 (192.168.5.2), Dst: 192.168.5.4 (192.168.5.4)

Version: 4         #IP 协议版本

Header length: 20 bytes      #首部长度

Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))           #服务标识符

0000 00.. = Differentiated Services Codepoint: Default (0x00)

.... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)

Total Length: 1500       #总长度

Identification: 0x05a3 (1443)     #标识符

Flags: 0x01 (More Fragments)     #标志

0... .... = Reserved bit: Not set    #保留位

.0.. .... = Don't fragment: Not set    #不能分片。这里的值为 0,表示可以进行 分片

..1. .... = More fragments: Set    #更多分片。这里的值为 1,表示还有分片 的数据包

Fragment offset: 1480       #分片偏移

Time to live: 64        #生存期

Protocol: ICMP (1)       #协议

Header checksum: 0xc36e [validation disabled]  #首部校验和

[Good: False]

[Bad: False]

Source: 192.168.5.2 (192.168.5.2)    #源 IP 地址

Destination: 192.168.5.4 (192.168.5.4)   #目标 IP 地址

[Source GeoIP: Unknown]      #源 IP 地理位置

[Destination GeoIP: Unknown]     #目标 IP 地理位置

Reassembled IPv4 in frame: 3     #重组 IPv4 包

Data (1480 bytes)        #数据

Data:  6162636465666768696a6b6c6d6e6f707172737475767761...

[Length: 1480]        #长度为 1480 字节

根据以上信息介绍,可以看到在该包的 IPv4 首部也设定了更多分片的标志为。而且可 以看到,这里的分片偏移值为 1480。该值是由最大传输单元(MTU)1500,减去 IP 首部的 20 个字节得到的。以上信息对应到 IPv4 首部格式中,显示信息如表 3-4 所示。

IP协议

偏移位

0~3

4~7

8~15

16~18

19~31

0

4

20

0x00

1500

32

0x05a3

0x01

1480

64

64

ICMP(1)

0xc36e

96

192.168.5.2

128

192.168.5.4

160

160或192+

1480

⑶ 第 3 帧数据包

第 3 帧数据包详细信息如图 3.20 所示。

从 Wireshark 的 Packet Details 界面可以看到,该包中显示了四行信息,并且该包的协议 为 ICMP。下面将详细分析该包中的信息。

Frame 3: 82 bytes on wire (656 bits), 82 bytes captured (656 bits) on interface 0

以上信息表示这是第 3 帧的详细信息,其中包大小为 82 个字节。

Ethernet II, Src: Elitegro_3f:c3:e5 (00:19:21:3f:c3:e5), Dst: Giga-Byt_eb:46:8d (50:e5:49:eb:46:8d)

以上信息表示以太网帧头部的详细信息。其中,源 MAC 地址为 00:19:21:3f:c3:e5,目 标 MAC 地址为 50:e5:49:eb:46:8d。

Internet Protocol Version 4, Src: 192.168.5.2 (192.168.5.2), Dst: 192.168.5.4 (192.168.5.4)

以上信息表示 IPv4 首部信息,这里着重分析该部分的详细信息。如下所示:

Internet Protocol Version 4, Src: 192.168.5.2 (192.168.5.2), Dst: 192.168.5.4 (192.168.5.4)

Version: 4         #IP 协议版本

Header length: 20 bytes      #首部长度

Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))           #服务标识符

0000 00.. = Differentiated Services Codepoint: Default (0x00)

.... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)

Total Length: 68   #总长度

Identification: 0x05a3 (1443)     #标识符

Flags: 0x01 (More Fragments)     #标志

0... .... = Reserved bit: Not set    #保留位

.0.. .... = Don't fragment: Not set    #不能分片。

..0. .... = More fragments: Not set     #更多分片。

Fragment offset: 2960        #分片偏移

Time to live: 64        #生存期

Protocol: ICMP (1)       #协议

Header checksum: 0xe84d [validation disabled]  #首部校验和

[Good: False]

[Bad: False]

Source: 192.168.5.2 (192.168.5.2)    #源 IP 地址

Destination: 192.168.5.4 (192.168.5.4)   #目标 IP 地址

[Source GeoIP: Unknown]      #源 IP 地理位置

[Destination GeoIP: Unknown]     #目标 IP 地理位置

[3 IPv4 Fragments (3008 bytes): #1(1480), #2(1480), #3(48)] #三个 IPv4 分片,共 3000 个字 节

[Frame: 1, payload: 0-1479 (1480 bytes)]    #第 1 帧加载了 1480 个字节

[Frame: 2, payload: 1480-2959 (1480 bytes)]   #第 2 帧加载了 1480 个字节

[Frame: 3, payload: 2960-3007 (48 bytes)]    #第 3 帧加载了 48 个字节

[Fragment count: 3]        #分片数为 3

[Reassembled IPv4 length: 3008]     #重组 IPv4 长度为 3008

[Reassembled IPv4 data: 0800cfd0000100016162636465666768696a6b6c6d6e6f70...]              #重组 IPv4 数据

根据以上信息的描述,可以看到该数据包没有设定更多分片标志位,也就表示该数据包 是整个数据流中的最后一个分片。并且其分片偏移设定为 2960,是由 1480+(1500-20)得出 的结果。这些分片可以被认为是同一个数据序列的一部分,因为它们 IP 首部中的标志位于 拥有相同的值。以上信息对应到 IP 首部格式,如表 3-5 所示

IP协议

偏移位

0~3

4~7

8~15

16~18

19~31

0

4

20

0x00

68

32

0x05a3

0x00

2960

64

64

ICMP(1)

0xe84d

96

192.168.5.2

128

192.168.5.4

160

160或192+

在该包中最后一行信息如下所示:

Internet Control Message Protocol

以上信息表示 ICMP 协议包信息。

WireShark——IP协议包分析(Ping分析IP协议包)的更多相关文章

  1. 如何强制使用某一大小的包去ping某个IP地址?

    测试MTU的时候用得到的, 命令如下: ping -f -l 9000 10.110.68.40 ping命令的帮助输出如下: C:\Users\administrator>ping /? Us ...

  2. 从零开始学安全(四十三)●Wireshark分析ICMP(IP)协议

    存活时间与IP分片 这里我们首先来研究一下关于IP协议的两个非常重要的概念:存活时间与IP分片.存活时间(TTL,Time to Live)用于定义数据包的生存周期,也就是在该数据包被丢弃之前,所能够 ...

  3. TCP/IP协议第一卷第三章 IP首部分析

    IP介绍 IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP.IGMP数据都以IP数据报格式传输. IP提供不可靠.无连接的数据报传送服务. 不可靠(unreliable)它不能 ...

  4. tcp、udp、ip、icmp报文格式分析

    TCP .UDP .IP. ICMP协议报文格式分析 Tcp报文格式: Wireshark抓包如图: 源端口/目的端口(16bit): 在TCP报文中包涵了源端口/目的端口,源端口标识了发送进程,目的 ...

  5. ping命令基于ICMP协议的返回信息分析

    Ping是潜水艇人员的专用术语,表示回应的声纳脉冲,在网络中 Ping 是一个十分好用的 TCP/IP 工具.它主要的功能是用来检测网络的连通情况和分析网络速度.可以利用 PING 命令检查网络连通状 ...

  6. TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute

    1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成.其中一个重要的模块就是ICMP(网络控制报文)协议. 当传送 ...

  7. TCP协议数据包及攻击分析

    TCP/IP协议栈中一些报文的含义和作用 URG: Urget pointer is valid (紧急指针字段值有效) SYN: 表示建立连接 FIN: 表示关闭连接 ACK: 表示响应 PSH: ...

  8. iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链

    iptables常用规则:屏蔽IP地址.禁用ping.协议设置.NAT与转发.负载平衡.自定义链 时间 -- :: IT社区推荐资讯 原文 http://itindex.net/detail/4772 ...

  9. TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute【转】

    转自:http://blog.csdn.net/goodboy1881/article/details/670761 1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议(是一种尽力传送的协 ...

随机推荐

  1. 获取MP4媒体文件时长

    由于之前上传MP4文件没有保存视频时长,现在有需要,所以只好写代码读取时长.找了几个发现是 c/c++ 实现,或者是借助 FFmpeg 实现. 一个偶然在 GitHub 上面发现一个 c 文件,由于获 ...

  2. eatwhatApp开发实战(六)

    上次,我们为app添加了本地存储的功能,但会发现一但退出app则存储的商家集合就消失,但其实本地已经存储了记录只是没去读取罢了. 接下来我们来实现这个功能. /** * 获取本地数据 */ priva ...

  3. pandas如何逐行需改DataFrame

    逐行修改DataFrame而不会报SettingwithCopyWarning警告的方法: df.iloc[行数,df.columns.get_loc(列名)]=new_value 参考:https: ...

  4. 使用css实现loading的加载

    使用css实现loading的加载的效果图 html代码 <div id="caseVerteClaire"> <div id="transform&q ...

  5. Java实现蓝桥杯第十一届校内模拟赛

    有不对的地方欢迎大佬们进行评论(ง •_•)ง 多交流才能进步,互相学习,互相进步 蓝桥杯交流群:99979568 欢迎加入 o( ̄▽ ̄)ブ 有一道题我没写,感觉没有必要写上去就是给你多少MB然后求计 ...

  6. Java实现 蓝桥杯 历届试题 小计算器

    历届试题 小计算器 时间限制:1.0s 内存限制:256.0MB 问题描述 模拟程序型计算器,依次输入指令,可能包含的指令有 1. 数字:'NUM X',X为一个只包含大写字母和数字的字符串,表示一个 ...

  7. Java实现 蓝桥杯VIP 算法训练 整数平均值

    题目描述 编写函数,求包含n个元素的整数数组中元素的平均值.要求在函数内部使用指针操纵数组元素,其中n个整数从键盘输入,输出为其平均值. (样例说明:5为输入数据的个数,3 4 0 0 2 是以空格隔 ...

  8. Java实现 LeetCode 123 买卖股票的最佳时机 III(三)

    123. 买卖股票的最佳时机 III 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意: 你不能同时参与 ...

  9. java实现字符串比较

    标题:字符串比较 我们需要一个新的字符串比较函数compare(s1, s2). 对这个函数要求是: 1. 它返回一个整数,表示比较的结果. 2. 结果为正值,则前一个串大,为负值,后一个串大,否则, ...

  10. Centos网络配置文件详解

    配置文件位置: 根目录下面的etc下面的sysconfig下面的network-scripts下面的网卡名称配置文件. /etc/sysconfig/network-scripts/网卡名称 如图:我 ...