码迷,mamicode.com
首页 > 其他好文 > 详细

在实践中深入理解ARP协议

时间:2016-04-08 20:11:11      阅读:469      评论:0      收藏:0      [点我收藏+]

标签:tcp/ip   arp   

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,不再作特别说明

操作字段

指出操作类型,对应的值如下:

  • ARP请求:1

  • ARP响应:2

  • RARP请求:3

  • RARP响应:4

但因为RARP现在已经很少使用了,所以本文不会讨论

发送端以太网地址

占48位

准确上说是“发送端硬件地址”,但因为本文只针对以太网进行讨论,所以表述为“发送端以太网地址”

发送端IP地址

占32位

准确上说是“发送端网络层逻辑地址”,但因为本文只针对的是以太网地址和IP地址的映射的讨论,所以表述为“发送端IP地址”

目的以太网地址占48位
目的IP地址占32位




3.在实践中分析ARP的实现过程:ARP请求、ARP响应


(1)网络环境搭建















本文出自 “香飘叶子” 博客,转载请与作者联系!

在实践中深入理解ARP协议

标签:tcp/ip   arp   

原文地址:http://xpleaf.blog.51cto.com/9315560/1761856

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!