由于 MAC 地址只能在本地网段内使用,因此我们使用 IP 地址通过路由器与其他网段进行通信。同时,对于本地目标,ARP
使用 将 IP 转换为 MAC 地址,此后在对话中使用 MAC 地址。
这让我想知道为什么我们在本地网络上使用 IP 地址。假设所有系统都在同一子网中,那么 IP 地址似乎是多余的,因为系统实际上只使用 MAC 地址来路由彼此之间的通信。
如果计算机不需要在本地网络段之外进行通信,那么它们真的可以完全不使用 IP 地址吗?为什么不能呢?
答案1
简而言之,不需要...您不需要 IP 地址来连接同一网络中的机器。有几种这样的协议示例,例如:IPX 或 Banyan 协议。
使用硬件地址的问题最好这样描述:
想象一下,计算机就像是房间里的人……(每个人都被粘在一个地方,无法四处移动)如果鲍勃想和苏茜说话……他会大喊“嘿,苏茜”……苏茜会回应……然后开始对话。很棒吧?当然……在小规模上,这种方法非常有效,实际上经常用于两个(或几个)设备之间的某些网络协议。(许多高 I/O 协议使用非IP
协议,因为它们“更简单”并且针对任务进行了精细调整。)互联网(正如我们今天所知道的)不仅仅是两个……或几个人直接交谈。互联网实际上是数十亿台设备。如果将它们全部放在同一个“房间”(网络段)中……想象一下如果鲍勃想和苏茜说话会发生什么。鲍勃会大喊“嘿,苏茜!”……鲍勃的声音会在人群中消失。(建造一个容纳数十亿人的房间同样荒谬。)
出于这个原因,网络被segmented
划分为“较小的房间”,这样位于同一segment
房间的人就可以直接互相交谈,而房间外的人则需要某种方式router
将消息从一个房间传递到另一个房间。但是房间数量众多意味着您需要某种寻址方案,以便routers
中间的各个人知道如何将消息从 Bob 传递给 Suzy。使用 IP 协议,他们subnet
为每个“房间”分配一个,然后路由器被告知如何将消息从一个房间传递到另一个房间。例如,如果 Bob 的地址是 1.1.1.1,Suzy 的地址是 2.2.2.2,而 Bob 的地址subnet
是 1.1.1.0/24(这意味着他的地址的前 3 个字节必须匹配才能在他的房间中),Bob 需要将他的消息传递给,router
以便可以将其传递给 Suzy 的“房间*”。Bob 知道他的地址router
是 1.1.1.2,因此他将消息传递给router
,然后路由器将其传递给中间的其他路由器,直到消息传递到 Suzy 的路由器 2.2.2.1,该路由器将消息直接交给 Suzy...然后 Suzy 可以以相同的方式将回复发送回 Bob。
同一网络中的计算机subnet
实际上使用 MAC 地址直接相互通信。它实际上首先发出请求ARP
(ARP = 地址解析协议),这意味着它会喊出“谁有地址 XXXX?”... 拥有该地址的人会回复,从那一刻起,他们继续直接相互通信。
(如果您真的感兴趣的话,我可以继续这个类比并进一步解释互联网的工作原理。)
答案2
IP 地址显然不受硬件约束,而 MAC 地址则受硬件约束。MAC 地址大多数情况下可以临时更改,但每个设备都应该有一个全球唯一的工厂分配的 MAC 地址。
此外,MAC 特定于以太网,虽然它现在是事实上的第 2 层封装方法,但情况并非总是如此,而且您永远不知道未来是否会出现更好的方法。
答案3
很简单,对于您的网段内部和外部的人来说,做同样的事情要容易得多,而且开销很小。
其他一些可能的原因
- 你可能想使用 IP 来帮助记住某个东西是什么(路由器以
.1
某种东西结尾) - 您可能希望在一个网段上运行两个互不通信的网络(您可以通过子网使用 IP 来实现)
- MAC 地址不容易记住。
答案4
对我来说最令人信服的理由是互操作性。当然,你可以对本地网络通信进行特殊处理,从而消除第 3 层。但谁会从这种特殊情况下受益呢?
例如,如果您在本地网络的某个位置托管了一个网页,并且想要从同一网络内浏览该网页。需要做什么?
首先,您在地址栏中输入域名“server.example.com”。然后您(即浏览器)发出 DNS 请求,将该域名解析为 IP 地址。最终,该 DNS 请求到达托管“example.com”的 DNS 服务器。然后呢?
DNS 服务器不会返回 MAC 地址(我的意思是,一般来说它怎么知道客户端和服务器在同一个网络上)?
因此它必须返回一个 IP 地址。然后,Tada!我们回到第 3 层。