声明: 本篇博客的学习途径主要为以下网站和课堂讲解,发博客目的仅为学习使用,在该博客的基础上做了一定程序的简略和修改。
参考博客 :
原文链接:https://blog.csdn.net/ever_peng/article/details/80008638
https://blog.51cto.com/13570193/2083332
ARP协议:地址解析协议
ddress Resolution Protocol”(地址解析协议)
【前情铺垫】
- 以太网中,数据传输依赖MAC地址,而不是IP地址
【ARP作用】:地址解析
- 将已知IP地址,转化为MAC地址 (通常是目标设备的IP->MAC)
ARP和RARP动态映射
- ARP把逻辑(IP)地址映射为物理地址。
- RARP把物理地址映射为逻辑(IP)地址。
ARP原理
ARP协议可以接收来自IP协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层。
ARP请求
【已知条件】
- 发送方ip,MAC地址
- 接收方的ip
【ARP请求过程】:网络层进行广播
主机发送ARP请求报文(请求报文包含发送方的MAC地址 和 IP地址 以及 接收方的IP地址)
因为发送方不知道接收方的物理地址,所以这个请求报文会在网络层中进行广播。
ARP响应
【ARP响应过程】:单播响应
局域网中的每一台主机都会接受并处理这个ARP请求报文,然后进行验证
验证内容: 查看请求报文内的接收方IP是不是自己
验证成功: 根据发送方的物理地址,以单播的方式,返回一个ARP响应报文(响应报文包含接收方自己的IP地址和物理地址)
ARP协议 报文字段 抓包解析
报文格式
ARP报文的总长度为64字节。
英文名 | 作用 | 举例 | 总长 |
---|---|---|---|
Hardware type | 硬件类型,标识链路层协议 | 用来定义运行ARP的网络类型。每个局域网基于其类型被指派一个整数。例如:以太网的类型为1。ARP可用在任何物理网络上。 | 16字节 |
Protocol type | 协议类型,标识网络层协议 | 例如:对IPv4协议这个字段是0800。ARP可用于任何高层协议 | 16字节 |
Hardware size | 硬件地址大小,标识MAC地址长度。 | 例如:对于以太网的值为6,这里是6个字节(48bit) | 8字节 |
Protocol size | 协议地址大小,标识IP地址长度 | 对于IPv4协议的值为4。这里是4个字节(32bit) | 8字节 |
Opcode | 操作代码,标识ARP数据包类型,1表示请求,2表示回应 | ARP请求(1),ARP响应(2) | 16字节 |
Sender MAC address | 发送者MAC | 例如:对于以太网这个字段的长度是6字节 | 可变长度字节 |
Sender IP address | 发送者IP | 例如:对于IP协议这个字段的长度是4字节 | 可变长度字节 |
Target MAC address | 目标MAC,用来定义目标的物理地址 | 例如,对以太网来说这个字段位6字节。对于ARP请求报文,这个字段为全0,因为发送方并不知道目标的硬件地址。 | 可变长度字节 |
Target IP address | 目标IP | 对于IPv4协议这个字段的长度为4个字节。 | 可变长度字节 |
报文封装
ARP报文直接封装在数据链路帧中,如图中,ARP分组被封装在以太网的帧中。
注意,帧中的类型字段指出此帧所携带的数据是ARP报文。
回顾总结
如果两个ip不在同一个VLAN内,则ARP协议会把请求帧发给交换机,交换机通过表,重新向别的VLAN发起新的广播
如果两个ip不在同一个局域网内,则ARP协议会把请求帧发给网关,操作系统初始化时会有默认的网管地址,网关收到消息后会路由表进行消息转发。