查看單個文章
舊 2006-07-04, 02:31 PM   #10 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

]==-IP地址精解-==

--------------------------------------------------------------------------------

為什麼我們要學二進位哎呀還不是該死的蠢電腦嘛它只懂得0和1那麼我們要和電腦溝通的時候也只好裝蠢一些才行。當電腦要處理IP運算的時候最終是以二進位的形式進行的。
我們人類最習慣的運算規則是十進位也就是從0到9為一圈回到零的時候就進一位數而我們前面討論的bit和byte則是八進位即0到7為一圈回到零就進一位數另外還有十六進位由0到15為一圈回到零進一位但使用數位15很容易和十進位混亂所以在十六進位裡面從10到15之間分別用英文字母A到F代替了所以我們通常看到的十六進位是從0到F的排列。
好了認識了上面這幾種運算規則相信理解二進位也不難道理是一樣的從0到1為一圈回到0進一。那麼我們看看十七個連續遞增的十進位二進位和十六進位數位之間的比較將會是這樣的

十進位 二進位 十六進位
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
16 10000 10


如果您想進行二進位和十進位的換算在列表中找到相應的數位是最簡單的方法但正如您剛才所見光十六個數位已經有這麼長的列表了如果要找成千上百個數位可不是件容易的事情。不過我們在IP地址上面看到的十進位數位最大不會超過255這個數值。我們可以先將2的0到7次方列出來

27 26 25 24 23 22 21 20
128 64 32 16 8 4 2 1


當我們要將十進位換成二進位的時候我們只要找到找到該數位對應的欄位(方法是找到兩個數值相若的欄位而取其右)在相對的欄位填上1然後用餘數繼續尋找下一欄位再填1直到再沒餘數為止最後把其它欄位都填上0就可以了。

例如我們要換算220這個十進位數位到二進位

我們找到128這欄位是最合適的(因為128的左邊是256而220 界乎它們之間取其右則為 128 )。那麼我們在128這欄位上面填上1
繼續餘數92我們找到64這欄位是最合適的那麼在64這個欄位也填上1
繼續餘數28我們找到16這欄位是最合適的那麼在16這個欄位也填上1
繼續餘數12我們找到8這欄位是最合適的那麼在8這個欄位也填上1
繼續餘數4我們找到4這欄位剛好對應這是最好找到情形了。那麼在4這個欄位也填上1
因為再沒有餘數了其它都填上0就對了。

其結果如下 128 64 32 16 8 4 2 1
1 1 0 1 1 1 0 0


如果我們要將二進位換算成十進位利用上面的欄目來做就更加簡單了只要將二進位數位從右往左的順序依次填入欄位那麼將凡是被1所對應的數位相加得出來的和就是十進位數位了。

當然啦這是手工的方法啦如果您有二進位的計數器或是使用Windows的小算盤來進行換算更是易如反掌啦。如果您還不知道怎麼用Windows的小算盤點話可以依以下步驟進行

「開始/程式集/附屬應用程式/小算盤」
然後拉下「檢視」選單確定「工程型」已被選擇
然後點選「十進位」輸入數值
再點選「二進位」就可以獲得換算數值了


邏輯運算


邏輯運算是Microcomputer Architature的必修單元這裡我們只需瞭解幾個最基本的運算就可以了一個是AND一個是OR還有一個是NOT。

在二進位的AND的運算中只有參與運算的雙方都相同才會得出相同的結果(為0或1)否則為0也就是只有雙為1的時候其結果才會是1否則為0。其情形是
0 AND 0 = 0
1 AND 1 = 1
0 AND 1 = 0
這裡您不難看出凡是有1參與的AND運算其結果都會是對方(不管是0或1)而凡是有0參與的AND運算其結果都會是0。

在二進位的OR運算中只有雙方為0的時候才為0否則都會是1。其情形是
0 OR 0 = 0
1 OR 1 = 1
0 OR 1 = 1
記憶方法凡是有0參與的OR運算其結果都是對方而只要有1參與的OR運算其結果都會是1。

