0.说明
在同一个网络(无特别说明,均指以太网络)中进行通信的主机,必须要拥有目标主机的MAC地址才能够正确地将数据发送给目标主机,那么如何知道目标主机的MAC地址呢?可以通过ARP协议。ARP协议就是用来获取目标IP地址所对应的MAC地址的,也就是说,ARP协议可以动态地在三层IP地址和二层MAC地址之间建立一种映射关系。可以用如下示意图来形象表示其作用:
可以看到上面的图示是把ARP协议划分到网络层,也既是认为它是一个网络层的协议,这是出于它为网络层的IP协议提供服务而考虑的。但实际上,由于ARP协议用以解析出IP地址(逻辑地址)所对应数据链路层中的地址(物理地址/硬件地址),所以把其划分在数据链路层也是没有问题的,这并没有严格的定义。
我们下面将通过具体的实践过程来分析四种常见的ARP包:ARP请求包、ARP响应包、无偿ARP包,同时也会分析一下代理ARP的发生过程。
这里会使用的环境如下:
操作系统:Windows 7
网络设备模拟器:GNS3
抓包软件:Wireshark
1.网络环境搭建
为了简洁起见,这里不设置一个较大的网络环境来满足前面四种情况ARP包分析的需要,而是在分析不同的ARP情况时分别搭建较小的网络环境,这样可以使我们的分析更有针对性。
2.ARP包报文格式
如下:
注意我们关注的是28字节的ARP包,只不过上面的图还包含了以太网首部字段信息(显然以太网首部的帧类型为ARP,在分析IP协议时提到过,这是一个数据分用的概念)。
因为对于ARP包的分析,其实我们更关心的应该是ARP请求包、ARP响应包、无偿ARP包或者代理ARP相关的知识,而后面的实践也主要是分类地进行讨论。所以下面先给出一个普通ARP包(请求包)的实际结构,然后再给出每一个字段的具体含义(参考了《TCP/IP详解 卷1:协议》的部分内容),先作一个基本的了解,最后再详细分析这些包产生的过程:
一个普通ARP包(请求包的实际结构)
ARP包各字段具体含义(对比上面实际抓到的包)
字段 | 含义 |
硬件类型 | 占16位 表示硬件地址的类型,值为1即表示以太网地址,也就是MAC地址 |
协议类型 | 点16位 表示要映射的协议地址类型,值为0x0800即表示IP地址,因为本文都是在IP协议的基础上进行分析的(即网络层逻辑地址为IP地址),所以所抓到的包的该字段类型都为0x0800 |
硬件地址长度 | 占8位 指出硬件地址的长度,单位为字节,因为本文针对的是以太网,而以太网地址为MAC地址,占48位,即6字节,所以后面抓到的包中该字段的值都为6,不再作特别说明 |
协议地址长度 | 占8位 指出三层逻辑地址的长度,单位为字节,因为本文针对的是以太网地址和IP地址的映射,而IP地址占32位,即6字节,所以后面抓到的包中该字段的值都为4,不再作特别说明 |
操作字段 | 指出操作类型,对应的值如下:
但因为RARP现在已经很少使用了,所以本文不会讨论 |
发送端以太网地址 | 占48位 准确上说是“发送端硬件地址”,但因为本文只针对以太网进行讨论,所以表述为“发送端以太网地址” |
发送端IP地址 | 占32位 准确上说是“发送端网络层逻辑地址”,但因为本文只针对的是以太网地址和IP地址的映射的讨论,所以表述为“发送端IP地址” |
目的以太网地址 | 占48位 |
目的IP地址 | 占32位 |
3.在实践中分析ARP的实现过程:ARP请求、ARP响应
(1)网络环境搭建
本文出自 “香飘叶子” 博客,转载请与作者联系!
原文地址:http://xpleaf.blog.51cto.com/9315560/1761856