EduCoder 计算机网络实验 以太网与ARP协议分析
第1关:抓取Ethernet包
任务描述
本关任务:在 Wireshark 下抓取 Ethernet 包。
相关知识
为了完成本关任务,你需要掌握:
- Ethernet 帧结构;
- 学会抓取一组以太帧结构。
以太帧类型
以太帧有很多种类型。不同类型的帧具有不同的格式和 MTU 值。但在同种物理媒体上都可同时存在。
- 以太网第二版或者称之为 Ethernet II 帧,DIX 帧,是最常见的帧类型。并通常直接被 IP 协议使用;
- Novell 的非标准 IEEE 802.3 帧变种;
- IEEE 802.2 逻辑链路控制(LLC) 帧;
- 子网接入协议(SNAP)帧。
Ethernet帧格式
以太网中大多数的数据帧使用的是 Ethernet II 格式:

Ethernet II 类型以太网帧的最小长度为 64 字节(6+6+2+46+4),最大长度为 1518 字节(6+6+2+1500+4)。其中: (1)前 12 字节分别标识出发送数据帧的源节点 MAC 地址和接收数据帧的目标节点 MAC 地址; (2)接下来的 2 个字节标识出以太网帧所携带的上层数据类型,如 16 进制数0x0800代表 IP 协议数据,16 进制数0x86dd代表 IPv6 协议数据,16 进制数0x809B代表 AppleTalk 协议数据,16 进制数0x8138代表 Novell 类型协议数据等; (3)在不定长的数据字段(Data):其长度是 46 至 1500 字节; (4)4 个字节的帧校验序列(Frame. Check Sequence,FCS),采用 32 位 CRC 循环冗余校验对从“目标 MAC 地址”字段到“数据”字段的数据进行校验。
IEEE 802.3 帧格式:

各字段说明如下: (1)D-MAC && S-Mac:分别表示标识目标地址和源地址。它们均为 6 个字节长。如果传输出去的目标地址第一位是 0,则表示这是一个普通地址;如果是 1, 则表示这是一个组地址。 (2)Length / Type :通常这个字段用于指定报文头后所接的数据类型。通常使用的值包括:IPv4(0x0800), IPv6(0x86DD), ARP(0x0806)。 而值0x8100代表一个 Q-tagged 帧(802.1q)。通常一个基础的以太网帧长为 1518 字节,但是更多的新标准把这个值扩展为 2000 字节。 (3)MAC Client Data: 数据主体,由 LLC、SNAP 及 Data 构成。最小长度为 48 字节(加上帧头 12 字节,CRC4 字节刚好 64 字节), 当数据主体小于 48 字节时,会添加 pad 字段。选取最小长度是出于冲突检测的考虑(CSMA/CD)。而数据字段最大长度为 1502 字节。
IEEE 802.2 LLC的头构成: (a)DSAP 目的服务访问字段,1 字节长,指明帧的目的上层协议类型; (b) ASAP 源服务访问字段,1 字节长,指明帧的源上层协议类型; (c) control 控制 1 字节或者 2 字节,长度要看被封装的 LLC 数据类型,是 LLC 数据报(类型1)1 字节,LLC 对话的一部分(类型2)2 字节。
类型1 表明是无连接的,不可靠的 LLC 数据报,控制字段用0x03指明;类型 2 表明是面向连接可靠的 LLC 会话。 (4)FCS(Frame Check Sequence):也叫 CRC(Cyclic Redundancy Check),CRC 是差错检测码,用来确定接收到的帧比特是否正确。
IEEE 802.3 SNAP
虽然 IEEE 802.3 是标准,但没有被业界采用。以太网 II 已成事实标准。于是 IEEE 802.3 扩展产生 IEEE 802.3 SNAP 来兼容以太网网头部协议,在 IEEE 802.2 LLC 头部后插入了 SNAP 头部。 SNAP 头部字段构成: (1)组织代码 3 字节长,指明维护接下来 2 字节意义的组织,对 IP 和 ARP,该字段被设置为0x00-00-00。 (2)以太网类型 如果组织代码为0x00-00-00,接下来 2 字节就是以太网类型 IP (0x0800)ARP(0x0806)。 因为增加了 LLC 头部的 3 字节和 SNAP 头部的 5 字节所以有效载荷比以太网 II 少 8 个字节。
捕获以太帧
确保浏览器的缓存为空(清除浏览器缓存:请选择工具—>清除最近历史记录),然后启动 Wireshark 数据包嗅探器。 打开 URL http://gaia.cs.umass.edu,停止 Wireshark 数据包捕获,找到您向gaia.cs.umass.edu的 HTTP GET 消息的数据包编号以及gaia.cs.umass.edu相应您的 HTTP回应。抓包结果截图如下:

