为什么我们需要IP地址来进行本地网段内的通信?

为什么我们需要IP地址来进行本地网段内的通信?

由于 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 层。

相关内容