实验报告原文
1. 实验内容
- 捕获在连接Internet 过程中产生的网络层分组:DHCP 分组,ARP 分组,IP 数据分组,ICMP 分组。
- 分析各种分组的格式,说明各种分组在建立网络连接过程中的作用。
- 分析IP 数据分组分片的结构。通过本次实验了解计算机上网的工作过程,学习各种网络层分组的格式及其作用,理解长度大于1500 字节IP 数据组分片传输的结构。
2. 实验环境
- Microsoft Windows 10.0.18362.836
- Wireshark Version 3.2.3 (v3.2.3-0-gf39b50865a13)
- Win10Pcap v10.2-5002
3. 实验流程
3.1 ICMP报文的捕获与解析
3.1.1 ICMP概述
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP 是 TCP/IP 模型中网络层的重要成员,与 IP 协议、ARP 协议、RARP 协议及 IGMP 协议共同构成 TCP/IP 模型中的网络层。ping 和 tracert是两个常用网络管理命令,ping 用来测试网络可达性,tracert 用来显示到达目的主机的路径。ping和 tracert 都利用 ICMP 协议来实现网络功能,它们是把网络协议应用到日常网络管理的典型实例。
ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文,IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面。ICMP报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。
3.1.2 ICMP数据报的捕获
-
运行Wireshark软件,在首页选择网络连接,进入捕获。
-
在顶层过滤器处输入
icmp
过滤出ICMP报文。
-
新建一个命令提示符窗口,输入
ping www.bupt.edu.cn
并回车执行,观察Wireshark捕获的数据报。
3.1.3 捕获的ICMP报文
由于MAC地址的全球唯一性,这里已将MAC地址抹去,用全x和全y代替源MAC和目的MAC.
request
0000 yy yy yy yy yy yy xx xx xx xx xx xx 08 00 45 00
0010 00 3c 43 b5 00 00 80 01 00 00 c0 a8 1f b8 d3 44
0020 45 f0 08 00 46 ae 00 01 06 ad 61 62 63 64 65 66
0030 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76
0040 77 61 62 63 64 65 66 67 68 69
reply
0000 xx xx xx xx xx xx yy yy yy yy yy yy 08 00 45 00
0010 00 3c 4e 88 00 00 34 01 3e a4 d3 44 45 f0 c0 a8
0020 1f b8 00 00 4e ae 00 01 06 ad 61 62 63 64 65 66
0030 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76
0040 77 61 62 63 64 65 66 67 68 69
3.1.4 解析ICMP报文
3.1.4.1 以太网报头和IP报头
单元的字节数 | 值(默认二进制,其他进制会说明) | 内容解释 |
---|---|---|
14 | 略 | 以太网报头 |
1 | 01000101 | IP数据报的报头开始。包含版本(4 bits)和首部长度(4 bits)。 版本:0100,表示IPv4 首部长度:0101,表示首部共有20字节(单位为4 bytes) |
1 | 00000000 | 服务类型/区分服务,因为没有使用区分服务所以这里不起作用。 |
2 | 00000000 00111100 |
总长度,指分组的长度,即首部和数据之和的长度,单位为字节。 这里表示60 bytes. |
2 | 01000011 10110101 |
标识,由发送方产生,用于接收方重组数据报时确定哪些分段(分片)属于同一个数据报。 这里表示标识号位17333. |
2 | 00000000 00000000 |
包含标志(3 bits)和片偏移(13 bits). 标志:000,表示是否进行了分段/分片,目前只有前两个比特有意义。最低位是MF,MF=1表示后面还有分段,MF=0表示这是最后一个分段。中间一位是DF,只有DF=0时才允许分段。 这里表示允许分段、是最后一个分段。 分段偏移量:00000 00000000,指出较长的分组在分段后某片在原分组中的相对位置。分段偏移量以8 个字节为偏移单位。这里表示这个分片是原分组的从第0*8=0个字节起始的。 |
1 | 10000000 | 生存时间,记为TTL(Time To Live)。为了限制数据报在网络中的生存时间,用“跳数” 作为单位。数据报每经过一个路由器,其TTL 值就减1。 这里表示起始的TTL为128. |
1 | 00000001 | 协议,指出此数据报携带的数据使用何种协议,以便目的主机的IP 层将数据部分上交给哪个处理过程。 这里表示使用ICMP协议(1)。 |
2 | 00000000 00000000 |
首部检验和,只检验数据报的首部不包括数据部分,这里不采用CRC 校验码而采用checksum。 这里为0是因为开启了网卡的“硬件校验和”的功能。开启了这个功能之后协议栈就不会进行校验和的计算了,有助于提高网络性能。关闭网卡的硬件校验和功能后这里会有有效的校验和。 |
4 | 11000000 10101000 0001 |