帧类型

本实验是关于以太网和 ARP,不需要高层协议,所以我们更改 Wireshark 的“捕获数据包列表”窗口,以便它仅显示有关 IP 以下协议的信息。请选择 Analyze-> Enabled Protocols(分析-启用的协议)。 然后取消选中 IP 框并选择确定。结果的截图如下:

使用git将本地文件推送到远程仓库永久保存
评测通关后,需要推送文件到远程仓库,请在评测通关后,执行以下操作:
在桌面空白处点击鼠标右键,点击“在此打开终端”,通过代码cd /data/workspace/myshixun/,进入到实训代码仓库;
执行 git 命令:
git pull --unshallow origin master
2. git add .
3. git commit -m "Fisrt commit"
4. git push origin master
“Fisrt commit”相当于备注,可以是其它内容。这里需要输入 educoder 的用户名和密码,用户名输入 educoder 平台的登录用户名、手机号或者邮箱,密码输入 educoder 平台的登录密码,按照提示输入即可。
注意:密码输入过程中 Shell 窗口并不会显示输入的字符,正常输入后回车即可,注意不能使用退格键。
操作要求
双击打开桌面上的工作区文件夹workspace,再打开实训文件夹myshixun,并打开其中的文件message-1.txt,将查询的信息保存到文件message-1.txt。具体要求如下: (1)打开 Wireshark,加载实训文件夹中的ethernet-ethereal-trace-1文件,进行分析; (2)根据包含 HTTP GET 消息的以太网帧进行分析:以太网帧中 48 位目的地址是什么?填写到文件中; (3)打开左上角的terminal emulator窗口,通过ping gaia.cs.umass.edu命令查看gaia.cs.umass.edu的IP地址,在终端命令中输入查看arp命令:arp 查看是否有gaia.cs.umass.edu的MAC地址,如果有,将其MAC地址填写到文件中,如果没有,填写“否”到文件中; (4)Ethernet II 两字节的帧类型字段的十六进制值,填写到文件中; (5)保存文件并使用 git 将文件 message-1.txt 推送到远程仓库,此步骤不影响评测。

