前言

计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样。这里的地址因为网络分层的原因就包括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. Lua5.2&Lua5.3中废除的方法

    Lua5.2和Lua5.3中居然把 table.getn() 废除了, webAdd = {"QQ", "BaiDu", "SMW"} fo ...

  2. Docker优势以及与传统虚拟机对比(1)

    docker优势 1.更快速地交付和部署: 2.更高的虚拟化(不需要额外的hypervisor支持,是内核级的虚拟化,实现更高的性能呢和效率): 3.更轻松的迁移和扩展: 4.更简单的管理  与传统的 ...

  3. 前端基础之 html

    ---恢复内容开始--- web服务本质 import socket sock=socket.socket() sock.bind(()) sock.listen() where True: conn ...

  4. UE4物理动画使用

    Rigid Body Body的创建. 对重要骨骼创建Body,保证Body控制的是表现和变化比较大的骨骼. 需要对Root创建Body并绑定,设置为Kinematic且不启用物理.原因是UPrimi ...

  5. let,const,var

    1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 3 console.log('函数外const定义b:' + ...

  6. C++ 引用、构造函数、移动语义

    1.引用 C++中的引用主要用作函数的形参,接近于const指针,必须在创建时初始化. 以Person类为例,如下: Person p;                          //调用P的 ...

  7. 基于APNs最新HTTP/2接口实现iOS的高性能消息推送(服务端篇)

    1.前言 本文要分享的消息推送指的是当iOS端APP被关闭或者处于后台时,还能收到消息/信息/指令的能力. 这种在APP处于后台或关闭情况下的消息推送能力,通常在以下场景下非常有用: 1)IM即时通讯 ...

  8. 关于Python打开IDLE出现错误的解决办法

    安装好python,打开IDLE出现以下错误: 解决办法: 修改[Python目录]\Lib\idlelib\PyShell.py文件,在1300行附近,将def main():函数下面use_sub ...

  9. 【详记MySql问题大全集】一、安装MySql

    最近公司要从SqlServer转到MySql,期间在安装环境和数据迁移的过程中,遇到了一些不大不小问题,比如怎么重置密码.怎么设置大小写敏感等等. 这些问题都比较细比较杂,这边解决完可能过几天就忘了, ...

  10. 彻底填平Static坑(细节决定成败)

    static 学习的过程就是填坑的过程,可不要偷懒想着跳过去,你现在跳过去,就相当于给自己挖了一个坑,你迟早会掉进去的,为了避免不掉坑,所以,努力填坑吧! 一.如果没有static会怎样? 需求: 1 ...