计算机网络与通信课程实验报告

 

实验二:数据帧和IP包分析

 

 

2019年  11 月  11  日

一、实验目的

  • 捕获和分析网络数据
  • 掌握以太网MAC帧、 802.11数据帧和IPv4数据包的构成,了解字段含义
  • 掌握ICMP和ARP协议的请求/响应机理
  • 掌握ping、arp和tracert指令

二、实验内容

1. 学习Wireshark软件的基本使用 

       Wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

       Wireshark 中的数据包过滤有两种,一种是显示过滤,一种是捕获过滤。

       显示过滤是针对已捕获的报文,过滤出符合过滤规则的报文,可以通过过滤器表达式进行筛选过滤,将选中信息显示,其他信息隐藏。显示过滤器在捕获开始前后都可以设置。

 

而捕获过滤是提前设置好过滤规则,只捕获符合过滤规则的报文。捕获过滤器在开始捕获数据前设置,捕获过程中无法设置。

 

将只捕获得到该IP发送的数据

 

2. 捕获分析以太网MAC帧和IPv4数据包

2.1 实施ping命令

本机连接着校园网,在校园网内ping www.xmu.edu.cn。捕获如下数据包。可以很清楚的看到,主机发送了4个请求帧,同时接受到了来自厦大主页的4个应答帧。但由于厦大主页已经使用IPv6,不方便后续数据包的研究。在ping的时候指定使用IPv4。

 

使用ping -4 IP/域名地址 ,可以使用IPv4访问。得到了如下图的结果。其中,发送一个请求帧后可以收到一个应答帧,请求帧的大小与应答帧大小一致。

图中混入的一个ICMPv6包,是路由器公告(RouterAdvertisement,简称RA)。路由器定期发送RA报文,当收到路由器回应的RA报文后,就会根据报文中的IP前缀信息,自动生成IP地址,并将网关指向该路由器的“链路本地地址”。从而实现“无状态地址自动配置”(Stateless Address Autoconfiguration,简称SLAAC)

 

 

       在校园网中访问外部网,ping www.baidu.com ,此次发现请求帧大小与应答帧大小不一致

 

 

访问失败的情况下,可以发现请求帧,都是没有应答帧。稍后分析该请求包。

 

 

 

       选取前面圈出的一个ICMP数据包进行分析,这个包是一个请求帧,数据量为6

       首先我们可以分析第一行,介绍了该数据包的一些具体信息

 

 

前14位是Ethernet II中的内容,前6字节中包含目的MAC地址;中间6字节包含源MAC地址;最后2字节为“类型”字段

 

这为IP数据报的首部。

前4位为版本号,这个报为第4版;

其后4位是首部长度,本报首部长度为20字节;(表示几个4字节)

区分服务(Differentiated services)DS,占1字节。

IP报总长度,占4位,本数据报总长度为34字节

标识,占16位

标志,占3位,

片偏移,占13位,本请求帧没有分片,所以片偏移量为0

生存时间,占8位,表明数据报在互联网中至多可经过多少个路由器。本数据报TTL为64跳

协议,占8位,表明此数据报携带的数据是使用何种协议,本数据报使用ICMP

首部检验和,占16位,

源地址,占32位,

目的地址,占32位

 

此部分是ICMP报文。

前8位是类型,确定ICMP报类型,本报为8,是询问报文,具体是回送(Echo)请求报文,是由主机或路由器向一个特定的目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。

代码,占8位

检验和,占16位

而后是Identifier字段,占16位;sequence 字段,占16位。两者一个是身份验证,一个是时序顺序验证,是ICMP询问报文的内容。

最后为数据部分,由于没有分片,没有什么好说的。

wireshark考虑到window系统与Linux系统发出的ping报文(主要指ping应用字段而非包含IP头的ping包)的字节顺序不一样(windows为LE:little-endian byte order,Linux为BE:big-endian),为了体现wireshark的易用性,开发者将其分别显示出来。

 

再分析该请求帧对应的应答帧。

 

 

我们发现,这一部分的结构与请求帧是一样的,应答帧大小与请求帧大小一致。但在最后添加了填充块,有12字节,这也是应答帧比请求帧大12字节的原因。

 

 

ICMP首部中,类型变为0,是Echo Reply——回显应答(Ping应答)

 

关于Ethernet II 有填充的解释:

是MAC帧的原因,MAC帧的最短长度位64字节,除去18字节的首部和尾部,数据字段的最短长度应该为46字节。而我们发送的数据报长度仅为34字节,所以MAC帧会在尾部填充00来满足字节数要求。

其实请求帧也是这样的,但由于wireshark的机理问题,捕获的请求帧是46字节,但是其实在数据链路层传递的包是60字节。

 

最后分析MAC帧与数据包的关系。

 

MAC帧的长度是 IP数据报的长度+18字节,IP数据报是MAC帧的数据。在MAC帧中,首先填入目的地址,然后填入源地址,再填入其他内容;而IP报首部中,地址在首部的最后,首先是源地址,然后才是目的地址

分析原因,MAC帧在数据链路层中传递,首先填入目的地址,可以方便路由器进行转发,而IP地址是虚拟地址,仅在IP层有效,是作为数据填入MAC帧,不需要频繁访问,而相对来说,更重要的是根据其他条件判断报的可信性,所以把那些内容放在前面。

 

