在同一个网络(无特别说明,均指以太网络)中进行通信的主机,必须要拥有目标主机的MAC地址才能够正确地将数据发送给目标主机,那么如何知道目标主机的MAC地址呢?可以通过ARP协议。ARP协议就是用来获取目标IP地址所对应的MAC地址的,也就是说,ARP协议可以动态地在三层IP地址和二层MAC地址之间建立一种映射关系。可以用如下示意图来形象表示其作用:

可以看到上面的图示是把ARP协议划分到网络层,也既是认为它是一个网络层的协议,这是出于它为网络层的IP协议提供服务而考虑的。但实际上,由于ARP协议用以解析出IP地址(逻辑地址)所对应数据链路层中的地址(物理地址/硬件地址),所以把其划分在数据链路层也是没有问题的,这并没有严格的定义。

我们下面将通过具体的实践过程来分析四种常见的ARP包:ARP请求包、ARP响应包、无偿ARP包与IP地址冲突检测,同时也会分析一下ARP代理的发生过程。

这里会使用的环境如下:

网络设备模拟器: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请求包和ARP响应包来分析ARP请求与响应的一个详细过程,以及对应ARP包中相关字段的含义,这个实践的网络环境比较简单,如下:

      在R1路由器上做如下配置:

      R1#conft
      R1(config)#intf0/0
      R1(config-if)#noshu
      R1(config-if)#ipadd192.168.1.1255.255.255.0
      R1(config-if)#dowr

      在R2路由器上做如下配置:

      R2#conft
      R2(config)#intf0/0
      R2(config-if)#noshu
      R2(config-if)#ipadd192.168.1.2255.255.255.0
      R2(config-if)#dowr

      然后在R1路由器上查看arp缓存表:

      R1#showarp
      ProtocolAddressAge(min)HardwareAddrTypeInterface
      Internet192.168.1.1-cc01.127f.0000ARPAFastEthernet0/0

      可以看到arp缓存表中并没有192.168.1.2的MAC地址,所以如果待会R1发送数据给R2,必然会有ARP请求发生,所以这里请确保R1中确实没有192.168.1.2的MAC地址,如果有的话,建议重启两个路由器。(虽然可以在路由器上执行clear arp-cache来清除arp缓存表,但是清除过后又会马上生成,所以这里建议直接重启)

      (2)抓取并分析ARP请求包和ARP响应包

      首先在R1和R2的链路上启动Wireshark,监测R1的接口。(这是GNS3的功能,可以直接抓取通过两个路由器之间链路的数据包)

      在R1上执行如下命令:

      Router#ping192.168.1.2Typeescapesequencetoabort.
      Sending5,100-byteICMPEchosto192.168.1.2,timeoutis2seconds:
      .!!!!
      Successrateis80percent(4/5),round-tripmin/avg/max=44/62/76ms

      !表示数据发送成功,可以看到第一个是".",则表示数据发送失败,这是因为,第一个包在发送时,R1中并没有192.168.1.2的MAC地址,于是就去发送ARP请求来获得其MAC地址,但是当获得MAC地址之后,第一个包已经超时了(等待MAC地址超时),并没有发送出去,可以看下面抓到的包:

      可以看到已经有2个ARP包(1个请求和1回答)和8个ICMP包(4个请求和4个回答),这里我们主要分析的是ARP包。

      • ARP请求包

        数据包结构如下:

        字段分析如下:

        a.硬件类型、协议类型、硬件地址长度、协议地址长度

        这几个字段的内容跟前面讨论的一样,因为针对的是以太网和IP地址

        b.操作字段Opcode

        可以看到Opcode的值为request(1),所以这是一个ARP请求包。

        c.发送端以太网地址

        我们是从R1向R2发送数据的。

        从前面的命令执行结果:

        R1#showarp
        ProtocolAddressAge(min)HardwareAddrTypeInterface
        Internet192.168.1.1-cc01.127f.0000ARPAFastEthernet0/0

        这确实是R1的MAC地址(配置了192.168.1.1 IP地址的接口的MAC地址)。

        d.发送端IP地址

        发送端也确实是192.168.1.1,也就是R1。

        e.目的以太网地址

        可以看到这里为全0,在ARP请求包中,会把目的以太网地址字段的值置为全0,因为此时并不知道目的以太网地址是什么(也就是不知道192.168.1.2的MAC地址是多少)。

        f.目的IP地址

        数据包是从R1发送给R2的,所以目的IP地址就是192.168.1.2,R2收到这个ARP请求包之后,如果看到这个字段的内容是自己的IP地址,就会回复这个ARP包,也就是会发送一个ARP响应包。

        其实字段内容并不难理解,不过这里需要注意一点是,查看这个ARP请求包的数据链路层的目的MAC地址:

        会发现其是一个广播地址,这也就意味着,发送一个ARP请求包,以太网中的所有主机都能够收到该ARP请求包,但是并不是所有的主机都会回复这个ARP请求包,只有当接收者的IP地址与ARP请求包中的Target IP address中标识的目的IP地址一致时才会进行回复。

        • ARP响应包

          数据包结构如下:

          对比ARP请求包来分析,其实发现并没有相关多少,只是有以下几点区别:a.ARP响应包的操作字段Opcode值为reply(2)

          b.ARP响应包的二层目的MAC地址为ARP请求包发送者的MAC地址

          也就是说,ARP请求包是以广播的形式发送的,但ARP则是以单播的形式发送的,那么发给谁呢?ARP请求包是谁发送的,ARP响应包就发给谁,对应的二层目的MAC地址就是ARP请求包发送者的MAC地址

          c.发送端以太网地址、发送端IP地址、目的以太网地址、目的IP地址

          跟ARP请求包的内容相反,只不过ARP响应包中的所有地址字段的值都是已知的,这个很容易理解,不过需要注意的是,在这个时候,ARP响应包到底要发给谁,已经很明确了,所以ARP响应包是一个单播包。

          正如上面看到的,理解常规的ARP请求包和ARP响应包的过程并不复杂,只要知道了网络通信的基本原理,各个字段的值也就很容易理解了。


          4.在实践中分析ARP的实现过程:无偿ARP与IP地址冲突检测

          • 有偿ARP

            前面在获取某个IP地址对应的MAC地址是,都需要先发送一个ARP请求包,然后再通过接收一个ARP响应包来知道该IP地址所对应的MAC地址,因为需要发送ARP请求包,我们可以认为这是“有偿”的,即要付出一些代价。

            • 无偿ARP

              而所谓无偿ARP,指的就是,我不需要发送一个ARP请求包,对方就会“无偿”地把一个ARP响应包发给我(其实也主是主动发送过来),以此来告诉我它的MAC地址。

              (1)网络环境搭建

              但是在总结什么时候对方会主动把一个ARP响应包发送过来之前,我们先实践一下,网络环境还是用上面的那个:

              不过我们需要修改一下R2的IP地址,修改为192.168.1.252(在这个过程中抓包软件Wireshark要打开),如下:

              R2>en
              R2#conft
              R2(config)#intf0/0
              R2(config-if)#ipadd192.168.1.252255.255.255.0

              (2)抓取并分析ARP请求包和ARP响应包

              这样做之后打开Wireshark软件,会发现抓到下面这样一个包:

              可以看到Info一列,有个Gratutous的标识,中文意思就是“无偿,免费”的意思,我们可以查看一下数据包的结构:

              通过查看操作字段Opcode的值,其实可以发现,无偿ARP其实也是一个ARP响应包(不过普通的ARP响应包是以单播的形式发送的,而无偿ARP是以广播的形式发送的),只不过这个ARP响应包比较特别,它是主动发送的,即它是gratuitous,无偿的。

              另外需要注意的是,发送端IP地址和目的IP地址是一样,这正是无偿ARP有别于普通ARP响应包的地方,当这个数据包被网络中的其他主机(显然我们这里的网络环境比较简单,所以只有R1)接收到之后,它会让这些主机使用新的IP和MAC地址关系更新它们的ARP缓存表。因为这个ARP数据包是未经请求的,即导致客户端更新ARP缓存,所以会称为无偿ARP。

              在分析了无偿ARP之后,给出下面的几种情况,都会有无偿ARP过程的发生:

              a.更改了设备的IP地址

              b.某些操作系统在启动完成之后就会发送无偿ARP(Windows和Linux都会)

              (3)IP地址冲突检测

              再分析一下,无偿ARP有什么好处呢?如下:

              a.可以让以太网中的主机及时地更新其ARP缓存表,这样可以确保在数据发送时可以准确地封闭正确的地址信息

              b.检测IP地址是否有冲突

              关于这一点,可以给R2重新配置一个IP地址,并且与R1的相同:

              R2>en
              R2#conft
              R2(config)#intf0/0
              R2(config-if)#ipadd192.168.1.1255.255.255.0

              几乎马上就可以在R1和R2的控制台上看到错误日志的输出:

              R1>
              *Mar100:54:39.007:%IP-4-DUPADDR:Duplicateaddress192.168.1.1onFastEthernet0/0,sourcedbycc02.1a18.0000
              *Mar100:55:09.043:%IP-4-DUPADDR:Duplicateaddress192.168.1.1onFastEthernet0/0,sourcedbycc02.1a18.0000
              *Mar100:55:39.739:%IP-4-DUPADDR:Duplicateaddress192.168.1.1onFastEthernet0/0,sourcedbycc02.1a18.0000
              *Mar100:56:10.011:%IP-4-DUPADDR:Duplicateaddress192.168.1.1onFastEthernet0/0,sourcedbycc02.1a18.0000
              *Mar100:56:40.715:%IP-4-DUPADDR:Duplicateaddress192.168.1.1onFastEthernet0/0,sourcedbycc02.1a18.0000
              *Mar100:57:10.947:%IP-4-DUPADDR:Duplicateaddress192.168.1.1onFastEthernet0/0,sourcedbycc02.1a18.0000R2(config-if)#
              *Mar100:45:48.135:%IP-4-DUPADDR:Duplicateaddress192.168.1.1onFastEthernet0/0,sourcedbycc01.127f.0000
              *Mar100:46:18.623:%IP-4-DUPADDR:Duplicateaddress192.168.1.1onFastEthernet0/0,sourcedbycc01.127f.0000
              *Mar100:46:48.927:%IP-4-DUPADDR:Duplicateaddress192.168.1.1onFastEthernet0/0,sourcedbycc01.127f.0000
              *Mar100:47:19.651:%IP-4-DUPADDR:Duplicateaddress192.168.1.1onFastEthernet0/0,sourcedbycc01.127f.0000
              *Mar100:47:49.959:%IP-4-DUPADDR:Duplicateaddress192.168.1.1onFastEthernet0/0,sourcedbycc01.127f.0000
              *Mar100:48:21.623:%IP-4-DUPADDR:Duplicateaddress192.168.1.1onFastEthernet0/0,sourcedbycc01.127f.0000
              *Mar100:48:51.919:%IP-4-DUPADDR:Duplicateaddress192.168.1.1onFastEthernet0/0,sourcedbycc01.127f.0000

              这里因为在修改了R2的IP地址时,它发送了无偿ARP包,R1通过检查发现其IP地址跟自己的一样,于是就会在控制台上报错,但是R2为什么又会报错呢?因为在R1发现地址有冲突时,也发送了表示IP地址冲突的无偿ARP包,如下:

              注意这是一个广播包,所以R2必然也能收到,查看它的包结构:

              根据数据包的内容,R2也知道发生了IP地址冲突,所以也就会在控制台上输出错误日志了。


              4.在实践中分析ARP的实现过程:ARP代理

              如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答这个请求,这个过程就称为ARP代理。这是非常精简和通俗易懂的解释,我们可以通过下面的实践来进行体会。

              (1)网络环境搭建

              如下:

              在前面的基础上,R1增加如下配置:

              R1>en
              R1#conft
              R1(config)#iproute0.0.0.00.0.0.0f0/0

              R2增加如下配置:

              R2>en
              R2#conft
              R2(config)#intf1/0
              R2(config-if)#noshu
              R2(config-if)#ipadd192.168.2.2255.255.255.0
              R2(config-if)#dowr

              R3则配置如下:

              R3>en
              R3#conft
              R3(config)#intf0/0
              R3(config-if)#noshu
              R3(config-if)#ipadd192.168.2.3255.255.255.0
              R3(config-if)#iproute0.0.0.00.0.0.0f0/0
              R3(config-if)#dowr

              (2)抓取ARP包并分析ARP代理过程

              在R1和R2的链路上启动Wireshark,然后在R1上执行如下命令:

              R1#ping192.168.2.3Typeescapesequencetoabort.
              Sending5,100-byteICMPEchosto192.168.2.3,timeoutis2seconds:
              ...!!
              Successrateis40percent(2/5),round-tripmin/avg/max=36/50/64ms

              即R1给R3发送数据,我们查看抓到的包:

              再分别查看详细的包结构:

              • ARP请求包

                可以看到ARP请求包跟平常一样,并没有什么区别,即R1希望知道192.168.2.3的MAC地址。

                • ARP响应包

                  看起来普通的ARP响应包也没有什么区别,其实真的是没有什么区别,但不妨在R2上执行下面的命令,查看一下ARP缓存表:

                  R2#sharp
                  ProtocolAddressAge(min)HardwareAddrTypeInterface
                  Internet192.168.1.13cc01.127f.0000ARPAFastEthernet0/0
                  Internet192.168.2.2-cc02.1a18.0010ARPAFastEthernet1/0
                  Internet192.168.2.33cc03.2327.0000ARPAFastEthernet1/0
                  Internet192.168.1.2-cc02.1a18.0000ARPAFastEthernet0/0

                  在这个ARP缓存表中,192.168.2.3对应的MAC地址是cc03.2327.0000,并不是上面看到的数据包结构中的cc02.1a18.0000!!!cc02.1a18.0000是192.168.1.2对应的MAC地址!!!可以分析如下:

                  R1想要知道192.168.2.3的MAC地址,于是发送ARP请求包,但很显然,192.168.2.3跟192.168.1.1并不在同一个网络中;当192.168.1.2接口接收到这个ARP请求包时,R2发现虽然192.168.2.3并不是自己,但是它可以到达192.168.2.3所在的网络,即192.168.2.0/24这个网络,于是它就向R1发回了一个ARP响应包,告诉R1,192.168.2.3的MAC地址是自己(即配置了192.168.1.2的接口的MAC地址)。虽然这是一种“谎言”,但由于这样做确实是可以帮R1把数据发送到R3,所以有时候我们也把ARP代理称作“善意的谎言”。

                  那么通过上面的实践过程和分析之后也就非常清楚什么是ARP代理了。即如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答这个请求,这个过程就称为ARP代理。

                  上面这个过程需要体会一下,这样一来的话,相信对计算机网络通信又会有了更深入的了解。


                  5.下一步要做什么

                  首先有时间当然是自己也尝试把上面的实践完成一遍,好好分析一下ARP协议,其实ARP协议所涉及到的重要的内容,上面的实践过程基本上都已经全部给出,真的不能错过。

                  如果觉得自己已经掌握了的话,可以尝试去了解一下ARP欺骗的原理,看看其实是不是很简单。

