什么是地址解析协议:
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
实现过程:
同网段:
在同一局域网内,如果主机A要想通过B的IP地址确定其MAC地址并和B进行数据交互,需要按照ARP协议的”广播请求和单播应答”来确定主机B的MAC地址。
假如A表示我本机地址192.168.1.8,B表示192.168.1.2,实现过程为:
1) A先查看自己的ARP高速缓存表中是否有B主机的MAC地址记录。
用arp -a查看发现确实有:
为了便于测试,我先删除:arp -ad 192.168.1.2 (要管理员权限)
2) 如果A的ARP高速缓存表中有B的MAC地址记录,则直接通过这个MAC地址进行数据的传输。
3) 如果A主机的ARP高速缓存中没有B主机的记录,则会向局域网的所有主机广播一个ARP请求报文,寻找B主机的MAC地址。
现在A的arp缓存没有B的记录,ping 一下B:ping 192.168.1.2;
打开wireshark网络分析器,过滤arp协议:
系统向本网段发出广播,谁有192.168.1.2的mac地址呀?有的话告诉我192.168.1.8。
具体的arp请求报文详情:
字段说明:
Hardware type----网卡类型,以太网(Ethernet)是1。我们常见的网络都是以太网,但这并不意味着只有以太网。
Protocol type----查询中提供的网络地址的类型,IPv4是0x0800。
Harware lenght----网卡地址长度,以太网网卡是6字节。
Protocol lengt----查询中提供的网络地址的的长度,IPv4是4字节。
Opcode----Operation查询包值为1,响应包值为2。
Sender MAC address----发送者的Mac地址。
Sender IP address----发送者的IP地址。
Target MAC address----接收者的Mac地址,指向性查询包是MAC地址表中记录的mac,广播性查询包是00:00:00:00:00:00。(注意区分ARP头和Eth头,指向性查询包Eth头的dst mac是MAC地址表中记录的mac,而广播性查询包是ff:ff:ff:ff:ff:ff)。
Target IP address----要查询mac地址的ip。
4) 当B主机收到A主机广播的ARP请求后,就会直接给A主机回复一个ARP数据包。
5) 当A主机收到B主机发送过来的请求后,将B的MAC地址写入高速缓存中,然后通过该MAC地址,A主机向B主机进行数据的传输。
跨网段:
A与B不在一个网段,A查询自己的路由表,知道如果想和B通信则必须通过gateway 来中转,所以会在与gateway 直连的接口(假定 Ethernet接口)上请求gateway 的MAC地址。 A主机先通过广播一个ARP请求,找到本网络中的一个路由器的MAC地址,然后将数据包直接给路由器。当路由收到数据包后,如果B主机在同网络中的话,这时通过ARP找到B主机,然后把数据包给B主机。如果B主机不和A主机发送数据的路由器在同一网络内的话,则路由器会通过ARP协议找到下一跳的路由器,然后把数据包发送到该路由上,以此类推。