当前位置:首页 > 技术与方案 > 网络知识相关

ARP协议解码详解

(2012-09-08 20:45:29)

一、ARP协议简介

ARP,全称Address Resolution Protocol,中文名为地址解析协议,它工作在数据链路层,在本层和硬件接口联系,同时对上层提供服务。
IP数据包常通过以太网发送,以太网设备并不识别32位IP地址,它们是以48位以太网地址传输以太网数据包。因此,必须把IP目的地址转换成以太网目的地址。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。ARP协议用于将网络中的IP地址解析为的硬件地址(MAC地址),以保证通信的顺利进行。

1. ARP和RARP报头结构

ARP和RARP使用相同的报头结构,如图1所示。


 

 

 

creen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图nCTRL+鼠标滚轮放大或缩小';}" border=0>

(图1 ARP/RARP报头结构)

 

硬件类型字段:指明了发送方想知道的硬件接口类型,以太网的值为1;

协议类型字段:指明了发送方提供的高层协议类型,IP为0800(16进制);

硬件地址长度和协议长度:指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;

操作字段:用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;

发送方的硬件地址(0-3字节):源主机硬件地址的前3个字节;

发送方的硬件地址(4-5字节):源主机硬件地址的后3个字节;

发送方IP(0-1字节):源主机硬件地址的前2个字节;

发送方IP(2-3字节):源主机硬件地址的后2个字节;


2. ARP和RARP的工作原理

ARP的工作原理如下:

1. 首先,每台主机都会在自己的ARP缓冲区 (ARP Cache)中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。

2. 当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有﹐就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。

3. 网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址;
4. 源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

RARP的工作原理:

发送主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;

本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;

如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;

如果不存在,RARP服务器对此不做任何的响应;

源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

 

右键单击图3中的00:00:E8:40:44:99节点,在弹出的菜单中选择“定位浏览器节点(L)”命令,将节点浏览器中定位到00:00:E8:40:44:99。查看协议视图,发现该节点主动发起了22613个ARP回复数据包,而ARP请求数据包只有2个,

从图4下面的数据包可以知道,00:00:E8:40:44:99主动向网络中的其它主机发出ARP回复数据包,内容是告诉对方主机,自己是某个IP的主机,而这个IP在不断地变化。由此可以断定,MAC地址为00:00:E8:40:44:99的机器在进行ARP欺骗。


经过上面的分析,我们确定00:00:E8:40:44:99存在ARP欺骗攻击,网管人员立刻开始查找该主机,由于他们以前做了IP与MAC地址的统计表,所以很轻松地就找到了该机器。在二层交换机上拨掉该主机的网线,网络很快恢复正常,VLAN间的内部访问和外部访问(包括Internet和省网单位)速度均恢复正常。
另外,从图3的显示可知,00:02:B0:BC:68: D2、00:0B: DB:4B:46:81、00:11:25:8D:7D:C1 三台机器占用的流量较大,通过查看这几台机器的具体流量后,发现00:02:B0:BC:68: D2和00:0B: DB:4B:46:81在互相进行数据拷贝,而00:11:25:8D:7D:C1对应的IP地址是10.230.204.1,它是10.230.204.0/24网段的网关,占用较量较大属于正常情况。由此基本断定网络时断时续的根源即前面找出的00:00:E8:40:44:99主机。
找出故障点,并帮助网络恢复正常后,我们因为其它的事情离开了现场,并未去排查00:00:E8:40:44:99的具体情况。
下午接到电业局网管人员的电话,告知在找到MAC地址为00:00:E8:40:44:99的主机时,该用户仅在使用WORD进行文档编辑,并未人为的进行攻击,然后安装防病毒软件并对该主机进行查杀,查出病毒若干,病毒查杀后,再次将该主机接入网络,网络通讯仍然正常。由此得出引发网络故障的原因是MAC地址为00:00:E8:40:44:99的主机感染蠕虫病毒,该病毒自动进行ARP欺骗攻击,导致网络访问的时断时续。


