前言

计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样。这里的地址因为网络分层的原因就包括IP地址和MAC地址(即网卡地址、硬件地址)。
计算机发送的信息最终都是被转换成比特流在物理层上传输,所以我们一定要知道的目的主机的MAC地址,最终信息才可以被发送给目的主机。但是我们一般只拥有目标主机的IP地址(假设之前没有与该目的主机通信过),那么在向目的主机发送数据包之前,我们要先获取到目标主机的MAC地址。ARP(Address Resolution Protocol)协议便是解决这个问题而存在的,ARP的功能就是将IP地址解析成MAC地址。下面将介绍ARP的工作流程以及抓包分析ARP协议。

ARP工作流程

通信主机依据在同一网段和不同网段可以分为两种情况,两种情况的工作过程都包括请求过程和响应过程。

相互通信主机在同一网段

主机A与主机B通信,知道主机B的IP地址后,还要得到主机B的MAC地址。通过将子网掩码与主机B的IP地址相与发现目的主机与自己在同一网段中,于是主机A获取主机B的MAC地址将按以下过程进行。

  • 主机A首先在自己的ARP缓存表中检查主机B匹配的MAC地址,若有,则封装数据包填写好主机B的MAC地址,然后发送数据包;否则,向所在网段广播ARP请求,执行下面将的流程。

  • 同网段上的所有主机都会收到主机A的ARP请求并且检查请求的IP地址是否与自己的IP地址匹配。若是不匹配,则求其该ARP请求
  • 主机B发现自己的IP地址与请求的IP地址匹配,则将主机A的IP地址与MAC地址(映射关系)添加到自己ARP缓存表。
  • 主机B将包含其MAC地址的ARP响应消息单播发送给主机A
  • 主机A收到来自主机B的响应消息后,就会把主机B的IP地址与MAC地址的映射关系存入本地ARP缓存表中。该映射记录的有效时限默认是120s,当超时后,若在与主机B通信则重复请求过程。得到主机B的MAC地址后,就可以与主机B正常通信了。

相互通信的主机在不同网段

不同层次、不同区间的源地址和目的地址的转换

  • 当主机A与主机B不在同一网段时,主机A就需要通过网关将信息发送出去。主机A会按照第一种情况得到网关的MAC地址,然后封装数据,将封装好的数据发送给网关。在封装数据包时,源IP地址和源MAC地址填的就是主机A的IP和MAC地址,目的IP填为主机B的IP地址,目的MAC地址填网关(信息是通过网关再传出去)。
  • 网关收到该数据包后,发现目标MAC地址是自己,但是目标IP确实其他主机,所以它不再继续向上处理这个数据包。而是将数据包发送给下一跳路由(查路由表得出下一跳路由),发送前修改数据包的目的MAC地址为下一跳路由器的MAC地址(此地址由ARP请求获得)。
  • 直到到某一路由器时,该路由器发现,该数据包的目的IP地址在自己所连的网段中,便先获取到主机B的MAC地址,然后修改数据包的目的MAC地址,就可以将数据包发送给主机B。由此实现不同网段的主机A和B的通信。

得出的几点结论

  • 需要注意ARP是解决同一局域网上的主机或路由器的IP地址和硬件地址映射问题。
  • 当源主机和目的主机不在不同一网段上时,数据包就会经过路由转发,数据包的目的MAC地址也将不断变化,但是源IP和目的IP是不会变的。在同一网段,源主机就会直接使用ARP请求得到目的主机的MAC地址。
  • 总的来说ARP请求过程可以概括为:广播请求,单播回应

ARP缓存表

ARP缓存包含一个或多个表,这些表被称为ARP缓存表,是用于存储IP地址与其对应的MAC地址。为什么要把这些映射关系存储起来呢?目的就是为了提高工作效率。将访问的主机的MAC地址记下来,下一次访问时就不必在启用ARP协议(当然,映射记录是由生存期限的)。

可以提高ARP效率的方法

ARP缓存是一种提高ARP效率的方法。还可以有:

  • 收到ARP请求的所有主机都缓存其中的IP/MAC,而不是直接丢弃
  • 主机入网时,主动广播它的IP/MAC地址对

ARP抓包分析

ARP帧格式

请查看上一篇文章了解:https://www.cnblogs.com/myworld7/p/8430223.html#_label2

ARP请求包

广播发送

ARP响应包

单播发送

无偿ARP/免费ARP

广播发送

小结

要想多了解协议,还是的抓包慢慢分析才得行。

参考:https://www.cnblogs.com/chengsheng/p/5628319.html

