【问题标题】:What are the effects of incorrectly setting the netmask?错误设置网络掩码有什么影响?
【发布时间】:2009-11-19 12:06:49
【问题描述】:

错误设置网络掩码有什么影响?我有一个设置设备网络掩码的 C++ 应用程序。如果网络掩码设置不正确,tftp 似乎无法正常工作。为什么会发生这种情况?没有为设备/PC 正确设置网络掩码时会出现哪些其他问题?

【问题讨论】:

  • 投反对票的人请留下评论以投反对票。我想修复/解释导致投票失败的原因。谢谢。
  • @zooropa:不幸的是,这里有“开车投票”是一种常见的做法......
  • 我保证我不会发火/报复。如果您在下面留下不赞成的评论作为答案,我什至会赞成!我认为 downvote cmets 与其他 cmets 和答案一样重要。也可以从他们身上学到东西!我在 meta.stackoverflow.com 上看到了一个关于 downvote cmets 的问题。杰夫阿特伍德对此发表了评论。 meta.stackexchange.com/questions/135/…
  • 也许反对票是因为这不是一个真正的编程问题,因此可能被认为是本网站的主题。 (我认为它足够接近,但不是我!)
  • 没有投反对票,但我删除了 C/C++ 标签,因为这个问题并非特定于这些语言。另外,请注意,在过去 7 年的某个时候,反对票已被删除(这可能只是意味着用户帐户已被删除)。我怀疑投反对票是因为 C 和 C++ 标签很少属于一起,而且这个网站上的社区喜欢不断地提醒人们他们是完全不同的语言(有点)。

标签: networking network-programming


【解决方案1】:

虽然这个问题可能更多是关于 IP 网络而不是编程,但它对许多开发人员来说是一个具有挑战性的课题。

网络掩码分隔主机地址(您的 PC 或服务器)和网络地址(您的系统所在的逻辑网络基础架构的一部分)。这两部分用于将数据包传送到正确的设备。网络地址是通过将网络掩码与 IP 地址进行“与”运算获得的。考虑以下场景:

IP Address: 10.0.1.1
Netmask: 255.255.0.0

我们 PC 的 IP 地址的主机地址部分是 1.1,因此 PC 知道任何以 10.0 开头的主机地址。是本地的。然后启动 10.1 等的任何地址都不是“本地”地址,需要转发到路由器。如果您有另一台设备打算在同一网络上:

IP Address: 10.0.2.1
Netmask: 255.255.255.0

这里的网络掩码对于我们的示例设置是错误的,该设备现在将看到网络地址为 10.0.2,主机地址为 1,如果它尝试与 10.0.1.1 通信,它将看到一个网络地址10.0.1!不是本地的,因此会将其引用到默认路由器进行转发。如果网络掩码设置正确(即与第一个示例相同,假设这是您的网络的正确设置),那么第二个设备会将第一个设备视为本地设备,即在 10.0 网络上,并且不会尝试将数据包转发到路由器。

许多协议都可以很好地解决这个问题,但 tftp 旨在在单个网络中运行,因此会失败,因为人们认为目标位于不同的网络上。

这可能无法描述您的确切情况,但我希望该示例说明配置很重要的重要原则,您不能有一个配置不准确的环境并期望它能够工作。

【讨论】:

    【解决方案2】:

    网络掩码决定了哪些 IP 地址是本地的(非路由的);该范围之外的 IP 地址通过路由器。如果网络掩码错误,程序会尝试直接访问必须通过路由器的站点,反之亦然。

    【讨论】:

      【解决方案3】:

      网络掩码定义了IP地址的哪一部分用作网络地址,哪一部分用于工作站。

      第一个例子:

      IP1: 192.168.20.4
      IP2: 192.168.192.4
      NM:  255.255.0.0
      

      两个 IP 在同一个网络中。他们可以在不需要路由器的情况下相互通信。这是因为当你或它与网络掩码时,IP 地址将产生相同的位掩码。

      第二个例子:

      IP1: 192.168.20.4
      IP2: 192.168.192.4
      NM:  255.255.128.0
      

      现在两个 IP 位于不同的网络中,因为当您或 IP 地址带有网络掩码时,生成的位掩码将不同,如果没有在两个网络之间路由的路由器,它们将无法相互通信。

      您可以使用ipcalc 自行测试。

      【讨论】:

        【解决方案4】:

        here 解释了不匹配网络掩码的可能影响。简而言之:

        1. 主机可能构建路由表不正确。
        2. 主机会错过一些广播包,无法正常发送广播。

        TFTP 的功能失常几乎肯定是由第一个原因引起的。它以同样的方式影响任何其他 IP 协议。

        其他答案只提到第一个问题(这没关系,因为第二个问题相当边缘)。请注意,决定如何路由 IP 数据包的不是接口本身的网络掩码 - 它是主机的路由子系统;但是网络掩码通常用于构建路由表。

        【讨论】:

          猜你喜欢
          • 2021-01-23
          • 2023-04-06
          • 2015-01-12
          • 1970-01-01
          • 2019-05-07
          • 2021-04-04
          • 1970-01-01
          • 2013-10-25
          • 1970-01-01
          相关资源
          最近更新 更多