0,怎么引出arp地址解析协议的呢?
在硬件层次上进行的数据帧交换必须有正确的接口地址(既是MAC地址)。但是, T C P / I P有自己的地址: 32 bit的I P地址。知道主机的 I P地址并不能让内核发送一帧数据给主机。内核(如以太网驱动程序)必须知道目的端的硬件地址(MAC地址)才能发送数据。 A R P的功能是在32 bit的I P地址和采用不同网络技术的硬件地址之间提供动态映射,既是通过相应的IP地址找到相应的MAC地址。
1,场景描述:
设备R1: ip 10.10.10.1
[Huawei] ip address 10.10.10.1 255.255.255.0
[Huawei]display arp
IP ADDRESS MAC ADDRESS EXPIRE(M) TYPE INTERFACE VPN-INSTANCE
VLAN/CEVLAN PVC
------------------------------------------------------------------------------
10.10.10.1 5489-98c2-7867 I - Eth0/0/0
10.10.10.2 5489-9811-5cbb 9 D-0 Eth0/0/0
------------------------------------------------------------------------------
Total:2 Dynamic:1 Static:0 Interface:1
设备R2: ip 10.10.10.2
<Huawei>system-view
[Huawei] ip address 10.10.10.2 255.255.255.0
[Huawei] ping 10.10.10.1
PING 10.10.10.1: 56 data bytes, press CTRL_C to break
Reply from 10.10.10.1: bytes=56 Sequence=1 ttl=255 time=1 ms
Reply from 10.10.10.1: bytes=56 Sequence=2 ttl=255 time=1 ms
Reply from 10.10.10.1: bytes=56 Sequence=3 ttl=255 time=1 ms
Reply from 10.10.10.1: bytes=56 Sequence=4 ttl=255 time=1 ms
Reply from 10.10.10.1: bytes=56 Sequence=5 ttl=255 time=20 ms--- 10.10.10.1 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 1/4/20 ms[Huawei]display arp
IP ADDRESS MAC ADDRESS EXPIRE(M) TYPE INTERFACE VPN-INSTANCE
VLAN/CEVLAN PVC
------------------------------------------------------------------------------
10.10.10.2 5489-9811-5cbb I - Eth0/0/0
10.10.10.1 5489-98c2-7867 7 D-0 Eth0/0/0
------------------------------------------------------------------------------
Total:2 Dynamic:1 Static:0 Interface:1
2,ARP的分组格式结构
两个字节长的以太网帧类型表示后面数据的类型。对于 A R P请求或应答来说,该字段的值为0 x 0 8 0 6
操作字段指出四种操作类型,它们是 A R P请求(值为1)、 A R P应答(值为 2)、 R A R P请求(值为3)和R A R P应答(值为4)
arp报文数据结构:
定义以太网arp字段
typedef struct arphdr
{
//arp首部
unsigned short arp_hrd; /* format of hardware address */
unsigned short arp_pro; /* format of protocol address */
unsigned char arp_hln; /* length of hardware address */
unsigned char arp_pln; /* length of protocol address */
unsigned short arp_op; /* ARP/RARP operation */
unsigned char arp_sha[6]; /* sender hardware address */
unsigned long arp_spa; /* sender protocol address */
unsigned char arp_tha[6]; /* target hardware address */
unsigned long arp_tpa; /* target protocol address */
}ARPHDR;
3,四种常用的表简介:
(1)mac地址表::简单的说,MAC地址表是交换机等网络设备记录MAC地址和端口的映射关系(见下图),代表了交换机从哪个端口学习到了某个MAC地址,交换机把这个信息记录下来,后续交换机需要转发数据的时候就可以根据报文的目的MAC地址去根据MAC地址表转发数据。
Port | Mac-address | Port-vlan | type |
Ethernet0/0/0(10.10.10.1) | 00-1a-b6-33-44-01 | 无 | dynamic |
Ethernet0/0/0(10.10.10.2) | 10-26-e6-bc-10-78 | 无 | dynamic |
(2)ARP表:简单的说,ARP表就是路由器等网络设备记录IP地址和MAC地址对应关系的表项。
广播报文:目的地址全1(FF-FF-FF-FF-FF-FF).
组播报文:目的地址第六字节的最低位为1(X1-XX-XX-XX-XX-XX).
单播报文:除了上面两种之外 的报文.
Mac地址学习:把未知mac地址转为arp表里面的已知地址。
Mac地址老化:
Port | Mac-address | ip-adress | Port-vlan | type |
Ethernet0/0/0(10.10.10.1) | 00-1a-b6-33-44-01 | 10.10.10.1 | 无 | dynamic |
Ethernet0/0/0(10.10.10.2) | 10-26-e6-bc-10-78 | 10.10.10.2 | 无 | dynamic |
(3), 路由表(暂无,后续介绍)。
4,报文分析:
流程分析:
设备1: ip 10.10.10.1 设备2: ip 10.10.10.2
当设备1 ping 设备2时,设备1发送arp request 报文,而且我们看到设备1发送的是广播报文,目的地址为FF-FF-FF-FF-FF-FF,此时我们给所有的用户发送报文(既是泛洪),当ip不为10.10.10.2的设备收到该报文时,因为发现目标ip不是发给自己的,所以他会丢掉该报文,而ip为10.10.10.2的设备2收到该报文时,发现对端是给自己发送报文的,他会将自己(设备2)和设备1的mac地址和ip保存在arp表项中(该过程称为mac地址学习),并且此时设备2同时会发送arp reply报文他此时已经知道了对端的ip+mac地址(通过arp表)。