在使用IP协议发送网络分组时,除了需要知道目的主机的IP地址外,还需要知道其MAC地址,以完成数据链路层的数据封装。而在网络层协议中,IP协议处于中间位置,在其左下角的ARP协议便向IP协议提供查询MAC地址的服务。
一、ARP工作方式
1.请求本网段主机MAC地址(如1–>2/3)
当源主机向目的主机发送报文时,会先在自身的ARP缓存表中,查找是否有目的主机IP地址所对应的MAC地址。
若有,则直接使用,完成数据链路层封装。
若无,则在本网段内,发送一个ARP广播请求分组。分组中包括源主机IP、MAC地址,以及目的主机IP地址。
本网段内的所有主机都会收到这个分组,若其发现自身IP地址等于ARP请求分组中的目的主机IP地址,则向源主机返回一个ARP单播响应分组,告诉源主机自己的MAC地址。
源主机收到响应分组后,便知道了它所需要的MAC地址
上述过程,可以生活化地理解为:老师要找LBW同学,就在全班喊:LBW在哪儿啊?所有同学都听到了老师的呼喊,但只有LBW会回应:老师,我在第三排第二列。你可能不知道。。。
2.请求外网主机MAC地址(如1–>4/5)
当源主机向目的主机发送报文时,此时通过本网段的ARP请求分组已经是得不到响应了。
那么源主机会将ARP请求报文发送给默认网关(即通向外网的路由器端口),获得网关MAC地址后,将其封装进数据链路层的目的MAC地址中,并且发送IP报文。
IP报文到了路由器中,发现目的IP地址并不是该路由器,于是将MAC地址改成下一条路由器的MAC地址,转发出去。
假设经过一次或多次路由器间转发,IP报文现在到了目的主机所在的路由器处,该路由器首先使用一次APR协议,原理同1,找到目的主机的MAC地址,然后将其封装进IP数据报中,并发送给目的主机,这样一次数据传输就完成了。
二、ARP实践
1.查看本机ARP缓存表
在CMD中敲下
arp -a
命令,即可查看本机的ARP缓存表。缓存表中会存储已知的IP地址及其对应的MAC地址
2.修改ARP缓存表(Windows XP)
在CMD中敲下
arp -s IP地址 MAC地址
命令,即可修改ARP缓存表,相应的IP地址与MAC地址的映射会被修改。且由于该MAC地址是手动指定,表项类型会变成静态。