Orp*_*edo 49 networking router routing ip subnet
我了解如何使用子网掩码将网络划分为子网,但是,为什么网络中的每台计算机都需要知道子网掩码而不仅仅是路由器?
我可以理解,如果每台计算机都通过电线相互物理连接,但无论如何所有数据包都需要通过路由器。
假设我在网络上有一台192.168.0.0/255.255.255.0具有 IP 的计算机192.168.0.1。
如果该计算机尝试访问子网外的计算机,比如说192.168.1.1,它将消息传输到路由器,路由器会识别出该 IP 位于子网 IP 范围之外,而不是将其传输到子网网络,它将它传输到它所连接的网络(可能是另一个路由器)。
use*_*686 79
您最初的假设并不完全正确。您所说的“路由器”是将两个设备合二为一——一个内部连接到多端口以太网交换机的双端口路由器。(这是一个示例图。)
这意味着,在计算机被直接连接在第2层,并且可以将数据包发送给对方,而不通过路由器芯去-它们只是简单地由开关芯片端口之间中继。(路由器在交换机中有自己的“端口”。)
因此,如果您使用 Wireshark 查看数据包,您会发现它们直接使用彼此的 MAC 地址,而“外部”数据包始终以路由器的 MAC 作为目的地。
(我假设您是?谈论在大多数家庭中发现的典型“无线路由器”,这是此类问题的常见原因。更大的网络将有一个单独的路由器,每个子网有一个端口,还有一些单独的交换机(可能是每个楼层/房间的主一加一),以及连接到这些交换机的几十台计算机。)
它与 Wi-Fi 网络大致相同,只是将“交换机”替换为“无线网桥”,即“接入点”。在这两种情况下,连接的计算机可以在第 2 层直接向彼此发送数据包,而无需通过路由器。
注释:
当我说路由器时,我实际上是指交换机。我的错。我的观点是,子网中的每台计算机都没有相互连接,而是连接到一个交换机,然后可以将包传递到正确的目的地。以太网帧不包含子网掩码,因为交换机已经拥有此知识,因此不需要它来进行正确的交换。
这又是错误的。交换机没有这个知识;他们交换核心工作在2层,不知道什么关于IP -其转发以太网帧纯粹基于“目的MAC地址”字段。
因此,主机需要子网掩码来确定要用作目标的 MAC 地址:
如果对等方在同一子网内,则根据定义假定它处于链路上——因此以太网帧将以对等方的 MAC 作为目的地。
对于子网外的对等体,以太网帧将以网关的MAC 作为目的地。
(这适用于默认配置。一些特殊的雪花网络改变了这一点——例如,大多数操作系统允许为额外的子网添加额外的“on-link”路由;相反,一些交换机可能被配置为欺骗 ARP 响应,这样即使是“on-link” " 流量被迫通过网关。)
jcb*_*rmu 32
计算机如何知道目标地址是否在另一个子网中的同一子网中?
检查本地地址和子网掩码。
让我们看几个例子:
如果我的计算机有 IP192.168.0.1和掩码,255.0.0.0则意味着从192.0.0.0到的任何地址192.255.255.255都在同一子网中。发送到所有其他计算机的数据包不需要通过路由器,它们可以直接发送。发送ARP报文,获取目的计算机的MAC地址,然后发送报文。
但是,如果我的计算机有 IP192.168.0.1并且掩码是,255.255.255.128那么同一子网中的计算机只能从 IP 地址192.168.0.0到192.168.0.127。可以直接访问它们(发送 ARP、查找 MAC 地址等)。例如,192.168.0.200必须通过路由器到达任何其他地址。
pjc*_*c50 12
IP 有一点不明显的是,每个 IP 设备本身就是一个路由器。
这可以在普通 PC 上使用“路由打印”命令看到。您连接到两个网络:您的本地以太网或 wifi 网段,以及 localhost 网络。每个数据包都需要决定将它放在哪个网络上。
如果您将计算机放在两个网络上,例如“公共”和“私有”网络,这一点会变得更加明显。现在您肯定需要子网掩码来决定将数据包发送到哪个网络。
许多人会偶然发现具有单一网络连接的 PC 可能会使用错误配置的子掩码工作:他们最终只会将所有内容发送到网关。
我在这里的其他一些答案中看到了这一点,但我认为它可能更清楚:在具有多个网络接口的计算机上,子网掩码可用于根据目标 IP 地址自动确定要在哪个物理接口上发送IP 流量。
如果您将数据包发送到连接到其中一个接口的 LAN 上的设备,为了知道将其发送到哪个接口(如果您尚未明确配置路由),计算机可以检查接口以查看if subnet_mask & destination_ip == subnet_mask & interface_ip(&我的意思是按位与,==我的意思是断言相等),如果匹配,请选择该接口。
这样,如果你有例如:
并且您发送一个数据包到 192.168.2.123 并且没有设置路由,可以确定应该使用接口 C,因为255.255.255.0 & 192.168.2.123 == 255.255.255.0 & 192.178.2 .
如果不知道子网掩码,这是不可能的,因此您必须为每个发送数据的 IP 地址设置路由。
TCP/IP 可以按照您的建议进行设计——叶节点会将所有内容发送到路由器,然后将其转发到目标,目标可能与发送方位于同一子网上。
但这不是最佳设计,原因有二:
它使用更多带宽:同一子网上设备之间的每个数据包都必须传输两次:一次从发送方到路由器,一次从路由器到接收方。在路由器也是网络交换机的网络上,这实际上不是任何额外的带宽,因为它无论如何都会通过交换机。但并不是所有的网络技术都是这样工作的。最初的以太网设计是一种总线技术,没有中央交换机或中继器。
它给路由器带来了更多的负担。即使路由器也是交换机,它的工作量也多一点,因为它已经达到了第 3 层路由实现,而不是更简单的第 2 层交换。
体现 TCP/IP 设计的一般理念是端节点是智能设备,因此假定它们能够完成某些工作。他们不必像骨干路由器那样了解完整的网络拓扑,但他们对本地环境有足够的了解,可以承担一些初始的本地对远程路由任务。实现这个简单的初始路由不需要太多代码。
此外,非路由器设备不一定只在一个子网上。您可以轻松地在一台 PC 中安装多个网卡——许多网卡同时具有以太网和 WiFi。并且每一个都可以连接到不同的子网,地址加上子网掩码用于确定使用哪个网卡。如果您运行虚拟机,则可能有一个虚拟子网将它们连接到主机系统。
如果我们查看路由表(这恰好是我的台式机):
Run Code Online (Sandbox Code Playgroud)default via 172.20.25.1 dev eth1 172.20.25.0/24 dev eth1 proto kernel scope link src 172.20.25.33 192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.1
Run Code Online (Sandbox Code Playgroud)Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 172.20.25.1 0.0.0.0 UG 0 0 0 eth1 172.20.25.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
任一视图都传达相同的信息。子网掩码表明哪些主机可以在该网络上直接访问,其他主机可以使用网关找到。特别是,我们必须知道网关是可达的,否则我们无法发送数据包让它转发。
原则上,您可以通过网关主机发送所有内容。那看起来像
Run Code Online (Sandbox Code Playgroud)default via 172.20.25.1 dev eth1 172.20.25.1 dev eth1 proto kernel scope link src 172.20.25.33
或者
Run Code Online (Sandbox Code Playgroud)Destination Gateway Genmask Flags Metric Ref Use Iface default 172.20.25.1 0.0.0.0 UG 0 0 0 eth1 172.20.25.1 0.0.0.0 255.255.255.255 U 0 0
我没试过,但它可以用于MAC-Forced Forwarding。
| 归档时间: |
|
| 查看次数: |
9584 次 |
| 最近记录: |