1. 程式人生 > >IP和網段及子網掩碼基礎知識

IP和網段及子網掩碼基礎知識

IP地址由網路號和主機號兩部分組成,網路號的最高位必須是“0”,IP地址和子網掩碼求“與”算出網路地址,只有網路地址相同才可直接通訊,否則需要藉助路由。
主機標識段為全1的IP地址為廣播地址, 廣播資料包不經過路由器,只能在同一子網內部廣播,UDP的廣播地址為255.255.255.255。
子網中第一個地址為網路地址,最後一個地址為廣播地址,這兩個地址是不能配置在計算機主機上。根據網路號的不同,IP地址劃分為ABCED五類。

子網掩碼為何叫“掩碼”?因為它能遮掩(同IP地址求與)IP地址的主機號部分,從而得到網路號(或網路地址)。

1) 以
inet 10.49.126.98  netmask 255.255.255.192  broadcast 10.49.126.127
為例:

10.49.126.98的二進位制:
00001010.00110001.01111110.01100010

255.255.255.192的二進位制:
11111111.11111111.11111111.11000000

10.49.126.98的網路地址為與子網掩碼255.255.255.192的“與”:
00001010.00110001.01111110.01000000
即:
10.49.126.64

“10.49.126.64”即為網路地址,該子網可有多少主機?
“00001010.00110001.01111110.01000000”最後一個1後的0為主機部分,這裡一共6個0,即2的6次方,值為64,減去網路地址和廣播地址,所以可用主機數為62個。

2) 以
inet 10.223.25.101  netmask 255.255.255.192  broadcast 10.223.25.127
為例:

10.223.25.101的二進位制:
00001010.00110001.01111110.01100101

10.223.25.101的網路地址為與子網掩碼255.255.255.192的“與”:
00001010.00110001.01111110.01000000
即:
10.49.126.64

因此10.223.25.101和10.49.126.98可直接通訊。

3) 以
inet 9.25.130.171  netmask 255.255.255.192  broadcast 9.25.130.191
為例:

9.25.130.171的二進位制:
00001001.00011001.10000010.10101011
9.25.130.171的網路地址為與子網掩碼255.255.255.192的“與”:
00001001.00011001.10000010.10000000
即:
9.25.130.128

因此9.25.130.171和10.49.126.98不可直接通訊,需要新增路由。

主機地址10.240.85.2/16中的數字16為子網掩碼的縮寫(CISCO表示法),16代表16個1,即:11111111.11111111.00000000.00000000,因此16就是255.255.0.0。

inet 10.240.85.2  netmask 255.255.255.192  broadcast 10.240.85.63
10.240.85.2     => 00001010.11110000.01010101.00000010
255.255.255.192 => 11111111.11111111.11111111.11000000
網段:
00001010.11110000.01010101.00000000
即:
10.240.85.0

故可表示為:
10.240.85.0/26

問題1:192.168.1.0/26和192.168.1.64/26是否可直接通訊?
26           => 11111111.11111111.11111111.11000000
192.168.1.0  => 11000000.10101000.00000001.00000000
192.168.1.64 => 11000000.10101000.00000001.01000000

192.168.1.0的網段為:
11000000.10101000.00000001.00000000
即:
192.168.1.0

192.168.1.64的網段為:
11000000.10101000.00000001.01000000
即:
192.168.1.64

兩個的網段不同,故不能直接通訊。

問題2:192.168.1.0/26可容納多少個IP?
26等於11111111.11111111.11111111.11000000,那麼剩下的只有111111(6個1),十進位制值為63,因此192.168.1.0/26可容納64個IP(包含一個網段地址和一個廣播地址)。

題1:對於C類地址,子網掩碼為255.255.255.248,則能提供的子網數為多少?
248的二進位制值為11111000,而二進位制值11111的十進位制值為31,因此可提供的子網數為30個。

