赞
踩
3.2-----IP与ICMP分析
IP 和 ICMP 协议是 TCP/IP 协议簇中的网络层协议,在网络寻址定位、数据分组转发和路由选择等任务中发挥了重要作用。本实验要求熟练使用 Wireshark 软件,观察 IP数据报的基本结构,分析数据报的分片;掌握基于 ICMP 协议的 ping 和 traceroute 命令及其工作原理。
启动 Wireshark,捕捉网络命令执行过程中本机接受和发送的数据报。
1. 执行 ping 命令,观察 IP 数据报和 ICMP 询问报文的结构:通过 Wireshark 监视器观察捕获流量中的 ICMP 询问报文和 IP 数据报的结构。注意比较 ICMP 请求帧与回应帧,及其 IP 头部数据字段的异同。
2. 改变 ping 命令的参数,观察 IP 数据报分片:更改 ping 命令参数 MTU,使其发出长报文以触发 IP 数据报分片,再观察 IP 数据报的结构变化。
3. 执行 Traceroute 命令,观察 ICMP 差错报文的结构,并分析其工作原理:使用Linux 操作系统提供的 traceroute 命令(或者 Windows 系统提供的 tracert 命令),捕获和分析该命令所产生的 IP 数据报,特别注意相关的 ICMP 差错报文。结合捕获的具体数据,画出命令执行过程中数据交互的示意图,掌握 traceroute 的工作原理。
3.1 IP 协议及数据报格式
网际互连协议(Internet Protocol,IP),是 TCP/IP 体系中的网络层协议,可实现大规模的异构网络互联互通,为主机提供无连接的、尽力而为的数据包传输服务。在网际协议第 4 版(IPv4)中,IP 数据报是一个可变长分组,包括首部和数据两部分 (如图1.2–1)。首部由 20~60 字节组成,包含与路由选择和传输有关的重要信息。其各字段意义如下:
1. 版本(4 位):该字段定义 IP 协议版本,所有字段都要按照此版本的协议来解释。
2. 首部长度(4 位):该字段定义数据报协议头长度,表示协议首部具有 32 位字长的数量,最小值为 5,最大值为 15。
3. 服务(8 位):该字段定义上层协议对处理当前数据报所期望的服务质量,并对
数据报按照重要性级别进行分配。前 3 位为优先位,后面 4 位为服务类型,最后1 位没有定义。这 8 位可用于分配优先级、延迟、吞吐量以及可靠性。
4. 总长度(16 位):该字段定义整个 IP 数据报的字节长度,包括协议首部和数据,其最大值为 65535 字节。
5. 标识(16 位):该字段包含一个整数,用于标识当前数据报。当数据报分片时,标识字段的值被复制到所有的分片中。
6. 标记(3 位):该字段由 3 位字段构成,其中最低位(MF)控制分片:若存在下一个分片则值为 1;否则置 0 代表该分片是最后一个。中间位(DF)指出数据报是否可进行分片,若置 1 则不允许该数据报进行分片。第三位即最高位保留不使用,值为 0。
7. 分片偏移(13 位):该字段指出数据分片在源数据报中的相对位置,以 8 字节为长度单位。
8. 生存时间(8 位):该字段是计数器,转发该数据报的路由器依次减 1 直至减少为 0。
9. 协议(8 位):该字段指出在 IP 层处理后,由哪种上层协议接收该数据报。
10. 头部校验和(16 位):该字段帮助确保 IP 协议头的正确性。计算过程是先将校验和字段置为 0,然后将整个头部每 16 位划分为一部分,并将各部分相加,其计算结果取反码,填入校验和字段中。第一单元 网络抓包与协议分析
11. 源地址(32 位):源主机的 IP 地址。
12. 目的地址(32 位):目标主机的 IP 地址。一个 IP 包从源主机传输到目标主机可能需要经过多个传输媒介不同的网络。每种网络对数据帧都设置了一个最大传输单元 (MTU) 的限制(例如以太网的 MTU 是 1500字节)。因此,当路由器在转发 IP 包时,如果数据包的大小超过了出口链路网络的 MTU时,需将对该 IP 数据报进行分片,才能在目标链路上顺利传输。每个 IP 分片将独立传输,直到所有分片都到达目的地后,目标主机才会把他们重组成一个完整的 IP 数据报。在 IP 数据报的分片与重组过程中,以下三个首部字段发挥了重要作用:
1. 标记的后两位:最低位记为 MF(More Fragment),MF = 1 代表还有后续分片,MF = 0 表示此为原始数据报的最后分片。次低位 DF(Don’t Fragment),用来控制数据报是否允许分片。DF = 1 表示该数据报不允许分片;DF = 0 允许分片。
2. 标识符:用于目的主机将 IP 数据报的各个分片重装成原来的数据报。
3. 片偏移:以 8 字节为单位,目的主机在重装 IP 数据报时需要根据该字段提供偏移量进行排序。这是因为数据分片的独立传输使各分片的到达顺序难以确定。
3.2 ICMP 协议及报文格式
因特网控制报文协议(Internet Control Message Protocol,ICMP),用于 IP 主机、路由器之间传递控制消息。控制消息是指网络是否连通、主机是否可达、路由是否可用等网络本身的控制管理消息,对网络正常运行起着重要的作用。ICMP报文的类型可以分为ICMP差错报文和ICMP询问报文两种(其结构如图1.2–2)。ICMP 差错报告报文主要有终点不可达、源站抑制、超时、参数问题和路由重定向5 种。ICMP 询问报文有回送请求和应答、时间戳请求和应答、地址掩码请求和应答以及路由器询问和通告 4 种。其常见的类型与代码如表1.2–1所示。
装有 Wireshark 软件的 PC 机一台,处于局域网环境。
参考资料:
• J.F Kurose and K.W. Ross, Wireshark Lab: ICMP v8.0
• Wireshark 官方过滤器语法指导书
• IP 协议的 RFC
5.1 ping 命令
本机(示例 IP 为 192.168.1.251)启动 Wireshark 软件,选择要监听的网络接口(如eth0、wlan0);然后在终端发起网络命令:ping IP 地址/域名。
2、点击 Internet Protocol Version 4 展开(如图1.2–4),查看 IP 数据报,特别观察 IP数据报的首部字段及其内容。
3、点击 Internet Control Message Protocol 展开(如图1.2–5),查看 ICMP 报文,并解释回显(Echo Request 和 Echo Reply)报文的首部字段。
4、清空 Wireshark 监控器,重新发起网络命令(如图1.2–6):ping IP 地址/域名–l#length,并解释对比前后两次执行 ping 命令的结果。其中,-l #length 确定 echo数据报的长度为 #length,其默认值为 32 字节,且小于 65,527 字节。
5、可以多次改变 #length 的大小(例如 1000 字节、2000 字节和 4000 字节),观察IP 数据报何时会分片?请解释 IP 数据报分片的原因和具体情况。提示:请先确认该网络的 MTU,可在 Wireshark 记录中查找“IPv4 fragments”项目。
5.2 traceroute 命令
本机(示例 IP 为 192.168.1.251)启动 Wireshark 软件,选择要监听的网络接口(如eth0、wlan0);然后在终端发起网络命令:traceroute IP 地址/域名。
3、点击 Internet Control Message Protocol 展开,查看 ICMP 差错报文,观察并解释ICMP 报文结构和字段内容。
4、结合 ICMP 报文记录画出数据交互示意图,并描述 tracert 工作原理。
1、使用Ping命令,去ping一个不存在的主机IP,如10.104.125.344。使用wireshark 捕获数据包,并进行分析。
当使用ping命令去ping一个不存在的主机IP时,由于该IP地址不存在,所以无法建立网络连接。因此,ping请求无法被发送出去,也就无法抓取到ICMP包。
在Wireshark中,ICMP包是通过监听网络接口来捕获的。由于ping请求无法发送出去,网络接口也就无法捕获到任何ICMP包。如图7所示。
图 7 ping不存在的主机IP
2、观察ICMP超时消息。
当主机无法响应ping请求时,会返回ICMP超时消息,表明目标主机不可达或存在网络故障。如图8所示,通过观察ICMP超时消息,可以获得以下信息:
1、TTL值为64:这表示ICMP超时消息在网络中经过了64个跳。TTL的初始值通常为64,每经过一个路由器,TTL值就会减少1。如果TTL值达到0,路由器将丢弃该数据包并返回ICMP超时消息。
2、ICMP类型为Echo (ping) request:这表示发送的是一个ping请求。
3、源IP地址为10.105.180.95,目标IP地址为142.251.43.3:这表示ping请求是从10.105.180.95发送到142.251.43.3的。
4、没有响应:消息中显示"(no response found!)",表示目标主机142.251.43.3没有响应ping请求。
图 8 ICMP超时
3、使用Ping 命令,正常ping一个能通的地址,比如ping www.baidu.com 打开wireshark,截取数据包。
Internet Protocol Version 4信息如图9所示。
Internet Control Message Protocol信息如图10所示。可以看到以下回显(Echo Request 和 Echo Reply)报文的首部字段解释:
- Type: 报文类型为8,表示这是一个回显请求报文。
- Code: 报文代码为0,表示没有特定的代码。
- Checksum: 校验和字段为0x4be2,表示校验和计算正确。
- Identifier: 标识符字段有两个值,一个是大端序的1(0x0001),另一个是小端序的256(0x0100)。这个标识符用于标识回显请求报文和回显回复报文之间的关联。
- Sequence Number: 序列号字段有两个值,一个是大端序的377(0x0179),另一个是小端序的30977(0x7901)。这个序列号用于标识回显请求报文和回显回复报文之间的顺序关系。
- Data: 数据字段包含了32个字节的数据,具体的数据内容为"6162636465666768696a6b6c6d6e6f7071727374757677616263646566676869"。这些数据是回显请求报文或回显回复报文的有效载荷数据。
图 9 Internet Protocol Version 4
图 10 Internet Control Message Protocol
4、使用ping命令查看参数
(1)问:清空 Wireshark 监控器,重新发起网络命令(如图1.2–6):ping IP 地址/域名–l#length,并解释对比前后两次执行 ping 命令的结果。其中,-l #length 确定 echo数据报的长度为 #length,其默认值为 32 字节,且小于 65,527 字节。
答:重新发起网络命令:ping www.buidu.com -l 4000
图 11 ping www.buidu.com -l 4000
对比直接ping www.baidu.com结果发现,多了红色框出区域。此处说明分了3个Fragments,从帧序号31到33是这4000字节长度的分片,分别0-1479(1480个字节)、1480-2959(1480个字节)和2960-4007(1048个字节)。其中,因为片位移8字节倍数,4000相当于第4001字节,所以最后一片4007才能分片。然后,我查阅资料了解到分片的原因:以太网的最大传送单元MTU是1500字节,超过则自动分片,减去IP首部20字节,所以IP数据部能发1480字节。
(2)问:可以多次改变 #length 的大小(例如 1000 字节、2000 字节和 4000 字节),观察IP 数据报何时会分片?请解释 IP 数据报分片的原因和具体情况。提示:请先确认该网络的 MTU,可在 Wireshark 记录中查找“IPv4 fragments”项目。
答:Step 1:确认网络的MTU
在命令提示符中输入:netsh interface ipv4 show subinterfaces,按下回车键查看当前的mtu值(不过一般情况下实际比这个MTU小,后续进行手动测试)。
通过ping -l mut值 -f www.baidu.com,发现当mut值为1472时,可以连接网站;当mut值为1473时,不能连网,提示需要拆分数据包但是设置DF。说明该网络的mut值为1472(测定值+28 = 使用netsh interface ipv4 show subinterfaces命令查询到的值相同)。
图 12 确认该网络的MTU
Step 2:在 Wireshark 记录中查找“IPv4 fragments”项目
因图过多,在此只进行阐述。当length = 1000字节时,1个Fragments。
当length = 2000字节时,分2个Fragments,从帧序号40、41是这2000字节长度的分片,分别0-1479(1480个字节)和1480-2007(1480个字节)。其中,因为片位移8字节倍数,2000相当于第2001字节,所以最后一片2007才能分片。
当length = 3000字节时,分3个Fragments,从帧序号53-55是这3000字节长度的分片,分别0-1479(1480个字节)、1480-2959(1480个字节)和2960-3007(48个字节)。其中,因为片位移8字节倍数,3000相当于第3001字节,所以最后一片3007才能分片。
当length = 4000字节时,分4个Fragments,从帧序号97-99是这4000字节长度的分片,分别0-1479(1480个字节)、1480-2959(1480个字节)和2960-4007(1048个字节)。其中,因为片位移8字节倍数,4000相当于第4001字节,所以最后一片4007才能分片。
如果IP数据报加上数据帧头部后大于MTU,数据报文就会分成若干片进行传输。
所以IP数据报分片原因:
当IP数据报的长度远大于各物理网络的MTU时,IP数据报需要通过多个物理网络的帧来传输,传输过程可能要通过多个不同的物理网络。物理网络不同,所支持的帧的格式与长度也就不同。因此,每个路由器都要将接收到的IP数据报进行拆包处理,然后封装成另外一个更小的IP数据报,以适应不同物理网络的传输。
IP数据报分片的具体情况:
一般情况下,以太网的环境中可传输的最大IP报文为1500字节。如果要传输的数据帧大小超过了1500字节,即IP数据报的长度大于1472(1500-20-8=1472,普通数据报)字节,则需要分片之后进行传输。IP数据报分片后,每个都由IP头部和IP数据区两个部分组成,头部占用20个字节,故数据区最多为1480个字节。因此,分区以0-1479、1480-2959、2960-3139……类推。Length为第length+1个字节,由于片位移8字节倍数,故最后一片分片需取((length/8+1)的上限整数*8)才能分片。
5、使用Tracert命令跟踪一个地址,并进行抓包分析
刚开始尝试时,在命令行输入traceroute www.buidu.com 提示'traceroute' 不是内部或外部命令,也不是可运行的程序或批处理文件。通过查询资料,了解到该命令在Linux中被称为traceroute,Windos的类似功能被称为tracert。后续修改命令行输入为tracert www.buidu.com。
(1)抓包分析
如图13所示,下面对ICMP报文的结构和字段内容进行解释:
- 类型(Type):类型字段指示这是一个ICMP差错报文,类型为3,表示目的不可达(Destination Unreachable)。
- 代码(Code):代码字段指示了具体的差错类型,代码为3,表示端口不可达(Port Unreachable)。
- 校验和(Checksum):校验和字段用于验证ICMP报文的完整性和正确性,值为0x6809,表示校验和正确。
- 未使用字段(Unused):该字段没有被使用,值为00000000。
图 13 用Tracert命令跟踪地址
(2)数据交互示意图
图 14 数据交互示意图
tracert工作原理:
首先源主机发起一个 TTL=1 的 ICMP 报文。第一个路由器收到该报文后,TTL减 1 变为 0 并丢弃此报文,返回一个 [ICMP time exceeded] 的消息。源主机通过这个消息获知 IP 数据报转发路径上的第一个路由器信息。然后,依次增加发送ICMP 报文的 TTL 值,可以获取路径上的后续路由器的信息。当到达目的地时,目标主机返回一个 [ICMP port unreachable] 的消息,使发起者确认 IP 数据报已经正常到达。
6、心得体会:
本次实验内容较多,第一部分实验我学习使用Wirshark软件抓取局域网的数据包并进行分析,第二部分实验IP数据报和ICMP询问报文的字段分析、IP数据报分片原理、ICMP差错报文的结构和工作流程,对我来说难度比较大,我通过查阅了很多资料,花了比较长的时间完成消化。
在实验过程中遇到了一些问题,比如Frame Length查看的捕获的数据是数据包的长度,其不包括FCS,tracert命令在Linux和Windos中的叫法不同,网络的MTU值推测等...但最终都成功解决。
这次实验不仅加强了我对基础知识的学习,也让我能更加熟练使用Wirshark软件进行数据抓包和分析。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。