题 IPv4子网如何工作?


这是一个 典型问题 关于IPv4子网。

有关:

子网划分如何工作,以及如何做到这一点 用手 还是在你脑海里?  有人可以在概念上和几个例子中解释吗?服务器故障会获得大量子网划分的作业问题,因此我们可以使用答案将它们指向服务器故障本身。

  • 如果我有网络,我该如何计算 如何拆分?
  • 如果给我一个网络掩码,我该怎么做 知道网络范围是什么 它?
  • 有时会出现斜线 一个数字,这个数字是多少?
  • 有时会有一个子网掩码,但也有一个通配符掩码,它们看起来是一样的但它们是不同的?
  • 有人提到了为此知道二进制的东西吗?

422
2017-08-04 15:51






答案:


存在IP子网以允许路由器为数据包选择适当的目标。您可以出于逻辑原因(防火墙等)或物理需求(较小的广播域等)使用IP子网来分解较大的网络。

但简单地说,IP路由器使用您的IP子网来做出路由决策。了解这些决策的工作原理,并了解如何规划IP子网。

数到1

如果您已经熟练使用二进制(基数2)表示法,则可以跳过本节。

对于那些离开的人:因为不能流利使用二进制表示法而感到羞耻!

是的 - 这可能有点刺耳。学习二进制是非常非常容易的,并学习将二进制转换为十进制和返回的快捷方式。你真的应该知道该怎么做。

二进制计数非常简单,因为您只需要知道如何计数为1!

想想一辆汽车的“里程表”,除了与传统的里程表不同,每个数字最多只能从0开始计数为1.当汽车从工厂出厂时,里程表显示为“00000000”。

当您驾驶第一英里时,里程表显示“00000001”。到现在为止还挺好。

当你驾驶你的第二英里时,里程表的第一个数字回滚到“0”(因为它的最大值是“1”)并且里程表的第二个数字翻到“1”,使里程表读取“ 00000010" 。这看起来像十进制表示法中的数字10,但它实际上是二进制表示法中的2(你到目前为止驾驶汽车的里程数)。

当您驾驶第三英里时,里程表显示“00000011”,因为里程表的第一个数字再次转动。二进制表示法中的数字“11”与十进制数字3相同。

最后,当你驾驶你的第四英里时,两个数字(在第三英里末端读为“1”)回滚到零位置,第三个数字向上滚动到“1”位置,给我们“ 00000100" 。这是十进制数4的二进制表示。

如果你愿意,你可以记住所有这些,但你真的只需要理解 怎么样 小的里程表“滚过”,因为它的数量越来越大。它与传统的十进制里程表的操作完全相同,只是在我们虚构的“二进制里程表”上每个数字只能是“0”或“1”。

要将十进制数转换为二进制数,您可以向前滚动里程表,按刻度打勾,大声计数,直到您将其滚动数次等于要转换为二进制数的十进制数。在所有兜售和滚动之后,里程表上显示的内容将是您计算到的十进制数的二进制表示。

既然你了解里程表是如何向前推进的,那么你也会理解它如何向后滚动。要将里程表上显示的二进制数转换回小数,您可以将里程表一次回滚一个刻度,大声计数,直到里程表显示“00000000”。完成所有计数和滚动后,您大声说出的最后一个数字将是里程表开始的二进制数的十进制表示。

以这种方式在二进制和十进制之间转换值将是 非常 乏味。你可以做到,但效率不高。学习一点算法可以更快地完成它。

快速搁置:二进制数中的每个数字称为“位”。那是“二进制”中的“b”和“数字”中的“它”。一位是二进制数字。

将二进制数(例如“1101011”)转换为十进制数是一个简单的过程,使用方便的小算法。

首先计算二进制数中的位数。在这种情况下,有7.在一张纸上(在您的脑海中,在文本文件中等)制作7个分区并开始从右到左填充它们。在最右边的插槽中,输入数字“1”,因为我们总是以“1”开头。在左侧的下一个插槽中输入右侧插槽中的值的两倍(所以,下一个插槽中的“2”,下一个插槽中的“4”)并继续直到所有插槽都已满。 (你最终会记住这些数字,这是2的权力,因为你越来越多地这样做。我的头脑中有131,072,但我之后通常需要一个计算器或纸张)。

所以,你应该在你的小插槽中的纸上有以下内容。

 64    |    32    |    16    |    8    |    4    |    2    |    1    |

从插槽下面的二进制数转录位,如下所示:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
  1          1          0         1         0         1         1

现在,添加一些符号并计算问题的答案:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
x 1        x 1        x 0       x 1       x 0       x 1       x 1
---        ---        ---       ---       ---       ---       ---
       +          +          +         +         +         +         =

做所有的数学运算,你应该想出:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
x 1        x 1        x 0       x 1       x 0       x 1       x 1
---        ---        ---       ---       ---       ---       ---
 64    +    32    +     0    +    8    +    0    +    2    +    1    =   107

得到了它。十进制的“1101011”是107.这只是简单的步骤和简单的数学。

将十进制转换为二进制同样简单,并且是相同的基本算法,反向运行。

假设我们想要将数字218转换为二进制数。从一张纸的右侧开始,写下数字“1”。在左侧,将该值加倍(因此,“2”)并继续向纸张左侧移动,使最后一个值加倍。如果要写的数字大于转换的数字,则停止写入。否则,继续加倍前一个数字和写作。 (使用这种算法将一个大数字,如34,157,216,092转换为二进制文件可能有点乏味,但它肯定是可能的。)

所以,你应该在你的论文上:

 128    |    64    |    32    |    16    |    8    |    4    |    2    |    1    |

你停止在128处写数字,因为加倍128,这将给你256,将大于被转换的数字(218)。

从最左边的数字开始,在它上方写上“218”(128)并问自己:“218大于或等于128?”如果答案是肯定的,请在“128”下划一个“1”。高于“64”,写入218减去128(90)的结果。

看看“64”,问问自己:“90大于或等于64?”它是,所以你在“64”之下写一个“1”,然后从90减去64并将其写在“32”(26)之上。

但是,当你到达“32”时,你会发现32不大于或等于26.在这种情况下,在“32”下面写一个“0”,将数字(26)从32“以上复制到” 16“然后继续问自己与其他数字相同的问题。

