4.1 引言
ARP为IP地址到对应的硬件地址之间提供动态映射。之所以用动态这个词是因为这个过程
是自动完成的,也就是ARP广播。ARP广播的数据帧中包含目的主机的IP地址,其意思是“如果
你是个这个IP地址的拥有者,请回答你的硬件地址”。
4.2 一个例子
在一个以太网中,发送端必须把IP地址转化为mac地址。这是先去查arp表,看IP对应的mac的
地址是什么,如果arp表中有对应的map记录,则根据mac地址在以太网中传输数据帧;如果没有就
发送ARP广播,在ARP数据帧中包含目的主机的IP地址,根据ARP的应答确定mac地址。
补充:arp表和mac表的区别
(1) arp是三层设备才有,如:路由器、主机;mac表二层设备才有,如交换机;
(2) arp表阐述ip地址与mac地址的对应关系,而mac表阐述mac地址与接口的对应关系。
4.3 ARP 高速缓存
命令:arp -a //显示高速缓存所有的内容
4.4 ARP 的分组格式
注意:ARP请求/应答的数据帧长度都是48字节(14字节的以太网首部,28字节的ARP数据)
(1) 以太网首部的“以太网目的地址”,在ARP请求时是全为1 的广播地址。
(2) 两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806;
(3) 硬件类型字段表示硬件地址的类型。值为1即表示以太网地址;协议类型字段值为0x0800即表示IP地址类型。
(4) 两个1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址长度,以字节为单位。
对于以太网IP地址的ARP请求或应答来说,它们的值分别为6和4。
(5) 操作字段指出四种类型,ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4)。
这个字段是必须的,因为ARP请求和RARP应答的帧类型字段值是相同的。
(6) 以太网数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。
对于一个ARP请求来说,(ARP请求报文)除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一
份目的IP地址为本机的的ARP请求报文后,就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端
地址,并把操作字段置为2,最后把它发送回去。
(1) 第一行中输出的字段ARP,表明此数据帧是一个ARP请求。
(2) arp或ip后面的值60指的是以太网数据帧的长度,由于ARP请求或应答的数据帧长都是42(28字节的ARP数据,
14字节的以太网帧头),因此,每一帧都必须加入填充字符以达到以太网的最小长度的要求:60字节。
(3) 发送ARP请求与收到ARP回答之间的延时是2.2ms,而在0.7ms之后发出第一段TCp报文。本例中,用ARP
进行动态地址解析的时间小于3ms。
(4) 从第二行看,ARP请求时广播,但是ARP应答直接发送到请求主机,而不是广播。
2 对不存在主机的ARP请求
4.6 ARP 代理
如果ARP请求时从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,
这个过程称为ARP代理。这样可以欺骗发起ARP请求的发送端,使它误以为路由器就是目的主机。路由器的功能
相当于目的主机的代理。
如果在主机gemini上执行arp命令,发现,子网140.252.1上的netb和sun的mac地址是相同的。
当子网140.252.1(gemini)上的其他主机有一份IP数据报要传给地址为140.252.1.29的sun时,gemini比较
网络号(140.252)和子网号(1),因为它们都是相同的,发送ARP请求。路由器netb识别出该IP地址属于它的
一个主机,于是把140.252.1作为mac地址回答。主机gemini通过以太网发送数据报到netb,netb转发到sun。
(之后的数据报由sun路由根据数据报中的目的Ip再做路由)