关于ICMP分片的问题。经过探索,我们发现一个IP数据报的长度最长为1500字节,但是由于包含至少20字节的头部,所以ICMP报的长度最长为1480字节。ICMP报的头部至少为8字节,因此,一个未分片的ICMP报数据部分最长为1472字节。当数据长度大于1472字节时,会进行分片。

 

 

 

分析:请求帧和应答帧大小一致,正好在临界的大小

 

 

分析:可以发现已经发生分片,1473分成了两片,ICMP数据报的总长应该为1473+8=1481,分成了两部分,1480+1;IP数据报的头部片偏移指示数据报的重组。第一个数据报data有 1480的长度,其实是 8+1472;第二个数据报只有1个字节。与我们分析的一致。

       2.2 实施tracert命令

       连接手机热点,使用tracert跟踪。Tracert 的IP地址是我手机的IP地址,抓取的数据包如下图:

 

 

在校园网内追踪厦大主页,追踪结果见下图

 

 

在校园网内追踪新浪网主页,追踪结果见下图。由此可以得到如下结果

 

由此可以确定如下的事情:

(1) 我电脑主机所在的局域网的默认网关是10.30.160.1(这个后面有用)

(2) 我画出来的拓扑图(有点简单哈哈哈哈)

 

(3) tracert 原理:从源主机向目的主机发送一连串的IP数据报,封装的是无法交付的UDP用户数据报,将第n个数据报的TTL设为n,当跳转到第n个主机没有找到目的主机地址时,由于数据报中是无法交付的UDP,将发生ICMP时间超过差错报告报文。

 

可以看到发送的ICMP报的TTL在递增

 

可以发现tracert没有response,而ping 成功时可以得到response frame

 

分析ICMP差错报:

 

发现TTL为255

 

(1)类型为11,表示ICMP时间超过报文,产生的原因是当路由器收到生存时间为0 的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点不能在规定时间内收到一个数据报所有数据报片时,将收到的所有报片丢弃,并向源点发送时间超过报文。

(2)前8字节后,是IP数据报首部,与最开始的IP数据报的区别是,每个的TTL都是1,因为该路由器收到的IP数据报的TTL已经在跳转过程中减少了。

 

 

       2.3 实施arp命令,观察分析ARP协议工作原理

(1)使用手机热点,首先 arp –d,然后 ping 局域网内的另外一主机

 

 

 

Ping局域网外的的另一主机,由上一问tracert知,首先会发送给默认网关,所以是搜索默认网关的ARP

 

 

 

 

 

 

分析一对ARP报文,首先分析请求报

 

 

 

首先仍然是MAC帧,目的地址,源地址,然后指出报的格式是ARP报

 

硬件类型占2字节,

数据报格式是IPv4,占2字节

硬件类型占1字节

IP类型占1字节

ARP类型,占2字节

然后是发送者的MAC地址(),IP地址

 

ARP应答帧,MAC帧的首部没变化,ARP报中,ARP类型为0002,为reply

 

 

分析收到的所有ARP,

 

 

ping同一局域网的计算机和局域网外的计算机,产生的ARP请求是不同,局域网内部是直接广播询问该主机的MAC地址,而局域网外的是广播询问局域网内的默认网关的MAC地址。原因就在于,同一局域网内部,路由器可以直接转发数据,而在不同的局域网中,必须通过默认网关进行跳转,然后找到目的主机。

 

3. 捕获和分析802.11数据帧

进入kali linux 以后,运行如下指令。Kali linux 中自带wireshark,启动wirshark,选择mon0,进行抓包,发现可以得到802.11报了。

 

 

wlan.fc.type == 2,筛选出数据报(Data frame),观察802.11报的首部。

 

 

前2字节为 帧控制,展开后可以很清楚地看清这16位每一位的含义

第一字节头两位是版本号,其后两位是类型,再后四位是子类型。

第二字节头两位是去往和来自AP的控制位,本报文是去往AP;其后一位是更多分片标志,本报文是0,表示是最后一个分片;其他信息也很好理解。

 

对应关系如图所示(有些乱)

可以发现按顺序有四个地址,由于本报是去往AP的,所以地址顺序应该是 AP地址,源地址,目的地址和自组网络地址。

 

4. wireshark功能拓展

(1) 协议分级

 

 

协议分级可以逐级清晰地观察各种协议的占比,字节大小,速率,结束分组等等内容。

(2)网络节点统计

 

 

可以观察到 各个MAC地址被捕获的各类数据报,按类型统计好,可以查看包括数量、大小等信息。

(3)会话统计

 

 

按照协议类型分好,可以看见各组地址之间的会话数量、数据报数量等等,选择右下角conversation类型还可以选择自己所需要的会话类型。

 

三、实验心得

通过本次实验,我对网络层的各种报有了非常深刻的印象与理解,虽然对每个数据报进行解读花费了很多时间,但是感觉收获确实很大,尤其是对一些由异常现象的情况的分析,比如当ping数据较少时,MAC帧会进行填充;又比如在校园网使用本地连接,会出现PPP报的情况。发现问题没有让这些问题放掉,并且在老师的指导帮助下解决了这些问题,让我对计算机网络有了更清楚的理解,尤其是数据链路层与网络层的联系,感觉收获颇丰。