首先了解一些我已经知道的背景信息:

IPv4地址是一个32位地址,用于标识网络中的节点。 IP地址具有IP前缀,该前缀确定IP地址的“网络”部分,其余部分确定“主机”。

示例:

128.208.0.0/24将告诉我前24位是IP地址的“网络”部分,其余8位将是给定网络中的主机。还有128.208.0.0。将是给定网络中可用的最低IP地址。

现在Tannenbaum在他的书中说:


因为不能从中推断出前缀长度仅IP地址,
路由协议必须将前缀加到路由器。有时
前缀仅通过其长度来描述,例如在“ / 16”中,其
发音为“斜杠16”。网络部分中1s的二进制掩码。以这种方式写出时,
称为子网掩码。可以与IP地址进行“与”操作,以仅提取网络部分。对于我们的示例,子网掩码是

所以我的问题是:

1)路由协议如何携带前缀? “斜线”部分存储在哪里?

2)这是什么意思:


可以与IP地址进行“与”操作,以仅提取网络部分。对于我们的示例,子网掩码是

谢谢。

评论

拒绝投票的人可以请问为什么这个问题被拒绝吗?

我怀疑社区表示不赞成,因为您的问题是介绍性的,并且此网站针对专业人士。从好的方面来看,人们并没有投票赞成你。

抱歉,英语不是我的母语。这是什么意思:“不过,从正面看,人们正在投票给您。”
我的意思是说:人们不投票赞成结束您的问题。因此,有些人不喜欢它(投下反对票的人),但是人们投票关闭它也不错。

@CraigConstantine谢谢了。是的,你是对的..

#1 楼



路由协议如何携带前缀? “斜线”部分存储在哪里?



我将在OSPF中尽可能直接地回答这个问题。下面是发出所有接口以形成邻接关系的Type 1 Hello数据包。

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Version #   |       1       |         Packet length         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Router ID                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           Area ID                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Checksum            |             AuType            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Authentication                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Authentication                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Network Mask                           |    <------
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         HelloInterval         |    Options    |    Rtr Pri    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     RouterDeadInterval                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Designated Router                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Backup Designated Router                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Neighbor                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              ...                              |


RFC 2328,A.3.2 Hello数据包

Network Mask字段中填充了您正在使用该接口使用的子网掩码。因此,子网掩码只是位位置的压缩形式。想象一下,每次要配置端口时都必须用十进制编写。

因此,拥有这些表示相同数据的简便方法就很有意义。

评论


整个网络掩码发送完毕?使用5位(仅需要1到31)指示网络有多少位会更有效吗?能够定义255.0.255.0掩码真的有什么好处吗?

– Cruncher
2014年2月19日在16:54

@Cruncher 255.0.255.0是不可能的。这样,只有通配符掩码可以与不连续的位一起使用。 RFC没有概述为什么它会与OSPF数据包一起发送整个网络掩码。

– Ryan Foley
14年2月19日在18:01

这是DHCP数据包吗?

–科雷·图吉(Koray Tugay)
14年2月19日在19:54

不,上面的示例是一个OSPF Type 1 Hello数据包。

– Ryan Foley
2014年2月19日在20:05

@Cruncher通配符掩码仅用于访问列表和NATing,实际上是反向子网掩码。

–克里斯
2014年2月20日在12:15

#2 楼

这取决于路由协议。像RIP v1这样的旧协议会采用有分类的掩码,并且不会发布掩码,而像RIP v2,OSPF,ISIS,BGP等较新的协议却会这样做。若要确定地址的网络部分,或测试给定地址是否为特定网络的一部分,请对子网掩码执行按位逻辑与。

例如,要获取172.16.24.5/24的网络地址,您将32位地址的每个位与掩码相加,如下所示:


10101100 00010000 00011000 00000101 <-172.16.24.5

11111111 11111111 11111111 00000000 <-255.255.255.0


10101100 00010000 00011000 00000000 <-结果:172.16.24.0


结果是IP地址的网络部分(也称为网络号)。这正是路由器和PC确定要使用哪个网络来传输数据包的方式。

评论


感谢您的回答,但是255.255.255.0有什么特别之处?

–科雷·图吉(Koray Tugay)
2014年2月19日14:29在

除了因为网络和主机掩码之间的划分落在“点”边界上之外,没有任何其他事情很容易使用(最后一个十进制数字始终为0)。因此它是非常常用的。

–罗恩·托恩(Ron Trunk)
2014年2月19日14:34

它是否假定IP具有24位前缀?

–科雷·图吉(Koray Tugay)
2014-2-19 14:42

我不明白的是,您给出了一个示例:172.16.24.5/24,并且您已经知道前缀长度。但是路由器如何知道前缀?如果不知道前缀,它将如何知道应使用255.255.255.0?

–科雷·图吉(Koray Tugay)
2014年2月19日,14:48

每个路由的路由器广告均带有前缀(对于现代协议)。

–罗恩·托恩(Ron Trunk)
2014年2月19日15:37