NOT的運算最簡單只有一方參與凡是經過NOT運算其結果都會相反
NOT 0 = 1
NOT 1 = 0

至於其它一些NAND或NOR的運算只不過將NOT和AND及NOT和OR合在一起運算而已。


認識IP地址

好了經過剛才一輪「洗腦」之後我們終於要談到IP地址了。如果您的機器現在是連上網路的且使用的是IP協定(我想您應該這樣吧否則怎麼看我的文章呢)。

我假設您使用的是Windows系統那麼現在就請您按「開始」然後「執行」再請您用鍵盤輸入「winipcfg」然後「確定」。這時候您應該看到一個視窗跑出來並在「IP位址」欄目上面顯示著您機器當前使用的IP號碼。或許會是139.175.152.254這樣的一組號碼不過您知道這組號碼的代表著什麼意思嗎如果按正常設定來說我可以說這是B class的IP號碼而且是屬於seed.net的撥接網路的。

我怎麼會知道哈哈等您看完了後面的文章您還可以告訴我更多呢

IP Class和識別碼

正如您所見到的IP地址是四組用「.」分開的十進位數位我們稱每組數位為一個「octet」這樣的格式被稱作「Dotted quad」。其實每一組都是一個8-bit的二進位數位(使用十進完全是為了遷就人類的習慣)合共起來就是一個32-bit的IP地址了亦即是IP v4 (Version 4) 版本的地址現在IP v6 (使用128-bit的IP地址)也正如火如的開發中。

如果您記得我們前面在「網路概論」裡面討論IPX地址的時候所提到的Internal和External地址的話您應該知道Internal地址是用來識別主機的而External地址則是用來識別網路的。IP地址其實也有這樣的功能只不過將網路的識別碼和主機的識別碼放在單一的IP地址上面了。

不過在區分Net ID和Host ID之前先讓我們認識一下IP地址的分類(Class):

如果我們將IP地址全部用二進位來表示的話每個octet都是8-bit如果不夠8-bit的話則往左邊填上0直到補滿為止。這時候你再看看最左邊的數位是以什麼為開頭的


如果是以「0」開頭的這IP是一個A Class的IP
如果是以「10」開頭的這是一個B Class的IP
如果是以「110」為開頭的則屬於C Class的IP

相信您知道為什麼我們在一開頭就學二進位換算了吧如果您不懂得如何換算您也可以死記由1到126開頭的IP是A Class由128到191開頭的IP是B Class 然後由192到223開頭的則為C Class。顯然易見用二進位來識別IP Class比較容易您不覺得嗎

好了當我們識得區別IP的Class之後我們就可以知道IP的Net ID 和 Host ID了


A Class的IP使用最前面一組數位來做Net ID其餘三組做Host ID
B Class的IP使用前面兩組數位來做Net ID另兩組做Host ID
C Class的IP使用前面三組數位來做Net ID剩下的一組做Host ID

從下圖中您可以輕易的區分上面三個不同的 IP Class


為什麼我們需要為IP劃分等級呢這是為了當初的 IP 管理需要。

如果您要組建一個單一的IP網路那麼您得分配相同的Net ID給所有主機而各主機的Host ID卻必須是唯一的也就是說沒有任何兩個Host ID會是一樣的。您的網路還要連上internet或其它網路的話那麼您使用的Net ID也必須是唯一的否則就會造成突了。好比您家的電話號碼如果是1234567(Host ID)的話那麼在相同區號(Net ID)裡其他人將不會再使用這個號碼然而你不保在其它區號裡面也有1234567這個號碼哦但如果台北使用了區號02的話台南就不能使用02了。無論如何整個區號加電話號碼必須是唯一的。同樣的道理整個IP地址(Net ID + Host ID)在internet上也必須是唯一的。有一個很特別的Net ID 127 (即二進位的01111111)是保留給本機回路測試使用的它不可以被運用於實際的網路中去。