中大型网络中,网络故障错综复杂,不借助专业网络分析工具的情况下,很难对故障进行排查,如本例中,如果不对数据包进行捕获,即使在交换机上查看流量,由于00:00:E8:40:44:99的流量并不特别大,所以我们也很难找到故障点。
同时,由于此次捕获数据包的时间较短,仅仅只有53秒,所以网络中可能还存在一些未被检测出问题的主机(这些主机当前未启动,不会收发相应数据包,故无法查找)。所以,对于企业的网络运行,需要网络管理人员使用专用的网络分析工具,对网络进行长期有效的监测和分析,才可以最大程度地排除可能的网络故障和网络安全威胁。

 

 


2、Header Length=20 Bytes,表示IP包头的总长度为20个字节。该部分占4个BIT位,单位为4个字节,因此,一个IP包头的长度最长为“1111”,即15*4=60个字节。

3、Type of Service=00,表示服务类型为0。该部分用二个十六进制值来表示,共占8个BIT。

4、Total Length=48Bytes,表示该IP包的总长度为48个字节。该部分占16个BIT,单位为Byte。由此可见,一个IP数据包的最大长度为2的16次方减1,即:65535个字节。因此,在以太网中能够传输的最大IP数据包为65535个字节。

5、Identification=363,表示IP包识别号为363。该部分占16个BIT,以十进制数表示。

6、Flags,表示片标志,占3个BIT。各位含义分别为:第一个“0”不用,第二个“0”为分片标志位,“1”表示分片,“0”表示不分版本。第三个0为是否最后一片标志位,0表示最后一片,1表示还有更多的片。

8、Time to Live=128Secongs/Hops,表示生存时间TTL值为128。该部分占8个BIT。

9、Proctol=6(TCP),表示协议类型为TCP,协议代码是6。如果是UDP协议,则此处的协议代码应为17。如果是ICMP协议,则此处的协议代码应为1。该部分占8个BIT。

10、Header Checksun=4035(correct),表示IP包头校验和为4035,括号内的Correct表示此IP数据包是正确的,没有被非法修改过。该部分占16个BIT,用十六进制表示。

11、Source Address=[76.88.16.104],表示IP数据包源地址为:76.88.16.104。该部分占32个BIT。

12、Destination Address=[76.88.16.16],表示IP数据包目的地址为:76.88.16.16。该部分占32个BIT。

13、No Options,表示IP数据包中未使用选项部分。当需要记录路由时才使用该选项。

1、Source Port=1038,表示发起连接的源端口为1038。该部分占16个BIT。通过此值,可以看出发起连接的计算机源端口号。

2、Destination Port=21(FTP-CTRL),表示要连接的目的端口为21。该部分占16个BIT。通过此值,可以看出要登录的目的端口号。21端口表示是FTP服务端口。

3、Initial Sequence Number=1791872318,表示初始连接的请求号,即SEQ值。该部分占32个BIT,值从1到2的32次方减1。

4、Next Expected SEQ Number=1791872319,表示对方的应答号应为1791872319,即对方返回的ACK值。该部分占32个BIT,值从1到2的32次方减1。

7、Flags=02。该值用两个十六进制数来表示。该部分长度为6个BIT,6个标志位的含义分别是:

9、CheckSum=92D7(Correct),表示校验和是92D7。该部分占16个BIT,用十六进制表示。

通过上述分析,可以发现:在以太网中,最大传输单元MTU为1500个字节,在一个IP包中,去除IP包头的20个字节,可以传输的最大数据长度为1480个字节。在TCP包中,去除20个TCP包头,可以传输的最大数据段为1460个字节。因此,当数据超过最大数据长度时,将对该数据进行分片处理,在IP包头中会看到有多个片在传输,但标识号是相同的,表示是同一个数据包。
 

 

 

本文使用的抓包工具软件是NAI公司推出的功能强大的协议分析软件---Sniffer Pro。Sniffer Pro 具有强大的网络分析功能和特征,是解决网络问题的好工具。Sniffer支持丰富的的协议,而且能够进行快速解码分析。Sniffer Pro 4.6可以运行在各种Windows平台上(其它类似软件如Netxray不能在Windows 2003和Windows XP上正常运行)。Sniffer软件比较大,运行时需要的计算机内存比较大,否则运行比较慢,这也是它与Netxray相比的一个缺点。
网络中传输的数据包很多,这里只抓取跟DHCP有关的数据,设置如下:点击Capture菜单,选择define filter打开define filter-capture对话框,设置入图参数。

 

 