当你完成所有的工作后,你应该:

 218         90         26         26        10         2         2         0
 128    |    64    |    32    |    16    |    8    |    4    |    2    |    1    |
   1          1          0          1         1         0         1         0

顶部的数字只是计算中使用的注释,对我们来说意义不大。但是,在底部,您会看到二进制数“11011010”。果然,转换为二进制的218是“11011010”。

按照这些非常简单的程序,您可以将二进制转换为十进制,然后再将其转换为计算器。数学非常简单,只需要一点点练习就可以记住规则。

拆分地址

想想像披萨送货一样的IP路由。

当你被要求将比萨送到“123 Main Street”时,作为一个人,你很清楚你想要去名为“Main Street”的街道上编号为“123”的建筑物。很容易知道你需要去100街区的主街,因为建筑物的数量在100到199之间,大多数城市街区都有数百个。你“只知道”如何分割地址。

路由器提供数据包,而不是披萨。他们的工作与披萨司机相同:让货物(包裹)尽可能靠近目的地。路由器连接到两个或多个IP子网(完全有用)。路由器必须检查数据包的目标IP地址,并将这些目标地址分解为其“街道名称”和“建筑物编号”组件,就像披萨驱动程序一样,以便对交付做出决策。

IP网络上的每台计算机(或“主机”)都配置有唯一的IP地址和子网掩码。该IP地址可以分为称为“主机ID”的“建筑物编号”组件(如上例中的“123”)和“街道名称”组件(如上例中的“主街道”),称为“网络ID”。对于我们的人眼来说,很容易看到建筑物编号和街道名称在“123 Main Street”中的位置,但很难看到“10.13.216.41中子网掩码为255.255.192.0”的划分。

IP路由器“只知道”如何将IP地址分成这些组件以做出路由决策。由于了解IP数据包的路由方式取决于理解此过程,因此我们也需要知道如何分解IP地址。幸运的是,从IP地址和子网掩码中提取主机ID和网络ID实际上非常简单。

首先写出二进制的IP地址(使用计算器,如果你尚未学会如何做到这一点,但要记下如何做到这一点 - 它真的,非常容易并且给人的印象深刻派对):

      10.      13.     216.      41
00001010.00001101.11011000.00101001

用二进制写出子网掩码:

     255.     255.     192.       0
11111111.11111111.11000000.00000000

并排编写,您可以看到子网掩码中“1”的停止点“排列”到IP地址中的一个点。这就是网络ID和主机ID分裂的关键。所以,在这种情况下:

      10.      13.     216.      41
00001010.00001101.11011000.00101001 - IP address
11111111.11111111.11000000.00000000 - subnet mask
00001010.00001101.11000000.00000000 - Portion of IP address covered by 1's in subnet mask, remaining bits set to 0
00000000.00000000.00011000.00101001 - Portion of IP address covered by 0's in subnet mask, remaining bits set to 0

路由器使用子网掩码“掩盖”IP地址中1所覆盖的位(用0替换未被“屏蔽掉”的位)以提取网络ID:

      10.      13.     192.       0
00001010.00001101.11000000.00000000 - Network ID

同样,通过使用子网掩码“屏蔽”IP地址中0所覆盖的位(用0再次替换未被“屏蔽掉”的位),路由器可以提取主机ID:

       0.       0.      24.      41
00000000.00000000.00011000.00101001 - Portion of IP address covered by 0's in subnet mask, remaining bits set to 0

对于我们的人眼来说,看到网络ID和主机ID之间的“中断”并不容易,因为它在比萨饼交付期间在物理地址中的“建筑物编号”和“街道名称”之间,但最终的效果是相同。

现在您可以将IP地址和子网掩码拆分为主机ID和网络ID,您可以像路由器一样路由IP。

更多术语

您将看到在整个互联网上写入的子网掩码以及其余的答案(IP /号码)。这种表示法称为“无类别域间路由”(CIDR)表示法。 “255.255.255.0”由开头的24位1组成,写入“/ 24”比“255.255.255.0”更快。要将CIDR编号(如“/ 16”)转换为点分十进制子网掩码,只需写出1的数字,将其拆分为8位组,并将其转换为十进制。 (例如,“/ 16”是“255.255.0.0”。)

回到“旧时代”,未指定子网掩码,而是通过查看IP地址的某些位来派生。例如,以0 - 127开头的IP地址的隐含子网掩码为255.0.0.0(称为“A类”IP地址)。

这些隐含的子网掩码今天没有使用,我不建议再学习它们,除非您不幸遇到非常旧的设备或不支持无类IP寻址的旧协议(如RIPv1)。我不打算进一步提及这些地址的“类”,因为它今天不适用并且可能令人困惑。

有些设备使用称为“通配符掩码”的表示法。 “通配符掩码”只不过是一个子网掩码,所有0都是1,而1是0。 / 26的“通配符掩码”是:

 11111111.11111111.11111111.11000000 - /26 subnet mask
 00000000.00000000.00000000.00111111 - /26 "wildcard mask"

通常,您会看到“通配符掩码”用于匹配访问控制列表或防火墙规则中的主机ID。我们不会在这里进一步讨论它们。

路由器如何工作

正如我之前所说,IP路由器与披萨送货司机的工作类似,因为他们需要将货物(包)送到目的地。当出现绑定地址为192.168.10.2的数据包时,IP路由器需要确定哪个网络接口最能使该数据包更接近其目的地。

假设您是一个IP路由器,并且您连接的接口编号为:

  • Ethernet0 - 192.168.20.1,子网掩码/ 24
  • Ethernet1 - 192.168.10.1,子网掩码/ 24

如果您收到一个目的地址为“192.168.10.2”的数据包,那么很容易告诉(用你的眼睛)数据包应该从接口Ethernet1发出,因为Ethernet1接口地址对应于数据包的目的地地址。连接到Ethernet1接口的所有计算机都将具有以“192.168.10。”开头的IP地址,因为分配给您的接口Ethernet1的IP地址的网络ID是“192.168.10.0”。

对于路由器,此路由选择过程通过构建路由表并在每次传送数据包时查询表来完成。路由表包含网络ID和目标接口名称。您已经知道如何从IP地址和子网掩码中获取网络ID,因此您正在构建路由表。这是我们这个路由器的路由表:

  • 网络ID:192.168.20.0(11000000.10101000.00010100.00000000) - 24位子网掩码 - 接口Ethernet0
  • 网络ID:192.168.10.0(11000000.10101000.00001010.00000000) - 24位子网掩码 - 接口Ethernet1