另外有一個規則我們還必須遵守的在指定Host ID的時候換成二進位的話不可以是全部為0也不可以是全部為1。當Host ID全部為0的時候指的是網路本身識別碼而全部為1的時候則為全域廣播地址即發送廣播封包使用的地址。

很明顯A Class網路可分配的Host ID 要比C Class的要多好多倍。讓我們算算可以劃分的Net ID數目和各等級裡面的Host ID數目就知道了

因為A Class第一個bit必須為0所以我們在頭一個otect的8個bit就只有7個bit是可變化的。那麼27 = 128再減去0和127這個Net ID不能使用那麼我們實際上最多只能劃分126個A Class的網路。而每個A Class的網路之下可以分配2的24(能夠使用的 Host ID之bit 數目)次方亦即16,777,216個Host ID再因為二進位數位不可以全部為0或1所以實際能用的主機位址只有16,777,214個。

因為C Class以110開頭減去 3 個 bit 所以可劃分的C Class網路則為2的21(24-3)次方也就是2,097,152個Net ID然後每個Class C之下則可以劃分28 = 256 - 2 = 254個Host ID。

好了這下您自己試試看計算出B Class可以劃分多少個Net ID和每個Net ID之下的可?*** ost ID數目。(Tips別忘了ID不能全部為0或1)。然後再來對照下面的列表

等級 開首 網路數目 主機數目 使用圍 申請領域
A 0 126 16,777,214 1.x.x.x 到 126.x.x.x 國家級
B 10 16,384 16,382 128.x.x.x 到 191.x.x.x 跨國組織
C 110 2,097,152 256 192.x.x.x 到 223.x.x.x 企業組織
D 1110 - - 224.- 到 239.- 特殊用途
E 1111 - - 240.- 到 255.- 保留圍


認識Net Mask

下面我們要認識的是 Net Mask (網路遮罩或稱網路掩碼)。

到了這裡我必須要向大家交代清楚一件事情在我們進行IP地址劃分的時候IP和Net Mask都必須一對使用的兩者缺一不可不過當我們使用分等級的IP地址的時候我們也可以使用預設的mask比如A Class的mask是255.0.0.0B Class的mask是255.255.0.0C Class的則是255.255.255.0。

這是什麼意思啊看255比較難理解如果您將之換算為二進位就容易理解多了255 = 11111111(8個1)。然後當您把這些Net Mask和各等級IP對應看看聰明的您就會發現一個現象就是~~ 凡是被1所對應著的IP部份就是Net ID凡是被0所對應部份就是Host ID


哈哈~~應該是個值得慶賀的發現哦~~~我想您的心情並不亞於當初哥倫布發送美洲大陸啦不過問題又來了既然我們已經分好等級了還用那mask幹嘛我們照等級使用不就好了嗎

呵~呵~~閣下真是太聰明了佩服佩服啦不過您可別忘了電腦是一台好蠢好蠢的機器哦請您告訴我電腦怎麼識別Net ID和Host ID呢嗯不會吧那好讓我告訴您好了

還記得AND和NOT的邏輯運算嗎如果忘了趕快往前翻翻補習補習再來看這裡。當電腦獲得了一對IP和Mask(都是二進位數位)之後電腦先使用一個AND的運算來求出Net ID。您可以拿自己電腦的IP來做例子這裡讓我們拿先前用winipcfg看出來的IP來算算


139.175.152.254換成二進位是
10001011.10101111.01101010.11111110
(這時候您應該知道我為何當初一口就說出這是一個B Class的IP了吧還不知道看看頭兩個bit是什麼)

這個Class的預設mask是255.255.0.0換成二進位是
11111111.11111111.00000000.00000000

然後將IP和mask加以AND 運算
10001011.10101111.01101010.11111110
AND
11111111.11111111.00000000.00000000
得出
10001011.10101111.00000000.00000000

換成十進位就是139.175.0.0這個就是Net ID了。


