地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址。收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源(来自百度百科)。
(注意:ARP是以太网技术,其他类型网络可不用ARP)
上面的ARP介绍对于网络小白来说可能还会有难度,这样比喻吧:你给你的同学寄快递,你知道他的姓名,但你现在还不知道他的地址。你在QQ或者微信群里问:XX你地址是多少?XX就会回复你他的地址是哪。你把他的姓名和地址记录在你的便笺上,等下就根据记录的信息给他寄快递。
这里的收件人姓名相当于IP地址,收件人地址相当于MAC地址。记录信息的便笺相当于ARP缓存。ARP工作的原理就像这个过程:知道姓名,询问收件地址,根据记录的信息发邮件。很容易理解吧。(只是大致比喻,不要叫真)
从上面的介绍就已经暴露出了一个很严重的问题,如果我冒充你同学告诉你地址,你会不会把东西寄我这里?这个问题今天先不讨论,下次再说。
网络拓扑
如上图所示,3台路由器在一个局域网里,都开启debug arp,此时如果R1给R2发数据包(Ping),我们抓包观察。
R1的debug信息
R2的debug信息
R3的debug信息
R1上debug显示,自己发送的源IP是1.1.1.1,MAC是cc01.227c.0000,目的IP是1.1.1.2,但目是0000.0000.0000。之后收到回复:回复的源IP是1.1.1.2,MAC地址是cc02.02ec.0000。此时在R1上查看ARP缓存:
R1的ARP缓存
R2上debug显示为收到请求并做出回复。R3上debug显示仅仅收到请求,未作出任何回复。
再来观察wireshark抓包情况:直接在Filter中输入arp,因为我们只关注arp协议的包:
抓包
上图显示了arp请求使用了广播发送,问谁有1.1.1.2的mac地址,告诉我(1.1.1.1),1.1.1.2则使用了单播进行回复。
展开看:
ARP广播请求
ARP单播应答