对于绑定到“192.168.10.2”的传入数据包,我们只需将该数据包的地址转换为二进制数据(因为人类 - 路由器将其作为二进制文件从线路开始)并尝试将其与我们的路由中的每个地址进行匹配table(直到子网掩码中的位数),直到我们匹配一个条目。

  • 传入数据包目标:11000000.10101000.00001010.00000010

将其与路由表中的条目进行比较:

11000000.10101000.00001010.00000010 - Destination address for packet
11000000.10101000.00010100.00000000 - Interface Ethernet0
!!!!!!!!.!!!!!!!!.!!!????!.xxxxxxxx - ! indicates matched digits, ? indicates no match, x indicates not checked (beyond subnet mask)

11000000.10101000.00001010.00000010 - Destination address for packet
11000000.10101000.00001010.00000000 - Interface Ethernet1, 24 bit subnet mask
!!!!!!!!.!!!!!!!!.!!!!!!!!.xxxxxxxx - ! indicates matched digits, ? indicates no match, x indicates not checked (beyond subnet mask)

Ethernet0的条目与前19位匹配,然后停止匹配。这意味着它不是正确的目标接口。您可以看到接口Ethernet1与目标地址的24位匹配。啊,哈!数据包绑定到接口Ethernet1。

在实际路由器中,路由表的排序方式是首先检查最长的子网掩码是否匹配(即最具体的路由),并在数字上进行排序,以便一旦找到匹配,就可以路由数据包并且不需要进一步的匹配尝试(意味着首先列出192.168.10.0并且永远不会检查192.168.20.0)。在这里,我们简化了一点。花哨的数据结构和算法使得更快的IP路由器成为可能,但简单的算法将产生相同的结果。

静态路由

到目前为止,我们已经谈到了我们假设的路由器,因为网络直接连接到它。显然,这不是世界真正的运作方式。在比萨饼驾驶的比喻中,有时司机不允许进入建筑物而不是前台,并且必须将比萨饼交给其他人以便交付给最终接收者(暂停你的怀疑并忍受我的同时我伸出类比,请)。

让我们从前面的示例“路由器A”中调用我们的路由器开始。您已经知道RouterA的路由表为:

  • 网络ID:192.168.20.0(11000000.10101000.00010100.00000000) - 子网掩码/ 24 - 接口RouterA-Ethernet0
  • 网络ID:192.168.10.0(11000000.10101000.00001010.00000000) - 子网掩码/ 24 - 接口RouterA-Ethernet1

假设还有另一台路由器“Router B”,其IP地址为192.168.10.254/24,分配给Ethernet0和Ethernet1接口的为192.168.30.1/24。它有以下路由表:

  • 网络ID:192.168.10.0(11000000.10101000.00001010.00000000) - 子网掩码/ 24 - 接口RouterB-Ethernet0
  • 网络ID:192.168.30.0(11000000.10101000.00011110.00000000) - 子网掩码/ 24 - 接口RouterB-Ethernet1

在漂亮的ASCII艺术中,网络看起来像这样:

               Interface                      Interface
               Ethernet1                      Ethernet1
               192.168.10.1/24                192.168.30.254/24
     __________  V                  __________  V
    |          | V                 |          | V
----| ROUTER A |------- /// -------| ROUTER B |----
  ^ |__________|                 ^ |__________|
  ^                              ^
Interface                      Interface
Ethernet0                      Ethernet0
192.168.20.1/24                192.168.10.254/24

您可以看到路由器B知道如何“到达”路由器A一无所知的网络192.168.30.0/24。

假设连接到路由器A的Ethernet0接口的网络的IP地址为192.168.20.13的PC向路由器A发送数据包以进行传送。我们的假设数据包的目的地是IP地址192.168.30.46,这是连接到路由器B的Ethernet1接口的网络的设备。

使用上面显示的路由表,路由器A的路由表中的条目都不匹配目标192.168.30.46,因此路由器A将数据包返回到发送PC,并显示消息“目标网络无法访问”。

为了使路由器A“知道”192.168.30.0/24网络的存在,我们将以下条目添加到路由器A上的路由表中:

  • 网络ID:192.168.30.0(11000000.10101000.00011110.00000000) - 子网掩码/ 24 - 可通过192.168.10.254访问

通过这种方式,路由器A具有与我们的示例数据包的192.168.30.46目的地匹配的路由表条目。此路由表条目有效地说“如果你得到一个绑定到192.168.30.0/24的数据包,请将其发送到192.168.10.254,因为他知道如何处理它。”这就是我之前提到过的类似的“前台比萨饼”动作 - 将包传递给知道如何让它更接近目的地的其他人。

“手动”向路由表添加条目称为添加“静态路由”。

如果路由器B想要将数据包传送到192.168.20.0子网掩码255.255.255.0网络,它的路由表中也需要一个条目:

  • 网络ID:192.168.20.0(11000000.10101000.00010100.00000000) - 子网掩码/ 24 - 可通过以下方式访问:192.168.10.1(路由器A在192.168.10.0网络中的IP地址)

这将在这些路由器之间的192.168.10.0/24网络之间创建192.168.30.0/24网络和192.168.20.0/24网络之间的传递路径。

您总是希望确保这种“插页式网络”两侧的路由器都具有“远端”网络的路由表条目。如果我们示例中的路由器B没有连接到路由器A的“远端”网络192.168.20.0/24的路由表条目,则来自PC的假设数据包为192.168.20.13  到达192.168.30.46的目标设备,但是192.168.30.46尝试发回的任何回复都将被路由器B返回为“目标网络无法访问”。单向通信通常是不可取的。务必考虑交通流量  当你考虑计算机网络中的通信时的方向。

您可以从静态路线中获得很多里程。像EIGRP,RIP等动态路由协议实际上只不过是路由器之间交换路由信息的一种方式,实际上可以配置静态路由。但是,在静态路由上使用动态路由协议的一大优势是动态路由协议可以 动态 根据网络条件(带宽利用率,接口“下降”等)更改路由表,因此,使用动态路由协议可能会导致配置“路由”网络基础架构中的故障或瓶颈。 (动态路由协议是 办法 但是,在这个答案的范围之外。)

你不能从这里到达那里

