只用MAC地址,不用IP地址

来源:图解TCP/IP [日]竹下隆史 村山公保 荒井透 苅田幸雄
P-167

试想一下,如果不使用IP地址,而是通过MAC地址连接世界上所有网络中所有主机和节点的情况。仅仅凭一个MAC地址,人们是无法知道这台机器所处的位置的。而且如果全世界的设备都使用MAC地址相连,那么网桥在习得之前就得想全世界发送包。可想而知那将会造成多大的网络流量。由于没有任何集约机制,网桥就不得不维护一张巨大的表格来存储所学到的所有MAC地址,所需要的存储和查询代价非常大。而且一旦这些信息超过网桥所能承受的极限,那将会导致网桥无法正常工作,也就无法实现通信了。

只用IP地址,不用MAC地址

作者:不求东西
链接:https://www.zhihu.com/question/21546408/answer/28155896
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

长话短说,理由有三点。
一. 整体与局部信息传递时候,需要知道的其实是两个地址:

  • 终点地址(Final destination address)
  • 下一跳的地址(Next hop address)

IP地址本质上是终点地址,它在跳过路由器(hop)的时候不会改变,而MAC地址则是下一跳的地址,每跳过一次路由器都会改变。这就是为什么还要用MAC地址的原因之一,它起到了记录下一跳的信息的作用。

注:一般来说IP地址经过路由器是不变的,不过NAT(Network address translation)例外,这也是有些人反对NAT而支持IPV6的原因之一。

二. 分层实现如果在IP包头(header)中增加了”下一跳IP地址“这个字段,在逻辑上来说,如果IP地址够用,交换机也支持根据IP地址转发(现在的二层交换机不支持这样做),其实MAC地址并不是必要的。但用MAC地址和IP地址两个地址,用于分别表示物理地址和逻辑地址是有好处的。这样分层可以使网络层与链路层的协议更灵活地替换,网络层不一定非要用『IP』协议,链路层也不一定非用『以太网』协议。这就像OSI七层模型,TCP/IP五层模型其实也不是必要的,用双层模型甚至单层模型实现网络也不是不可以的,只是那样做很蛋疼罢了。

三. 早期的『以太网』实现早期的以太网只有集线器(hub),没有交换机(switch),所以发出去的包能被以太网内的所有机器监听到,因此要附带上MAC地址,每个机器只需要接受与自己MAC地址相匹配的包。