IP組成
IP 就如每間房子的門牌號碼,由 4 組 0~255 的數字組成 : 0~255.0~255.0~255.0~255,比如 192.168.1.20。這種由 4 組數字組成的IP,稱為IPV4版本,每組數字由 “.” 隔開,每一組數字需 8bit 儲存,所以 4 組數字共需 32 bit。因此全世界就可以產生 2^32=42億組IP。
但全世界的人口早就超過50億,再加上手機也需要IP,印表機也要,甚至冷氣電冰箱也要(iOT),所以42億組IP根本就不夠,因此就有 IPV6 的版本,由 6 組 0~255 的數字組成 : 0~255.0~255.0~255.0~255.0~255.0~255 ,總共有48bit,所以可以產生2^48組IP,這是個天文數字,足以應付iOT的需求。
只不過IPV6的版本已出現十多年了,但到現在還沒普及。最主要的因素是由 IPV4 變成 IPV6 所需花費的成本太高,所以目前還是以IPV4為主。
真實與虛擬IP
IP只有42億組,不足以讓全世界的人都能擁有一組IP。所以就把這42億組區分為真實IP及虛擬IP。只有真實IP可以連上Internet,而虛擬IP只能在區域網路中連線。
我們可以把真實IP想成是一條實体的電話線,而虛擬IP則是公司裏的分機。所有分機想要打電話出去,都必需由總機轉接成實体的電話線才能撥通。
虛擬IP, 是無法連上 Internet 的,只能連接區域網路裏的電腦而以,共分三個等級
class A : 10.x.x.x 共256*256*256=1677萬組
class B : 172.16.x.x ~ 172.31.x.x 共約100萬組
class C : 192.168.x.x : 共65536組
若非上述 Class A, B, C 的IP,就是真實IP, 可以真正連上Internet。
預設閘道器(GateWay)
網路上的所有設備都需要有IP,舉凡電腦,印表機,影印機都需要,甚至連NAT(IP分享器)都需要。通常我們會把 NAT 的 IP 設定為 192.168.1.1。這組 IP 用來跟網內的其他電腦溝通,把存取到的封包,加入真實 IP ,然後傳遞到網路上。所以 NAT 的 IP 又稱為預設閘道器。
NAT(Network Address Translation)
NAT 網路位址轉換,就是常見的 IP分享器,其用途如下 :
1. 收集區網內傳送過來的封包,把裏面的虛擬 IP 轉成真實 IP ,然後再傳送到網路上。
2. 收集 Internet 傳送過來的封包,把裏面的真實 IP 轉成虛擬 IP , 再傳送給區網內的電腦。
NAT必需設定撥接方式、本身的IP、虛擬伺服器連接埠(Port)、Wifi 密碼等等。其相關設定方式需參考原廠的操作說明書。
網域切割
網路切割的用途,通常是為了讓不同的部門不能互通。比如人事部跟開發部二個部門的網路不可以在區網內互通。
要切割網域就必需使用子網路遮罩,常見的子網路遮罩為255.255.255.0。
底下是192.168.1.10及192.168.1.20與255.255.255.0 子網路遮罩進行 and 後的結果。藍色的結果二者相同,所以此二個網路是在相同的網域
255.255.255. 0 : 11111111.11111111.11111111.00000000 192.168. 1. 10 : 11000000.10101000.00000001.00001010 and : 11000000.10101000.00000001.00000000 255.255.255. 0 : 11111111.11111111.11111111.00000000 192.168. 1. 20 : 11000000.10101000.00000001.00010100 and : 11000000.10101000.00000001.00000000 Python代碼: print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(255,255,255,0)) print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(192,168,1,10)) print('{0:>15s} : {1:08b}.{2:08b}.{3:08b}.{4:08b}'.format('and',255&192,255&168,255&1,0&10)) print() print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(255,255,255,0)) print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(192,168,1,20)) print('{0:>15s} : {1:08b}.{2:08b}.{3:08b}.{4:08b}'.format('and',255&192,255&168,255&1,0&20))
底下是 192.168.1.10及192.168.2.10 與255.255.255.0子網路遮罩進行 and 後的結果。紅色的結果二者不同,所以是不同的網域。
255.255.255. 0 : 11111111.11111111.11111111.00000000 192.168. 1. 10 : 11000000.10101000.00000001.00001010 and : 11000000.10101000.00000001.00000000 255.255.255. 0 : 11111111.11111111.11111111.00000000 192.168. 2. 10 : 11000000.10101000.00000010.00001010 and : 11000000.10101000.00000010.00000000 Python代碼: print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(255,255,255,0)) print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(192,168,1,10)) print('{0:>15s} : {1:08b}.{2:08b}.{3:08b}.{4:08b}'.format('and',255&192,255&168,255&1,0&10)) print() print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(255,255,255,0)) print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(192,168,2,10)) print('{0:>15s} : {1:08b}.{2:08b}.{3:08b}.{4:08b}'.format('and',255&192,255&168,255&2,0&10))
底下是 192.168.1.2,192.168.1.7,192.168.1.8 與 子網路遮罩 255.255.255.248 進行 and 的運算,可以看到 192.168.1.8 的結果是不同的。0~7 為一個子網域,8~15 是另一個子網域。
255.255.255.248 : 11111111.11111111.11111111.11111000 192.168. 1. 2 : 11000000.10101000.00000001.00000010 and : 11000000.10101000.00000001.00000000 255.255.255.248 : 11111111.11111111.11111111.11111000 192.168. 1. 7 : 11000000.10101000.00000001.00000111 and : 11000000.10101000.00000001.00000000 255.255.255.248 : 11111111.11111111.11111111.11111000 192.168. 1. 8 : 11000000.10101000.00000001.00001000 and : 11000000.10101000.00000001.00001000
python 代碼 : print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(255,255,255,248)) print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(192,168,1,2)) print('{0:>15s} : {1:08b}.{2:08b}.{3:08b}.{4:08b}'.format('and',255&192,255&168,255&1,248&2)) print() print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(255,255,255,248)) print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(192,168,1,7)) print('{0:>15s} : {1:08b}.{2:08b}.{3:08b}.{4:08b}'.format('and',255&192,255&168,255&1,248&7)) print() print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(255,255,255,248)) print('{0:3d}.{1:3d}.{2:3d}.{3:3d} : {0:08b}.{1:08b}.{2:08b}.{3:08b}'.format(192,168,1,8)) print('{0:>15s} : {1:08b}.{2:08b}.{3:08b}.{4:08b}'.format('and',255&192,255&168,255&1,248&8))
子網路遮罩的後二個數字 255.248,轉成二進位為 11111111.11111000,共有 13 個 1, 表示可以分割成 2^13 = 8192個子網域。而 3 個 0 表示每個子網域裏面只能有 2^3 = 8 台電腦。
請注意通常每個網域的第一個IP為廣播用途(比如 192.168.1.0),而最後一個也有其它用途(192.168.1.255),所以每個子網域通常會扣除這二個 IP 不用。
所以當子網路遮罩為 255.255.255.248時,每個子網域只有 8 個IP可用,扣除前後二個後,只有 6 台電腦可使用。
固定與浮動IP
不論是真實IP或虛擬IP,都有固定及浮動二種。
在真實IP中,撥接後所得到的IP,如果每次都一樣,就稱為固定IP。若每次都不一樣,就稱為浮動IP。
在虛擬IP中,由DHCP所配發的IP,稱為浮動IP。若是手動設定IP,則稱為固定IP。
固定IP有個迷思,大部份的人都認為固定IP就是這一輩子都不會變動,其實不然。因為中華電信只要設備一維護,IP就會變動。只是這種變動的機會比較小,所以一組固定IP通常可以維持在半年到一年之間不會變動,但最終還是會變。
浮動IP也有個迷思,大部份的人都認為浮動IP是每次撥接都不一樣。但真實狀況是,有時前後一小時撥接所得到的IP都一樣,甚至前後幾天撥接的IP也都一樣,只是變動的機會相當的大。
DNS(Domain Name System)
網域名稱系統是將網域名稱(mahaljsp.asuscomm.com)轉換成 IP 的服務。就好比電話簿,可以透過名字查到電話號碼一樣。台灣地區最常用的 DNS 為中華電信的二組,分別為 168.95.1.1 及 168.95.192.1。
DNS的運作機制如下
1. End user 連線到中華DNS resolver,要求 mahaljsp.asuscomm.com 的 IP
2. 中華DNS連線到DNS root,詢問 .com 的 IP
3. DNS root返回 .com 的 IP
4. 中華DNS連線到 .com,詢問 asuscomm.com 的 IP
5. .com 返回 asuscomm.com 的 IP
6. 中華DNS連線到 asuscomm,詢問 mahaljsp.asuscomm.com 的 IP
7. asuscomm 傳回 mahaljsp 的 IP
8. 中華DNS傳回 mahaljsp.asuscomm.com 的 IP
9. End user 開始連線
廣播 Broadcast
假設如下圖有三台電腦,由 192.168.1.10 這台要求NAT上網查資料。當 NAT 收取 internet 所傳回的資料時,NAT 並不是直接把封包傳給 192.168.1.10 這台電腦,而是同時廣播給區網內的所有電腦。也就是說,如下圖的三台電腦都會同時接收到訊息。這是電源的物理特性,無法單獨說給誰就給誰的。
當192.168.1.10收到封包,就會回應它本身的 MAC給 NAT。而 .15 及 .20 這二台電腦雖說也收到封包,但發現封包的目標 IP 並不是自已,所以就會忽略這個封包。
當然,如果你功力夠的話,可以在 .15 或 .20 寫一支程式,把所有的封包全數盡收,並加以組合,如此就可以得知 .10 這台到底是在作什麼事。
另外我們的 ADSL 將資料傳出或傳入,也是採用廣播的方式傳遞,所以我們的資料就有可能被其他人接收並組合,而讓駭客知道我們在作什麼事。所以傳遞出去的資訊,最好採用 https 的加密方式,如此駭客所採集到的資料,因為沒有 key 無法解密,所收集到的資料他們也就看不懂。