MAC 地址是链路层地址,通常和网卡相关。
它的主要作用不是“全球唯一标识某台机器”,而是帮助局域网中的设备完成“这一跳投递”。
交换机在转发以太网帧时,主要看的就是 MAC 地址。
因此,在同一个二层网络里,真正决定帧发给谁的是目的 MAC,而不是 IP。
这就是为什么包里最先看到的是一串 MAC 地址
因为数据要先走当前链路这一跳,链路层先于网络层发生作用。
Q:为什么不能直接用 MAC 作为 IP
这是一个很经典的问题。
直觉上看,既然网卡有 MAC,为什么互联网不直接拿 MAC 做地址?
因为 MAC 只在当前链路这一跳有意义。
一个包经过路由器后,链路层头部通常会被重写,源 MAC 和目的 MAC 都可能变化。
所以 MAC 不是一个能端到端保持稳定的地址。
而 IP 是逻辑地址,能够分层、聚合、划分网段,适合大规模路由。
互联网之所以能扩展,就是因为 IP 可以按前缀聚合,而不是为全球每一个终端维持一条扁平记录。
MAC 用来解决本地链路上的一跳投递,IP 用来解决跨网络的逻辑寻址。
0x05 ARP
应用程序通常知道自己要访问的目标是一个 IP 地址,但链路层发帧时需要的是 MAC。
这就需要一个“翻译器”,把 IP 翻译成当前链路上的 MAC,这个协议就是 ARP。