计算机网络课程实验:wireshark ARP协议相关推荐

  1. 计算机课实验三,成都信息工程学院计算机网络课程实验三

    成都信息工程学院计算机网络课程实验三 本文关键词:成都,计算机网络,信息工程学院,课程,实验 成都信息工程学院计算机网络课程实验三 本文简介:计算机网络实验报告实验三:编写客户服务器程序班级xxxxx ...

  2. 网络协议实验四 ARP 协议分析实验

    实验四 ARP 协议分析实验 2.2 ARP 协议分析实验 1.ARP 协议介绍 ARP 是地址解析协议 (Reverse Address Resolution Protocol)的缩写,负责实现从I ...

  3. 实验二ARP协议分析

    "终究是玫瑰误了花期,而我也将你归还故里" 实验二ARP协议分析 1.arp命令(要用管理员启动命令行) 2.arp请求与应答 3.arp代理 4.免费arp 文中小鲨鱼是指Wir ...

  4. 计算机网络课程实验---使用思科PT进行拓扑网络搭建并ping通

    计算机网络课程实验-使用思科PT进行拓扑网络搭建并ping通 Ⅰ.实验目标 ①结果体现: 设计如图的网络,并进行IP地址和路由表的配置.最终要求路由器的每个端口对应一个子网:要求的子网地址为:xx.y ...

  5. 计算机网络课程实验报告一

    课程实验报告 实验名称:主机系统网络参数配置与测试 实验类型:验证性实验 一.实验目的 实验类型:验证性实验. 实验环境:连入因特网的一台PC. 二.实验方案 (-)IP地址的查看与配置 1.打开电脑 ...

  6. 实验2 ARP协议分析

    一.实验目的 1.分析ARP 协议的报文格式 2.理解ARP 协议的解析过程 3.掌握ARP 相关命令 二.实验拓扑 三.实验工具 GNS3和Wireshark抓包分析软件 四.ARP协议的封装格式 ...

  7. 实验三 ARP 协议分析实验

    1.ARP 协议分析实验 1.ARP 协议介绍 ARP 是地址解析协议(Reverse  Address   Resolution   Protocol)的缩写,负责实现从IP 地址到物理地址(如以太 ...

  8. 计算机网络的寻址问题ARP协议(Mac地址 ip地址)

    实验目的 理解arp协议的工作流程和作用 需要的工具 思科模拟器 过程图如下: 网络拓扑图如下: 具体操作如下: 具体流程如下: 1.刚开始主机A想给主机B发送一个ICMP包,但是当查看了ARP表发现 ...

  9. 计算机网络课程设计--基于TCP协议网上聊天程序--python实现带图形界面--socket--多线程

                                              基于TCP协议网上聊天程序 引言 21世纪是一个以网络为核心的信息时代,要实现信息化,就必须依靠完善的网络.而随着计 ...

最新文章

  1. 近些年有哪些口碑炸裂的项目管理工具?各具特色的项目管理工具我们该如何选择?
  2. python decorator. decorator_Python装饰器(decorator)
  3. android 自定义baseadapter listview,android之ListView和BaseAdapter的组合使用
  4. c/c++面试试题(三)
  5. 爬虫-ProxyHandler代理类-通过代理发起请求
  6. Java盲点:双重检查锁定及单例模式
  7. autoreleasepool底层探索
  8. 番茄花园 Ghost XP SP3 极速装机版 V2013.05
  9. 拓端tecdat|R语言股市可视化相关矩阵:最小生成树
  10. openCV,C++接口,cv::Mat矩阵数据元素读取
  11. 存储过程中进行循环处理数据
  12. STM32中大小端转换
  13. github电脑壁纸_程序员必用的电脑桌面!
  14. PMP项目进度网络图详解——第2篇:CPM关键路径法
  15. 【ubuntu操作系统入门】系统输入法设置
  16. 微软面试题之数字谜题方案
  17. 墨西哥区域相关的西班牙语日期的处理方案。。
  18. 2021年全国职业院校技能大赛网络安全赛项C模块心得
  19. 松下FP系列程序 松下FP系列程序,搭配松下伺服,昆仑通态触摸屏锂电池全自动叠片贴胶机
  20. 攻防世界PWN之cnss题解

热门文章

  1. Linux文件夹高亮
  2. 全网最全脚本整理,优秀学习范例汇集 —— VBS脚本、BAT脚本(批处理)公开、免费下载
  3. 奈飞文化手册_书摘|奈飞文化手册
  4. Apache Pulsar的consume的各种subscription mode订阅模式、consume消费者的消费规则
  5. EVE-NG裸机安装
  6. 盘点私域流量的那4种商业模式!
  7. 求伯君20年跌宕起伏:最牛程序员华丽转身
  8. 游戏蓝牙耳机哪个牌子好?高性价比国产游戏蓝牙耳机推荐
  9. sersync+rsync原理及部署
  10. 浅析IT系统监控方法和应用