宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

目录IP转发与路由选择IP 分片IPv4 数据报traceroute捕获执行 traceroute 的数据包分析数据包分片参考资料

IP

IP 是整个 TCP/IP 协议族的核心,也是构成互联网的基础。IP 位于 TCP/IP 模型的网络层相当于OSI模型的网络层),对上可载送传输层各种协议的信息,例如 TCP、UDP 等;对下可将 IP 信息包放到链路层,通过以太网、令牌环网络等各种技术来传送。为了能适应异构网络,IP 强调适应性、简洁性和可操作性,并在可靠性做了一定的牺牲。IP 不保证分组的交付时限和可靠性,所传送分组有可能出现丢失、重复、延迟或乱序等问题。——百度百科

Wireshark实验——IP 协议-风君子博客
下面来看一些基础知识:

转发与路由选择

转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器的本地动作,当一个分组到达某路由器时,路由器就必须把分组转移到适当的输出链路,这是网络层数据平面的唯一功能,同时也是最重要的。接下来看看什么是路由选择,所谓路由选择就是确定的分组从源到目的地所采用的端到端路径的网络范围处理,也就是分组从发送方发出时,网络层需要确定分组采用的路由或路径,这需要路由选择算法的支撑。
Wireshark实验——IP 协议-风君子博客

IP 分片

在链路层中存在很多链路层协议,但是所有链路层协议能够承载的网络层分组并不是一样的,有的协议只能承载大的数据报,而有的只能承载小分组。一个链路帧能够承载的最大数据量称之为最大传输单元 MTU。由于路由器之间可能使用了不同的链路层协议,因此 MTU 将在数据报转发的时候对 IP 数据报产生限制。因此 IP 数据报可以进行分片操作,即数据报拆分成多个小的 IP 数据报,以此来适应不同链路的 MTU。最终这些被分片的数据报将在接收端系统中重新组装成完整版。

IPv4 数据报

Wireshark实验——IP 协议-风君子博客
接下来研究 IP 协议,重点关注 IP 数据报IP datagram)。通过分析在执行 traceroute 程序发送和接收的一系列 IP 数据报的过程来完成这个实验,研究 IP datagram 中的各个字段 fields)和 IP fragmentation 的方法。

traceroute

为了生成一系列 IP 数据报,我们将使用 traceroute 程序向不同的目的地发送不同大小的数据报。traceroute 通过首先发送一个或多个带有生存时间 TTL) 字段设置为 1 的数据报;然后发送一个或多个带有 TTL 字段设置为 2 的数据报到同一个目的地;然后发送一个或多个带有 TTL 字段设置为 3 的数据报到同一个目的地,以此类推,直到目的地真正收到此数据报为止。路由器必须将每个接收到的数据报中的 TTL 减 1,如果 TTL 达到 0,路由器会向来源主机发送 ICMP 消息。由于这种行为,TTL 为 1 的数据报将导致距发送方一次跳跃的路由器,将 ICMP TTL 超出的消息发送回发送方主机;以TTL 为 2 发送的数据报将导致距离为两次跳跃的路由器,将 ICMP 消息发送回发送方主机等等。以这种方式,执行 traceroute 的主机可以通过查看包含ICMP TTL 超出消息的数据报中的来源 IP 地址来获知其自身与目的地之间的路由器的身份。
Wireshark实验——IP 协议-风君子博客
不过 Windows 的 tracert 程序不允许更改 tracert 程序发送的 ICMP echo 请求(ping)消息的大小。因此要使用 pingplotter 等其他程序来实验。
Wireshark实验——IP 协议-风君子博客

捕获执行 traceroute 的数据包

启动 Wireshark 并开始数据包捕获:

Wireshark实验——IP 协议-风君子博客
2. 启动 pingplotter 并在“要跟踪的地址窗口”中输入目标目标的名称,设置合适的“要跟踪的次数”,然后 Trace 。

Wireshark实验——IP 协议-风君子博客
3. 接下来发送一组长度 2000 的数据报。

Wireshark实验——IP 协议-风君子博客
4. 接下来发送一组长度 3500 的数据报。

Wireshark实验——IP 协议-风君子博客
5. 停止 Wireshark 数据包撷取

Wireshark实验——IP 协议-风君子博客
Wireshark实验——IP 协议-风君子博客

分析数据包

回答问题:

选择发送的第一个 ICMP Echo Request 消息,然后在 packet details window 中展开数据包的 Internet 协议部分。您的计算器的 IP 地址是多少?

Wireshark实验——IP 协议-风君子博客
192.168.67.249
2. 在 IP header 中,上层协议字段的值是多少?

Wireshark实验——IP 协议-风君子博客
上层协议字段的值为 1,查询常见协议值:
Wireshark实验——IP 协议-风君子博客
3. IP header 有多少 bytes? IP datagram 的有效负载中有多少 bytes?

Wireshark实验——IP 协议-风君子博客
IP header 20 bytes,数据报一共有 56 bytes,因此有效负载中有 36 bytes。
4. 此 IP 数据报是否已被分段fragmented)?

