我理解公共 IP 地址之所以必要,是因为如果我们仅使用 MAC 来在主机之间移动数据,那么整个互联网将是一个庞大的扁平网络。但是私有 IP 地址有什么必要呢?为什么路由器不能只使用 MAC 地址连接到本地客户端?
答案1
答案是你的软件应用程序和操作系统设计用于使用 TCP/IP 进行通信,而不是直接使用以太网MAC寻址。
因此,无论您要与之通信的远程计算机/节点是在您的本地网络中还是在地球另一端的其他网络中,该逻辑链接都是通过 TCP/IP 建立的。这样,应用程序只需在 IP 数据包中定义目标 IP 地址,用数据填充它(实际上打包到 TCP/UDP 段中),然后一路发送,而不必担心底层如何处理实际传输。
操作系统的网络堆栈决定 IP 地址是本地的还是远程的:
- 如果是本地网络,则查找该 IP 地址对应的 MAC 地址并直接发送 IP 数据包(位于以太网帧中)。
- 如果是远程网络,则查找默认网关路由器的 MAC 地址以发送 IP 数据包,同样在以太网帧内。路由器从帧中检索 IP 数据包,查看地址并确定下一个要传递的节点(及其 MAC 地址),然后在另一个以太网帧中将其发送到该方向。
注意:IP 数据包完全可以通过以太网以外的其他数据链路协议传送(猜猜看,你的拨号或 DSL 调制解调器是不是以太网帧是一种网络协议,它通过以太网电缆连接到您的 ISP。只要目标 IP 地址可达,应用程序就不必关心这一点。完全可以将其他网络协议数据(不是 IP 数据包)包装在以太网帧中进行传输。
答案2
最终,所有数据包都会被传送到 MAC 地址。当 IP 数据包到达路由器时,如果 NAT 表显示该数据包的目的地是您的私有地址 192.168.1.10,则路由器会查找 192.168.1.10 的 MAC 地址,然后将数据包发送到该 MAC 地址。
但是,MAC 地址是第 2 层地址,根据定义,它仅允许本地网络上的项目之间进行通信。因此,“为什么使用私有地址而不是 MAC 地址”这个问题假设所有非公共网络都是简单的单一扁平网络。
几乎没有由单个 LAN 组成的私有企业网络,许多家庭环境都有多个网络。为了在这些网络之间进行路由,您需要使用 IP 等第 3 层协议。
因此,换一种方式来表达您的问题,就是“为什么路由器制造商和操作系统开发人员不在特定情况下创建仅第 2 层的本地网络,因为第 3 层并非绝对必要?”。这个问题的答案是,在现有通用解决方案已经完美运行的情况下,创建一个小众解决方案是不值得的。这样做不会有任何好处。
答案3
如果使用 MAC 进行路由,那么您的路由表将包含到网络上每个节点的路由,因为每个制造商的 MAC 地址都不同。
IP 就像是不同制造商的网络设备进行通信的标准平台。使用 IP,您可以汇总通往网络上许多设备的路由,从而节省带宽和资源。OSI 模型提供了更多关于网络工作原理的见解。
如果没有这个标准,我相信网络本身就不会像今天这样发展。
答案4
网络通信分为多个层。此处的图显示了 OSI 模型。每一层都有自己的用途。从图的底部开始
i. 物理层:此层是连接设备的实际介质,可能是 cat5 电缆、光纤等。
ii)数据链路层:该层负责物理寻址和数据包交换、校验和等。
iii)网络层:此层负责逻辑寻址和路由数据包。
等等
这有助于分离网络堆栈的各种功能,以便各层不依赖于其他层。
现在来回答你的问题。
MAC 地址位于数据链路层,其功能是物理寻址。网络层的功能是为通信节点提供逻辑地址,因此,当您在两个设备之间进行通信时,必须通过其网络地址来寻址。此外,它们甚至可能不具有相同的数据链路层,即其中一个节点甚至可能没有 MAC 地址。