在我们的示例路由器A的情况下,当绑定到“172.16.31.92”的数据包进入时会发生什么?

查看路由器A路由表,目标接口或静态路由都不匹配172.18.31.92的前24位(即10101100.00010000.00011111.01011100,BTW)。

我们已经知道,路由器A会通过“目标网络无法访问”消息将数据包返回给发送方。

假设另一台路由器(路由器C)位于地址“192.168.20.254”。路由器C连接到Internet!

                              Interface                      Interface                      Interface
                              Ethernet1                      Ethernet1                      Ethernet1
                              192.168.20.254/24              192.168.10.1/24                192.168.30.254/24
                    __________  V                  __________  V                  __________  V
((  heap o  ))     |          | V                 |          | V                 |          | V
(( internet )) ----| ROUTER C |------- /// -------| ROUTER A |------- /// -------| ROUTER B |----
((   w00t!  ))   ^ |__________|                 ^ |__________|                 ^ |__________|
                 ^                              ^                              ^
               Interface                      Interface                      Interface
               Ethernet0                      Ethernet0                      Ethernet0
               10.35.1.1/30                   192.168.20.1/24                192.168.10.254/24

如果路由器A可以将与任何本地接口不匹配的数据包路由到路由器C,那么路由器C可以将它们发送到Internet。输入“默认网关”路由。

在路由表的末尾添加一个条目,如下所示:

  • 网络ID:0.0.0.0(00000000.00000000.00000000.00000000) - 子网掩码/ 0 - 目标路由器:192.168.20.254

当我们尝试将“172.16.31.92”与路由表中的每个条目匹配时,我们最终会遇到这个新条目。起初,这有点令人困惑。我们希望匹配目标地址的零位...等待......什么?匹配零位?所以,我们根本不寻找匹配。这个路由表条目基本上说,“如果你到达这里,而不是放弃交付,请将数据包发送到路由器192.168.20.254并让他处理它”。

192.168.20.254是我们的目的地  知道如何传送数据包。当遇到绑定到我们没有特定路由表条目的目的地的数据包时,此“默认网关”条目将始终匹配(因为它匹配目标地址的零位)并为我们提供了“最后的手段”,我们可以发送数据包以便传递。您有时会听到称为“最后的网关”的默认网关。

为了使默认网关路由有效,它必须引用使用路由表中其他条目可到达的路由器。例如,如果您尝试在路由器A中指定默认网关192.168.50.254,则传递到此类默认网关将失败。 192.168.50.254不是路由器A知道如何使用其路由表中的任何其他路由传递数据包的地址,因此这样的地址作为默认网关无效。这可以简明扼要地说明:必须使用路由表中的另一个路由将默认网关设置为已可到达的地址。

实际路由器通常将默认网关存储为其路由表中的最后一个路由,以便在数据包未能与表中的所有其他条目匹配后对其进行匹配。

城市规划与IP路由

将IP子网分解为更小的IP子网是城市规划的重点。在城市规划中,分区用于适应景观的自然特征(河流,湖泊等),影响城市不同地区之间的交通流量,并隔离不同类型的土地利用(工业,住宅等) 。 IP子网划分非常相似。

您将网络子网分为三个主要原因:

  • 您可能希望通过不同的通信媒体进行通信。如果两个建筑物之间有T1 WAN连接,则可以在这些连接的末端放置IP路由器,以便于通过T1进行通信。每端的网络(以及可能是T1本身的“插页式”网络)将被分配给唯一的IP子网,以便路由器可以决定应该在T1线路上发送哪些流量。

  • 在以太网中,您可以使用子网来限制网络的给定部分中的广播流量。应用层协议使用以太网的广播功能,非常有用。然而,随着越来越多的主机被打包到同一个以太网网络中,线路上(或无线以太网中的空中)广播流量的百分比可能会增加到导致非广播流量传输出现问题的程度。 (在过去,广播流量可能会迫使他们检查每个广播数据包,从而压倒主机的CPU。今天不太可能。)交换式以太网上的过多流量也可能以“将帧泛滥到未知目的地”的形式出现。这种情况是由以太网交换机无法跟踪网络上的每个目的地引起的,这也是交换式以太网无法扩展到无限数量主机的原因。出于子网划分的目的,帧溢出到未知目的地的效果类似于过量广播流量的影响。

  • 您可能希望“警告”在不同主机组之间流动的流量类型。也许您有打印服务器设备,并且您只希望授权的打印排队服务器计算机向它们发送作业。通过限制允许流向打印服务器设备的流量,子网用户无法将其PC配置为直接与打印服务器设备通信以绕过打印记帐。您可以将打印服务器设备全部放入子网中,并在连接到该子网的路由器或防火墙中创建规则,以控制允许向打印服务器设备发送流量的主机列表。 (路由器和防火墙通常可以根据数据包的源地址和目的地地址决定如何或是否提供数据包。防火墙通常是具有强烈个性的路由器的子类。他们可能非常非常关注数据包的有效负载,而路由器通常会忽略有效负载并只传送数据包。)

在规划城市时,您可以规划街道如何相互交叉,并且可以使用转弯,单向和死胡同的街道来影响交通流量。您可能希望Main Street长30个街区,每个街区最多可容纳99个建筑物。计划您的街道编号非常容易,因此每个街区的每个街区的街道数量都会增加100。很容易知道每个后续块中的“起始编号”应该是什么。

在规划IP子网时,您需要考虑使用正确数量的可用主机ID(建筑物编号)构建正确数量的子网(街道),并使用路由器将子网彼此连接(交叉点)。关于路由器中指定的允许的源和目标地址的规则可以进一步控制流量的流量。防火墙可以像强迫性的交通警察那样行事。

出于本答案的目的,构建我们的子网是我们唯一关注的主要问题。与城市规划一样,您不是像十进制一样工作,而是使用二进制来描述每个子网的边界。

续: IPv4子网如何工作?

(是的......我们达到了答案的最大大小(30000个字符)。)


631
2017-08-04 15:58