Wireshark实验——IP 协议-风君子博客
目测没有,因为第一个包的 TTL 是 1,如果被分段就会出现多个 TTL 为 1 的包,可是没发现,所以没分段。
5. 查看第一个 ICMP 及其所有后续 ICMP 消息。

Wireshark实验——IP 协议-风君子博客
在您的计算器发送的这一系列 ICMP 消息中,IP 数据报中的哪些字段一直改变?
Wireshark实验——IP 协议-风君子博客
Wireshark实验——IP 协议-风君子博客
标识符(Identification)、存活时间(Time To Live,TTL)、首部检验和 (Header Checksum)一直在变。
6. 哪些字段保持不变?哪个字段必须保持不变?哪些字段必须更改?
必须保持不变:

版本(Version):占 4 bit,通信双方使用的版本必须一致,对于 IPv4 字段的值是4;
首部长度(Internet Header Length, IHL):占 4 bit,首部长度说明首部有多少 32 位字(4字节)。由于IPv4首部可能包含数目不定的选项,这个字段也用来确定数据的偏移量;
区分服务(Differentiated Services,DS):占 6 bit,只有在使用区分服务时,这个字段才起作用,在一般的情况下都不使用这个字段;

保持不变:

显式拥塞通告( Explicit Congestion Notification,ECN):允许在不丢弃报文的同时通知对方网络拥塞的发生。
全长(Total Length):占 16 位字段,定义了报文总长,包含首部和数据,单位为字节。这个字段的最小值是 20(0 字节数据),最大值是65535。
标识符(Identification):占16位,这个字段主要被用来唯一地标识一个报文的所有分片,因为分片不一定按序到达,所以在重组时需要知道分片所属的报文。
分片偏移 (Fragment Offset):这个13位字段指明了每个分片相对于原始报文开头的偏移量,以8字节作单位。
源地址:报文的发送端;
目的地址:报文的接收端;
选项:附加的首部字段可能跟在目的地址之后;

必须更改:

标识符(Identification):占 16 位,主要被用来唯一地标识一个报文的所有分片
存活时间(Time To Live,TTL):占 8 位,避免报文在互联网中永远存在。实现为跳数计数器,报文经过的每个路由器都将此字段减1,当此字段等于0时,报文不再向下一跳传送并被丢弃,最大值是255。这是traceroute的核心原理;
首部检验和 (Header Checksum):占 16 位,检验和字段只对首部查错,在每一跳,路由器都要重新计算出的首部检验和并与此字段进行比对,如果不一致,此报文将会被丢弃;
数据

所谓的保持不变指的是这次 traceroute 不会改变的,但是下一次 traceroute 可能就会改了。
7. 描述您在 IP datagram 的 Identification field 中的值中所看到的?

主要被用来唯一地标识一个报文的所有分片,因此对于不同的报文就需要改变这个值,使得报文可以唯一确定。
下一步查找第一跳路由器发送到您的计算器的一系列 ICMP TTL 超出的回复讯息。
8. ID 字段和 TTL 字段的值是多少?

Wireshark实验——IP 协议-风君子博客
ID 字段 13673,TTL 字段 64。
9. 对于第一跳路由器发送到您的计算器的所有 ICMP TTL 超出的回复,这些值是否保持不变?为什么?

Wireshark实验——IP 协议-风君子博客
Wireshark实验——IP 协议-风君子博客
ID 字段改变,TTL 字段不改变。

分片

在将 pingplotter 中的数据包大小更改为 2000 后,查找计算机发送的第一个 ICMP Echo Request 消息。该消息是否已碎片化为多个 IP 数据报?

Wireshark实验——IP 协议-风君子博客
可以看出该消息被碎片化为 2 个 IP 数据报。
11. IP 数据报的第一个片段。 IP 头中的哪些信息表明数据报已碎片化? IP 头中的哪些信息表明这是第一个片段还是后一个片段? 这个 IP 数据报有多长?

Wireshark实验——IP 协议-风君子博客
More fragments字段为 1 表示 Set,即该数据包被分片。通过 ID 字段判断这是第一个片段,分片长度为 1480 bytes。
12. 找到碎片 IP 数据报的第二个片段。 IP 标头中的哪些信息表明这不是第一个数据报片段? 是否还有更多的片段?你是如何知道的?

Wireshark实验——IP 协议-风君子博客
Fragment Offset 字段表示偏移量,1480 bytes 的偏移量表示是上一个片段的后续。没有更多片段了,因为 More fragments 字段为 Not set,表示后面没有分片了。
13. 在第一个和第二个片段中,IP 标头中哪些字段发生了变化?

Wireshark实验——IP 协议-风君子博客
Wireshark实验——IP 协议-风君子博客
全长(Total Length)、标志 (Flags)和分片偏移 (Fragment Offset)。
接下来在将 pingplotter 中的数据包大小更改为 3500 后,找到计算机发送的第一个 ICMP Echo Request 消息。
14. 从原始数据报创建了多少个片段?

Wireshark实验——IP 协议-风君子博客
创建了 3 个片段。

参考资料

《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社
IP (网络之间互连的协议)
traceroute
IPv4 维基百科