先弹出Capture Panel(监视抓包情况),点击Capture菜单中的START开始抓包。进入命令提示符,分别执行IPCONFIG/RELEASE 、IPCONFIG/RENEW命令,通过监视器可以看到已经以抓到数据包了,停止抓包并分析包,还是先保持包到磁盘以备分析。
 

 

 

 

 

 

 

开始抓报文时首先执行的IPCONFIG/RELEASE命令的作用是用来释放IP,这条报文后面分析,在释放IP后执行的更新IP命令IPCONFIG/RENEW将发起一个DHCP过程,分析从这里开始。现在,客户机没有地址,它就会发出一个DHCPDiscover报文,该报文是广播报文,所有的具有DHCP Server功能的服务器都会收到该报文。
 

在图中我们可以看到该报文在链路层中发的确实是广播报文。由于DHCP协议是初始化协议,更简单的说,就是让终端获取IP 地址的协议,既然终端连IP地址都没有,何以能够发出IP报文呢?

 

1、首先链路层的封装必须是广播形式,即让在同一物理子网中的所有主机都能够收到这个报文。在Ethernet_II格式的网络中,就是目标MAC为全1。

3、当终端发出DHCP请求报文,它并不知道DHCP SERVER的IP地址,因此IP头中的目标IP填为子网广播IP——全1,以保证DHCP SERVER的IP协议栈不丢弃这个报文。

4、上面的措施保证了DHCP SERVER能够收到终端的请求报文,但仅凭链路层和IP层信息,DHCP SERVER无法区分出DHCP报文,因此终端发出的DHCP请求报文的UDP层中的原端口为68,目标端口DstPort为67。即DHCP SERVER通过知名端口号67来判断一个报文是否是DHCP报文。

/Hardware address lengthClient 的网络硬件地址长度,6表示Client 的网络硬件地址长度是6bytes(即以太网类型的6bytes的MAC地址)。
HOPS跳数,表示当前的DHCP报文经过的DHCP RELAY(中级)的数目,每经过一个DHCP中继,此字段就会加1,此字段的作用是限制DHCP报文不要经过太多的DHCP RELAY,协议规定,当“hops”大于4(现在也有规定为16)时,这个DHCP报文就不能再进行处理,而是丢弃。

Transaction id事务ID,Client每次发送DHCP请求报文时选择的随机数,用来匹配server的响应报文是对哪个请求报文的响应。Client会丢弃“ID”不匹配的响应报文。
flags标志,在 BOOTP中此字段是保留不用的,在DHCP协议中也只使用了其左边的最高位。

Vendor Information tag选项字段,此字段中包含了大量可选的终端初始配置信息和网络配置信息,对于BOOTP协议,此字段为64bytes,对于DHCP协议,此字段为64---312 bytes。其中最常用的选项列表如下:

Dhcp message typecode = 53, length = 1, value= 1-8,此字段表示DHCP报文类型
Router Ipcode = 3, length = IP地址长度, value=client的默认网关的 IP地址;
DNS Ipcode = 6, length = IP地址长度的倍数, value= client的DNS服务器的IP地址序列;
Wins Ipcode = 44, length = IP地址长度的倍数, value= client的WINS服务器的 IP地址序列;
Client idcode = 61, length = client的网络硬件地址的长度+2, value=“htype”+“hlen”+ client的网络硬件地址;
erver idcode = 54, length = IP地址长度, value= DHCP SERVER的IP地址;
其中我们要注意Transaction ID=CF04CD61和DHCP Message Type一项中type=Discover,前一项表示会话ID,即DHCP Server发回的响应报文中该结构的数值要与发出去的DHCP Discover中的该结构数值一样,后一项说明DHCP报文类型为Discover类型报文。
 

从图中可以看出,DHCPOFFER报文是单播而不是广播,报文明确给出了目标MAC和IP,这一点不同与一般的技术文章介绍。其实,DHCP SERVER给终端的响应报文是根据DHCP报文中的内容决定是广播还是单播,一般都是广播形式。通讯源端口是67,目标端口为68,客户端通过端口号68来判断一个报文是否是DHCP SERVER的响应报文,Transaction ID=CF04CD61,表示这个报文是与图DHCP7中的DHCPDiscover报文相关的报文,因为二者标示一致。

 

