![对外部网络的请求如何路由?](https://linux22.com/image/1324411/%E5%AF%B9%E5%A4%96%E9%83%A8%E7%BD%91%E7%BB%9C%E7%9A%84%E8%AF%B7%E6%B1%82%E5%A6%82%E4%BD%95%E8%B7%AF%E7%94%B1%EF%BC%9F.png)
当我想从连接 C 类网络的 PC 访问某个外部网络(比如说 1.1.1.1)时,以下哪一种情况实际上会发生?
我的电脑的操作系统(NIC)知道我想要访问内部网络之外的地址,并直接将数据包发送到默认网关。
或者
我的 PC 像处理其他请求一样处理该请求,将其发送到我的交换机,交换机不知道目标地址,因此它会将它们重新发送到所有连接的设备。由于其中之一是路由器,它会将数据包重新发送到外部。
或者我完全误会了?
答案1
在某种程度上,两者都有。IP 等级,你的电脑知道它要去一个外部地址,并直接把它发送到路由器,因为它知道路由器是作为任何不在本地网络上的东西的网关。子网(它通过使用子网掩码)。
然而,交换机和集线器在 IP 之下运行,以太网层(具体来说,是数据链路层,IEEE 802 以太网用于有线以太网和 WiFi 设备)。它不知道 IP 地址是什么,也不知道它们是什么意思。但是,它确实理解 MAC 地址。当您的计算机发出数据包时,它还包括MAC地址网络上下一个应该处理该数据包的设备。在本例中是路由器。
当一个中心收到数据包后,它会执行您所描述的操作 - 它会复制数据包并通过所有线路将其发送出去,希望将其送达目的地。任何收到数据包但不是接收方的设备都会将其丢弃。
A转变另一方面,它更智能一些。它实际上会保存一个 MAC 地址表,并根据传入流量将它们与每个端口关联起来。这样,当它必须将数据包发送到特定 MAC 地址时,它就知道需要通过哪个端口发送。这有助于减少网络拥塞。
答案2
假设网卡上的网络掩码为255.255.255.0
,则请求将被发送到默认网关。如果网络掩码的设置使得所需网络在范围内,则 PC 将处理该请求。
答案3
您的 PC 使用其子网掩码来确定目标 IPv4 地址是否在子网外。如果是,则您的 PC 计划将以太网层报头寻址到路由器的以太网 (MAC) 地址。如果它不知道路由器的 MAC 地址,则使用 ARP 来查找。
因此,在以太网层,数据包被发送到您的路由器,但在 IP 层,数据包仍然被发送到原始目标 IP 地址。
答案4
2) 很容易回答:
您的 PC 不会将其数据包发送到交换机,因为它不知道交换机在那里。
您的 PC(或者更确切地说,您的网络堆栈)有一个路由表。根据该表中的信息,它可以:
- 将信息循环回自身(自己的 IP,或者本地主机)
- 将其寻址到本地网络上的 NIC(通过其自己的 IP 和自己的子网了解)
- 知道它不是本地的,并通过希望知道它要去哪里的人(又名默认网关)发送它。
我正在努力想出一个更长更详细的答案,大约一周后我可能会在我的主页上发布一些关于网络的内容。同时,我想引导您阅读本网站姊妹网站上的一个非常长且详尽的答案:服务器故障 子网划分如何工作?