@Joseph:这是一次演讲,为了自己的利益,我已经多次演出。 >微笑<我会看你的二进制部分。我不喜欢教数学(这实际上是什么理解二进制 - 用基数2计算),因为我不太擅长它。 - Evan Anderson
解决问题的唯一问题是人们需要理解为什么划分子网 存在 (IP路由)之前可以了解如何有效地将IP网络分解为子网。我从来没有找到一个好方法来讨论另一个主题。 (真的,设计一个带有VLSM的IP网络自然而然地在理解了IP路由后“有意义”......) - Evan Anderson
不要分手。 - Joseph Kern
在服务器故障中看到的最全面的帖子+1 - Scott Lundberg
如果仅用于里程表隐喻,则上调。现在我知道如何解释二进制如何对人们起作用。 - phuzion


续: IPv4子网如何工作?

您的ISP为您提供网络ID 192.168.40.0/24(11000000.10101000.00101000.00000000)的范围。您知道您希望使用防火墙/路由器设备来限制网络的不同部分(服务器,客户端计算机,网络设备)之间的通信,因此,您希望打破网络的这些不同部分到IP子网(防火墙/路由器设备然后可以在其之间路由)。

你有:

  • 12台服务器计算机,但您可能会多达50%
  • 9个开关
  • 97台客户端计算机,但您可能会获得更多

将192.168.40.0/24分解成这些部分的好方法是什么?

想到两个人的力量,并使用大量可能的设备,你可以想出:

  • 18台服务器计算机 - 2的最大功率为32
  • 9个开关 - 下一个最大功率为2的是16
  • 97台客户端计算机 - 下一个最大功率为2的是128

在给定的IP子网中,有两个保留的地址不能用作有效的设备IP地址 - 主机ID部分中全零的地址和主机ID部分中全部为1的地址。因此,对于任何给定的IP子网,可用的主机地址数量是32的数量的功率减去子网掩码中的位数减去2.因此,在192.168.40.0/24的情况下,我们可以看到子网掩码有24位。这留下8位可用于主机ID。我们知道2到8的幂是256--意味着256个可能的位组合适合8位宽的插槽。由于这8位的“11111111”和“00000000”组合不允许用于主机ID,因此我们可以在192.168.40.0/24网络中分配254个可能的主机。

在这254个主机中,看起来我们可以将客户端计算机,交换机和服务器计算机放入该空间,对吗?我们试试吧。

您有8位子网掩码“播放”(IP地址192.168.40.0/24的其余8位未被ISP提供的子网掩码覆盖)。我们必须找到一种方法来使用这8位来创建许多可以容纳上述设备的唯一网络ID。

从最大的网络开始 - 客户端计算机。您知道,可能设备数量中的下一个较大的2的幂是128.二进制数128是“10000000”。对于我们来说幸运的是,它适用于我们有空闲的8位插槽(如果没有,那将表明我们的起始子网太小而无法容纳我们所有的设备)。

让我们使用我们的ISP提供的网络ID,并为其添加一个子网掩码,将其分解为两个网络:

11000000.10101000.00101000.00000000 - 192.168.40.0 network ID
11111111.11111111.11111111.00000000 - Old subnet mask (/24)

11000000.10101000.00101000.00000000 - 192.168.40.0 network ID
11111111.11111111.11111111.10000000 - New subnet mask (/25)

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.10000000 - New subnet mask (/25)

仔细研究它,直到它有意义。我们将子网掩码的长度增加了一位,导致网络ID覆盖了一个用于主机ID的位。由于这一位可以是零或一,我们有效地将192.168.40.0网络分成两个网络。 192.168.40.0/25网络中的第一个有效IP地址将是第一个最右边位为“1”的主机ID:

11000000.10101000.00101000.00000001 - 192.168.40.1 - First valid host in the 192.168.40.0/25 network

同样,192.168.40.128网络中的第一个有效主机将是第一个在最右边位为“1”的主机ID:

11000000.10101000.00101000.10000001 - 192.168.40.129 - First valid host in the 192.168.40.128/25 network

每个网络中的最后一个有效主机将是每个位的主机ID 除了 最右边的位设置为“1”:

11000000.10101000.00101000.01111110 - 192.168.40.126 - Last valid host in the 192.168.40.0/25 network
11000000.10101000.00101000.11111110 - 192.168.40.254 - Last valid host in the 192.168.40.128/25 network

因此,通过这种方式,我们创建了一个足以容纳我们的客户端计算机的网络,然后我们可以应用相同的原则来分解成更小的网络。我们来做一个说明:

  • 客户端计算机 - 192.168.40.0/25 - 有效IP:192.168.40.1 - 192.168.40.126

现在,为了打破我们的服务器和交换机的第二个网络,我们做同样的事情。

我们有12台服务器计算机,但我们最多可以购买6台。让我们计划在18,这使我们的下一个最高功率为2为32.在二进制中,32是“100000”,这是6位长。我们在192.168.40.128/25中有7位子网掩码,所以我们有足够的位来继续“播放”。再添加一个子网掩码可以为我们增加两个网络:

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.10000000 - Old subnet mask (/25)

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.11000000 - New subnet mask (/26)
11000000.10101000.00101000.10000001 - 192.168.40.129 - First valid host in the 192.168.40.128/26 network
11000000.10101000.00101000.10111110 - 192.168.40.190 - Last valid host in the 192.168.40.128/26 network

11000000.10101000.00101000.11000000 - 192.168.40.192 network ID
11111111.11111111.11111111.11000000 - New subnet mask (/26)
11000000.10101000.00101000.11000001 - 192.168.40.193 - First valid host in the 192.168.40.192/26 network
11000000.10101000.00101000.11111110 - 192.168.40.254 - Last valid host in the 192.168.40.192/26 network

所以,现在我们已经将192.168.40.128/25分解为另外两个网络,每个网络有26位子网掩码,或者总共62个可能的主机ID - 2 ^(32 - 26) - 2。

这意味着这两个网络都有足够的地址用于我们的服务器和交换机!让我们做笔记:

  • 服务器 - 192.168.40.128/26 - 有效IP:192.168.40.129 - 192.168.40.190
  • 开关 - 192.168.40.192/26 - 有效IP:192.168.40.193 - 192.168.40.254

这种技术称为可变长度子网掩码(VLSM),如果使用得当,会使“核心路由器”具有较小的路由表(通过称为“路由汇总”的过程)。对于本例中我们的ISP,他们可能完全不知道我们如何划分192.168.40.0/24的子网。如果他们的路由器有一个绑定192.168.40.206(我们的一个交换机)的数据包,他们只需知道将它传递给我们的路由器(因为192.168.40.206匹配路由器路由表中的网络ID和子网掩码192.168.40.0/24) )我们的路由器将它送到目的地。这使我们的子网路由远离其路由表。 (我在这里简化,但你明白了。)

