要讓 TCP/IP 協(xié)定能夠順利與不同類型的硬體進行溝通﹐那么就需要建立起一些標準協(xié)定來讓大家共同參考。以我們最常用的乙太網(Ethernet)為例﹐我們無需理會廠商如何設計網路界面的驅動程式﹐一旦它能夠被系統(tǒng)接納﹐網路儲存層(Datalink)就能使用網路界面在實體網路上傳送和接收資料了。
IP 位址和實體位址對應之困擾
在「網路基礎」課程中﹐我們知道乙太網上面使用的傳送方式叫 CSMA/CD (Carrier-Sensing Multiple Access with Collision Detection)﹕雖然訊框會在整個網段(segment)中用廣播的方式傳遞﹐而且所有節(jié)點都會收到訊框﹐然而﹐只有目的位址符合自己實體位址的訊框才會被接收下來。因此,不管上層協(xié)定是哪一種(可以是 TCP/IP 也可以是其它),在底層的傳送若是使用 Ethernet 的話,就得使用 MAC (Media Access Control) 實體位址。若要查詢到當前系統(tǒng)目前所有界面的實體位址,我們可在 Linux 系統(tǒng)里面輸入 ifconfig 命令﹕
eth0 Link encap:Ethernet HWaddr 00:A0:0C:11:EA:11 inet addr:203.30.35.134 Bcast:203.30.35.159 Mask:255.255.255.224 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 Interrupt:3 Base address:0x300eth1 Link encap:Ethernet HWaddr 00:80:C7:47:8C:9A inet addr:192.168.0.17 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:12303 errors:0 dropped:0 overruns:0 frame:0 TX packets:12694 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 Interrupt:10 Base address:0x2e0
從上面的命令結果中可發(fā)現:關于每一個界面的第一行資訊﹐最后的部份就是該界面的實體位址。訊框在實體網路上面?zhèn)魉偷倪^程中﹐IP 位址(或曰羅輯位址)一點都派不上用場。但問題是:當我們使用 TCP/IP 的時侯,上層的協(xié)定都是以 IP 位址為傳送依據的。那么﹐這時候我們就必須有一套方法來對應 IP 位址和實體位址了。
在此一過程中﹐關鍵點是如果將 IP 位址對與實體位址做對應。有些使用簡單實體位址的網路(如 proNET-10 )﹐其實體位址只占一個 byte 的長度﹐而且允許使用者在配置網路卡的是選擇自己的實體位址。在這樣的網路上進行 IP 位址和實體位址的對應﹐是比較簡單的﹐我們可以把實體位址設為和 IP 位址設為一樣。例如﹐假設某一個節(jié)點的 IP 位址為 192.168.1.17﹐那么我們可以將該實體位址設為 17。 這樣﹐在 proNET 就可以輕易的根據 IP 位址來得到實體位址。這樣的對應非常簡單﹐而且要維護起來也很容易﹐在新機器假如網路的時候﹐并不需要修改或重編已存的資料。
然而﹐我們知道在乙太網上﹐每一個實體界面都有一個 48bit(6byte) 的 MAC 位址﹐而 IP (v4)使用的位址則為 32bit(4byte)﹔每各位址格式都只提供相應的層級協(xié)定使用﹐彼此是不能互換使用的。這時候我們就無法用簡單的數學關系來做 IP 位址和實體位址的對應了。
IP 位址和實體位址的對應方法
建立表格
首先﹐我們想到的最簡單方法是在每一臺機器上建立一個 IP 位址和實體位址的對應表格( table )。不過這個方法還是沒辦法解決如下的情形﹕
· 網路上的節(jié)點數量多如恒河沙數﹐要想將全部節(jié)點的對應關系列入表格之中幾近不可能任務。
· 如果某一個節(jié)點產生異動情形(例如更換網卡)﹐那么如果讓所有表格正確做出相應修改﹐也是個頭痛的問題。
· 對某無磁碟工作站來說﹐因為沒有本機的儲存設備﹐將無非建立表格。
寫入高階程式
除了建立表格﹐我們還可以將實際的網路位址寫死在高階網路程式里面。不過﹐和前一個方法一樣﹐如果遇到硬體位址變更等異動動情形﹐那么﹐程式也需要重新編譯過才行。
顯然﹐上述兩個方法都不怎么高明。
相關推薦:TCP/IP路由技術讀書筆記:浮動靜態(tài)路由北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |