天天看點

【翻譯自mos文章】怎麼正确的計算一個ip位址的subnet id?

怎麼正确的計算一個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的輸出中,我們會看到如下:

e1000g0:
flags=209040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,CoS>
mtu 1500 index 2
inet 171.197.26.137 netmask ffffffc0 broadcast 171.197.26.191
groupname prod
ether 0:14:4f:95:39:9a
           

注意:上面的netmask被以十六進制顯示為ffffffc0(在一些作業系統平台中,會顯示成十進制而不是十六進制)

該 netmaskffffffc0 = ff.ff.ff.c0=255.255.255.192
二進制是11111111.11111111.11111111.11000000
           

另一個通常的用來表示netmask的方法是 兩位的數字,比如“26”,這個“26”,是經過如下計算得到的:

11111111.11111111.11111111.11000000
=>(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)
=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,給出如下的輸出:

Result:
Address:  171.197. 26.137       10101011.11000101.00011010.10 001001
Netmask:  255.255.255.192 = 26  11111111.11111111.11111111.11 000000
Wildcard:   0.  0.  0. 63       00000000.00000000.00000000.00 111111
=>
Network:  171.197. 26.128/26    10101011.11000101.00011010.10 000000 (Class B)
Broadcast:171.197. 26.191       10101011.11000101.00011010.10 111111
HostMin:  171.197. 26.129       10101011.11000101.00011010.10 000001
HostMax:  171.197. 26.190       10101011.11000101.00011010.10 111110
Hosts/Net: 62
           

=>注意給出的 “Network:  171.197. 26.128/26”

忽略上面輸出中的/26, oifcfg 所需要的subnet id就是171.197. 26.128

另外一個獲得subnet id的方法是對ip位址和netmask的每個bit 做一個bit-AND運算:

171.197. 26.137 => 10101011.11000101.00011010.10 001001
255.255.255.192 => 11111111.11111111.11111111.11 000000
                 & ------------------------------------ 
                   10101011.11000101.00011010.10 000000 => 171.197.26.128
           

當然,另外的一個獲得subnet id的方法就是用oifcfg 指令本身

oifcfg iflist指令顯示了網卡名稱和相應的subnet id

$ ./oifcfg iflist
e1000g0 171.197.26.128
e1000g2 171.197.26.128
e1000g3 10.241.6.0
           

要設定public 網絡的oifcfg,你需要使用如下的文法:

oifcfg setif -global e1000g0/171.197.26.128:public
           
譯者注:
           
若:netmask是ffffff00(也就是255.255.255.0),那麼subnet id就是:ip位址的前三部分+一個零構成第四部分
若:netmask不是ffffff00,那麼subnet id需要計算,計算過程見本文所述過程
           

繼續閱讀