【愚公系列】2022年02月 wireshark系列-数据抓包分析之IP协议02
一、数据抓包分析之IP协议02
任务描述:了解IP 数据报首部格式以及TTL等重要知识点,并分析实验一的数据包。
1.熟悉IP数据报首部格式
源 IP 地址和目的 IP 地址都是 IPv4 数据报首部最重要的组成部分。但是,在固定部分的后面还有一些可选字段,并且其长度是可变的。下面将详细介绍 IP 数据报首部格式,如下表所示。
IP数据报首部格式
在上表中,每个字段代表的含义如下所示:
版本号:指 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 时,才允许分片。
分片偏移:一个数据报是一个分片,这个域中的值就会被用来将数据报以正确的顺序重新组装。
存活时间:用来定义数据报的生存周期,以经过路由器的条数/秒数进行描述。
协议:用来识别在数据包序列中上层协议数据报的类型。
首部校验和:一个错误检测机制,用来确认 IP 首部的内容有没有被损坏或者篡改。
源 IP 地址:发出数据报的主机的 IP 地址。
目的 IP 地址:数据报目的地的 IP 地址。
选项:保留作额外的 IP 选项。它包含着源站选路和时间戳的一些选项。
数据:使用 IP 传递的实际数据。
以上详细介绍了 IP 包首部格式的每个字段。这里先有个概念,需要在分析包之前了解一下。下面将详细介绍
2.存活时间 TTL
存活时间(TTL)值定义了在该数据报被丢弃之前,所能经历的时间,或者能够经过的最大路由数目。TTL 在数据报被创建时就会被定义,而且通常在每次被发往一个路由器的时候减 1。
例如,如果一个数据报的存活时间是 2,那么当它到达第一个路由器的时候,其 TTL会被减为 1,并会被发向第二个路由。这个路由接着会将 TTL 减为 0。这时,如果这个数据报的最终目的地不在这个网络中,那么这个数据报就会被丢弃,如下图所示。
上图就是数据报经过路由器后,TTL 值的变化。由于 TTL 的值在技术上还是基于时间的,一个非常繁忙的路由器可能会将 TTL 的值减去不止 1。但是通常情况下,还是可以认为一个路由器设备在多数情况下只会将 TTL 的值减去 1。
了解 TTL 值的变化是非常重要的。一般用户通常所关心的一个数据报的生存周期,只是其从源前往目的地所花去的时间。但是考虑到一个数据报想要通过互联网发往一台主机需要经过数十个路由器。在这个数据报的路径上,它可能会碰到被错误配置的路由器,而失去其到达最终目的地的路径。在这种情况下,这个路由器可能会做很多事情,其中一件就是将数据报发向一个网络,而产生一个死循环。如果出现死循环这种情况,可能导致一个程序或者整个操作系统崩溃。同样的,如果数据报在网络上传输时,数据报可能会在路由器直接持续循环,随着循环数据报的增多,网络中可用的带宽将会减少,直至拒绝服务(DoS)的情况出现。IP 首部中的 TTL 域,就是为了防止出现这种潜在的问题。
3.IP分片
数据报分片是将一个数据流分为更小的片段,是 IP 用于解决跨越不同类型网络时可靠传输的一个特性。一个数据报的分片主要是基于第二层数据链路层所使用的最大传输单元(Maximum Transmission Unit,MTU)的大小,以及使用这些二层协议的设备配置情况。在多数情况下,第二层所使用的数据链路协议是以太网,以太网的 MTU是 1500。也就是说,以太网的网络上能传输的最大数据报大小是 1500 字节(不包括 14字节的以太网头本身)。 当一个设备准备传输一个 IP 数据报时,它将会比较这个数据报的大小,以及将要把这个数据报传送出去的网络接口 MTU,用于决定是否需要将这个数据报分片。如果数据报的大小大于 MTU,那么这个数据报就会被分片。将一个数据报分片包括下列几个步骤,如下所示:
(1)设备将数据分为若干个可成功进行传输的数据报。
(2)每个 IP 首部的总长度域会被设置为每个分片的片段长度。
(3)更多分片标志将会在数据流的所有数据报中设置为 1,除了最后一个数据报。
(4)IP 头中分片部分的分片偏移将会被设置。
(5)数据报被发送出去。
4.分析IP数据包
通过前面对 IP 协议的详细介绍及数据包的捕获,现在就可以来分析 IP 数据包了。
5.分析IP首部
这里以 pingPC2 捕获文件(文件名为ip-ping166.pcapng)中的某一帧为例,介绍 IP 数据包首部
在该图中从 Packet Details 面板中,可以看到有 IPv4 协议的包。这里就详细介绍在该包中的详细信息,如下所示:
以上信息表示是第44帧信息,其大小为 74 个字节。
以上信息表示是以太网帧头部信息。其中,源 MAC 地址为 02:00:04:78:01:7b,目
标 MAC地址为 02:00:03:56:00:cf。
以上信息表示 IPv4 包头部信息。其中源 IP 地址为 10.1.1.142,目标 IP 地址为10.1.1.166。在该包首部中还有很多其它字段的信息,下面将介绍该包中展开的所有信息。如下所示:
Internet Protocol Version 4, Src: 10.1.1.142 (10.1.1.142), Dst: 10.1.1.166 (10.1.1.166)
Version: 4 #版本号
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: 60 #总长度
Identification: 0x49ad (18861) #标识符
Flags: 0x00 #标志
0... .... = Reserved bit: Not set #保留位
.0.. .... = Don't fragment: Not set #不进行分片
..0. .... = More fragments: Not set #更多分片,这里 的值为 0,标识这是若干数据包中的最后一个分片
Fragment offset: 0 #分段偏移
Time to live: 128 #存活时间
Protocol: ICMP (1) #协议
Header checksum: 0x0000 [validation disabled] #首部校验和
[Good: False]
[Bad: False]
Source: 10.1.1.142 (10.1.1.142) #源 IP 地址
Destination: 10.1.1.166 (10.1.1.166) #目标 IP 地址
[Source GeoIP: Unknown] #源 IP 地理位置
[Destination GeoIP: Unknown] #目标 IP 地理位置
以上信息包括 IP 包首部的所有字段,对应到包首部格式中,如下表所示
在该包中最后一行信息如下所示:
Internet Control Message Protocol
以上信息表示 ICMP 协议包信息。关于该协议的分析,在后面实验进行介绍。
6.分析 IP 数据包中 TTL 的变化
前面介绍过 TTL 值是经过路由器后才发送变化。也就是说如果在同一网段中传输数据包时,TTL 值是不变的。只有与非同网段的主机进行通信时,该数据包的 TTL 值才会发生变化。下面通过分析捕获文件,来确定 TTL 值是否是这样变化的。
1)分析同网段中数据包的 TTL 值
这里同样以 ping PC2捕获文件为例,分析同网段 TTL 值的变化。在 ip.pcapng 捕获文件中,44~100 帧都是主机 PC1(10.1.1.142)和 PC2(10.1.1.166)之间的通信。这八帧可以说是 4 个完整的数据包,也就是通过 ICMP 协议的发送和响应包。这里以捕获文件中的 44、45 帧为例,分析这两个包中的 TTL 值。其中44、45 帧的信息如下图所示。
从上面的Wireshark界面的中的No. 列可以看到44、45 帧包信息分别是 Echo(ping)request(请求) 和 Echo(ping)reply(响应)。也就是说 10.1.1.142(PC1)发给 10.1.1.166的包是一个请求包,10.1.1.166(PC2)的包是一个响应包。其中,这两台主机是在同一个网络中,所以这两个包的 TTL 值应该相同。下面分别来看这两个包中 IP 包首部的响应信息。
第44帧的 IP 包首部信息如下所示:
以上信息是第44帧中 IPv4 首部的详细信息。从中可以看到,该包中的 TTL 值是 128。
第45帧的 IP 包首部信息如下所示:
从以上信息中,可以看到每个字段的信息都和第44帧 IP 包首部的信息都相同。这两个包中的生存期(TTL),没有发生变化。这是因为,主机 PC1 和 PC2 在同一个网段内,它们之间传输的数据不需要经过路由器。
2)分析不同网段中数据包的 TTL 值
下面以 pingPC3(百度的域名)文件(文件名为ip-pingbaidu.pcapng)为例,分析不同网段 TTL 值的变化。在捕获文件中,66-107 帧(帧数错乱是因为中间夹着这其他协议)是PC1 和 PC3不同网段主机之间通信的数据包,如下图所示:
在该界面显示的包同样是四个完整的 ICMP 包,一个是请求包,一个是响应包。这里分析 66、68 帧中 IPv4 首部的详细信息,如下所示。
第 66 帧 IPv4 首部信息,如下所示:
以上包信息,是主机 PC1 发送给 PC3 的 IP 包首部信息。其中,TTL 值为 128。第 68 帧 IPv4 首部信息,如下所示:
以上包信息,是主机 PC3 发送给 PC1 的 IP 包首部信息。从以上信息中,可以看到该 IPv4首部中 TTL 值为 54。由此可以说明,PC3 发送回 PC1 的数据包经过了很多路由器,具体数目,请同学根据之前的知识点推算。
7.IP分片数据包分析
我们以ping PC2(10.1.1.166)机器加-l 3000, 捕获文件(文件名为ip-ping-fragments.pcapng)为例,详细分析 IP 分片。打开捕获文件,显示界面如下图所示。
在该捕获文件中,也是捕获了四个 ping 包。200~207帧是一个完整的 ping 包,其中200~202帧是 ping 请求包,205~207帧是ping响应包。也就是说,将一个ping请求包,分成了200-202的数据包。下面下面将详细分析 200~203 帧的详细信息。
1)第 200 帧数据包
第 200帧数据包详细信息如下图 所示
IP协议之前的信息,请同学参照上面的讲解,这里不重复。
下面信息表示 IPv4 头部信息。在该头部包括了具体的详细信息。展开该行信息,
内容如下所示:
以上信息是第 200 帧 IPv4 首部的详细信息。从以上更多分片和分片偏移域部分,可以判定该数据包是分片数据包的一部分。这是后被分片的数据包,就会有一个大于 0 的分片偏移或者就是设定了更多标志位。从以上信息,可以看到更多分片标志位被设定(见上图第一个红框),也就是接收设备应该等待接收序列中的另一个数据包。分片偏移为 0(见上图第二个红框),表示这个数据包是这一系列分片中的第一个包。所以,后面至少还有一个包以上信息对应的 IPv4首部格式中,显示结果如下表所示
2)第 201 帧数据包
接下来,分析第二条信息,第201帧数据包详细信息如下图所示。
IP协议之前的信息,请同学参照上面的讲解,这里不重复。
下面信息表示 IPv4 头部信息。在该头部包括了具体的详细信息。展开该行信息,内容如下所示以上信息表示 IPv4 首部的详细信息。下面将详细分析该包中每个字段的值,如下所示:
根据以上信息介绍,可以看到在该包的 IPv4 首部也设定了更多分片的标位(见上图第一个红框)。而且可以看到,这里的分片偏移值为 1480(见上图第二个红框)。该值是由最大传输单元(MTU)1500,减去 IP 首部的20 个字节得到的。以上信息对应到 IPv4 首部格式中,显示信息如下表所示
3)第 202 帧数据包
第 202 帧数据包详细信息如下图所示。
IP协议之前的信息,请同学参照上面的讲解,这里不重复。
下面信息表示 IPv4 头部信息。在该头部包括了具体的详细信息。展开该行信息,内容如下所示以上信息表示 IPv4 首部的详细信息。下面将详细分析该包中每个字段的值,如下所示:
以上信息表示 IPv4 首部信息,这里着重分析该部分的详细信息。如下所示:
根据以上信息的描述,可以看到该数据包没有设定更多分片标志位(见上图第一个红框),也就表示该数据包是整个数据流中的最后一个分片。并且其分片偏移设定为 2960(见上图第二个红框),是由 1480+(1500-20)得出的结果。这些分片可以被认为是同一个数据序列的一部分,因为它们 IP 首部中的标志位(0x72b7)于拥有相同的值。并且在协议末尾,Wireshark分析出此三个分片,组成一个完成的请求。以上信息对应到 IP 首部格式,如下表所示。
- 点赞
- 收藏
- 关注作者
评论(0)