网络协议抓包分析——ARP地址解析协议
前言
计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样。这里的地址因为网络分层的原因就包括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地址解析协议的更多相关文章
- 网络协议抓包分析——IP互联网协议
前言 IP协议是位于OSI模型的第三层协议,其主要目的就是使得网络间可以相互通信.在这一层上运行的协议不止IP协议,但是使用最为广泛的就是互联网协议. 什么是IP数据报 TCP/IP协议定义了一个在因 ...
- wireshark抓包分析——TCP/IP协议
本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说"抓包".这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通 ...
- 网络协议抓包分析——TCP传输控制协议(连接建立、释放)
前言 TCP协议为数据提供可靠的端到端的传输,处理数据的顺序和错误恢复,保证数据能够到达其应到达的地方.TCP协议是面向连接的,在两台主机使用TCP协议进行通信之前,会先建立一个TCP连接(三次握手) ...
- 计算机网络-DHCP协议抓包分析总结
前置问题:什么是(网络)协议? 网络协议为计算机网络中进行数据交换而建立的规则.标准或约定的集合. 而且: 一个网络协议至少包括三要素: 语法:用来规定信息格式;数据及控制信息的格式.编码及信号电平等 ...
- ARP 协议抓包分析
ARP(Address Resolution Protocol)- 地址解析分析 ARP 协议是根据IP地址获取物理地址的一个TCP/IP协议. 当PC1 想与 PC2 进行通信时,需要同时知道PC2 ...
- dhcp协议抓包分析
dhcp协议 DHCP,动态主机配置协议,前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client). wires ...
- Wireshark数据抓包分析——网络协议篇
Wireshark数据抓包分析--网络协议篇 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...
- FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接
一.为什么写这个 昨天遇到个ftp相关的问题,关于ftp匿名访问的.花费了大量的脑细胞后,终于搞定了服务端的配置,现在客户端可以像下图一样,直接在浏览器输入url,即可直接访问. 期间不会弹出输入用户 ...
- Wireshark抓包分析TCP 3次握手、4次挥手过程
Wireshark简介 更多有关Wireshark的教程.软件下载等,请见:http://www.52im.net/thread-259-1-1.html,本文只作简要介绍. 1Wireshark 是 ...
随机推荐
- k8s storageClass对接nfs
前提:已存在一个nfs服务 192.168.137.11:/home/nfs_data 下面以rbac方式对接nfs 1.创建/root/k8s-nfs-rbac/serviceaccount.yam ...
- Executors创建的4种线程池的使用
Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.newFixe ...
- Python3学习(1)——初步了解
Python是解析性语言,Python解释器将源程序解释并执行. 基本语法 print() --打印字符串 -直接打印 print("hello world") 结果: hel ...
- Java时间日期格式转换 转自:http://www.cnblogs.com/edwardlauxh/archive/2010/03/21/1918615.html
Java时间格式转换大全 import java.text.*; import java.util.Calendar; public class VeDate { /** * 获取现在时间 * * @ ...
- JSP与Servlet的关系
之前的文章里有说过,其实Servlet比JSP出现的早,JSP的本质就是Servlet,但是一个是jsp页面,一个是java类,硬要说他们的本质是一样的,搁谁都有点难以置信.后面的结论会更加让你吃惊. ...
- 网络操作系统 第九章 DHCP服务器管理与配置
本章小结 本章介绍了DHCP服务器的基本概念,基本原理和主要功能,详细说明了Window是下DHCP服务器的安装配置和Linux下DHCP 服务器的安装配置,通过本章的学习.读者能够理解动态主机配置协 ...
- Redis 配置内容总结
命令 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf. 你可以通过 CONFIG 命令查看或设置配置项. (1)config get config_setting_ ...
- table-layout引起的探索——fixed和auto的区别
问题:最近想把mui提供的底部导航组件样式单独抽出来,遇到一个问题:给底部图片下的文字设置了超出隐藏,但没有生效,如下图: 注:该底部导航为mui提供的组件 解决:这让我百思不得其解,经过一些琢磨后发 ...
- [Swift]SwiftyJSON的使用:解析JSON
用法 初始化Initialization import SwiftyJSON let json = JSON(data: dataFromNetworking) 或者 let json = JSON( ...
- C#8个常用的字符串的操作
1.根据单个分隔字符用split截取 string st="GT123_1"; string[] sArray=st.split('_'); 输出:sArray[0]=" ...