ITPub博客

首页 > 数据库 > Oracle > 【翻译自mos文章】怎么正确的计算一个ip地址的subnet id?

【翻译自mos文章】怎么正确的计算一个ip地址的subnet id?

翻译 Oracle 作者:yesu898 时间:2017-06-09 14:56:33 0 删除 编辑

怎么正确的计算一个ip地址的subnet id?

来源于:
How to calculate the correct subnet for an interface (文档 ID 1059759.1)

适用于:
Oracle Database - Enterprise Edition - Version 10.2.0.1 and later
Information in this document applies to any platform.

目标:
正确的计算一个ip地址的subnet id,该subnet id是给oifcfg用的。

oifcfg 需要你敲入pulic 和cluster_interconnect的subnet id。
但是,ifconfig命令通常显示ip地址和netmask,并不显示subnet id

本文会显示subnet id的计算方法。
更普遍的是,本文也适用于如下的问题:对于一个给定的ip地址和netmask,怎么确定subnet id?

解决方案:
本文假设公共网络用的网卡名称是e1000g0,ip地址是171.197.26.137,netmask是ffffffc0

从ifconfig -a的输出中,我们会看到如下:

[html] view plain copy
  1. e1000g0:  
  2. flags=209040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,CoS>  
  3. mtu 1500 index 2  
  4. inet 171.197.26.137 netmask ffffffc0 broadcast 171.197.26.191  
  5. groupname prod  
  6. ether 0:14:4f:95:39:9a  

注意:上面的netmask被以十六进制显示为ffffffc0(在一些操作系统平台中,会显示成十进制而不是十六进制)

[html] view plain copy
  1. 该 netmaskffffffc0 = ff.ff.ff.c0=255.255.255.192  
  2. 二进制是11111111.11111111.11111111.11000000  

另一个通常的用来表示netmask的方法是 两位的数字,比如“26”,这个“26”,是经过如下计算得到的:

[html] view plain copy
  1. 11111111.11111111.11111111.11000000  
  2. =>(1+1+1+1+1+1+1+1)+(1+1+1+1+1+1+1+1)+(1+1+1+1+1+1+1+1)+(1+1+0+0+0+0+0+0)  
  3. =8+8+8+2=26  

针对一个给出的网络ip地址(171.197.26.137)和netmask(255.255.255.192),快速计算出subnet id的方法是使用IP calculator
免费的IP calculator在网上可以得到,在本例子中,我使用的IP calculator是来源于:http://jodies.de/ipcalc.

将网络ip地址(171.197.26.137)和netmask(255.255.255.192)带入该IP calculator,给出如下的输出:

[html] view plain copy
  1. Result:  
  2. Address:  171.197. 26.137       10101011.11000101.00011010.10 001001  
  3. Netmask:  255.255.255.192 = 26  11111111.11111111.11111111.11 000000  
  4. Wildcard:   0.  0.  0. 63       00000000.00000000.00000000.00 111111  
  5. =>  
  6. Network:  171.197. 26.128/26    10101011.11000101.00011010.10 000000 (Class B)  
  7. Broadcast:171.197. 26.191       10101011.11000101.00011010.10 111111  
  8. HostMin:  171.197. 26.129       10101011.11000101.00011010.10 000001  
  9. HostMax:  171.197. 26.190       10101011.11000101.00011010.10 111110  
  10. Hosts/Net: 62  

=>注意给出的 “Network:  171.197. 26.128/26”
忽略上面输出中的/26, oifcfg 所需要的subnet id就是171.197. 26.128

另外一个获得subnet id的方法是对ip地址和netmask的每个bit 做一个bit-AND运算:

[html] view plain copy
  1. 171.197. 26.137 => 10101011.11000101.00011010.10 001001  
  2. 255.255.255.192 => 11111111.11111111.11111111.11 000000  
  3.                  & ------------------------------------   
  4.                    10101011.11000101.00011010.10 000000 => 171.197.26.128  

 

当然,另外的一个获得subnet id的方法就是用oifcfg 命令本身
oifcfg iflist命令显示了网卡名称和相应的subnet id

[html] view plain copy
  1. $ ./oifcfg iflist  
  2. e1000g0 171.197.26.128  
  3. e1000g2 171.197.26.128  
  4. e1000g3 10.241.6.0  

要设置public 网络的oifcfg,你需要使用如下的语法:

[html] view plain copy
  1. oifcfg setif -global e1000g0/171.197.26.128:public  
[html] view plain copy
  1.    
[html] view plain copy
  1. 译者注:  
[html] view plain copy
  1. 若:netmask是ffffff00(也就是255.255.255.0),那么subnet id就是:ip地址的前三部分+一个零构成第四部分  
  2. 若:netmask不是ffffff00,那么subnet id需要计算,计算过程见本文所述过程  
顶 0 踩

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24052272/viewspace-2140537/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-08-15

  • 博文量
    25
  • 访问量
    47646