您可以用同样的方式规划地理位置较大的网络。只要您事先做出正确的“城市规划”(预期每个子网中的主机数量具有一定的准确性并着眼于未来),您就可以创建一个大型路由层次结构,在核心路由器处“总结” “到极少数路线。如上所述,路由器路由表中的路由越多,其执行工作的速度就越慢。使用VLSM设计IP网络并保持路由表较小是一件好事(tm)。

实例的不现实主义

这个答案中的虚构世界显然是虚构的。通常,您可以在现代交换式以太网上创建子网,其主机数多于254(取决于流量配置文件)。正如在评论中指出的那样,在路由器之间使用/ 24网络与Real Life(tm)不一致。这是一个可爱的例子,但却浪费了地址空间。通常,a / 30或a / 31(见 http://www.faqs.org/rfcs/rfc3021.html 有关/ 31的工作原理的详细信息 - 它们肯定超出了本答案的范围。网络用于两个路由器之间严格点对点的链路。


137
2017-08-04 15:53



小错误:“最后一个有效主机...”之后的代码恢复为“第一个有效主机”。我认为应该仍然说“最后”。 - JoeCool1986
@ JoeCool1986 - 好抓。 - Evan Anderson
我将推荐这个答案,以确保两个答案保持有序。 - l46kok
在您从192.168.40.128创建两个子网并创建网络ID 192.168.40.192的部分,192来自哪里? - user6607
@ user6607子网向后计数(无间隙)。例如第一个子网 0 表示为 00000000。第二个子网是 128 所以 10000000 和第三个子网 192 表示为 11000000等等。继续倒计时以寻找新的子网。 - Joseph Kern


分网

子网并不难,但可能令人生畏。让我们从最简单的步骤开始吧。学习二进制数。

二进制

Binary是一个基础2计数系统。仅由两个数字组成(1和0)。计数以这种方式进行。

1 = 001 ( 0 + 0 + 1 = 1)
2 = 010 ( 0 + 2 + 0 = 2)
3 = 011 ( 0 + 2 + 1 = 3)
4 = 100 ( 4 + 0 + 0 = 4)
5 = 101 ( 4 + 0 + 1 = 5)

所以如果你只是想象每个1都是值的占位符(所有二进制值都是2的幂)

1     1     1     1     1 = 31
16  + 8  +  4  +  2  +  1 = 31

所以... 100000 = 32.而10000000 = 128. AND 11111111 = 255。

当我说“我的子网掩码为255.255.255.0”时,我的意思是,“我的子网掩码为11111111.11111111.11111111.00000000。”我们使用子网作为简写。

地址中的句点,每8个二进制数字(一个八位字节)分开。这就是IPv4被称为32位(8 * 4)地址空间的原因。

为什么选择子网?

IPv4地址(192.168.1.1)供不应求。子网为我们提供了一种增加可用网络(或主机)数量的方法。这是出于行政原因和技术原因。

每个IP地址分为两个独立的部分,即网络和主机。默认情况下,C类地址(192.168.1.1)使用前3个八位字节(192.168.1)作为地址的网络部分。和第4个八位字节(.1)作为主机部分。

默认情况下,C类地址的IP地址和子网掩码如下所示

IP     192.168.1.1 
Subnet 255.255.255.0

像二进制这样

IP     11000000.10101000.00000001.00000001
Subnet 11111111.11111111.11111111.00000000

再看一下二进制示例。请注意我是如何说前三个八位字节用于网络的?请注意网络部分是如何全部的?这都是子网。让我们扩大。

鉴于我的宿主部分有一个八位字节(在上面的例子中)。我只能拥有256个主机(256是八位位组的最大值,从0开始计算)。但还有另一个小技巧:你需要从可用的地址中减去2个主机地址(目前是256个)。范围中的第一个地址将用于网络(192.168.1.0),范围中的最后一个地址将是广播(192.168.1.255)。所以你真的有一个网络中的主机有254个可用地址。

案例研究

假设我给了你以下那张纸。

Create 4 networks with 192.168.1.0/24.

我们来看看这个。 / 24称为CIDR表示法。我们只引用网络所需的位,而不是引用255.255.255.0。在这种情况下,我们需要来自32位地址的24位(3 * 8)。用二进制写出来

11111111.11111111.11111111.00000000 = 255.255.255.0
8bits   + 8bits  + 8bits  + 0bits   = 24bits

接下来我们知道我们需要弄清楚我们需要多少个子网。看起来像4.因为我们需要创建更多的网络(目前我们只有一个)让我们翻转一些比特

11111111.11111111.11111111.00000000 = 255.255.255.0   = 1 Network OR /24
11111111.11111111.11111111.10000000 = 255.255.255.128 = 2 Networks OR /25
11111111.11111111.11111111.11000000 = 255.255.255.192 = 4 Networks (remember powers of 2!) OR /26

现在我们决定使用/ 26让我们开始分配主机。一点点简单的数学:

32(bits) - 26(bits) = 6(bits) for host addresses.

我们在每个网络中为主机分配6位。记住我们需要为每个网络减去2。

h = host bits    
2^h - 2 = hosts available

2^6 - 2 = 62 hosts 

Finally we have 62 hosts in 4 networks, 192.168.1.0/26

现在我们需要弄清楚主机的位置。回到二进制!

11111111.11111111.11111111.00,000000 [the comma is the new network/hosts division]

Begin to calculate:

11000000.10101000.00000001.00,000000 = 192.168.1.0 [First IP = Network Adress]
11000000.10101000.00000001.00,000001 = 192.168.1.1 [First Host IP]
11000000.10101000.00000001.00,000010 = 192.168.1.2 [Second Host IP]
11000000.10101000.00000001.00,000011 = 192.168.1.3 [Third Host IP]

And so on ... until ...

11000000.10101000.00000001.00,111110 = 192.168.1.62 [Sixty Second Host IP]
11000000.10101000.00000001.00,111111 = 192.168.1.63 [Last IP = Broadcast Address]

So ... On to the NEXT network ....

11000000.10101000.00000001.01,000000 = 192.168.1.64 [First IP = Network Address]
11000000.10101000.00000001.01,000001 = 192.168.1.65 [First Host IP]
11000000.10101000.00000001.01,000010 = 192.168.1.66 [Second Host IP]

And so on ... until ...

11000000.10101000.00000001.01,111110 = 192.168.1.126 [Sixty Second Host IP]
11000000.10101000.00000001.01,111111 = 192.168.1.127 [Last IP = Broadcast Address]

So ... On to the NEXT network ....

11000000.10101000.00000001.10,000000 = 192.168.1.128 [First IP = Network Address]
11000000.10101000.00000001.10,000001 = 192.168.1.129 [First Host IP]

Etc ...

通过这种方式,您可以计算整个子网。

外卡 通配符掩码是反向子网掩码。

11111111.11111111.11111111.11000000 = 255.255.255.192 [Subnet]
00000000.00000000.00000000.00111111 = 0.0.0.63 [Wild Card]

进一步

谷歌的术语'超网'和'VLSM(可变长度子网掩码)',用于更高级的主题。

我现在可以看到我花了太长时间回应......


73
2017-08-04 15:12



“鉴于我的宿主部分只有一个八位字节(在上面的例子中)。我只能拥有255个主机(255是八位字节的最大值)。但还有另一个小技巧:你需要减去2个主机地址从可用的(目前255)。范围中的第一个地址将是网络(192.168.1.0),范围中的最后一个地址将是广播(192.168.1.255)。所以你真的有253个可用的地址在一个网络中托管。“......这是不正确的。 - joeqwerty
八位字节有256个可能的值:0到255,总共256个.256 -2(网络和广播地址)= 254个可能的主机地址。 - joeqwerty
哎呀。谢谢! :-)关闭一个,我不知道我是如何管理那个特殊的壮举。 - Joseph Kern
-1很抱歉,但自1993年RFC 1519以来没有“类”,没有人应该在历史背景之外谈论它们。它们令人困惑并引起很多误解。 - Chris S
克里斯,你可能是对的,但是在2000年初的CCNA和大多数本科课程中,课程仍然被教授。 - Joseph Kern