所有发送DHCP Offer信息包的服务器将保留它们提供的一个IP地址。在该地址不再保留之前,该地址不能分配给其他的客户。
客户以广播的方式发送DHCP Request信息包作为响应。注意其中的DHCP Message Type一项中type=Request表示这是一个请求报文。
该息包是以单播的方式发送的。当服务器接收到DHCP Request信息包时,它以一个DHCP Acknowledge信息作为响应,其内容同DHCPOFFER类似,并在“选项”字段中增加了IP地址使用租期选项。

 

CLIENT收到DHCPACK报文后(经过上面的处理后,有且只有一个DHCPACK报文),会检查DHCP SERVER分配给自己的IP地址是否能够使用,如在以太网类型的网络中,CLIENT会发出一个ARP请求来确定DHCP SERVER分配的IP地址是否已经被别人使用,如果可以使用,则CLIENT成功获得IP地址,并根据IP地址使用租期自动启动续延过程。

 

 

前面反复提到DHCP Message Type项,这里列出所有DHCP协议报文的种类。DHCP协议采用CLIENT-SERVER方式进行交互,其报文格式共有8种,具体含义如下:

 

 

3:DHCPREQUEST(0x03),此报文是Slient开始DHCP过程中对server的DHCPOFFER报文的回应,或者是client续延IP地址租期时发出的报文

4:DHCPDECLINE(0x04),当Client发现Server分配给它的IP地址无法使用,如IP地址冲突时,将发出此报文,通知Server禁止使用IP地址

5:DHCPACK(0x05),Server对Client的DHCPREQUEST报文的确认响应报文,Client收到此报文后,才真正获得了IP地址和相关的配置信息。

6:DHCPNAK(0x06),Server对Client的DHCPREQUEST报文的拒绝响应报文,Client收到此报文后,一般会重新开始新的DHCP过程。

7:DHCPRELEASE(0x07),Client主动释放server分配给它的IP地址的报文,当Server收到此报文后,就可以回收这个IP地址,能够分配给其他的Client。

8:DHCPINFORM(0x08),Client已经获得了IP地址,发送此报文,只是为了从DHCP SERVER处获取其他的一些网络配置信息,如route ip,DNS Ip等,这种报文的应用非常少见。

图DHCP14是一个运行IPCONFIG/RELEASE后释放IP的报文,从图中可以看出DHCP Message Type是7,他的作用是主动释放server分配给它的IP地址的报文,Server收到此报文后,就可以回收这个IP地址,能够分配给其他的Client。


上面提到的都是在已经开机的情况下获得的报文,如果计算机重新启动,是不是完全按照文章提到的四步得到IP参数。看下面的图DHCP15
其中包含关机前获得的IP=192.168.0.22,这是不同与前面提到的10.177.124.X段的IP。原来客户机保留了上一次获得的地址,客户机在重新启动时,如果租用期未超过50%,它就会认为它已经知道该与哪台DHCP服务器进行联系,于是就跳过前两步,并发送另一个DhcpRequest报文给同一个服务器。如果该IP地址仍然可用的话,该DHCP服务器将给这台客户机返回另一个确认消息。 同样,DHCP服务器上也会保留(在租用期内的)客户机的地址。如果你的DHCP服务器中的租用期设的足够长,你就会发现,重启一台客户机后,客户机总是得到同一个地址。这正是由于客户机、服务器能保存已分配地址所造成的。

如果一台客户机未从该DHCP服务器获取过地址,或者它获得的地址已过期,那么它将需要经过全部四个步骤才能得到一个IP地址。

更多
关闭窗口 打印 
网站首页    -    联系我们    -   收藏本站    -    网站地图                                                               客户服务热线:0571-85023000
本网站所有网页信息已申请知识产权和著作权保护,版权归四海光纤公司所有,未经授权禁止任何人复制或镜像,违者必究。
公司主营:杭州光纤光缆视频会议系统,是专业的通信网络工程、视频会议系统建设专家

中华人民共和国备案号:浙ICP备10018243号