网络协议抓包分析——ARP地址解析协议的更多相关文章

  1. 网络协议抓包分析——IP互联网协议

    前言 IP协议是位于OSI模型的第三层协议,其主要目的就是使得网络间可以相互通信.在这一层上运行的协议不止IP协议,但是使用最为广泛的就是互联网协议. 什么是IP数据报 TCP/IP协议定义了一个在因 ...

  2. wireshark抓包分析——TCP/IP协议

    本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说"抓包".这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通 ...

  3. 网络协议抓包分析——TCP传输控制协议(连接建立、释放)

    前言 TCP协议为数据提供可靠的端到端的传输,处理数据的顺序和错误恢复,保证数据能够到达其应到达的地方.TCP协议是面向连接的,在两台主机使用TCP协议进行通信之前,会先建立一个TCP连接(三次握手) ...

  4. 计算机网络-DHCP协议抓包分析总结

    前置问题:什么是(网络)协议? 网络协议为计算机网络中进行数据交换而建立的规则.标准或约定的集合. 而且: 一个网络协议至少包括三要素: 语法:用来规定信息格式;数据及控制信息的格式.编码及信号电平等 ...

  5. ARP 协议抓包分析

    ARP(Address Resolution Protocol)- 地址解析分析 ARP 协议是根据IP地址获取物理地址的一个TCP/IP协议. 当PC1 想与 PC2 进行通信时,需要同时知道PC2 ...

  6. dhcp协议抓包分析

    dhcp协议 DHCP,动态主机配置协议,前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client). wires ...

  7. Wireshark数据抓包分析——网络协议篇

                   Wireshark数据抓包分析--网络协议篇     watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...

  8. FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接

    一.为什么写这个 昨天遇到个ftp相关的问题,关于ftp匿名访问的.花费了大量的脑细胞后,终于搞定了服务端的配置,现在客户端可以像下图一样,直接在浏览器输入url,即可直接访问. 期间不会弹出输入用户 ...

  9. Wireshark抓包分析TCP 3次握手、4次挥手过程

    Wireshark简介 更多有关Wireshark的教程.软件下载等,请见:http://www.52im.net/thread-259-1-1.html,本文只作简要介绍. 1Wireshark 是 ...

随机推荐

  1. PS扣签名

    1.用PS打开签名: 2.在图层界面切换到[通道],选择一个黑白分明或者明暗明显的签名图通道.按着“Ctrl”键就会显示出手指和方块的图标,按键的同时左击一下选择的通道: 3.切换到第一项的[图层]界 ...

  2. Buffer.h

    #ifndef __NOXIMBUFFER_H__ #define __NOXIMBUFFER_H__ #include <cassert> #include <queue> ...

  3. idea取消double shift全局搜索

    一是因为它和输入法经常冲突,二来是因为它完全可以被其它的快捷键代替,如Ctrl+n,ctrl+shift+n,ctrl+shift+f之类的: 取消的方法,按ctrl+shift+a,然后输入regi ...

  4. ECharts使用—折线图动态加载

    最近需求中用到折线图,单线条,多线交错,之前是散点图,用的是另一个 amcharts.js,这个文档也能找的到,回归早本次重点:ECharts 一.首先引入echarts.common.min.js文 ...

  5. 感知机、logistic回归 损失函数对比探讨

    感知机.logistic回归 损失函数对比探讨 感知机 假如数据集是线性可分的,感知机学习的目标是求得一个能够将正负样本完全分开的分隔超平面 \(wx+b=0\) .其学习策略为,定义(经验)损失函数 ...

  6. H3C 路由策略(人为打环)

    拓扑如上 任务1:去除环路双ospf 引入 造成路由环路一边是 1             一边是10关掉任意lo口都会生成新的路由表 但是路由表指向不对 变成了一个圆 我们可以采用引入路由打上tag ...

  7. oracle之 any、some、all 解析

    举几个例子来说明ALL和ANY的用法 1. SELECT * FROM TABLEA WHERE FLD > ALL(SELECT FLD FROM TABLEA) 这相当于 SELECT * ...

  8. 211806385 黄存慧 https://www.cnblogs.com/huangch/ https://github.com/HuangCh327

    211806385 黄存慧 https://www.cnblogs.com/huangch/ https://github.com/HuangCh327

  9. Java学习前知识补充

    1  Java  面向对象的编程语言:为了实现人机交互需要语言的过渡(翻译)这时就需要Java虚拟机! 不同系统需要不同的虚拟机 2  学习语言第一件事 搭建环境(运行 Java需要的环境) 在甲骨文 ...

  10. SQL Server 2008 安装(lpt亲测)

    SQL Server安装真的遇到好多问题啊!!  于是就决定写个备忘,方便自己也方便别人. 1.下载安装包 2.打开安装包,就遇到了restart computer 那里failed的错误,导致无法继 ...