简短的历史课:最初,单播IPv4地址分为3个类,每个类都有一个关联的“默认”掩码长度(称为有类子网掩码)

  • A类:1.0.0.0范围内的任何东西 - > 127.255.255.255。有类别的子网掩码255.0.0.0(CIDR表示法为/ 8)
  • B类:128.0.0.0范围内的任何东西 - > 191.255.255.255。有序子网掩码255.255.0.0(/ CIDR表示法为16)
  • C类:192.0.0.0范围内的任何内容 - > 223.255.255.255。有序子网掩码255.255.255.0(/ CIDR表示法为24)

我们的想法是,可以为不同规模的组织分配不同类别的IP地址,以有效利用IP地址空间。

然而,随着IP网络的发展,很明显这种方法存在问题。仅举三个:

在有阶的世界中,所有子网  掩码为/ 8,/ 16或/ 24。这意味着可以配置的最小子网是/ 24,它允许254个主机地址(分别保留.0和.255作为网络和广播地址)。这非常浪费,特别是在点对点链路上,只有两个路由器连接到它们。

即使在放宽了这种限制之后,早期的路由协议(例如, RIP-1报)没有公布与IP前缀关联的掩码长度。在没有特定掩码的情况下,它将在同一有类网络中使用直接连接接口的掩码,或者回退到使用有类掩码。例如,如果您想使用网络172.16.0.0进行带有/ 30掩码的路由器间链接, 所有 172.16.0.0 - 172.16.255.255的子网必须有一个/ 30掩码(16384个子网,每个子网有2个可用的IP)。

互联网路由器的路由表开始占用越来越多的内存;这被称为“路由表爆炸”。例如,如果提供商有16个连续/ 24个网络,则需要通告所有16个前缀,而不是覆盖整个范围的单个摘要。

相关的改进 允许我们超越上述限制。

  1. 可变长度子网掩码(VLSM)
  2. CIDR(无类别域间路由)

VLSM指的是路由协议在同一有类网络中支持不同子网掩码的能力。例如:

192.168.1.0/24

可分为:

192.168.1.0/25
192.168.1.128/26
192.168.1.192/27
192.168.1.224/27

这样可以更有效地利用地址空间;可以根据将要连接到它们的主机/路由器的数量正确调整子网的大小。

CIDR采用VLSM并以另一种方式扩展它;除了将单个有类网络拆分为更小的子网外,CIDR还允许将多个有类网络聚合为单个摘要。例如,以下B类(/ 16)网络:

172.16.0.0/16
172.17.0.0/16
172.18.0.0/16
172.19.0.0/16

可以使用单个前缀进行聚合/汇总:

172.16.0.0/14

在子网划分方面:子网掩码长度为32位。掩码长度表示识别地址的网络部分的位数。例如:

10.1.1.0/24
  • 有类子网掩码是/ 8
  • 实际的子网掩码是/ 24
  • 为了使用子网划分,已经“借用”了16位(24-8)。

这意味着,假设整个10.0.0.0/8网络被子网划分为/ 24s,则该范围内将有65536(2 ^ 16)个子网。 (这假设您使用的平台支持0和255的子网号。请参阅Cisco的ip子网零)。

地址的“主机部分”中剩余8位。这意味着有256个可用的IP地址(2 ^ 8),其中2个是保留的(10.1.1.0是网络地址,10.1.1.255是子网定向的广播地址)。这在该子网上留下了254个可用的IP地址。 ((2 ^ 8) - 2)


31



实际上有5个班级。 - dbasnett
没错,但我们是否真的需要进入多播和保留的E类寻址以进行“子网划分”问题? :) - Murali Suriar
你把历史带入了一个介绍性的问题......然后把它留给了它。不确定哪个更糟。 - Chris S


网络范围: 网络始终由2个数字引用:一个用于确定网络,另一个用于确定该网络上的哪台计算机(或主机)。由于每个网络地址长度为32位,因此这两个数字必须适合这32位。

网络编号非常重要,因为当您要求网络IP范围时,ICANN会将其发布。如果我们没有它,没有人能够区分我的网络和AT&Ts。因此,虽然这些数字必须是唯一的,否则没有人想要为我网络上的主机分配号码。因此分裂 - 第一部分由网络人员管理,第二部分全部用于给我想要的任何机器。