第2关:Ethernet包分析
任务描述
相关知识
为了完成本关任务,你需要掌握:
- Ethernet 包详细介绍;
- wireshark 下分析 Ethernet 包分析。
Ethernrt 包
Ethernet II 类型以太网的帧结构: 
报头: 8 个字节,前 7 个 0,1 交替的字节(10101010)用来同步接收站,一个1010101011字节指出帧的开始位置。报头提供接收器同步和帧定界服务。 目标地址: 6 个字节,单播、多播或者广播。单播地址也叫个人、物理、硬件或 MAC 地址。广播地址全为 1 , 0xFF FF FF FF。 源地址: 6 个字节。指出发送节点的单点广播地址。 以太类型: 2 个字节,用来指出以太网帧内所含的上层协议。即帧格式的协议标识符。对于 IP 报文来说,该字段值是0x0800。对于 ARP 信息来说,以太类型字段的值是0x0806。 有效负载:由一个上层协议的协议数据单元 PDU 构成。可以发送的最大有效负载是 1500 字节。由于以太网的冲突检测特性,有效负载至少是 46 个字节。如果上层协议数据单元长度少于 46 个字节,必须增补到 46 个字节。 帧检验序列:4 个字节。验证比特完整性。
展开数据包的详细信息
点击 Protocol Version 4 可以观察 Protocol Version 4 的内容,我们可以看到 IP 的源地址和目的地址,以及 IP 的版本是 4,并且其头的长度为 20 个字节。
User Datagram Protocol 可以观察 User Datagram Protocol 的内容,显示了源端口号,还有目的端口号,以及 UDP 协议的长度,和包头检验和的结果(checksum)。
Data 可以观察 Data 的内容,可以看出 Data 的长度为 49:
计算字节: 例如计算从以太帧的开始,一直到“GET”中的 ASCII G出现在以太网帧中为止,有 55 Byte(此时第一个字节为 1)。图中每两个十六进制字符代表一个字节(8 比特),FF = 11111111(2) = 8 Bit = 1 Byte。 
使用git将本地文件推送到远程仓库永久保存
评测通关后,需要推送文件到远程仓库,请在评测通关后,执行以下操作:
在桌面空白处点击鼠标右键,点击“在此打开终端”,通过代码cd /data/workspace/myshixun/,进入到实训代码仓库;
执行 git 命令:
git add .
2. git commit -m "Fisrt commit"
3. git push origin master
“Fisrt commit”相当于备注,可以是其它内容。这里需要输入 educoder 的用户名和密码,用户名输入 educoder 平台的登录用户名、手机号或者邮箱,密码输入 educoder 平台的登录密码,按照提示输入即可。
注意:密码输入过程中 Shell 窗口并不会显示输入的字符,正常输入后回车即可,注意不能使用退格键。
操作要求
双击打开桌面上的工作区文件夹workspace,再打开实训文件夹myshixun中的项目文件夹,并打开其中的文件message-2.txt,将查询的信息保存到文件message-2.txt。具体要求如下: (1)打开 Wireshark,加载实训文件夹中的ethernet-ethereal-trace-1文件,进行分析; (2)根据包含 HTTP GET 消息的以太网帧进行分析,回答以太网 48 位源地址是什么?是 gaia.cs.umass.edu 服务器的地址吗?填写到文件中; (3) 找到包含 HTTP响应消息的第一个字节的以太网帧的内容; (4) 从此以太网帧的开始,一直到“OK”中的 ASCII O出现在以太网帧中为止,有多少字节?填写到文件中; (5) 此以太网帧的源地址的值是多少?填写到文件中; (6) 此以太网帧以太网帧中的目的地址是什么?这是您的计算机的以太网地址吗(填“是”或“否)?填写到文件中; (7)保存文件并使用 git 将文件 message-2.txt 推送到远程仓库,此步骤不影响评测。

第3关:抓取ARP命令的包
任务描述
本关任务:抓取 ARP 命令的包。
相关知识
为了完成本关任务,你需要掌握:
- ARP 协议;
- ARP 命令。
由于 ARP 命令和 ARP 协议具有相同的名称,因此很容易混淆它们。但它们是不同的:ARP 命令用于查看和操作 ARP 缓存内容,而 ARP 协议定义了发送和接收的消息的格式和含义,并定义了对消息传输和接收所采取的操作。
ARP缓存
查看您计算机上 ARP 缓存的内容,在 Windows 下运行 CMD 窗口,输入命令arp,其详细指令如下图所示。 
执行指令arp -a,如下图所示。 
为了观察您的计算机发送和接收 ARP 消息,我们需要清除 ARP 缓存,否则您的计算机很可能在其缓存中找到所需的 IP-Ethernet 地址转换关系,因此不会发送 ARP 消息。执行删除命令后,再查看缓存内容,如下图所示。 
抓取ARP消息
清除 ARP 表的缓存,清除浏览器的缓存,启动 Wireshark 捕捉封包。打开 URL:www.educoder.net。如任务一,同样设置不显示 IP 和更高层协(选择Analyze-> Enabled Protocols)。 然后取消选中 IP 框,之后窗口内容应该如下:

