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