网络号码没有固定在一定数量的位上 - 例如,如果我只有200台机器来管理自己,我会非常满意使用24位的网络号码,我自己只有8位 - 最多可容纳255台主机。由于网络号码使用24位,我们可以拥有很多,这意味着很多人可以拥有自己的网络。

过去,这被称为C类网络。 (B类网络号使用16位,A类使用8位,因此只存在少数A类网络)。

如今,这个命名惯例已经过时了。它被称为CIDR的概念所取代。 CIDR在斜杠后显式地为主机设置位数。所以我上面的例子(C类)现在被称为CIDR / 24。

这确实给了我们更多的灵活性,如果我有300个主机要管理,我需要一个B类网络!现在,我可以得到一个/ 23 CIDR,所以我有9位,网络号为23位。 ICANN可能没有这种网络,但如果我有一个内部网络,或者从ISP租用部分网络,这使得管理变得更容易 - 特别是因为所有客户都可以获得/ 29(离开我)。 3位或最多8台机器)允许更多人拥有自己的一小部分可用IP地址。在我们获得IPv6之前,这非常重要。


但是......虽然我知道/ 24 CIDR相当于旧的C类网络,而/ 16是B类而a / 8是A类......我仍然难以计算a / 22 in我的头。幸运的是有工具可以帮我:)

但是 - 如果你知道/ 24是8位主机(和24位网络),那么我知道/ 23给了我一个额外的位,使主机数量加倍。


6



-1对不起,但这些天提到“历史”参考之外的课程是不合适的。它们并没有“脱离时尚”,它们在1993年被RFC 1519正式弃用。它们令人困惑,并引起了一系列误解。 - Chris S
动态路由协议的一些实现总结了有类别的边界,因此了解它们仍然很有帮助。 - Ben


虽然以上是正确的(抱歉,TL; DR),但计算子网仍然会让许多网络管理员感到非常悲痛。实际上有一种非常简单的方法来进行子网计算,你可以在头脑中完成大部分工作,并且你必须记住很少。对于大多数应用程序,甚至不需要理解二进制表示,尽管它有助于完全理解子网划分。这里我只讨论IPv4; IPv6超出了本讨论的范围。

记住这一点:

要记住三个关键事项:所有子网都基于2的幂,并且有两个关键数字:256和32.稍后将详细说明。

首先,让我们看一下包含2的幂的表:

2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256

计算2的幂很容易:每次整数增加的功率都会使结果加倍。 1 + 1 = 2,2 + 2 = 4,4 + 4 = 8,8 + 8 = 16,依此类推。 子网中的地址总数必须始终为2的幂

由于IPv4子网的每个八位字节最多为256, 256 是一个非常重要的数字


3



谢谢。但我仍然模糊了pc如何使用子网掩码。当PC上的应用程序想要发送数据时,它会将其封装到数据包中。子网掩码是否确定数据包的封装方式?例如,如果PC想要在本地网络上发送数据包,它将使用以太网帧 en.wikipedia.org/wiki/Ethernet_frame 如果它想在网络之外,它会使用tcp数据包 en.wikipedia.org/wiki/... ? - aquagremlin
基本上,我不知道PC如何确定将数据发送到哪里。以太网网络就像一辆公共汽车 - 随处可见。通过PC的以太网插孔输出数据包是一般事件 - 因此数据包本身必须确定谁响应它。注定要由本地设备(局域网上的交换机或其他PC)拾取的数据包必须与将要由路由器拾取的数据包看起来不同。 - aquagremlin
这发生在TCP下面的层上。每个设备都有一个硬件地址(MAC),该MAC地址与每个设备的ARP表中的IP地址相关联。这是通过发现建立的。当数据包发往本地网络上的主机时,它会使用目标设备的MAC进行标记。当数据包发往远程主机时,它会标记本地网络上路由器的MAC。当它通过路由器时,MAC被剥离,然后用下一跳路由器的MAC标记。子网仅定义本地网络的范围。 (这是简单的<500个字符版本。) - Jonathan J


我还觉得至少应该提到NAT,因为它们在现代网络中常用于代替子网,因为IPv4地址耗尽等等。 (另外,当我第一次了解子网时,我对于子网划分与WiFi路由器创建的网络的关系非常困惑)。

NAT(网络地址转换)是一种(通常)用于通过将一个地址空间(IP:端口)映射到另一个地址空间来创建专用网络的技术。主要是,这用于在一个公共地址后面创建多个私有IP的专用网络,例如,在Wifi路由器中,由组织(如大学或公司)创建,或者有时由ISP创建。

实际的地址转换完成 透明 在NAT功能节点,通常是路由器。它可以是多种形式,全锥,地址限制,端口限制等,或者它们的混合,它们决定了如何启动节点之间的连接。

完整的详细信息可以在上找到 维基百科,但是例如考虑连接有2个设备的Wifi路由器。路由器的公共IP是 10.9.20.21/24,以及设备的IP(私有IP)是 A: 192.168.0.2B: 192.168.0.3 而路由器是 R: 192.168.0.1。因此如果 A 想要连接到服务器 S: 10.9.24.5/24,(这实际上是在路由器的另一个子网上):

  1. A发送IP数据包 R(具有源IP的默认网关) 192.168.0.2,src端口(比如说) 14567和目标IP: 10.9.24.5 (虽然端口实际上是TCP头的一部分)。
  2. 路由器(支持NAT)映射端口 14567 到设备 A 并将IP数据包的源更改为 10.9.20.21(这是路由器的公共IP)。这与上述子网相反, IP数据包实际上永远不会改变的地方
  3. S 收到一系列TCP数据包(使用src IP: 10.9.20.21,src端口: 14567)并在目标字段中发送带有这些值的响应数据包。
  4. R 检查目标端口,即 14567 并转发数据包 A
  5. A 收到响应数据包。

在上述情况下,如果 B 试图在同一个源端口上打开连接(14567),它将被映射到不同的端口 R(并且发送数据包中的端口已更改)发送之前 S。也就是说,还会有端口转换而不仅仅是IP。

这里有两点需要注意:

  1. 由于这种地址转换,通常不可能在不使用某些特殊技术的情况下发起与专用网络中的设备的连接。
  2. 从同一设备到服务器的总TCP连接限制(65536 = 2 ^ 16)现在共同适用于NAT后面的所有设备,采用上面使用的NAT形式。

1