在链路层中,是使用的MAC地址作为转发的依据,也就是说根据MAC地址转发帧,但是上层网络层传递的是ip地址,现在出现一个问题,如何将网络层的ip地址转化为链路层的MAC地址——ARP协议。
发送数据到子网内
在每台计算机或路由器中有一个ARP表,也就是ip地址和MAC地址的一个映射表(当然还有其他的字段比如ttl)。
当网络层ip数据报传递到链路层时,会将目的ip地址按照ARP表,做映射,根据表映射到MAC地址,得到目的的MAC地址,进行转发。
如果表中没有找到目的ip地址,没有映射到,该怎么办?
如果在ARP表中没有找到该条映射数据,则会发出特殊的ARP请求分组,目的MAC地址是子网上其他的主机和路由器。也就是进行广播请求分组。
由于是广播的请求分组,所以子网上的其他主机和路由器都能够接收到该分组,进行解析,并判断,目的ip地址是否和自己的ip地址相同,如果相同,会发送一个响应分组,但是这个响应分组的目的地址不是广播地址,该响应分组的目的地址是请求分组的源MAC地址。
接收到响应分组之后,使用接收到的目的MAC,进行转发分组。
发送数据到子网外
如果发送到子网外,那MAC地址会怎样填写?直接填写目的的MAC地址?如果直接填写目的MAC地址,那怎样获取目的MAC地址?
如果发送数据到子网外,经过路由器,就会先将分组转发到路由器,路由器看到该链路层帧是向它寻址的,因此把这个帧传递给网络层,并根据目的ip地址决定转发到哪个接口。到达指定接口后,根据ARP表做映射,得到目的MAC地址,进行封装帧,再发送。