題2:某公司申請到一個C類地址,但要連線6個子公司,最大的一個子公司有26臺電腦,每個子公司在一個網段中,則子網掩碼應設為多少?
26的二進位制值為11010,因此網路掩碼為:11111111.11111111.11111111.11100000,即255.255.255.224。

題3:地址190.233.27.13/16的網路部分地址是什麼?
190.233.27.13 => 10111110.11101001.00011011.00001101
16            => 11111111.11111111.00000000.00000000

190.233.27.13和16求“與”得到:
10111110.11101001.00000000.00000000
即網路部分地址是190.233.0.0。

題4:一個子網網段地址為5.32.0.0,掩碼為255.224.0.0的網路,它允許最大的地址是?
255.224.0.0 => 11111111.11100000.00000000.00000000
5.32.0.0    => 00000101.00100000.00000000.00000000

該網段的廣播地址(同255.224.0.0求“與”後的值為5.32.0.0):
00000101.00111111.11111111.11111111
即:
5.63.255.255
因此最大IP地址為5.63.255.254

題5:一個C類地址192.168.5.0,進行子網規劃,要求每個子網有10臺主機,怎樣設定子網掩碼?
192.168.5.0 => 11000000.10101000.00000101.00000000
10 => 1010
那麼子網掩碼可設定為:
11111111.11111111.11111111.11110000
即255.255.255.240

附1:檢視路由表命令
ip route

route -n

附2:iptables的簡單應用

可以修改/etc/rc.d/boot.local讓規則重啟後也能生效,如:
/sbin/iptables -F
/sbin/iptables -A INPUT -i eth0 -p tcp --sport 80 -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p tcp -j DROP
/sbin/iptables -A INPUT -i eth0 -p udp -j DROP

iptables是一個鏈的方式從前往後判斷,如果前面的規則成立就不會往後繼續,所以要注意順序,一般每行對應一條規則。
-A是Append意思,也就是追加
-I是Insert意思,也就是插入

-F表示清除(即刪除)掉已有規則,也就是清空。
檢視已有的規則,執行命令:iptables -L -n
如(引數-L為list意思,-n表示以數字方式顯示IP和埠,不指定-n則顯示為名稱,如:http即80埠):
# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:443
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:80
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           
DROP       udp  --  0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

從可以看到:iptables有三種規則鏈(Chain),即INPUT、OUTPUT和FORWARD。
INPUT 用於指定輸入規則,比如外部是可以訪問本機的80埠
OUTPUT 用於指定輸出規則,比如本機是否可以訪問外部的80埠
FORWARD 用於指定埠轉發規則(相當於rinetd功能),比如將8080埠的資料轉到到80埠

-I和-A需要指定鏈(Chain)名,其中-I的鏈名後還需要指定第幾條(行)規則。
可通過-D引數刪除規則,有兩種刪除方式,一是匹配模式,二是指定第幾條(行)。
也可以通過-R引數修改已有規則,另外-L引數後也可以跟鏈(Chain)名,表示只列出指定鏈的所有規則。
-j引數後跟的是動作,即滿足規則時執行的操作,可以為ACCEPT、DROP、REJECT和REDIRECT等。

在iptables的INPUT鏈的第一行插入一條規則(可訪問其它機器的80埠):
iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT

在iptables的INPUT鏈尾追加一條規則(可訪問其它機器的80埠):
iptables -A INPUT -p tcp --sport 80 -j ACCEPT

如果要讓其它機器可以訪問本機的80埠,則為:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

插入前:
# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           
DROP       udp  --  0.0.0.0/0            0.0.0.0/0  

插入:
# iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT

插入後:
# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:80
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           
DROP       udp  --  0.0.0.0/0            0.0.0.0/0  

追加前:
# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           
DROP       udp  --  0.0.0.0/0            0.0.0.0/0 

追加:
# iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT

追加後(ACCEPT將不能生效):
# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           
DROP       udp  --  0.0.0.0/0            0.0.0.0/0 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:80

刪除INPUT的第3條規則:
iptables -D INPUT 3