如果我的电脑有IP地址,为什么还需要MAC地址?
MAC 和 IP 地址的原因
MAC 地址和 IP 地址在Internet 协议套件的不同层上运行。MAC 地址用于在第 2 层识别同一广播网络中的机器,而在第 3 层使用 IP 地址识别不同网络中的机器。
即使你的计算机有一个 IP 地址,它仍然需要一个 MAC 地址来查找同一网络上的其他机器(尤其是路由器/网关到网络/互联网的其余部分),因为每一层都在使用底层。在前面提到的页面上,您可以找到一些很好的图表,详细解释了协议套件。
当您了解 IP 到 IP 通信实际上只是在每个路由器跃点上发生的一系列 MAC 到 MAC 通信时,您就会明白为什么两者都是必要的。
离开工作站、发往不同子网中 IP 的数据包的 IP 标头将保留源 IP 和目标 IP,暂时忘记 NAT。[稍后,我将讨论当目标位于同一子网内时会发生什么。] 以太网标头包含您的源 MAC 和默认网关的目标 MAC。 从您的角度来看,不知道最终目标 MAC。 第一个路由器会将源 MAC 重写为自身,将目标 MAC 重写为下一个路由器跃点,依此类推,直到数据包到达直接连接到目标子网的最后一个路由器。
为了尝试一个简单的说明,请考虑 L2/L3 标头,因为数据包从源 IP (sIP) 移动到目标 IP (dIP),并且沿途重写源和目标 MAC——fs=first-source 和 ld =last-destination 和 r1-r3 是路由器:
fsMAC-r1MAC / sIP-dIP
r1MAC-r2MAC / sIP-dIP
r2MAC-r3MAC / sIP-dIP
r3MAC-ldMAC / sIP-dIP
任何涉及的 L2 交换机都不会修改 MAC 地址。
现在要与子网中的另一个 IP 通信,需要直接进行 MAC 通信,但要获得该 MAC 地址需要使用子网中的广播来查找它的 ARP 协议。 顺便说一下,这就是您的工作站获取必须存在于同一子网中的默认网关的 MAC 地址的方式。
无需进入 OSI 模型、TCP 层等:
回到过去,创建了网络:一些计算机会相互通信以共享某些东西。要做到这一点,他们需要知道谁在说话,谁在和谁说话。因此,我们没有给每台计算机一个名字,而是给它们一个 ID。这个ID叫做MAC地址,应该是每台计算机的唯一标识。
(好吧,识别每个网卡,但在那个时候,您可以认为每台计算机都有一个 MAC 地址)。
没有关于计算机如何相互通信的唯一规范:出现了许多协议:TCP/IP、IPX/SPX 等等。每个协议都会指定他们认为没问题的事情。例如,IPX/SPX 将使用 MAC 地址和更多信息来寻址每台计算机。
但是 TCP/IP 协议的设计略有不同:他们决定拥有一个由 4 个字节(0.0.0.0 到 255.255.255.255)组成的虚拟地址就足够了,而且更易于管理:无论你的网卡是否都有相似的MAC地址,我们将我们的计算机分组,以便所有以10.0.xx开头的TCP/IP地址都是工程组的一部分,而10.1.xx的那些是打印机,并且。 ..
因此,如果一个 TCP/IP 地址需要与另一个通信,则只需使用 TCP/IP 地址。但是网络设备需要知道该消息将发送到哪个网卡,因此它们以某种方式将 TCP/IP 地址转换为 MAC 地址。
为什么不简单地消除 MAC 而只使用 TCP/IP 呢?
一些原因:
- 易于对 TCP/IP 地址进行分组,
- 所有设备都是为了处理 MAC 地址而构建的,在那个低级别的要求中,并且需要更改
- 尽管是绝大多数(我认为 :-P ),但其他一些协议仍在使用中,它们依赖于 MAC 地址
没有任何物理因素可以阻止您设计只有 L2 和 L3 的 IP 地址的网络。然后“以太网交换机”将学习传入数据包的 SIP 地址并泛洪或转发到 DIP 地址。
然而,这个网络永远只支持 IP,当下一代 IPvX 出现时,它将无法工作,因为“以太网交换机”无法支持该协议。您也无法运行其他各种协议,例如 IPX 和 AppleTalk,或者您在家中开发和测试的某些新协议。
抽象层提高了开发速度并鼓励了创新,因为你不需要重建整个房子来改变一个窗口。
现在,您可以运行相同的以太网交换机并将您的网络从 IPX 迁移到 IPv4 再到 IPv6,而根本不涉及您的 LAN。