一个关于计算机网络的疑问

2023-06-29 09:40:16 +08:00
 OrdinaryMan

计算机发送 ip 数据包时,如何判断目的 ip 和本地 ip 是否属于同一网段?

网上的答案是:使用本地子网掩码分别和本地 IP 和目的 IP 进行按位与运算分别得到本地网络号和目的网络号,比较网络号是否相同

但是如果目的 ip 所在的网段子网掩码和本地的子网掩码不一样,比如: 本地 ip:192.168.1.1 本地子网掩码:255.255.255.0 目的 ip:192.168.1.193 目的子网掩码:255.255.255.192 这种情况按照上述判断方式结果是属于同一网段,然而实际上是两个不同的网段

所以,正确答案是什么?

6322 次点击
所在节点    程序员
56 条回复
la2la
2023-06-29 13:42:59 +08:00
子网掩码不同应该是跨网段了,走路由
folnet
2023-06-29 13:44:26 +08:00
只看本端掩码, 可以看一下 wireshark 网络分析就这么简单
leonshaw
2023-06-29 13:58:23 +08:00
@OrdinaryMan #32 不是,没有所谓判断 IP 在同一个网络的过程,都要先查路由表,根据结果再查二层邻居。
可以试一下:
1. IP 配成 192.168.1.1/24 ,删除 192.168.1.0/24 的路由
2. IP 配成 192.168.1.1/32 ,添加 192.168.1.0/24 的直连路由
yuchenr
2023-06-29 14:03:07 +08:00
本地 ip:192.168.1.1 本地子网掩码:255.255.255.0
目的 ip:192.168.1.193 目的子网掩码:255.255.255.192

192.168.1.1 访问 192.168.1.193 属于直连,不需要路由
192.168.1.193 访问 192.168.1.1 需要路由
lostc
2023-06-29 14:10:11 +08:00
计算机不管这些,管这些的是网关
Seayon
2023-06-29 16:26:48 +08:00
chatgpt4:

您提出了一个很好的问题。实际上,计算机在发送 IP 数据包时,并不知道目标 IP 的子网掩码。计算机只知道自己的 IP 地址和子网掩码,以及默认网关的 IP 地址。因此,在发送 IP 数据包时,计算机无法判断目标 IP 是否真正位于同一网段。

在这种情况下,计算机会先利用自己的子网掩码和 IP 地址来判断目标 IP 是否位于本地网络。如果目标 IP 与本地网络匹配,计算机将直接将数据包发送至目标 IP 。如果不匹配,计算机会将数据包发送至默认网关,然后由路由器根据路由表来判断数据包的最佳路径。

因此,关于您提到的这个问题,实际上计算机并不需要知道目标 IP 的子网掩码。计算机只需要根据自己的子网掩码来判断目标 IP 是否位于本地网络,然后将数据包发送至相应的位置。在路由过程中,目标 IP 的子网掩码将被正确处理。
raysonx
2023-06-29 16:27:18 +08:00
@OrdinaryMan
> 我的理解是第一步是判断是否同网段,不同网段才会查路由表
你这理解完全是错的,而且完全没看我的回复。这楼上绝大多数人的回答都是错的,可见大多数程序员对网络只是一知半解,回答全凭臆测。

所谓掩码只是设定本机路由表的一种快捷方式。发包时,机器只是遵循路由表的设置,不会关心网段相同还是不相同的问题。不管同不同网段,如果手动加上路由条目,系统也会按照路由条目的指示来动作。
raysonx
2023-06-29 16:33:36 +08:00
再举一个例子,假如本机 IP 是 192.168.1.100/24 ,外加一条 192.168.1.101/32 via 192.168.1.254 的静态路由,则本机向 192.168.1.101 发包时,就会发给 192.168.1.254 这个网关。

这个例子可以推翻楼上所有所谓先判断是否和本地同网段的论述,即使是 gpt 的回答也是错的。发包时发给谁完全遵循路由表,不存在提前判断是否同一网段这个步骤。
raysonx
2023-06-29 16:34:36 +08:00
我已经不想在这个问题上再做过多解释了,建议买本计算机网络的专业书看看。
hezhile
2023-06-29 17:29:52 +08:00
多看书。。。
bomb77
2023-06-29 18:18:51 +08:00
@raysonx #48 哈哈哈,好多人对路由表视若罔闻
deorth
2023-06-29 18:47:29 +08:00
简单来说,如果你在自己不擅长的领域提问题,通常就会显得很蠢。
怎样才算擅长呢?我也不知道,所以我通常不提问题。
xiaolang
2023-06-29 20:19:37 +08:00
配置了网关的话可以 Ping 通,没配置的话 Ping 不通。
joshu
2023-06-30 10:44:50 +08:00
是否为同一网段,本质在于本侧是否认为对侧是 on-link ,也就是可以通过 arp 包获得对端的地址
首先你这样的配置,必然导致某一小段路由不互通,或存在其它连接性问题,又或者某些 host 是不可达的
本地 IP 肯定是认为对端是 on-link 的,因此会在局域网直接访问对方
反过来,对端在回包的时候的,是不能直接连接到本地 IP 的,必须要通过你所设置的网关转发流量,除非目的 IP 为本地 IP 设置了 onlink 路由
jiankaikey
2023-06-30 11:24:56 +08:00
但是如果目的 ip 所在的网段子网掩码和本地的子网掩码不一样,比如: 本地 ip:192.168.1.1 本地子网掩码:255.255.255.0 目的 ip:192.168.1.193 目的子网掩码:255.255.255.192 这种情况按照上述判断方式结果是属于同一网段,然而实际上是两个不同的网段

这个题我会,这堂课我听了,老师说你一定要记得一个问题,网络是有去有回的。去的是时候 1.1 认为 1.193 是同一个网段直接广播数据可以到 1.193 ,回的时候 1.193 认为 1.1 不是同一个网段所以就会先丢给网关,那么如果没网关没有默认路由那它就不知道往哪发了,只能憋着。

A 192.168.1.1 和 192.168.1.193 分别与 255.255.255.0 做与运算结果相同所以在同一网段
B 192.168.1.1 和 192.168.1.193 分别与 255.255.255.192 做与运算结果不同所以不在同一网段
OrdinaryMan
2023-07-02 15:55:12 +08:00
@deorth 蠢就蠢呗,不过我觉得这只是暂时的。如果我不提问题我可能会一直蠢下去。学习嘛,放低姿态不丢人

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/952586

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX