ARP协议

    ARP协议实现IP地址到MAC地址的转换。日常使用中,我们用的是IP地址通信,而不是直接使用MAC地址,比如同一网段中,PC-A和PC-B通信,但是PC-A不知道PC-B的MAC地址,那么PC-A就需要发送ARP广播,询问“xxx的MAC地址是多少啊”,PC-B收到广播信息后,就会给出ARP响应“我的MAC地址是xxx”,如下图所示。

IP报文在不同网段之间的转发过程

    报文的转发

    以我们常见的以太网帧为例,如下图所示,PC-A向PC-B发送IP报文,在报头需要封装双方的地址信息,源IP地址就是PC-A的IP地址,目的IP地址就是PC-B的IP地址,源MAC地址是PC-A的MAC地址。目的MAC地址是路由器Port1的MAC地址,也就是网关MAC地址,这是因为PC-A和PC-B不在同一个网段,其中要用到ARP协议进行转换。

    路由器收到这个报文后,发现目的MAC地址是本机Port1端口的,那么需要进行下一步解析(如果目的MAC不是本机,说明是二层转发,不继续处理)。通过查找转发表,发现不是自己的,而是需要发送到Port2,如果不知道PC-B的MAC地址,那么需要发送ARP报文,询问它的MAC地址,将目的MAC换成PC-B的MAC,源MAC换成Port2的MAC地址。

    也就是说,在报文转发的过程中,源/目的MAC地址会不断的更新,而源IP和目的IP是不会改变的。

    总之,IP设备通信时,我们用的是IP地址,二层网络通信时,需要通过ARP协议转换成“下一跳”的MAC地址。同一网段通信,双方的源MAC、目的MAC、源IP、目的IP是不变的。不同网段通信时,双方的源IP、目的IP是不变的,但是源MAC和目的MAC每“跳一次”都要更新,分别是上一个端口的MAC和下一跳的MAC。