那麼怎麼求Host ID呢也很簡單


先將Net Mask做一個 NOT 運算可以得出
00000000.00000000.11111111.11111111

然後再和IP做一次 AND 運算就可以得到Host ID:
00000000.00000000.01101010.11111110

換成十進位就成了0.0.152.254。


簡單吧是不是哈哈~~我看到您大搖其頭哦~~~不用擔心啦多拿些IP例子來運算運算您就得心應手了。

還有當我們設定網路環境的時候除了要輸入 IP地址netmask網路地址之外有時候還需要指定廣播地址(broadcast)。我已經知道如果 Host ID 全部為 0 是網路地址而全部為 1 則是廣播地址了。其實廣播地址也可以通過一個簡單運算得到


先將Net Mask做一個 NOT 運算可以得出
00000000.00000000.11111111.11111111

然後再和IP做一次 OR 運算就可以得到 Broadcast Address:
10001011.10101111.01101010.11111110
OR
00000000.00000000.11111111.11111111
得出
10001011.10101111.11111111.11111111

換成十進位就成了139.175.255.255。


不過說到這裡為止我總還覺得有些不妥因為許多網路都有一定的節點極限比如Ethernet通常最多只能連接1,200台主機如果您獲得一個B Class 的 Net ID豈不是浪費很多Host ID了嗎要是使用A Class就更是駭人

當您遇到這種「有錢人的困擾」的時候Sub-net Mask就派上用場了。如果您剛才還認為預設的Net Mask是多餘的話那麼當您知道Sub-net Mask的功能之後我敢保您不會再忽略Net Mask了。

Sub-net Mask的使用手法就是靠「借」或可以說靠「搶」就是從左往右的按需要將本來屬於Host ID的一些bit轉為Sub-net ID來使用。也就是將預設的Net Mask的「1」逐漸的往右增加相對地Net Mask的「0」則越來越少。這樣的結果當然是可以獲得更多的Net ID換一句話說您可以將一個大的IP網路分割成更多的子網路而每一個子網路的主機數目卻相應的減少。


其情形會是當您借用1個bit的Host ID來做Sub-net ID的時候會將網路切割開兩個(2 1 = 2)子網路如果借2個bit則有4個子網路3個bit則8個4個bit則16個..... 當所有的Host ID都借出去之後您可以得到最多數量的子網路但這是毫無意義的因為沒有Host ID了您怎麼分配IP給主機呢要是您的Host ID只剩下一個bit沒有借出去的話那麼您在每個網路只能得到0和1來作為Host ID這也是不行的因為這兩個ID也不可以用來分配給主機。

當您切割網路的時候您得最少留下 2 個 bit 來做 Host ID這時候每個網路最多只能連接 2 台主機(咦22 不是等於 4 嗎但別忘了 Host_ID 不能是兩個 0 或兩個 1 哦)。這樣的網路通常會用在 WAN 與 LAN 之間的路由器連接。而在 LAN 中的應用通常最少要保留 3 個 bit 來做 Host_ID。

為了更好的理解Sub-net Mask的功用我們還是以剛才的IP(139.175.152.254)為例子來看看

我們知道它在預設情形之下的Net Mask是
11111111.11111111.00000000.00000000

如果我們借用了Host ID的其中三個bit來做Sub-net ID的話將原來的Net Mask和Sub-net Mask做一個 OR 的運算
11111111.11111111.00000000.00000000
OR
00000000.00000000.11100000.00000000
得出
11111111.11111111.11100000.00000000

換成十進位後實際的Net Mask將會變成這樣255.255.224.0 。

因為借用的只有3個bit所以切割成為8個子網路了而他們的Sub-net ID則分別從000到111這8個組合再加上原來的Net ID(10001011.10101111.00000000.00000000)各子網路的實際Net ID就成了

