这是有关IPv4子网的规范问题。
相关文章:
IPv6子网划分的工作原理以及与IPv4子网划分有何不同?
子网划分是如何工作的,以及如何手工或在头上进行划分?有人可以在概念上和几个例子上进行解释吗? Server Fault有很多子网作业问题,因此我们可以使用答案将其指向Server Fault本身。
如果我有网络,我该如何解决
找出如何拆分它?
如果给了我一个网络掩码,我怎么
知道网络范围是什么?
有时会出现斜杠
/>一个数字,那个数字是什么?
有时有一个子网掩码,但也有一个通配符掩码,它们看起来像是同一件事,但它们是不同的?
有人提到了有关了解二进制这个吗?
#1 楼
IP子网的存在允许路由器为数据包选择适当的目的地。您可以出于逻辑原因(防火墙等)或物理需求(较小的广播域等)使用IP子网来分解较大的网络。简单地说,IP路由器使用IP子网来做出路由决策。了解这些决定的工作原理,并了解如何规划IP子网。
计数到1
如果您已经熟练使用二进制(基数2)表示法,则可以跳过本节。剩下的那些人:不好意思不能使用二进制表示法!
是的,这可能有点苛刻。学习以二进制数计数,以及学习将二进制数转换为十进制然后返回的快捷方式,确实非常容易。您真的应该知道怎么做。
二进制的计数是如此简单,因为您只需要知道如何计数到1!
想想汽车的“里程表”,除了与传统的里程表不同数字只能从0开始计数到1。当汽车刚出厂时,里程表的读数为“ 00000000”。到目前为止,一切都很好。
行驶第二英里时,里程表的第一位数字回滚到“ 0”(因为最大值为“ 1”),里程表的第二位数字滚回为“ 1”,使里程表读取为“ 00000010”。看起来像十进制数字10,但实际上是二进制表示数字2(到目前为止,您驾驶汽车的英里数)。
当您驾驶第三英里时,里程表显示为“ 00000011” ,因为里程表的第一个数字再次旋转。二进制形式的数字“ 11”与十进制数字3相同。
最后,当您行驶了第四英里时,两个数字(在第三英里末尾都显示为“ 1”)滚动回零位置,然后第三位数字滚动到“ 1”位置,即为“ 00000100”。那是十进制数字4的二进制表示形式。
您可以根据需要记住所有这些信息,但实际上只需要了解随着里程数的增加,里程表是如何“翻转”的。它与传统十进制里程表的操作完全相同,只不过在我们的虚构“二进制里程表”上每个数字只能为“ 0”或“ 1”。
要将十进制数转换为二进制,您可以将里程表向前滚动,逐个滴答地滴答作响,大声计数,直到将其滚动多次等于要转换为二进制的十进制数字为止。计数和滚动之后,里程表上显示的所有内容都是十进制数字的二进制表示形式。
由于了解了里程表的前滚方式,所以您也将了解里程表的后滚方式。要将里程表上显示的二进制数字转换回十进制,可以一次将里程表向后滚动一格,大声计数直到里程表显示“ 00000000”。完成所有计算和滚动后,您大声说的最后一个数字将是里程表开始的二进制数的十进制表示形式。
以这种方式在二进制和十进制之间转换值将非常繁琐。您可以做到,但是效率不是很高。学习一些算法可以更快地实现该目标更容易。
简单来说:二进制数字中的每个数字都称为“位”。从“二进制”到“ b”,从“数字”到“ it”。位是一个二进制数字。
将二进制数字(例如“ 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)上方写下“ 218”,然后问自己:“ 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路由,例如披萨交付。
当您要求交付一个作为“人类”,您很清楚“通往Main Street 123”的披萨想去名为“ Main Street”的大街上编号为“ 123”的建筑物。很容易知道您需要前往Main Street的100街区,因为建筑物编号在100到199之间,并且大多数城市街区都有数百个编号。您“只知道”如何拆分地址。
路由器发送数据包,而不是披萨。他们的工作与披萨司机相同:使货物(包装)尽可能靠近目的地。路由器连接到两个或多个IP子网(完全有用)。路由器必须检查数据包的目标IP地址,并将这些目标地址分解为“街名”和“建筑物编号”部分,就像披萨驱动程序一样,以做出有关传送的决定。
每台计算机(或“主机” IP网络上的“”)配置了唯一的IP地址和子网掩码。该IP地址可以分为称为“主机ID”的“建筑物编号”组件(如上例中的“ 123”)和称为“主机名”的“街道名称”组件(如上例中的“ Main Street”)。 “网络ID”。对于我们的人来说,很容易看到建筑物编号和街道名称在“ 123 Main Street”中的位置,但是在“ 10.13.216.41”中却很难看到该分区,子网掩码为255.255.192.0。
IP路由器“只知道”如何将IP地址拆分为这些组成部分以做出路由决策。由于了解IP数据包的路由方式取决于了解此过程,因此我们也需要知道如何拆分IP地址。幸运的是,从IP地址和子网掩码中提取主机ID和网络ID实际上很容易。
首先以二进制形式写出IP地址(如果您尚未学会使用IP地址,请使用计算器)。您的头还没动,但是做一个笔记来学习如何做-这真的非常非常容易,并且给参加聚会的异性留下了深刻的印象):
10. 13. 216. 41
00001010.00001101.11011000.00101001
也用二进制写出子网掩码:
255. 255. 192. 0
11111111.11111111.11000000.00000000
并排编写,可以看到子网掩码中“ 1s”停止的点“对齐”到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 1s in subnet mask, remaining bits set to 0
00000000.00000000.00011000.00101001 - Portion of IP address covered by 0s 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 0s in subnet mask, remaining bits set to 0
在披萨交付过程中,肉眼看到网络ID和主机ID之间的“中断”并不像在物理地址中的“建筑物编号”和“街道名称”之间那样容易,但是最终的效果是相同。
现在您可以将IP地址和子网掩码分为主机ID和网络ID,就可以像路由器一样路由IP。
更多术语
您将看到在整个Internet上以及整个此答案的其余部分中,子网掩码写为(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路由器与披萨送货司机有相似的工作,因为他们需要拿起货物(小包) )到目的地。当IP路由器收到绑定到地址192.168.10.2的数据包时,需要确定其哪个网络接口最能使该数据包更接近其目的地。
假设您是IP路由器,并且有接口连接到您的编号为:
以太网0-192.168.20.1,子网掩码/ 24
以太网1-192.168.10.1,子网掩码/ 24
如果收到数据包为了传递目标地址为“ 192.168.10.2”,(用肉眼)很容易知道应该将数据包从接口Ethernet1发送出去,因为Ethernet1接口地址与数据包的目标地址相对应。连接到Ethernet1接口的所有计算机的IP地址均以“ 192.168.10。”开头,因为分配给接口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”的传入数据包,我们只需要将该数据包的地址转换为二进制(如人类-路由器首先以二进制形式获取它),然后尝试将其与路由表中的每个地址进行匹配(最多匹配子网掩码中的位数),直到我们匹配条目为止。
传入数据包目的地: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
假设还有另一个路由器“路由器B”,其IP地址192.168.10.254/24和192.168.30.1/24分配给了它的Ethernet0和Ethernet1接口。它具有以下路由表:
网络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
您可以看到Router B知道如何“获得到路由器A一无所知的192.168.30.0/24网络。
假设IP地址为192.168.20.13的PC连接到连接到路由器A的Ethernet0接口的网络,则向路由器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(192.168.10.0网络中路由器A的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的目标设备,但是路由器B会将192.168.30.46尝试发送回的任何答复作为“目标网络不可访问”返回。单向通信通常是不希望的。在考虑计算机网络中的通信时,请始终确保考虑双向流量。
您可以从静态路线中获得很多里程。实际上,诸如EIGRP,RIP等动态路由协议仅是路由器之间相互交换路由信息的一种方式,而实际上可以通过静态路由对其进行配置。但是,相比于静态路由,使用动态路由协议的一大优势在于,动态路由协议可以根据网络条件(带宽利用率,接口“断开”等)动态地更改路由表,因此可以使用动态路由协议来动态更改路由表。路由协议可能会导致配置“绕过”网络基础结构中的故障或瓶颈。 (但是,动态路由协议不在此答案的范围内。)
您不能从这里到达那里
对于我们的示例路由器A,当数据包绑定到“ 172.16”时会发生什么查看路由器中的“ .31.92”?
查看路由器A路由表,目标接口或静态路由都不匹配172.18.31.92的前24位(顺便说一下,它是10101100.00010010.00011111.01011100)。我们已经知道,路由器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座建筑物。计划街道编号非常容易,以使Main Street中的每个街区都有一个街道编号范围,每个街区的街道编号增加100。很容易知道每个后续块中的“起始编号”。
在规划IP子网时,您需要考虑使用正确数量的可用主机ID构建正确数量的子网(街道)(建筑物号),并使用路由器将子网相互连接(交叉)。路由器中指定的有关允许的源地址和目标地址的规则可以进一步控制流量。防火墙可以像强迫性的交通警察一样行动。
就此答案而言,构建我们的子网是我们唯一的主要问题。而不是像城市规划那样,使用十进制来描述每个子网的边界。
继续:IPv4子网划分是如何工作的?答案的最大大小(30000个字符)。
评论
@约瑟夫:这是我为自己的利益而进行的多次演讲。 >微笑<我将看您的二进制部分。我讨厌讲授数学(这实际上是理解二进制的含义-以2为底数),因为我不太擅长数学。
–埃文·安德森(Evan Anderson)
09年8月4日在16:18
不要分手。
–约瑟夫·科恩(Joseph Kern)
09年8月4日在17:22
为史诗般的所有答案之母+1 ;-)
–艾琳·佩恩(Avery Payne)
09年9月2日,0:40
+1以获得serverfault上最全面的信息
–斯科特·伦德伯格
09-09-21 at 19:02
仅适用于里程表的隐喻。现在,我知道如何向人们解释二进制的工作原理。
– phuzion
2010年5月20日13:05
#2 楼
续自:IPv4子网划分是如何工作的?您的ISP为您提供范围为网络ID 192.168.40.0/24(11000000.10101000.00101000.00000000)。您知道您想使用防火墙/路由器设备来限制网络的不同部分(服务器,客户端计算机,网络设备)之间的通信,因此,您想破坏网络的这些不同部分进入IP子网(防火墙/路由器设备随后可以在这些IP子网之间进行路由)。
您具有:
12台服务器计算机,但是最多可以容纳50台计算机%更多
9台交换机
97台客户端计算机,但您可能会得到更多
将192.168.40.0/24分解成这些片段的好方法是什么?
以2的偶数幂为基础,并使用大量可能的设备,您可以得出:
18台服务器计算机-2的第二大幂是32
9交换机-第二个最大幂是16
97个客户端计算机-第二个最大幂是128
在给定的IP子网中,有两个保留的地址可以:用作有效的设备IP地址-地址中全零的地址主机ID部分和地址全都在主机ID部分中。因此,对于任何给定的IP子网,可用的主机地址数量是32的幂乘以子网掩码中的位数减去2的乘方。因此,对于192.168.40.0/24,我们可以看到子网掩码有24位。剩下的8位可用于主机ID。我们知道2到8的幂是256-意味着256种可能的比特组合适合8比特宽的插槽。由于主机ID不允许使用这8位的“ 11111111”和“ 00000000”组合,因此我们可以在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”的内容:
一个足以容纳客户端计算机的网络,然后是第二个网络,我们可以应用相同的原理将其分解成更小的网络。 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.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.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)不一致。它提供了一些可爱的示例,但浪费了地址空间。通常,在/ 30或/ 31(请参见http://www.faqs.org/rfcs/rfc3021.html上了解有关/ 31的工作方式的详细信息-它们肯定超出了此答案的范围),在两个路由器之间严格点对点的链接。
评论
小错误:“最后一个有效主机...”之后的代码恢复为称其为“第一个有效主机”。我认为应该仍然说“最后”。
–JoeCool1986
13年7月8日在13:40
@ JoeCool1986-很好。
–埃文·安德森(Evan Anderson)
13年7月8日在13:47
我将对这个答案进行投票,以确保两个答案保持顺序。
–l46kok
13年8月22日在16:24
在从192.168.40.128创建两个子网并创建网络ID 192.168.40.192的那部分中,192的来源是什么?
–user6607
2015年1月5日,下午1:59
@ user6607子网向后计数(无间隔)。例如,第一个子网0表示为00000000。第二个子网为128表示10000000,第三个子网192表示为11000000,依此类推。继续往后计数以查找新的子网。
–约瑟夫·科恩(Joseph Kern)
2015年1月5日14:15
#3 楼
子网划分子网划分并不困难,但可能会令人生畏。因此,让我们从最简单的步骤开始。学习以二进制进行计数。
二进制
二进制是以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。并且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)作为地址的网络部分。和第四个八位位组(.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]
Google表示“超级网络”和“ VLSM(可变长度子网掩码)”这两个术语,话题。
现在我可以看到我花了很长时间来回应...叹气
评论
“鉴于我的主机部分只有一个八位位组(在上面的示例中)。我只能拥有255台主机(255是一个八位位组的最大值)。但是还有另一个小技巧:您需要减去2个主机地址来自可用地址(当前为255)。范围中的第一个地址将用于网络(192.168.1.0),范围中的最后一个地址将是广播(192.168.1.255)。因此,您实际上有253个可用地址可用于一个网络中的主机。” ...这是不正确的。
– joeqwerty
11年11月29日在19:08
八位位组有256个可能的值:0到255,总共256个。256 -2(网络和广播地址)= 254个可能的主机地址。
– joeqwerty
11年11月29日在19:37
哎呀。谢谢! :-)一个人,我不知道我是如何做到这一点的。
–约瑟夫·科恩(Joseph Kern)
2011年11月30日15:52
-1对不起,但是自1993年RFC 1519以来就没有“类”,没有人可以在历史背景之外谈论它们。它们令人困惑并引起很多误解。
–克里斯S
13年8月8日在15:02
克里斯,您也许是对的,但是直到2000年代初期,仍在CCNA和大多数本科课程中教授课程。
–约瑟夫·科恩(Joseph Kern)
13-10-10在8:50
#4 楼
简要的历史课程:最初,单播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(/ 24,CIDR表示法)的有类子网掩码。
该想法是可以为不同规模的组织分配不同的IP地址类别,以有效利用IP地址空间。
但是,随着IP网络的发展,很明显这种方法存在问题。仅举三个例子:
在一个分类世界中,所有子网的掩码都必须为/ 8,/ 16或/ 24。这意味着可以配置的最小子网是/ 24,它允许254个主机地址(.0和.255分别保留为网络和广播地址)。这非常浪费,特别是在仅连接了两个路由器的点对点链路上。
即使放松了此限制,早期的路由协议(例如RIPv1)也没有通告相关的掩码长度带有IP前缀。在没有特定掩码的情况下,它将使用同一分类网络中直接连接的接口的掩码,或者退回到使用分类掩码。例如,如果您想将网络172.16.0.0用于带有/ 30掩码的路由器间链接,则172.16.0.0-172.16.255.255中的所有子网都必须具有/ 30掩码(16384个子网,每个子网都有2个可用IP )。
Internet路由器的路由表开始占用越来越多的内存。这被称为“路由表爆炸”。例如,如果提供商有16个连续的/ 24网络,则他们需要公布所有16个前缀,而不是覆盖整个范围的单个摘要。
两项相关的改进使我们可以超越以上限制。
可变长度子网掩码(VLSM)
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 subnet-零。)。
地址的“主机部分”中剩余8位。这意味着有256个可用IP地址(2 ^ 8),其中2个是保留的(10.1.1.0是网络地址,10.1.1.255是子网定向广播地址)。这将在该子网上留下254个可用IP地址。 ((2 ^ 8)-2)
评论
实际上有5个班级。
–dbasnett
2010年5月19日,12:40
是的,但是我们真的需要针对“介绍子网”问题进入多播和保留的E类地址吗? :)
– Murali Suriar
2010年5月19日20:00
您将历史带入了一个介绍性问题...然后使它不完整。不知道哪个更糟。
–克里斯S
13年8月8日14:51
#5 楼
网络范围:网络始终由两个数字引用:一个数字确定网络,另一个数字确定该网络上的哪台计算机(或主机)。由于每个网络地址的长度为32位,因此两个数字都必须适合这32位。
网络编号很重要,因为ICANN在您请求网络IP范围时会分发此编号。如果我们没有它,没人会说出我的网络与AT&T之间的区别。因此,尽管这些数字必须是唯一的,但没有其他人希望为我网络上的主机分配数字。因此,拆分-第一部分由网络人员管理,第二部分全部由我提供给我想要的任何计算机。
网络号不固定为一定位数-例如,如果我只有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类网络而/ 8是A类...我仍然很想在我的脑海中计算/ 22。幸运的是,有一些工具可以帮我做到这一点:)
但是-如果您知道/ 24是用于主机的8位(对于网络是24位),那么我知道/ 23给了我额外的位使主机数量加倍。
评论
-1很抱歉,但如今在“历史”参考之外提及课程是不合适的。它们并没有“过时”,它们在1993年被RFC 1519正式弃用。它们令人费解,造成了很多误解。
–克里斯S
13年8月8日14:56
动态路由协议的某些实现沿类边界汇总,因此了解它们仍然很有帮助。
–user65237
17年9月12日在20:10
#6 楼
我将一路提出并回答一些相关问题:为什么这么频繁地看到
255.255.255.0
?为什么
192.168.0.1
?为什么
127.0.0.1
?为什么这么奇怪的数字-255、192、168、127?
8 + 8 + 8 + 8位点分十进制
诸如194.60.38.10之类的Internet地址使用点分十进制表示法将32位拆分为8 + 8 + 8 + 8位。点分十进制表示将†每个数字转换为二进制,然后用
0
将其左填充。例如
.60.
&rightarrow; 60 = 32 + 16 + 8 + 4&rightarrow; 111100
&rightarrow;所以对于4×8 = 32位地址.00111100.
,194.60.38.10是点分十进制的,因为38&rightarrow; 11000010.00111100.00100110.00001010
,10&rightarrow; 100110
,依此类推。 194要求全部8位;其余的将被填充。一旦考虑到8位二进制中的255、192和127,您将更容易理解为什么某些十进制数如此常见:
1010
192 =
11111111
11000000
128 =
_1111111
这些十进制数字恰好代表了视觉上方便的8位块,例如■■■■■■■,■□□□□□□□和□■■■■■■ ■。因此,由于8位限制,您从未见过256 =2⁹,而127 = 128−1 = 2⁸−1是2的幂的比特翻转-且2的幂是
10000000
的10………00000
子网掩码:什么是我的+你的是你的,
然后,子网掩码会将每个32位Internet地址分解为一个网络ID和一个主机ID。互联网地址可以是1和0的任意组合,而子网掩码只能以1开头,只能以0结束。
■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ IP
■■■■■■■■|■■■■■■■■|■■■■■■■■|□□□□□□□□ subnet
将前8 + 8 + 8涂黑= 24位并淘汰最后的8位是拆分IP的一种方法。■■□□□□■□|□□■■■■■□| ■□分为两部分:
■■□□□□■□|□□■■■■□□|□□■□□■■□ network
□□□□■□■□ host
如果子网所有者(例如OmniCorp)想要更多的内部IP,他们可以购买网络右侧的更多(例如8 + 8 = 16位),如下所示:
■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ IP
■■■■■■■■|■■■■■■■■|□□□□□□□□|□□□□□□□□ subnet
■■□□□□■□ □□■■■■□□ network
□□■□□■■□ □□□□■□■□ host
显然,在32位=2³²= 4,294,967,296选项地址空间内需要权衡:如果您购买更多的网络ID(左侧),则您的内部网络将分配更多的主机ID(右侧)。 br />
因此便宜的人的子网掩码为
255.255.255.0 =■■■■■■■■|■■■■■■■■||■■■■■ ■■■|□□□□□□□□..甚至更便宜的人也有
或255.255.255.192 =■■■■■■■||■■■■■■ ■■|■■■■■■■■■■■□□□□□□□。
根据民间传说,它实际上不是Roger Miller,而是一个拥有255.255.255.254掩码的低级系统管理员,他最初写了《道路之王》,用“我没有大子网”代替“我没有香烟”。
(为什么低端的面具充满如此高的数量?因为像Miller的讲述人一样,子网掩码也很重要所有您没有的东西。)
IP后的斜杠是什么意思? (例如194.60.38.10/24)
因为子网掩码(将“他们的”和“我们的”分开)始终以
10101000
开头,并且由于我们讨厌对偶数的2的幂进行求和首先,有人发明了CIDR(IP后的斜杠),而不是我们讨厌二位数的能力。■■■■■■■■■■■■■■■■■■■■■■■■■■■□■□□□□□□属于“他们”的8 + 8 + 8位和属于“我们”的8位。
反转上述流浪汉的国歌,
1
是作曲家/31
是中产阶级(/24
=■■■■■■■■■■■■■■■■||■■■■■■■□□□□ □□□□□255.255.255.0
富裕□/16
超级富有■■■■■■■■|□□□□□□□□|□□□□□□||□□□□□/8
或/1
是IANA之类的东西。†例如使用
/0
。评论
图片与答案有什么关系?只是专注于答案吗? :)
– simhumileco
19年8月2日在11:26
#7 楼
尽管上面的方法是正确的(抱歉,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是一个非常重要的数字,构成其余数学内容的基础。 br />调整子网大小
我们将从一个简单的问题开始:“如果掩码为255.255.255.248,子网中有多少个地址?”现在,我们将忽略前三个八位位组,并查看最后一个八位位组。这很容易:从256中减去248。256减去248等于8。有8个地址可用(包括网络和广播地址)。反之亦然:“如果我想拥有一个包含16个地址的子网,那么子网掩码将是什么?” 256减去16等于240。子网掩码将为255.255.255.240。
现在,如果我们要扩展到超过256个地址(从历史上讲,是“ C类”),它只会稍微复杂一点:如果我们的最后一个八位位组是0,而我们的第三个八位位组是240,(255.255.240.0),那么我们对第三个八位位组进行数学运算,发现将有16个地址。因此,我们将16乘以256(最后一个八位位组中的地址数)得出4,096。如果最后两个八位位组都为0(例如255.240.0.0),那么我们从第二个八位位组中减去结果(我们再次说是16),然后乘以256(第三个八位位组中的地址),再乘以256(最后一个八位位组中的地址)以获取1,048,576个地址。那样简单! (好吧,所以反向操作要困难一些。如果我们想要一个具有1,048,576个地址的子网,则必须将该数字除以256两次才能得到一个可以从256中减去的数字。)
网络地址
现在我们知道了如何计算子网掩码,如何确定网络地址是什么?这很容易:它始终是我们子网中地址数量的倍数。因此,如果子网中有16个地址,则可能的网络地址将是0、16、32、48、64,依此类推,最多为240。(请注意,0是任何数字的有效倍数,因为任何数字乘以0等于0。)
当然,广播地址将是作用域中的最后一个地址。因此,如果子网中有16个地址,并且我们选择的网络地址为10.3.54.64,则广播地址将为(64 + 16-1 = 79)10.3.54.79。
CIDR表示法
那么CIDR表示法如何?如何在IPv4样式的子网掩码之间来回转换?
还记得我们的二次幂吗?好吧,现在我们除了256:32还有一个要记住的关键数字。请记住,CIDR表示法描述了IPv4地址中的有效位数,并且IPv4地址中有32位,每个八位位组为8。因此,如果我们的子网掩码为255.255.255.240,则为16个地址。如果我们看一下上面的“ 2的幂”表,我们看到16是2到4的幂(2 ^ 4)。因此,我们从32减去那个幂数4,得到28。子网掩码为255.255.255.240的CIDR表示法,我们的CIDR表示法为/ 28。
如果给定CIDR为/ 28, ,我们从32中减去(28)得到4;将2提高到(4th)次幂(2 ^ 4)以得到16;然后从256中减去(16)得到240;或255.255.255.240。
评论
谢谢。但是我仍然对PC如何使用子网掩码感到困惑。当PC上的应用程序要发送数据时,它将数据封装到数据包中。子网掩码是否确定数据包的封装方式?例如,如果个人计算机要在本地网络上发送数据包,则将使用以太网帧en.wikipedia.org/wiki/Ethernet_frame,如果要在网络外部,则将使用tcp数据包en.wikipedia.org/wiki /…?
– aquagremlin
15年5月21日在12:30
基本上,我不知道个人计算机如何确定将其数据发送到哪里。以太网就像总线一样,无处不在。通过PC的以太网插孔放出数据包是一个通用事件,因此,数据包本身必须确定谁对此做出响应。注定要由本地设备(局域网中的交换机或其他PC)拾取的数据包必须看起来与将要由路由器拾取的数据包不同。
– aquagremlin
2015年5月21日在12:31
这发生在TCP下的一层。每个设备都有一个与每个设备的ARP表中的IP地址关联的硬件地址(MAC)。这是通过发现构建的。当数据包发往本地网络上的主机时,将用目标设备的MAC进行标记。当数据包发往远程主机时,将用本地网络上路由器的MAC标记。当它通过路由器时,MAC被剥离,然后用下一跳路由器的MAC标记。子网仅定义了本地网络的范围。 (这是简单的<500个字符的版本。)
–乔纳森·J
17-10-21在0:10
256减去16等于240。子网掩码将为255.255.255.248。 <-不应该是255.255.255.240吗?
–格雷格
5月23日22:28
修复了错误的子网掩码。
–乔纳森·J
7月7日18:58
#8 楼
我还觉得应该至少提及NAT,因为在IPv4地址耗尽等诸多方面,它们在现代网络中通常代替子网使用。 (而且,当我第一次学习子网时,我对子网划分与WiFi路由器创建的网络之间的联系感到非常困惑。)(网络地址转换)是一种(通常)使用的技术通过将一个地址空间(IP:Port)映射到另一个地址空间来创建专用网络。通常,它用于在一个公共地址后面创建多个私有IP的私有网络,例如在Wifi路由器中,由组织(如大学或公司)或有时由ISP组成。
实际地址转换在具有NAT功能的节点(通常是路由器)中透明地完成。它可能有多种形式,包括完整锥体,受地址限制,受端口限制等,或这些形式的混合,决定了如何跨节点启动连接。
完整的详细信息可以在Wikipedia上找到。 ,例如,考虑连接了2个设备的Wifi路由器。路由器的公共IP为
10.9.20.21/24
,设备的IP(私有IP)为A: 192.168.0.2
,B: 192.168.0.3
,路由器的IP为R: 192.168.0.1
。因此,如果A
想要连接到服务器S: 10.9.24.5/24
(实际上是在此处与路由器位于不同的子网上): ),其源IP为R
,src端口(例如)192.168.0.2
和目标IP为:14567
(尽管端口实际上是TCP标头的一部分)。 具有NAT功能的路由器将端口
10.9.24.5
映射到设备14567
,并将IP数据包上的源更改为A
(这是路由器的公共IP)。这与上述子网划分相反,在子网划分中,IP数据包实际上从未更改。 10.9.20.21
接收一系列TCP数据包(src IP:S
,src端口:10.9.20.21
),并在目标字段中发送具有这些值的响应数据包。 14567
检查目标端口R
并将数据包转发到14567
。 A
接收到响应数据包。在上述情况下,如果
A
试图在同一源端口(B
)上打开连接,它将被映射到其他端口在发送到14567
之前,先通过R
更改端口(并且更改传出数据包中的端口)。也就是说,也将存在端口转换,而不仅仅是IP。这里需要注意两件事:
由于这种地址转换,通常不是无需使用某些特殊技术即可启动与专用网络中设备的连接。
现在,对同一设备到服务器的TCP连接总数的限制(65536 = 2 ^ 16)统一适用于NAT后面的所有设备,采用上面使用的NAT形式。
评论
这个分为两部分的答案说明了您想了解的有关IPv4地址计算的所有知识,以及更多。这简直太多了,无法在计算机屏幕上吸收。我为想要在树下的长凳上阅读本文档的人创建了一个打印机友好的PDF。