fwc*_*fwc 4 networking host ip-address subnet cidr
我需要计算出关于如何计算IP地址的网络和主机部分的算法.
主机ID是公共部分吗?网络ID是否是在本地网络中查找计算机的私有部分?
如果子网掩码是小于255的值,则必须将IP地址中的相应八位字节分解为二进制,以确定该号码的哪一部分是主机ID,哪部分是网络ID.结果二进制数总是分成两部分吗?
(例如,子网掩码为255.255.224.0的IP地址为192.168.33.22意味着八位字节保持33按如下方式分解:0010 | 0001表示0010是网络ID部分,0001是主机ID部分?)
预先感谢您的任何帮助.
你的事情太复杂了.
IPv4地址(和子网掩码)仅以点十进制表示法显示,仅仅是为了使它们对人类更具可读性.在计算机中,它们只是4个字节的连续内存(通常存储在例如a中):long int
Stored in computer: 11000000 10101000 00100001 00010110 Displayed for human: 192. 168. 33. 22 Stored in computer: 11111111 11111111 11100000 00000000 Displayed for human: 255. 255. 224. 0
1掩码中的s表示标识网络号的位,因此只需要使用按位AND运算来提取网络号:
address 11000000 10101000 00100001 00010110 192.168.33.22 mask 11111111 11111111 11100000 00000000 255.255.224.0 (AND) ----------------------------------- ------------- network 11000000 10101000 00100000 00000000 192.168.32.0
自引入CIDR(地址类指示网络/主机边界之前)以来,主机通常只知道自己网络的掩码,因此无法将任意地址(例如数据报目的地的地址)划分到网络中和主机号码.
那有什么意义呢?好吧,源主机仍然可以采用目标地址的按位AND和它(源的)自己的网络掩码.虽然该操作的结果不一定会产生有意义的网络号,但当且仅当它们在同一网络上时,它才会匹配源的网络号:
如果它们匹配,则目的地应该在链路层可达(例如,通过查找其MAC地址,可能通过广播ARP请求,然后将数据报封装在寻址到该MAC 的帧中);
如果它们不同,源必须将数据报发送到自己网络上的路由器(使用上述过程到达该路由器); 路由器将看到帧被寻址到它,但数据报不是,然后应该将数据报(封装在不同的帧中)转发到目的地.许多主机只知道一个路由器,它们的" 默认网关 ",尽管其他配置也是可能的.
那些不能识别源网络号的地址位,显然是由0网络掩码中的s 表示,可以认为它们形成了它的主机号 - 尽管以与上面相同的方式提取它实际上既没有意义也没有用:即使在与自己网络上的主机通信时,其完整地址也用于识别,而不是单独使用主机号码.
也就是说,作为纯粹的学术练习,当然可以使用掩码的补码执行按位AND :
address 11000000 10101000 00100001 00010110 192.168.33.22 ~mask 00000000 00000000 00011111 11111111 0.0.31.255 (AND) ----------------------------------- ------------- host 00000000 00000000 00000001 00010110 0.0.1.22
所以,要解决你的问题:
主机ID是公共部分吗?网络ID是否是在本地网络中查找计算机的私有部分?
整个地址都是"公开的"; 没有"私人"部分.ARP(使用完整地址)等查找协议用于定位本地网络中的计算机.
如果子网掩码是小于255的值,则必须将IP地址中的相应八位字节分解为二进制,以确定该号码的哪一部分是主机ID,哪部分是网络ID.结果二进制数总是分成两部分吗?
没有什么是"分成两半".它只是出现这种情况,因为点十进制表示法的目的是使IPv4地址对人类更具可读性(虽然这个决定是在CIDR发明之前做出的,当时网络数字始终与字节边界对齐,因此从未导致明显的"分裂" "十进制数".
- 主机ID是公共部分吗?网络 ID 是用于在本地网络中定位计算机的私有部分吗?
IP 地址的主机和网络部分与公共和私有无关。
- 如果子网掩码的值小于 255,则必须将 IP 地址中相应的八位字节分解为二进制,以确定该数字的哪一部分是主机 ID,哪一部分是网络 ID。结果二进制数总是一分为二吗?...子网掩码 255.255.224.0 意味着包含 33 的八位字节可细分如下:0010|0001...
你的例子是错误的。具体来说,当您吐出 33 个八位字节时,假设 224 有四个连续的二进制位0010|0001(其中 | 是网络和主机之间的划分)...
子网掩码中包含 224 的八位字节中有三个连续的二进制 1:11100000。因此整个IP地址的“网络部分”是:192.168.32.0。IP 地址的“主机部分”是0.0.1.22。使用您的符号,ip 192.168.33.22(掩码 255.255.224.0)的第三个八位字节为:001|00001。
要获取 IP 地址的网络部分,必须对ANDIP 地址及其网络掩码执行二进制操作。主机部分是AND反转网络掩码的二进制文件(位在 0 和 1 之间翻转)。
让我们再举一个例子来回应您的评论:
IP 地址 192.168.255.22,网络掩码 255.255.224.0
该地址的网络部分是 192.168.224.0,该地址的主机部分是 0.0.31.22。我特意选择了示例中的数字,以使数学原理尽可能清晰。请将 224 和 31 转换为二进制,这样应该就清楚了。如果没有,请参考维基百科有关子网划分的文章
| 归档时间: | 
 | 
| 查看次数: | 84428 次 | 
| 最近记录: |