前言

计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样。这里的地址因为网络分层的原因就包括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. 突破内网限制上网(ssh+polipo)

    最近到客户这里来做项目,发现客户对网络的把控实在严格,很多网站都不能访问到,搜索到的技术文档也屏蔽了.突然想到了FQ工具的原理,刚好自己也有台服务器在外头,部署个Polipo代理然后用ssh隧道连接. ...

  2. eclipse 无法记住svn密码

    每次要求输入密码,很恼人.经过一番折腾,在stackoverflow上找到了解决方案,上面大神果然多 简单的说,就是通过查看工作空间的日志文件,发现报了个java异常,缺少一个class文件(org. ...

  3. Notes : <Hands-on ML with Sklearn & TF> Chapter 7

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  4. CentOS7安装OpenLDAP+MySQL+PHPLDAPadmin

    安装环境:CentOS 7 1.安装和设置数据库 在CentOS7下,默认安装的数据库为MariaDB,属于MySQL数据库的一个分支,所以我还是使用了MariaDB.安装命令为: [root@loc ...

  5. js获取复选框值

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. JSHFJK师德师风幅度十分时尚大方JSHFJK

    sdjfhjksd{104411661166112205880477047710881111099909771088104411111155116605880533055505330500051104 ...

  7. Linux系统安装 OpenSSL两种方法

    OpenSSL是一个开源的ssl技术,由于安装pytbull,需要安装openssl,并下载对应的版本下载地址:https://www.openssl.org/source/ 方法一,编译安装Open ...

  8. python Descriptor (描述符)

    简介: python 描述符是新式类(继承自object)中的语言协议,基于描述符可以提供更佳优雅的解决方案. python的classmethod, staticmethod, property都是 ...

  9. spring 读取yaml配置文件

    从Spring框架4.1.0增加了对YAML的支持,Spring框架4.1.0 maven POM具有Snakeyaml依赖性  . 您可以在Spring Boot应用中使用两种方式加载YAML: 1 ...

  10. 大叔学ML第二:线性回归

    目录 基本形式 求解参数\(\vec\theta\) 梯度下降法 正规方程导法 调用函数库 基本形式 线性回归非常直观简洁,是一种常用的回归模型,大叔总结如下: 设有样本\(X\)形如: \[\beg ...