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