2018-03-20mac地址和IP地址是什么关系?
参考两篇文章
http://blog.csdn.net/zdavb/article/details/50703898
https://www.zhihu.com/question/49335649
IP地址和MAC地址
本科的时候老师讲到这两个地址的时候说过这样一句话:IP地址就像家里的门牌号,MAC地址就像你的身份证号,只知道MAC地址是无法知道你在什么位置的,除非是有个超大功率的扩音器,世界上所有人都能听到:***你在哪?然后你再用着一个扩音器喊:我在这。然后通信才能这样进行。而IP地址呢?不管你人去了哪?总会有个邮件地址,比如北京市海淀区闵庄路87号一样,很容易就会定位到你的位置。
这样理解起来很清楚,但是我们还是要深入的对这两个地址探讨一下。
MAC地址是什么
首先,说明一下MAC地址是啥?MAC地址是MAC(Media Access Control)协议所使用的地址,最早是在以太网中使用的,后来在IEEE中定义的802协议中被广泛使用,但也不是全部。因此,MAC地址只在802协议的网络中才有,MAC协议是数据链路层的子层,并不能说MAC地址就是数据链路层地址。什么是802协议,就是IEEE定义的一些协议,常见的由802.3(以太网)\802.11(无线局域网)等等。那难道还有其他类型的吗?当然!比如移动蜂窝网络、ATM网络、IBM开发的SAN网络等等,这些都是没有MAC地址的。
所以,这也就解释了为啥有了IP,IP是网络层的地址,而网络层的出现目的之一就是屏蔽底层硬件的差异化,也就是在LAN上,到底用什么样的方式来找到目标主机并发送消息,IP是不管的。
所以,这个问题也变得容易回答了,可不可以没有MAC地址,答案是可以的。只要你能有种方式可以准确无误的将数据传送给目标主机即可。由于现在LAN中以太网占据了统治地位,所以MAC地址也相应的水涨船高了。
IP地址是什么
上面提到了IP地址的一个用途是屏蔽底层的差异化,实际上却远不止如此,IP地址包含两部分,一部分是网络号,一部分是主机号。对于中间路由器而言,并不关心它的主机号,而只关注网络号,在路由表中有如下对应<网络号,输出端口>(路由表由路由算法生成),然后转发。路由通过一些算法,如距离矢量协议和链路状态协议来更新路由表,这些在协议通过在路由器之间交换信息,使得路由器对整个网络拓扑有个清楚的认识。IP协议还有很多其他方面,比如拥塞控制(当路由器检测到拥塞时,可以发送源端抑制的ICMP分组,请求降低发送速度,不过现在更多在传输层做)、分段等方面。
知乎的回答中有
二层设备基于MAC地址转发数据帧,三层基于IP地址转发报文”MAC地址是烧录在网卡或者接口上的物理地址,具有二层意义和全球唯一性,一般不能被改变。IP地址是网络中的主机或者三层接口在网络中的逻辑地址,在同一个网络内具有唯一性。
每个可以连接到以太网(Ethernet)的设备必须有一个 MAC 地址
下面这个回答很棒
题主已经知道了『每个电脑』都有一个 MAC 地址(Media Access Control address),准确说应该是『每个可以连接到以太网(Ethernet)的设备必须有一个 MAC 地址』,这个地址就是为了当别的设备向这个设备发数据包的时候可以指定地址(换言之,快递员要想给某个客户送包裹,总要有个地址对吧)。
理解了 MAC 地址,那我们看看可以怎么用这个 MAC 地址。我们可以把两台电脑连起来,然后这两台电脑就可以直接使用数据链路层(OSI 第二层)的 PPP 协议(Point to Point Protocol) 收发数据了,这个时候每个数据包都会直接使用这两台电脑的 MAC 地址(源地址和目标地址)。在这种场景下我们没用到 IP 地址就实现了设备之间的数据交换。
IP 可以用于更长距离的设备之间的互联。假设你在中国有一台电脑 A,想访问美国的一台电脑 B,你不可能直接从中国拉一条网线连接到美国,理论上说得通,但是不具可行性。所以在中国和美国之间需要众多的中转路由器,电脑 A 每发一个数据包,都要经过这些路由器,才能到达电脑 B,在这种情况下,你不可能直接使用 PPP 协议,因为两台电脑不是直连的。
现在回到我们生活中最常见用一台电脑(电脑 A)连接一台家用路由器,大多数人家里都有一个或者多个无线路由器,当你连接上去之后,电脑 A 的网络默认设置里面会有一个已经帮你设置好的网关地址,Windows 下叫 Gateway(网关),Mac 下叫 Router(路由器),在这里它们只是同一个东西的不同叫法,通常会是类似 192.168.1.1 这样一个地址,这就是路由器的 IP 地址。现在电脑 A 上发送出去的每个数据包,首先要经过这个路由器,但是它只有路由器的 IP 地址,没有路由器的 MAC 地址,这样是发不了数据的(数据链路层的数据包协议中要求定义目标 MAC 地址,这样当路由器收到一个数据包的时候,看到数据包里面指定的目标地址跟自己的 MAC 地址一致,才会进行下一步处理,否则,数据包会被丢弃),所以电脑 A 需要找出路由器的 MAC 地址,这时候它使用 ARP 协议(Address Resolution Protocol)向它的子网(还记得那个子网掩码的东西吗? 255.255.255.0 )发送一个 ARP 广播(Broadcast),这个广播实际上是在问一个问题:请问谁的 IP 地址是 192.168.1.1?麻烦你告诉我你的 MAC 地址。这个时候路由器收到这个 ARP 广播,就会直接给电脑 A 发送一个 ARP 响应,在里面包含自己的 MAC 地址。至此,电脑 A 知道了路由器的 MAC 地址,就可以直接向路由器发送它的数据包了。这个时候数据包里面包含了电脑 A 的 MAC 地址、本地路由器的 MAC 地址、电脑 A 的 IP 地址和电脑 B 的 IP 地址。接下来的你的路由器会把数据包传给你的 ISP,方式跟上面说的大同小异,而 ISP 与 ISP 之间则需要根据数据包中指定的目标 IP 和路由器存的路由表(Routing Table)来确定把数据包传给接下来的哪个路由器,直到数据包被传到跟电脑 B。
上面说了 MAC 和 IP 各自的使用场景,但是并没有说到他们的区别。他们的核心区别是在一个子网络里面(比如一个公司可以有自己的内部网络),MAC 地址可以在这个子网络里面定位到不同的网络设备,IP 可以在整个 internet 中定位到不同的子网络。所以 MAC 是『设备 <-> 设备』,而 IP 是『网络 <-> 网络』。
到这里你可能还有疑问,假设没有 IP,只用 MAC 就不能实现这种超远程的互联吗?答案是可以的,但那样会失去很多的灵活性,因为 MAC 是全局唯一的,不存在『MAC 子网』这样的东西,意味着只使用 MAC 没办法创建子网络,全人类只有唯一一个大网络。举个不太恰当的例子,有点像域名之于 IP 地址(我指的不是可读性问题,而是这种 indirection 带来的创造灵活性的可能)。