分享

IP地址和MAC地址的区别和联系是什么?

 半佛肉夹馍 2023-10-20 发布于河南

没有任何联系。


MAC是Media Access Control Address的缩写,是大部分IEEE 802网络设备使用的物理地址格式。这个地址用于物理上直接可达的网络内的网络设备之间的通讯,在ISO-OSI七层模型中位于第二层数据链路层。

在使用CDMA-CD协议的以太网中,打个比方的话,这个地址的作用是,网卡A大喊网卡B的名字(MAC地址),其它网卡要假装没听到。

注意这个“假装没听到”:只要你打开了网卡的混杂模式(Promiscuous Mode),你就可以收到局域网上传输的所有数据包了。

处于这种状态的计算机被称为“sniffer”,这是一种侦测局域网故障或者盗取内网数据的常用技术,因此很多公司严厉禁止员工把自己的网卡设置到混杂模式。

总之,MAC用于连接在同一个局域网的网卡间的直接通讯;通讯模式是用带着目标MAC地址的数据报文在网络中广播,只有地址正确的那个网卡才会接收这个报文,其它网卡不予理睬(设置为混杂模式除外)。


IP地址是网络层地址,它属于ISO-OSI七层协议的第三层网络层。

IP地址的设计重点在于路由,也就是要考虑如何规划路径才能把报文投递给目标设备。

打个比方的话,IP地址类似于邮政编码,隐含了国家、地区、城市、街道等信息;携带IP地址信息的报文到了路由器之后,路由器要完成分拣工作、按照南来北往东投西递等不同方向给IP不同的报文分类、投递到正确的端口——比如,这一批邮件是发往X省的,都给997号班车;另一批邮件是发往Y省的,都给996号班车,等等。

等到了X省,那里的分拣中心(路由器)要进一步分拣,这一批到YP地区,走8235号班车;那一批到YY地区,走8233号班车,依此类推。

最终,等邮件到了你所在小区(局域网),IP地址就无能为力了。它只管分拣(路由)这一层,不管数据链路层。

这时候怎么办呢?

转交给MAC地址,让它投递给正确的网卡。

因此,IP协议需要数据链路层协议承载才能工作,单靠它是完成不了消息投递工作的。

但是,互联网上的IP报文并不携带MAC地址啊?它是投递到小区了,怎么找到正确的网卡呢?

这时就需要ARP协议来帮忙了。

ARP协议在你家/你公司的出口路由器里面维护一张ARP表,记录了本地局域网里面每一块网卡的MAC地址和IP地址的对应关系;互联网过来个报文,一看IP地址是202.11.123.13,ARP表一查,MAC地址FE.AC.12.34.56.78,于是在外面包装一层,打包成以太网数据,局域网一丢,完事。

注意,这里是在IP报文外面附加个以太网报头,并不影响IP报文本身。

换句话说,IP并不在乎自己的承载协议是不是以太网协议、也不在乎物理地址是不是MAC地址——所以才说IP地址和MAC地址毫无关系——你完全可以用另外一套地址协议取代以太网/MAC地址。只要实现个自己特有的ARP体系即可。

举例来说,你自己玩无线电,自己定了个地址协议,用甲、乙、丙、丁标记不同的接收机(或者用载波频率90MHZ、94MHZ、96MHZ、104MHZ区分也没问题);那么只要你做一个甲、乙、丙、丁和IP的对应表、正确实现了相关地址的翻译工作,这些接收机就可以通过互联网访问,对IP报文没有丝毫影响。


最后,额外提一提NAT。

我们用的PC、手机往往有一个局域网ip地址,一般是192.168.0.*;这个地址并不能用于互联网访问。它和真实的互联网地址之间可以通过NAT协议相互转换。

比如,路由器的互联网地址是202.10.11.123,你的局域网ip地址是192.168.1.16;当你访问互联网时,路由器会把你的IP地址替换成202.10.11.123然后才发送到互联网;互联网服务器回应你时,也会使用202.10.11.123这个地址(也就是你的路由器的互联网地址)。

然后,你的路由器会维护一个对外通信端口和内部ip的对应表。比如,它把你的报文通过端口14566和互联网服务器通讯;那么当端口14566端口收到报文时,它就会把ip地址202.10.11.123替换成你的局域网ip 192.168.1.16,然后再查ARP表、打包成以太网报文并最终完成通信。

这个过程,就是所谓的NAT(网络地址转换)。

如果你所在的公司很大的话,路由器可能仅仅完成局域网IP的翻译工作,报文仍然需要借助路由协议投递到你所在部门的子网,然后再打包成以太网报文,这才能投递给你。

注意,在公司很大这个场景下,不同部门的子网可能仍然是通过以太网协议接入的;因此,“报文投递到正确子网”这一步也要打包成以太网报文、投递给子网网关(此时用的MAC地址是子网网关的MAC);然后子网网关从中解出IP报文、把以太网包头丢弃,之后再次用你的MAC打包成以太网包,这才能投递给你。

其中,公司主网关使用部门子网网关MAC打包、投递这一步,对你来说是不可见的——甚至于,这一步可能在互联网上就要执行十多次(没错,你用trace router追踪时,看到的每一跳可能都对应着一个重新打包-解包过程)。

由此也可见,IP地址和MAC地址其实是毫无瓜葛的。两者仅仅是在传输过程中偶遇、旋即分开而已——那仅仅是报文投递过程中的一个实现细节罢了。


网络上各种设备既是分散在不同位置、不同岗位上的、职责各不相同的一堆个体,又是彼此联系、彼此合作的一个整体。

因此,学网络,一定要搞明白不同阶段、不同位置报文的投递原理以及地址转换/翻译的具体机制;同时还要搞明白每个设备的职责以及在报文投递链上的作用和位置;千万不要胶柱鼓瑟,死板的记忆一堆散乱的名词——那只会越学越晕。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多