10001011.10101111.00000000.00000000 (139.175.0.0)
10001011.10101111.00100000.00000000 (139.175.32.0)
10001011.10101111.01000000.00000000 (139.175.64.0)
10001011.10101111.01100000.00000000 (139.175.96.0)
10001011.10101111.10000000.00000000 (139.175.128.0)
10001011.10101111.10100000.00000000 (139.175.160.0)
10001011.10101111.11000000.00000000 (139.175.192.0)
10001011.10101111.11100000.00000000 (139.175.224.0)

這時候本來是16個bit的Host ID只剩下13個bit了也就是說在每個子網路裡面最多只能有2 13 = 8,192 - 2 = 8,190台主機而它們可分配的號碼分別由
00000.00000001到
11111.11111110之間。

但我們並不能簡單的將它以十進位的0.1到31.254這樣表示我們還得將之配合各個不同的Sub-netID再相加一起才能得出最終的IP號碼。例如


在Sub-net ID 001 之下的主機號碼將會是從
00100000.00000001到
00111111.11111110之間
亦即是從32.1到63.254之間
整個IP地址則是從139.175.32.1到139.175.63.254之間。

而在Sub-net ID 100 之下的主機號碼將會是從
10000000.00000001到
10011111.11111110之間
亦即是從128.1到159.254之間
整個IP地址則是從139.175.128.1到139.175.159.254之間。


明白了

唉呀~~~~頭痛耶~~~

別complaint啦~~自己再動手算算在110這個Sub-net ID之下的主機號碼圍是多少

如果您得出來的答案不是139.175.192.1到139.175.223.254之間那麼您需要離開螢幕一會到外面呼吸一下空氣(別抽煙)然後過5分鐘回來重新看看前面幾段文章。再重讀的時候要確定您每一個概念都清楚了才繼續往下讀。

當然你說放棄也沒什麼要緊啦反正您老又不會扣您工錢啦~~~

IP的實際運用

好了這裡讓我們歸納一下以上所學吧

IP等級以開頭的二進位數位來定010110 分別是ABC等級
IP分兩部份Net ID和Host ID。預設情形下A以第一個otect來做Net IDB則使用前面兩個otectC使用三個oect而剩下的則做Host ID;
在為機器指定Net ID和Host ID的時候換成二進位不可以全部為0也不可以全部為1而整個IP地址必須是唯一的
Net Mask是給電腦用來計算Net ID和Host ID的將IP和mask用AND運算得出Net ID將mask先經過NOT運算再和IP做AND運算則可以得出Host ID
Sub-net Mask是「借」Host ID來當Sub-net ID使用規則是從左往右遞增作用是將一個較大的網路切割成多個較小的網路。而在顯示IP的時候必須要和Sub-net ID加在一起也就是以完整的 otect 來表示。

設定規則

當我們設定IP網路的時候如果想各機器能夠直接溝通那麼您得使用相同的Net ID和不同的Host ID。如果您想使用不同的Net ID(比如經過sub-net劃分)那麼在不同Net ID之間的host就要經過router才能成功對講。

當電腦用AND運算得出Net ID之後會檢查來源Net ID和目的Net ID是否一致如果一致的話就可以直接將封包傳給對方否則就將封包傳給Router或Default Gateway這個過程我在以後的ARP和RIP將會講述。

另外如果您使用了sub-net技術在分配IP地址的時候就要非常小心了以免IP超出了子網圍而無法溝通。比如在沒有劃分子網路的情況下(例如使用255.255.0.0的mask)139.175.31.254和139.175.32.1都是在同一個網路之內的他們的IP封包不用router就可以直接傳遞了但經過借用3個bit的子網劃分之後(net mask成了255.255.224.0)它們就被分隔在兩個IP網路之內這時候它們一定要使用router才能傳遞封包了。

同時原本一些有效的IP地址在sub-net之後因為Host ID變成了全部0或1也就不能再分配給主機使用了例如139.175.63.255139.175.64.0等等。 (如果您不明白為什麼將之換成二進位然後找出經過子網切割後屬於Host ID部份的數位就清楚了。)

