华东师范大学软件工程学院实验报告二
一、实验目的
- 学会通过Wireshark获取以太网的帧
- 掌握以太网帧的结构
- 分析以太网地址范围
- 分析以太网的广播帧
二、实验内容与实验步骤
实验内容一:
1.打开windows的命令行,在里面输入ping www.baidu.com.
2. 启动Wireshark,在菜单栏的捕获->选项中进行设置,选择已连接的以太网,设置捕获过滤器为icmp,将混杂模式设为关闭,勾选 enable MAC name resolution.然后开始捕获。
3.点开命令行,重新输入ping www.baidu.com.
4.打开Wireshark, 停止捕获。
实验内容二
画一个图,显示你的电脑的相对位置,路由器和远程服务器。标签你的电脑和路由器与以太网地址。标签你的计算机和远程服务器的IP地址。显示以太网和互联网的其他图上。
实验内容三
1.以太网广播帧的地址是什么,以标准的形式写在Wireshark上显示?
2.哪几个比特位的以太网地址是用来确定是单播或多播/广播吗?
三、实验环境
- Wireshark v3.0.6
- Windows 10
四、实验过程与分析
0.首先做实验二之前要知道什么是ICMP协议。ICMP是网络层的协议,虽然我们没有讲到网络层,但是彭老师当时在讲TCP/IP模型时讲的一句话,我还记得很清楚:网络层只有IP这一个协议,很多人就希望通过其他的协议去完善它。果然这样就有了ICMP协议。
ICMP协议是IP协议的一个完善。通过TCP协议的三次招手,可以搭建起一个网络,但这之后往往需要先进行一个简单的测试,来验证网络是否畅通。可惜的是IP协议并不提供可靠传输;如果传输的时候出了问题,IP协议并不能发现问题并改正;所以基于IP协议的ICMP协议,Internet Control Message Protocol,互联网控制报文协议,应运而生。ICMP协议,一方面,可以确认IP包是否成功到达目标地址;另一方面,可以通知用户发送过程中IP包被丢弃的原因。
ICMP协议与IP协议有着紧密的联系,这不仅是因为,ICMP协议是建立在IPv4协议之上的,还因为ICMP协议的报文是包含在IP协议的报文之内的。IP协议的报头要在ICMP报文的最前面。ICMP大概分为两类报文:一类是通知出错原因;一类是用于诊断查询。两者格式如上图所示,包括:
类型,1 byte,标识ICMP报文类型。1~127为差错报文,>128为信息报文
代码,1 byte,标识ICMP报文代码。与类型字段一起共同标识了ICMP报文的详细类型
校验和,2 bytes,对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错
1.打开windows的命令行,在里面输入ping www.baidu.com
了解了ICMP协议后,实验的第一步是ping命令,这个命令之前早已了解过。它的功能就是看当前主机和ping之后输入对的网址之间是否网络通畅。很明显,这个就一定要用到ICMP协议:ping命令的实现过程用到了相应请求(类型字段值为8)和应答(类型字段值为0)这两个ICMP报文。
用户端向一个节点发送一个类型字段值为8的ICMP报文。如果途中没有异常,即没有被路由丢弃,目标不回应ICMP或者传输失败;则目标返回类型字段值为0的ICMP报文,说明这台主机存在;例如下面的这个ping www.baidu.com。
但是ping命令的工作过程并没有原理这么简单。在局部的以太网内,ping命令的流程大致如Exp2.ppt所示
用户端去ping服务端,要在ICMP之外封装二层报文,内层是IP,外层是MAC。用户端会先查自己的MAC地址表,如果没有服务端的MAC地址,就会向外发送一个ARP广播包。这样局域网内的交换机就会收到这个报文。交换机有学习MAC地址的功能,首先它会检索自己有没有保存服务端的MAC。如果有,就返回给主机A;如果没有,就会向所有端口发送ARP广播;其它主机收到后,若是要找的计算机就会用同样的方式响应,不是就不理会。(顺带一提,如果服务端不在局域网内,用户端就会找网关转发。要注意的是网关和交换机一样有学习性。网关先发送一个ARP广播,学到网关的MAC,再发封装ICMP报文给网关路由器,知道找到用户端,过程与同一网段内的情况类似)
这样可以发现,ping命令最初是建立在局域网基础上的,这就ping命令的传送绕不开一个基础的局域网技术,Ethernet以太网。传输ping命令就是一个此次实验要抓取的以太网的帧。
2. 启动Wireshark,在菜单栏的捕获->选项中进行设置,选择已连接的以太网,设置捕获过滤器为icmp,将混杂模式设为关闭,勾选 enable MAC name resolution.然后开始捕获。
3.点开命令行,重新输入ping www.baidu.com.
4.打开Wireshark, 停止捕获。
以下是得到的抓包的结果:
接下来就是分析电脑、路由器和远程服务器在计算机网络中的相对位置,尽可能多的去找到它们的MAC地址和IP地址。
#这里先简单介绍一下:
MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开。MAC地址应用数据链路层。数据链路层协议可以通过MAC地址使数据从一个节点传递到相同链路的另一个节点上。MAC地址由网络设备制造商生产时写在硬件内部,绝对唯一,于网络无关,不可变的。
IP地址为32位,由用点分隔开的4个8八位组构成,如192.168.0.1就是一个IP地址,这种写法叫点分十进制格式。IP地址应用于网络层。网络层协议使数据可以从一个网络传递到另一个网络上。例如,ARP根据目的IP地址,找到中间节点的MAC地址,通过中间节点传送,从而最终到达目的网络。IP地址由网络地址和主机地址两部分组成,分配位数也不一样,只是相对唯一。
#ICMP协议
以太网数据帧结构:
我们来观察以下第一个ICMP的网络包:
但是矛盾的是,数据包的目标IP地址是www.baidu.com的IP地址,但是MAC地址竟然是路由器的MAC地址
其实也没什么好奇怪的。因为目标IP地址给定后,用户电脑不知道目标的MAC地址,只能让交换器去找。但是毕竟在局域网内,没有百度的服务器,所以检索不到百度的MAC地址,只能让我现在充当路由器,或者也应该算是网关的手机来找。如此它的MAC地址就成了目标的MAC地址。所以,在这个过程中我们能标记出的就是如下内容,而这也恰恰和助教在Exp2.ppt里面要求我们找的内容是一致的。
最后助教在ppt上还留了这样一个问题:分析以太网的广播帧。
(1)Wireshark 中以太网广播帧的地址:
Broadcast(ff:ff:ff:ff:ff:ff)
(2)以太网地址中哪个比特位是用来确定是单播或多播/广播?
(每台计算机都有一个独一无二的mac地址,其中的前8Byte是由出产厂商的编码定义的,后8Byte是由各个出产厂商自己内部定义的)
如何区分是组播、单播还是广播?
如果是广播—>全1 ,即16进制为fffffffffffff
如果是单播–>全0 ,即16进制为000000000000
其他的情况–>组播,哪些位为1,就发给那一台PC
所以,MAC 地址左数第八位如果是 1,代表是组播/广播,第八位如果是 0,代表是单播。
#使用过滤器“llc”分析 IEEE 802.3 数据帧。
五、实验结果总结
实验之初,首先了解了网络层中的ICMP协议,互联网控制信息协议;知道了它的功能和部分实现。
实验之前,还了解了利用ICMP来检查链路是否通畅的ping命令的工作流程和原理。加深了对于网关、IP地址、MAC地址等的理解。
本次实验首先通过一个ping命令完成了对于一个局域网结构的大概了解。
最后,通过查阅资料结合实践,整理并推测出以太网的广播帧的特点,完成了此次实验。
六、附录
本次实验报告内容参考Exp2.ppt以及:
9. https://blog.csdn.net/baidu_37964071/article/details/80514340
10. https://blog.csdn.net/f2006116/article/details/51159895
11. https://zhidao.baidu.com/question/1114351012358768339.html
12. https://blog.csdn.net/qq_41721618/article/details/96018466