北邮计算机网络实验二协议数据的捕获和解析.docx
《北邮计算机网络实验二协议数据的捕获和解析.docx》由会员分享,可在线阅读,更多相关《北邮计算机网络实验二协议数据的捕获和解析.docx(42页珍藏版)》请在冰豆网上搜索。
北邮计算机网络实验二协议数据的捕获和解析
实验二:
协议数据的捕获和解析
作者:
北邮
学院(系):
计算机学院
专业:
班级:
2009211307
指导教师:
目录
一、实验准备3
1.1.实验目的3
1.2.实验设备环境3
1.3.实验内容3
1.4.实验原理3
二、实验步骤7
2.1.准备工作7
2.2.数据捕获7
2.3.协议分析8
三、实验结果分析8
3.1.IP协议8
3.2.ICMP协议16
3.3.DHCP协议20
3.4.ARP协议33
3.5.观察网络中的其他分组36
三、实验心得38
四、参考文献38
一、实验准备
1.1.实验目的
<1>掌握具体的包格式
<2>进一步从网络中熟悉和了解计算机网络中现存的协议对应的包格式
<3>通过本次实验了解计算机上网的工作过程,学习各种网络层分组的格式及其作用,理解长度大于1500字节IP数据组分片传输的结构。
<4>掌握各种分组在网络通信中的应用,了解整个上网的工作过程。
1.2.实验设备环境
<1>1台装有MSWindows系列操作系统的pc机
<2>PC机器能够连接到Internet、安装能运行的WireShark软件
1.3.实验内容
本次实验主要包含下列内容:
<1>使用Wireshark软件捕获在使用ping命令时产生的ICMP消息;
<2>分析网络层IP包头格式,理解各字段的作用,对于分段和校验和进行验证;
<3>使用Wireshark软件捕获在使用ARP消息,分析其消息格式,理解其工作原理;
<4>使用Wireshark捕获DHCP消息,分析其消息序列,理解DHCP的功能和操作原理。
通过本实验深入理解分层体系结构,理解和掌握TCP/IP协议栈的代表协议——IP、
UDP、ICMP、ARP和DHCP协议的要点。
1.4.实验原理
<1>根据网络中的数据分层原理,在计算机网络中由于大都是使用IP进行网络互联,因此包的格式是有规律的,其中在当前公网中路由器支持的包也为IP格式包,因此我们通过分析抓取的IP包就可以得到包的部分信息
<2>其中IPV4的包格式如下图示:
<3>ICMP包在网络的相关控制和调试方面启到了关键性作用,因此对ICMP包格式进行过滤获取是很重要的,ICMP包将自身包装一层IP头,然后在网络中间进行传输:
其中ICMP包格式如下
其中类型字段表示ICMP报文的类型;代码字段是为了进一步区分某种类型的几种不同情况,类型(Type)与代码(Code)的具体描述如下:
校验和字段用来检验整个ICMP报文。
接着的4个字节的内容与ICMP的类型有关。
再后面是数据字段,其长度取决于ICMP的类型。
<4>DHCP报文
通过查阅RFC2131可以得到数据的报文结构,如下(括号里的数字表示字段的长度,单位是字节):
DHCP报文中的Options字段可以用来存放某些普通协议中没有定义的控制信息和参数。
如果用户在DHCP服务器端配置了Options,DHCP客户端在申请IP地址的时候,会通过服务器端回应的DHCP报文获得Options字段中的配置信息。
其他字段会在后面分析。
<5>ARP报文结构:
硬件类型字段:
指明了发送方想知道的硬件接口类型,以太网的值为1;
协议类型字段:
指明了发送方提供的高层协议类型,IP为0800(16进制);
硬件地址长度和协议长度:
指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;
操作字段:
用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;
发送方的硬件地址(0-2字节):
源主机硬件地址的前3个字节;
发送方的硬件地址(3-5字节):
源主机硬件地址的后3个字节;
发送方IP(0-1字节):
源主机硬件地址的前2个字节;
<6>以太网帧数据最长为1500字节,以太网广泛应用在各种网络中,而以太网格式如下:
先导域
源地址
目的地址
长度
数据
校验和
二、实验步骤
2.1.准备工作
1.下载Wireshark软件并了解其功能和使用方法。
2.确保计算机已经连接到网络。
3.启动Wireshark1,设置捕获接口(Interface)为本机网卡,选中混杂模式(promiscuousmode)捕获选项,设置合适的捕获过滤器(CaptureFilter):
对于ping命令,设置过滤器为icmp
对于DHCP消息,设置过滤器为udpport67
对于ARP消息,设置过滤器为arp
4.开始捕获。
2.2.数据捕获
A.捕获ICMP协议数据
1.运行ping命令(例如:
c>ping192.168.0.1),远程主机地址可以是本机地址、网关路由器地址,也可以是域名(如)。
将捕获到的数据保存为文件。
2.使用Windows中ping命令的-l选项(例如:
c>ping-l8000192.168.0.1),制作大于8000字节的IP包并发送,捕获后分析其分段传输的包结构。
B.捕获DHCP协议消息
1.使用ipconfig命令释放计算机的IP地址(c>ipconfig-release);
2.使用ipconfig命令重新申请IP地址(c>ipconfig-renew)。
此时wireshark窗口中可以捕获到完整的DHCP地址分配的流程,将捕获到的数据保存为文件。
C.捕获ARP协议数据
采用与7.2.2相同的方法释放IP地址并重新申请,在wireshark窗口中可以捕获到ARP请求和响应消息,保存为文件。
2.3.协议分析
运行Wireshark软件,打开捕获数据文件,完成下列分析工作:
1.IP包头分析:
对于采用ping命令-l选项捕获的ICMP消息,对承载ICMP消息的IP包进行分析,记录包头各字段的值,对照讲义和教材分析各字段的功能,并对于校验和和分段进行验证;
2.ICMP消息分析:
记录并分析ICMP消息中分析各字段的功能;
3.DHCP消息分析:
针对一次地址分配过程(TransactionID相同的4个消息),分析其通信过程,画出地址分配的消息序列图,并记录采用DHCP协议配置的各个参数。
4.ARP消息分析:
对照讲义理解ARP的操作过程,记录并分析消息中各字段的功能。
三、实验结果分析
3.1.IP协议
运行ping–l8000
制作一个8000字节的IP包并发送,捕获后分析IP分段传输的包结构。
目的地址为。
制作包如下:
抓包过滤得到的信息如下:
3.1.1.捕获IP包分析包头字段及IP包分段原理:
链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。
如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分段(fragmentation)操作,使每一片的长度都小于或等于MTU。
由上图可知8000字节的IP包被分成6个分组发送。
IP首部包含了分片和重组所需的信息:
①16位的标识(Identification):
发送端发送的IP数据包标识字段都是一个唯一值,该值在分片时被复制到每个片中。
②3位的标志字段分别是:
R:
保留未用。
DF:
Don'tFragment,“不分段”位,如果将这一比特置1,IP层将不对数据报进行分片。
MF:
MoreFragment,“更多的段”,除了最后一片外,其他每个组成数据报的片都要把该比特置1。
FragmentOffset:
该片偏移原始数据包开始处的位置。
偏移的字节数是该值乘以8。
另外,当数据报被分段后,每个片的总长度值要改为该片段的长度值。
下面通过对这六个IP分组包头的分析,验证分段原理。
其中IP分组1为:
由上图可知:
字段报文(16进制)备注
版本4IPV4
包头长度5报头长20字节
服务类型00正常时延,正常吞吐量,
正常可靠性
总长度05dc分组长度1500字节
标识f99b序列号63899
标志01MF=1,DF=0,允许分片
此片不是最后一片
偏移值00偏移量为0
生存周期40每跳生存周期为64s
协议01携带的数据来自ICMP协议
头部校验和faa6IP头部校验和为faa6
源地址76e5dob6源地址为118.229.208.182
目的地址d34445fe目的地址为211.68.69.254
上述为第一片,由于数据最长为1500字节,而IP头占据20字节,因此实
际的数据只有1480字节,那么分组2偏移应该为1480,实际我们采集到的
IP分组2为:
由上图可知:
字段报文(16进制)备注
版本4IPV4
包头长度5报头长20字节
服务类型00正常时延,正常吞吐量,
正常可靠性
总长度05dc分组长度1500字节
标识f99b序列号63899
标志01MF=1,DF=0,允许分片
此片不是最后一片
偏移值20b9偏移量为1480
生存周期40每跳生存周期为64s
协议01携带的数据来自ICMP协议
头部校验和f9edIP头部校验和为f9ed
源地址76e5dob6源地址为118.229.208.182
目的地址d34445fe目的地址为211.68.69.254
上述为第2片,由于数据最长为1500字节,而IP头占据20字节,因此实际
的数据只有1480字节,那么分组3偏移应该为1480*2=2960,实际我们采集到的
IP分组3为:
由上图可知:
字段报文(16进制)备注
版本4IPV4
包头长度5报头长20字节
服务类型00正常时延,正常吞吐量,
正常可靠性
总长度05dc分组长度1500字节
标识f99b序列号63899
标志01MF=1,DF=0,允许分片
此片不是最后一片
偏移值2172偏移量为2960
生存周期40每跳生存周期为64s
协议01携带的数据来自ICMP协议
头部校验和f934IP头部校验和为f934
源地址76e5dob6源地址为118.229.208.182
目的地址d34445fe目的地址为211.68.69.254
上述为第3片,由于数据最长为1500字节,而IP头占据20字节,因此实际
的数据只有1480字节,那么分组4偏移应该为1480*3=4440,实际我们采集到的
IP分组4为:
由上图可知:
字段报文(16进制)备注
版本4IPV4
包头长度5报头长20字节
服务类型00正常时延,正常吞吐量,
正常可靠性
总长度05dc分组长度1500字节
标识f99b序列号63899
标志01MF=1,DF=0,允许分片
此片不是最后一片
偏移值222b偏移量为4440
生存周期40每跳生存周期为64s
协议01携带的数据来自ICMP协议
头部校验和f87bIP头部校验和为f87b
源地址76e5dob6源地址为118.229.208.182
目的地址d34445fe目的地址为211.68.69.254
上述为第4片,由于数据最长为1500字节,而IP头占据20字节,因此实际
的数据只有1480字节,那么分组5偏移应该为1480*4=5920,实际我们采集到的
IP分组5为:
由上图可知
字段报文(16进制)备注
版本4IPV4
包头长度5报头长20字节
服务类型00正常时延,正常吞吐量,
正常可靠性
总长度05dc分组长度1500字节
标识f99b序列号63899
标志01MF=1,DF=0,允许分片
此片不是最后一片
偏移值22e4偏移量为5920
生存周期40每跳生存周期为64s
协议01携带的数据来自ICMP协议
头部校验和f7c2IP头部校验和为f7c2
源地址76e5dob6源地址为118.229.208.182
目的地址d34445fe目的地址为211.68.69.254
上述为第5片,由于数据最长为1500字节,而IP头占据20字节,因此实际
的数据只有1480字节,那么分组6偏移应该为1480*5=7400,实际我们采集到的
IP分组6(最后1包)为:
由上图可知:
字段报文(16进制)备注
版本4IPV4
包头长度5报头长20字节
服务类型00正常时延,正常吞吐量,
正常可靠性
总长度0274分组长度628字节
标识f99b序列号63899
标志00MF=0,DF=0,允许分片
此片是最后一片
偏移值039d偏移量为7400
生存周期40每跳生存周期为64s
协议01携带的数据来自ICMP协议
头部校验和1a72IP头部校验和为1a72
源地址76e5dob6源地址为118.229.208.182
目的地址d34445fe目的地址为211.68.69.254
此包长度为628,由于为ICMP包,占用了8个字节,而实际数据为620字节,
则数据总长度为1480*5+620=8000字节,由数据解析获得验证如下表,则有:
3.1.2.IP包头校验和的校验原理:
首部检验和字段是根据IP首部计算的检验和码。
它不对首部后面的数据进行计算。
ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。
为了计算一份数据报的IP检验和,首先把检验和字段置为0。
然后,对首部中每个16bit进行二进制反码求和(整个首部看成是由一串16bit的字组成),结果存在检验和字段中。
当收到一份IP数据报后,同样对首部中每个16bit进行二进制反码的求和。
由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。
如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。
但是不生成差错报文,由上层去发现丢失的数据报并进行重传。
需要说明的是,IP协议仅计算IP包头的校验和,而不计算数据区的校验和。
这样做是为了减少路由器的计算量,同时也让上层协议可以为数据提供自己的校验和计算方法。
下面描述捕获的IP包头校验和的计算过程,以IP分组6为例:
IP包头为:
45000274f99b039d40011a7276e5d0b6d34445fe
计算结果为全1,故校验和正确。
3.2.ICMP协议
ICMP是(InternetControlMessageProtocol)Internet控制报文协议。
它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程,检测如下:
3.2.1.获得本机IP地址
3.2.2.运行Ping命令
Ping
由以上截图可知,ping的网络和本机不再同一网段内,在本机想得到mac地址的时候,将直接交由路由处理。
在这里ping域名,那么先要通过DNS将域名解析为ip地址方能通信。
可使用ipconfig/all命令查到DNS服务器地址:
Ping对应的ICMP包如下
3.2.3分析ICMP各字段功能
上图即为捕获到的ICMP协议包的信息。
ICMP包将自身包装一层IP头,然后在网络中间进行传输:
其中ICMP包格式如下:
类型(8位)
代码(8位)
校验和(8位)
类型或者代码
其中类型字段表示ICMP报文的类型;代码字段是为了进一步区分某种类型的几种不同情况;校验和字段用来检验整个ICMP报文。
接着的4个字节的内容与ICMP的类型有关。
再后面是数据字段,其长度取决于ICMP的类型。
3.3.DHCP协议
动态主机设置协议(DynamicHostConfigurationProtocol,DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:
给内部网络或网络服务供应商自动分配IP地址给用户给内部网络管理员作为对所有计算机作中央管理的手段。
使用udpport67来过滤DHCP协议:
3.3.1使用ipconfig命令释放计算机的IP地址(c>ipconfig-release)
3.3.2.使用ipconfig命令重新申请IP地址(c>ipconfig-renew)
3.3.3.DHCP功能及报文格式
a)DHCP的功能:
DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 BOOTP,它工作在OSI的应用层,是一种帮助计算机从指定的DHCP服务器获取它们的配置信息的自举协议。
DHCP使用客户端/服务器模式,请求配置信息的计算机叫做DHCP客户端,而提供信息的叫做DHCP的服务器。
DHCP为客户端分配地址的方法有三种:
手工配置、自动配置、动态配置。
DHCP最重要的功能就是动态分配。
除了IP地址,DHCP分组还为客户端提供其他的配置信息,比如子网掩码。
这使得客户端无需用户动手就能自动配置连接网络。
b)DHCP的的报文格式
OP
(1)
Htype
(1)
Hlen
(1)
Hops
(1)
TransactionID(4)
Seconds
(2)
Flags
(2)
Ciaddr(4)
Yiaddr(4)
Siaddr(4)
Giaddr(4)
Chaddr(16)
Sname(64)
File(128)
Options(variable)
OP:
若是client送给server的封包,设为1,反向为2;
Htype:
硬件类别,ethernet为1;
Hlen:
硬件长度,ethernet为6;
Hops:
若数据包需经过router传送,每站加1,若在同一网内,为0;
TransactionID:
事务ID,是个随机数,用于客户和服务器之间匹配请求和相应消息;
Seconds:
由用户指定的时间,指开始地址获取和更新进行后的时间;
Flags:
从0-15bits,最左一bit为1时表示server将以广播方式传送封包给client,其余尚未使用;
Ciaddr:
用户IP地址;
Yiaddr:
服务器分配给客户的IP地址;
Siaddr:
用于bootstrap过程中的IP地址;(服务器的IP地址)
Giaddr:
转发代理(网关)IP地址;
Chaddr:
client的硬件地址;
Sname:
可选server的名称,以0x00结尾;
File:
启动文件名;
Options:
,厂商标识,可选的参数字段
3.3.4抓包及分析
由上图知道,源端口号为68,目的端口号为67。
且DHCPserver不是由路由器充当:
DHCPserver的IP地址为:
211.68.71.5,而路由器的IP地址为118.229.130.129。
有DHCPRelay,RelayagentIPaddressis118.229.130.129.
工作流程如下:
DHCP客户端和服务器交互图(申请一个新的网络地址)
寻找Server
根据客户端是否第一次登录网络,DHCP的工作形式会有所不同,当DHCP客户端第一次登录网络的时候,也就是客户发现本机上没有任何IP数据设定,它会向网络发出一个DHCPDISCOVER封包。
因为客户端还不知道自己属于哪一个网络,所以封包的来源地址会为0.0.0.0,而目的地址则为255.255.255.255,然后再附上DHCPdiscover的信息,向网络进行广播。
DHCPdiscover相应报文信息有:
此时还没有分配地址,所以源地址为全零,也不知道DHCP的地址,所以目的地址为全1。
字段
值
含义
Messagetype
01
该数据为Bootrequest由主机往DHCP服务器发送请求
Htype
01
硬件类型为以太网
Hlen
06
硬件的物理地址长度为6个字节,以太网中MAC地址为6字节
Hops
00
客户端被设置为0,表示如果要用中继代理,则可以随意选择
Xid:
fd14f85aH
传输标识,一个随机数由客户选择,由客户端和服务器之间的关联信息,并在客户端和服务器响应使用
Secs
a
客户端填写
Ciaddr
00000000
客户端ip地址,在Bootrequest中由于正等待分配地址,所以该地段用全0填写
Yiaddr
00000000
指定客户端的地址,在Bootrequest中为全0
Siaddr
00000000
下一个DHCP服务器的IP地址使用在DHCPOFFER,DHCPACK由服务器返回引导
Giaddr
00000000
中继代理的IP地址,通过一个中继开机使用
Chaddr
00:
23:
8b:
bf:
61:
70
MAC地址
Sname
未给出
File
未给出
提供IP租用地址
当DHCP服务器监听到客户端发出的DHCPdiscover广播后,它会从那些还没有租出的地址范围内,选择最前面的空置IP,连同其它TCP/IP设定,响应给客户端一个DHCPOFFER封包。
由于客户端在开始的时候还没有IP地址,所以在其DHCPdiscover封包内会带有其MAC地址信息,并且有一个XID编号来辨别该封包,DHCP服务器响应的DHCPoffer封包则会根据这些资料传递给要求租约的客户。
根据服务器端的设定,DHCPoffer封包会包含一个租约期限的信息。
DHCPoffer相应报文信息有:
此时,源端口号和目的端口号与DHCPdiscover的刚好相反,即DHCP服务器用端口号67,客户端用端口号68。
字段
值
含义
Messagetype
02
Bootreply由DHCP服务器发送配置信息给主机
Htype
01
硬件类型为以太网
Hlen
06
硬件的物理地址长度为6个字节,以太网中MAC地址为6字节
Hops