所以當我們在一開始設計網路的時候就要具備應有的責任和遠見早早就將子網路劃分好。否則等所有機器都設定好並且運作了一段時期之後才決定劃分子網路其情形將會變得異常雜。如果要重新分配IP其所做的規劃以及遇到的可見問題和隱藏問題都比從零開始難上百倍越大的網路越是如此

保留IP

當我們要將網路連上intetnet的時候我們必須先冊好Net ID如果該ID已經被使用了您就必須選用另外的ID了。負責Internet IP冊的機構叫做InterNIC(Network Information Center)他們的網路地址是 http://www.internic.net。

由於Internet的爆炸性成長IP的地址買少見少而且在很多機構裡也不是所有機器都有必要使用冊的IP地址。於是我們就在 ABC這三個層級裡面各劃出一些地址圍保留給私有位址所用它們是

10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255

當您使用這些地址的時候當然是有所限制的


私有位址的路由資訊不能對外散播
使用私有位址作為來源或目的地址的封包不能透過Internet來轉送
關於私有位址的參考紀錄(如DNS)只能限內部網路使用

然而正是由於這些限制當我們使用這些私有位址來設定網路的時候就無需擔心會和其它也使用相同位址的網路突了。

這給我們架設IP網路做成很大的方便比如即使您目前的公司還沒有連上Internet但不保將來不會啊。如果使用公共IP的話如果沒經過冊等到以後真正要連上網路的時候就很可能和別人突了。也正如前面所分析的到時候再重新規劃IP的話將是件非常頭痛的問題。這時候我們可以先利用私有位址來架設網路等到真要連上intetnet的時候我們可以使用IP轉換協定如NAT (Network Addresss Translation)等技術配合新冊的IP就可以了。

再者由於私有位址在 internet 上是不能路由的用來架設企業內部網路在安全上面也是有利的。當然了如果在課堂上或在家裡架設 IP 網路使用私有位址也是個不錯的主意哦。

不分等級的IP

思考一下如果我的IP是139.175.152.254而Net Mask則為255.255.255.0。您認為是否用錯了net mask呢而 203.56.6.18 使用 255.255.0.0 做 mask 呢

我們將較大的IP等級切割成許多較小網路可以說是「有錢人的煩惱」但難道「窮人」就沒有煩惱嗎當然是有啦例如您的公司有接近600台主機想連一個IP網路申請一個B Class網路似乎太浪費而且說實在也未必可以申請得到那麼申請3個C Class的網路總可以吧當然沒問題啦(如果還沒用光的話)。

不過正如我們剛才知道的因為3個C Class網路它們的Net ID都各自獨立的如果您要其下的電腦都能溝通的話就要router的參與了。但是router一點都不便宜哦~~~貴的router幾乎可以換一輛「Benz」房車來開呢就算您老不在乎要設定和維護好幾個網路的routing也不是一件輕鬆的事情搞不好還要專門請「半」個人來看管呢。

*** 是您可以將這三個C Class網路整合在一起來使用啦使用的是CIDR (Classless Inter-Domain Routing)技術也就是所謂的不分等級IP了。

使用CIDR的時候您大可不必理會IP的開首字元你可以隨便設定您的Net Mask長度。也就是說一個C Class的網路也可以使用255.255.0.0這樣的mask我們稱這樣的網路為「Supernet」和subnet正好相反。


當然如果要和其它網路溝通您使用的router也必須支援CIDR才行啦而且設定上是比較雜的。

如果您覺得139.175.152.254/255.255.0.0 和192.168.1.1/255.255.255.0 這樣的IP表現方法實在太麻煩了這裡有一個更好的表示法使用mask的bit數來表示Net Mask。這樣我們就可以這樣寫了139.175.152.254/16 和203.56.6.18/24假如使用了三個bit的Sub-net我們只要將16改成19和將24改成27就可以了如果是使用了三個bit的Supernet我們將之改成13和21就可以了。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次