使用git将本地文件推送到远程仓库永久保存
评测通关后,需要推送文件到远程仓库,请在评测通关后,执行以下操作:
在桌面空白处点击鼠标右键,点击“在此打开终端”,通过代码cd /data/workspace/myshixun/,进入到实训代码仓库;
执行 git 命令:
git add .
2. git commit -m "Fisrt commit"
3. git push origin master
“Fisrt commit”相当于备注,可以是其它内容。这里需要输入 educoder 的用户名和密码,用户名输入 educoder 平台的登录用户名、手机号或者邮箱,密码输入 educoder 平台的登录密码,按照提示输入即可。
注意:密码输入过程中 Shell 窗口并不会显示输入的字符,正常输入后回车即可,注意不能使用退格键。
操作要求
双击打开桌面上的工作区文件夹workspace,再打开实训文件夹myshixun,并打开其中的文件message-3.txt,将查询的信息保存到文件message-3.txt。具体要求如下: (1)在桌面空白处右击,打开终端,输入arp命令; (2)查看计算机 ARP 缓存的内容,每个列值的含义是什么?(用分号”;”隔开)写入文件中; (3)保存文件并使用 git 将文件 message-3.txt 推送到远程仓库,此步骤不影响评测。
第4关:ARP协议分析
任务描述
本关任务:对 ARP 协议进行分析。
相关知识
为了完成本关任务,你需要掌握:
- 如何抓取 ARP 命令的包;
- 协议的简单分析。
ARP报文
报文格式 
抓取APR命令的包
在任务三的基础上,清除你的 ARP 缓存,接下来,确保浏览器的缓存是空的。打开URL:http://gaia.cs.umass.edu/wireshark-labs/HTTP-ethereal-lab-file3.html。同样设置不显示 IP 和更高层协议,您现在 Wireshark 窗口应该如下所示:

简单的ARP协议分析
在 ARP 中发送了 2 种不同的报文,分别是,从源到目的地和从目的地到源。发送方是发送报文,目标方是接收报文。发送方和目标方的身份对每个报文都不一样,根据具体的情况而定:
对发送方来说: 请求:发送方是源,目标方是目的地 回答:发送方是目的地,目标方是源 发送方硬件地址:ARP 报文中发送方的第 2 层地址 发送方协议地址:ARP 报文中发送方的第 3 层地址
对目标方来说: 请求:目标方是源,发送方是目的地 回答:目标方是目的地,发送方是源 目标方的硬件地址:ARP 报文中目标方的第 2 层地址 目标方的协议地址:ARP 报文中目标方的第 3 层地址
展开 Etnernet 的头部,我们可以看到包含 ARP 请求消息的以太网帧中源地址和目标地址的十六进制:
太网帧上层协议:
找到 ARP 的操作码(Opcode)我们可以看到操作码字段的值是 1,也可计算出 ARP 操作码字段开始从以太网帧的最开始有15+6=21个字节: 
而 ARP 消息包含发送方的 IP 地址: 
使用git将本地文件推送到远程仓库永久保存
评测通关后,需要推送文件到远程仓库,请在评测通关后,执行以下操作:
在桌面空白处点击鼠标右键,点击“在此打开终端”,通过代码cd /data/workspace/myshixun/,进入到实训代码仓库;
执行 git 命令:
git add .
2. git commit -m "Fisrt commit"
3. git push origin master
“Fisrt commit”相当于备注,可以是其它内容。这里需要输入 educoder 的用户名和密码,用户名输入 educoder 平台的登录用户名、手机号或者邮箱,密码输入 educoder 平台的登录密码,按照提示输入即可。
注意:密码输入过程中 Shell 窗口并不会显示输入的字符,正常输入后回车即可,注意不能使用退格键。
操作要求
双击打开桌面上的工作区文件夹workspace,再打开实训文件夹myshixun,并打开其中的文件message-4.txt,将查询的信息保存到文件message-4.txt。然后进行如下操作: (1)打开 Wireshark ,加载实训文件夹中的ethernet-ethereal-trace-1文件,进行分析; (2)筛选 ARP 数据报,并找到 request(请求)消息; (3)查看包含 ARP 请求消息的以太网帧中源地址和目标地址的十六进制值是什么?填写到文件中; (4)请问在进行 ARP 请求的以太网帧的 ARP 负载部分中,操作码字段的值是多少?从操作码段开始以太网帧的最开始有多少字节?填写到文件中; (5)ARP 消息是否包含发送方的 IP 地址?(填写”是/否”),填写到文件中; (6)筛选 ARP 数据报,并找到 reply(回复)消息; (7)包含 ARP 回复消息的以太网帧中的源地址和目标地址的十六进制值是多少?填写到文件中; (8) 保存文件并使用 git 将文件 message-4.txt 推送到远程仓库,此步骤不影响评测。

