地址解析協(xié)議ARP
物理這一級,主機和路由器是用物理地址來區(qū)別的。物理地址是一個本地地址,管轄范圍是本地網(wǎng)絡(luò),所以在本地范圍內(nèi)必須唯一。稱為物理地址是因為通常(并非總是)在硬件上實現(xiàn)。一個具體實例是以太網(wǎng)協(xié)議中48位的MAC地址,被寫入安裝在主機或路由器中的網(wǎng)絡(luò)接口卡(NIC)中。
一個分組交付到主機或路由器需要兩級地址:邏輯地址和物理地址。需要將兩者相互映射,方法是靜態(tài)映射或動態(tài)映射。
靜態(tài)映射就是創(chuàng)建一張表將邏輯地址和物理地址都記錄,并存儲在網(wǎng)絡(luò)中的每一臺機器中。局限顯而易見。
動態(tài)映射是每次只要機器知道另一臺機器的邏輯地址,就可以按照協(xié)議找出與之對應(yīng)的物理地址。地址解析協(xié)議ARP是將邏輯地址映射為物理地址。逆地址解析協(xié)議RARP是將物理地址映射為邏輯地址,目前已被另一個協(xié)議取代。
1. ARP原理
當主機或路由器需要找出另外一個主機或路由器的物理地址時,就可以發(fā)送一個ARP查詢分組,分組中包括了發(fā)送方的物理地址和IP地址以及接收方的IP地址。因為發(fā)送方不知道接收方的物理地址,所以需要在網(wǎng)絡(luò)上廣播該分組。
網(wǎng)絡(luò)上的每一個機器都會接收并處理該分組,但只有與接收方IP地址相匹配的機器才會返回一個ARP響應(yīng)分組,分組中包含有接收方的IP地址和物理地址,這個分組因為知道了對方的物理地址,所以只需要單播即可。
總體需要7個步驟:
1.發(fā)送方知道目標的IP地址。
2.IP請求ARP創(chuàng)建一個ARP請求報文,填入發(fā)送方的物理地址、IP地址和目標IP地址,而目標物理地址字段全填0(各字段詳情見下)。
3.遞交給數(shù)據(jù)鏈路層,封裝成幀后,以發(fā)送方的物理地址作為源地址,以物理廣播地址作為目的地址。
4.每個主機或路由器均會接收并處理(因為是廣播地址),除了目標機器外,其余均會將這個分組丟棄。
5.目標機器用ARP回答報文進行回答,報文中包含它的物理地址,使用單播方式。
6.發(fā)送方接收到這個應(yīng)答。
7.攜帶有給目標機器數(shù)據(jù)的IP數(shù)據(jù)報現(xiàn)在可以封裝成幀,并用單播方式發(fā)送到終點。
2. 分組格式

硬件類型:16bit,定義運行ARP的物理網(wǎng)絡(luò)類型。如以太網(wǎng)是1,ARP可用在任何物理網(wǎng)絡(luò)上。
協(xié)議類型:16bit,定義使用的協(xié)議。如IPv4是0x0800,ARP可用于任何高層協(xié)議。
硬件長度:8bit,定義物理地址的長度,以byte為單位。如以太網(wǎng)是48bit=6byte。
協(xié)議長度:8bit,定義邏輯地址的長度,以byte為單位。如IPv4是4.
操作:16bit,定義分組類型。ARP請求是1,ARP回復是2.
發(fā)送方硬件地址:可變長度字段,定義發(fā)送方的物理地址。如以太網(wǎng)是6byte。
發(fā)送方協(xié)議地址:可變長度字段,定義發(fā)送方的邏輯地址。對于IPv4是4byte。
目標硬件地址:可變長度字段,定義接收方的物理地址。如以太網(wǎng)是6byte。對于ARP請求報文,此字段為全0,因為發(fā)送時并不知道接收方的物理地址。
目標協(xié)議地址:可變長度字段,定義接收方的邏輯地址。對于IPv4是4byte。
ARP分組直接封裝在物理鏈路幀中,幀中的類型字段會指出此幀攜帶的數(shù)據(jù)是ARP分組。
3. 代理ARP
代理ARP(proxy ARP)技術(shù),可用于產(chǎn)生一種子網(wǎng)劃分的效果。代理ARP是代表了一組主機的ARP。當運行代理ARP的路由器收到一個ARP請求后,希望找出這些主機中的某一臺主機的物理地址時,此路由器就會返回它自己的物理地址的ARP回答分組。當這個路由器收到真正的數(shù)據(jù)IP分組后,會把這些分組發(fā)送給響應(yīng)的主機或路由器。
4. ARP軟件構(gòu)成

高速緩存表:當主機或路由器接收到一個IP數(shù)據(jù)報,會把相應(yīng)的物理地址存儲在高速緩存表中。這樣同樣目的地的數(shù)據(jù)報可以重復利用一個物理地址,提高效率,但是由于空間有限,并不會無限制時間存儲。
每個表項包含以下字段:
1.狀態(tài),顯示表項的狀態(tài),F(xiàn)REE/PENDING/RESOLVED。分別代表生存時間到期,可分配給新表項;表項的ARP請求已發(fā)出但未收到回復;表項映射已建立,此表項信息可以被使用。
2.硬件類型:
3.協(xié)議類型:
4.硬件長度:
5.協(xié)議長度:以上三項與ARP分組中對應(yīng)字段相同。
6.接口號:指代路由器(或連接多個網(wǎng)絡(luò)的主機)的不同連接所對應(yīng)的接口號。
7.隊列號:ARP使用帶編號的隊列將等待地址解析的分組進行排隊,發(fā)往同一個終點的分組通常放在同一個隊列中。
8.嘗試:已發(fā)送多少次ARP請求。
9.超時:剩余的生存時間,單位為秒。
10.硬件地址:對端物理地址,接收到ARP回復報文時才填入數(shù)據(jù),否則為空。
11.協(xié)議地址:對端IP地址。
隊列:ARP使用帶編號的隊列將等待地址解析的分組進行排隊,發(fā)往同一個終點的分組通常放在同一個隊列中。輸出模塊把未解析的分組發(fā)送到相應(yīng)的隊列。輸入模塊從隊列中取出分組,并連同解析出的物理地址發(fā)送給數(shù)據(jù)鏈路層傳輸。
輸出模塊:等待來自IP的分組。接收到后,檢查高速緩存表,查找是否有表項對應(yīng)該分組的目的IP地址。
若找到了,并且狀態(tài)是RESOLVED,則將分組連同目的硬件地址一起傳遞給數(shù)據(jù)鏈路層。
若找到了,并且狀態(tài)是PENDING,則將分組相應(yīng)的隊列中等待。
若找不到,輸出模塊新建一個隊列,將分組放入隊列中。并為這個終點在高速緩存表中創(chuàng)建一個表項,把“嘗試”字段置為1,并發(fā)送ARP廣播請求分組。
輸入模塊:等待ARP分組(請求或回答)到達。接收到后,檢查高速緩存表,查找是否有表項對應(yīng)該分組的目的IP地址。
若找到了,并且狀態(tài)是PENDING,則模塊對該表項進行更新,即把物理地址寫入,并把狀態(tài)更改為RESOLVED。還要設(shè)置超時時間值。然后將對應(yīng)的隊列中的分組逐個取出,連同物理地址發(fā)送給數(shù)據(jù)鏈路層傳輸。
若找到了,并且狀態(tài)是RESOLVED,還是要更新該表項,這是因為目的地硬件地址可能已改變,超時時間值也要重置。
若找不到,則創(chuàng)建一個新表項。協(xié)議要求任何收到的信息都要添加到表中以供以后使用,此時狀態(tài)為RESOLVED。超時時間值也要設(shè)置。
最后,還要查看下到達的ARP分組是不是請求分組,若需要回復,則創(chuàng)建一個ARP回答分組并發(fā)送給對方。具體是更改請求分組中的“操作字段”從請求變?yōu)榛卮?,并填入目標硬件地址?/p>
高速緩存控制模塊:負責維護高速緩存表。周期性地逐項檢查高速緩存表。
若為FREE則跳過。
若為PENDING,則將嘗試字段+1,再檢查嘗試字段,若超過最大嘗試次數(shù),則改狀態(tài)為FREE,并銷毀相應(yīng)隊列,還要向最初數(shù)據(jù)源發(fā)送一個ICMP報文,若小于,則發(fā)送一個ARP請求分組。
若為RESOLVED,則把超時字段減去自上次檢查以來經(jīng)過的時間,若此時數(shù)值小于等于0,則狀態(tài)變?yōu)镕REE,并銷毀相應(yīng)隊列。
網(wǎng)際控制報文協(xié)議ICMP
網(wǎng)際控制報文協(xié)議ICMPv4為了補償IP協(xié)議缺少差錯控制和缺少輔助機制這兩個缺點而設(shè)計。
常見差錯報告場景:路由器找不到可到達最后終點的路由器,或生存時間字段值為0必須丟棄數(shù)據(jù)報,最終目的主機在時間內(nèi)未收到一個數(shù)據(jù)報的所有分組必須全部丟棄時。
常見輔助場景:主機需要判斷某個路由器或者對方主機是否活躍,網(wǎng)絡(luò)管理員需要來自其他主機或路由器的信息。
ICMP屬于網(wǎng)絡(luò)層,但是它的報文是要首先封裝成IP數(shù)據(jù)報,再傳遞給下一層。IPv4報頭中的協(xié)議字段值為1時,表示攜帶的是數(shù)據(jù)是ICMP報文。
1. 報文
ICMP報文可分為兩類:差錯報告報文,報告了路由器或主機在處理IP數(shù)據(jù)報時可能遇到的問題;查詢報文,成雙成對出現(xiàn),幫助主機或網(wǎng)絡(luò)管理員從某個路由器或?qū)Ψ街鳈C那里獲取特定的信息。

報文由一個8byte首部和可變長的數(shù)據(jù)部分組成。類型字段8bit,是ICMP的類型,定義了報文類型。代碼字段8bit,指明發(fā)送原因。校驗和,16bit,和IP的校驗和一樣,使用反碼。首部的其余部分,32bit,對于每種類型的報文都是特有的。
在差錯報文中,數(shù)據(jù)部分攜帶的是用于找出引起差錯的原始分組的信息。在查詢報文中,數(shù)據(jù)部分攜帶的是基于查詢類型的額外信息。

1.1 差錯報告報文
ICMP并不能糾錯,只是簡單地報告差錯。差錯報文總是發(fā)送給最初的數(shù)據(jù)源,因為在數(shù)據(jù)報中關(guān)于路由唯一可用的信息就是源IP地址和目的IP地址。IMCP利用了源IP地址把差錯報文發(fā)送給數(shù)據(jù)報的源點。
分為5類:終點不可達、源點抑制、超時、參數(shù)問題、改變路由。
特殊注意點:攜帶ICMP差錯報文的數(shù)據(jù)報,不再產(chǎn)生ICMP差錯報文。對于分片的數(shù)據(jù)報,若不是第一個分片,不產(chǎn)生ICMP差錯報文。具有多播地址的數(shù)據(jù)報,不產(chǎn)生。具有特殊地址(如127.0.0.0或0.0.0.0)的數(shù)據(jù)報,不產(chǎn)生。
差錯報文的數(shù)據(jù)部分包括原始數(shù)據(jù)報的IP首部,加上該數(shù)據(jù)報的前8byte。前者是為了向接受差錯報文的原始源點給出關(guān)于數(shù)據(jù)報本身的信息。后者是因為8byte提供了關(guān)于端口號(UDP和TCP)的信息,為了讓源點通知這些協(xié)議就需要這些信息。
所以ICMP的差錯報文是ICMP首部+原IP首部+源IP數(shù)據(jù)頭8byte。當ICMP要發(fā)送時,還要在前面加一個新IP首部。
終點不可達:當路由器無法為一個數(shù)據(jù)報找到路由,或者主機無法交付一個數(shù)據(jù)報,此數(shù)據(jù)報被丟棄,需要向源主機返回一個重點不可達報文。
首部的類型字段為3,代碼字段指明了丟棄的原因。首部的其余部分未使用,為全0。
為0:網(wǎng)絡(luò)不可達,知道目的網(wǎng)絡(luò)的存在卻無法到達,可能是硬件故障。
為1:主機不可達,知道目的主機的存在卻無法到達,也可能是硬件故障。
為2:協(xié)議不可達,目的主機收到IP報文后,發(fā)現(xiàn)其中攜帶的高層協(xié)議并未運行。
為3:端口不可達,數(shù)據(jù)報要交付的目標應(yīng)用程序(進程)未運行。
為4:需要分片,但DF(不分片)已設(shè)置。
為5:源路由不能完成,即源路由選項中定義的一個或多個路由器無法通過。
為6:目的網(wǎng)絡(luò)未知,路由器根本沒有關(guān)于這個網(wǎng)絡(luò)的信息。
為7:目的主機未知,路由器根本不知道目的地主機的存在。
為8:源主機被隔離了。
為9:從管理上禁止與目的網(wǎng)絡(luò)通信。
為10:從管理上禁止與目的主機通信。
為11:對指明的服務(wù)類型,網(wǎng)絡(luò)不可達。
為12:對指明的服務(wù)類型,主機不可達。
為13:主機不可達,因為管理員已經(jīng)在這個主機上放置了過濾器。
為14:主機不可達,因為主機違反了優(yōu)先級策略,這種報文由路由器發(fā)出,指出所要求的優(yōu)先級在該目的主機是不允許的。
為15:主機不可達,因為它的優(yōu)先級被截止,當網(wǎng)絡(luò)操作員為網(wǎng)絡(luò)的操作設(shè)定了最小的優(yōu)先級限制,但發(fā)送的數(shù)據(jù)報的優(yōu)先級小于此限制。
以上2或3的報文只能由目的主機產(chǎn)生,其余幾個報文只能由路由器產(chǎn)生。
當然,以上并沒有包括所有終點不可達的情況。
源點抑制:由于IP無連接,產(chǎn)生數(shù)據(jù)報的源點,和轉(zhuǎn)發(fā)數(shù)據(jù)報的路由器以及目的點間沒有任何通信聯(lián)系,故缺乏流量控制和擁塞控制。
當路由器或主機因擁塞而丟棄數(shù)據(jù)報時,它就向該數(shù)據(jù)包的發(fā)送方發(fā)送一個源點抑制報文。有兩個作用:通知源點,數(shù)據(jù)報已被丟棄;警告源點,路徑中的某處出現(xiàn)擁塞,源點必須放慢發(fā)送過程。
首部的類型字段為4,代碼字段為全0,首部其余部分也為全0。
幾點補充:
遭受擁塞的路由器必須為每一個丟棄的報文都發(fā)送一個源點抑制報文。
沒有機制告訴源點擁塞已緩解,源點只能不停降低發(fā)送速率知道不再收到源點抑制報文。
在一對一的通信中,源點抑制報文很有用。而在多對一的通信中,路由器或目的主機不知道哪一個源點應(yīng)該為擁塞負責,可能丟棄了來自低速率的源點的數(shù)據(jù)報,而沒有丟棄來自高速率源點的數(shù)據(jù)報,此時源點抑制報文就不一定有用了。
超時:數(shù)據(jù)報中的超時字段為0時,需要丟棄,此時路由器要向源點發(fā)送一個超時報文。
當一個報文的所有分片未能在規(guī)定時間內(nèi)全部到達目標主機時,也要產(chǎn)生超時報文。當?shù)谝粋€分片到達時,目標主機就開始計時。
首部的類型字段為11,代碼字段為0或1(分別指代以上兩種情況),首部的其余部分為全0。
參數(shù)問題:數(shù)據(jù)報的首部中出現(xiàn)二義性,或發(fā)現(xiàn)某字段缺少值,就回丟棄數(shù)據(jù)報,并返回一個參數(shù)問題報文。
首部的類型字段為2,代碼字段為0或1:0代表首部的某個字段中有差錯或二義性,指針字段(在首部的其余部分中)要指向有問題的字段,1代表缺少的選項部分,此時不適用指針。首部的其余部分若未被使用,則全為0。
改變路由:在網(wǎng)絡(luò)中,路由器的路由表通常是動態(tài)變化的,而主機的路由表通常使用靜態(tài)路由選擇。因此主機有可能會把另一個網(wǎng)絡(luò)的數(shù)據(jù)報發(fā)送給一個錯誤的路由器(沒有與時俱進)。此時,收到這個數(shù)據(jù)報的路由器會將數(shù)據(jù)報轉(zhuǎn)發(fā)給正確的路由器,但是為了更新主機中的路由表,路由器還要向主機發(fā)送一個改變路由報文。
主機在剛開始工作時只有一張很小的路由表,這個路由表逐漸增大和更新。完成這項任務(wù)的工具之一就是改變路由報文。
首部的類型字段為5,代碼為0~3,首部的其余部分是合適的路由器的IP地址。
需要注意的是,此種情況下路由器不會丟棄報文。
代碼字段縮小了改變路由的范圍:
為0,對特定網(wǎng)絡(luò)路由的改變。
為1,對特定主機路由的改變。
為2,基于制定服務(wù)類型的對特定網(wǎng)絡(luò)路由的改變。
為3,基于制定服務(wù)類型的對特定主機路由的改變。
1.2 查詢報文
查詢報文是成雙成對的,起初設(shè)計了5對,但其中3對已過時。還在使用的是回答請求與回答,時間戳請求與回答。使用此類ICMP報文時,先由一個節(jié)點先發(fā)送一個報文,再由目的節(jié)點以指明的格式進行回答。
回送請求與回答:回送請求與回送回答報文是為了診斷而設(shè)計的。組合起來可確定雙方是否可以通信。此外還證明了中間的路由器也能夠接收、處理和轉(zhuǎn)發(fā)數(shù)據(jù)報。
通常會調(diào)用分組因特網(wǎng)搜尋器(ping)命令來檢查另一個主機是否可達。它會提供一串信息以供統(tǒng)計使用。
首部的類型字段為8或0,8是回送請求,0是回送回答。代碼字段是0。首部的其余部分分為兩部分,16bit的標識符,通常與發(fā)起請求的進程的ID是一致的,16bit的序號,通常是一個序列號。
在報文的數(shù)據(jù)部分,回送回答報文中必須copy回送請求中的數(shù)據(jù)部分,要一模一樣。
時間戳請求和回答:來確定IP數(shù)據(jù)報在這兩個機器之間來回所需的往返時間。也可用來同步時間。
首部的類型字段為13或14,13是時間戳請求,14是時間按此回答。代碼字段是0。首部的其余部分和回送請求與回答一致。
數(shù)據(jù)部分是3個時間戳,每個32bit,分別是原始時間戳,接收時間戳,發(fā)送時間戳,都要保存一個數(shù),代表以通用時間(以前稱為格林威治時間)的午夜起測量出的時間,單位是毫秒。
源點生成時間戳請求報文,并把它的發(fā)送時間填入原始時間戳,其他字段置0。
終點生成時間戳回答報文,原始時間戳copy即可,接收時間戳填入接收時間,發(fā)送時將發(fā)送時間戳填入。
源點接收到時間戳回答報文后,進行計算:
發(fā)送時間 = 接收時間戳 - 原始時間戳
接收時間 = 分組返回的時間 - 發(fā)送時間戳
往返時間 = 發(fā)送時間 + 接收時間
當雙方時間同步時,計算結(jié)果才是精確的。但是未同步時,由于每一個時鐘在往返時間的計算中出現(xiàn)了2次,差別抵消,也還是準確的。
若給出實際的單項時間,則可進行雙方間的時間同步:
時間差 = 接收時間戳 - (原始時間戳 + 單向經(jīng)歷時間)
將往返時間除2可得到準確的單向經(jīng)歷時間。
過時的報文:信息請求和回答報文,它們的任務(wù)移交給地址解析協(xié)議ARP。地址掩碼請求和回答,移交給動態(tài)主機配置協(xié)議DHCP。路由器詢問和通告報文,移交給動態(tài)主機配置協(xié)議DHCP。
2. 排錯工具
ping,查出某個主機是否已加電并能夠響應(yīng)。見我之前的筆記:[記錄]Ping命令粗略。
traceroute跟蹤一個分組從源點到終點的路徑。這個應(yīng)用級的程序使用UDP服務(wù),巧妙地使用了兩個ICMP報文——超時報文和終點不可達報文來找出一個分組的路由。主要使用ICMP報文和IP分組中的TTL(生存時間)字段。
舉例,主機A到主機B間需要依次通過路由器R1和R2。
首先,主機A要找到路由器R1的地址和分組在它們之間的往返時間,這個過程會重復3次,以得到一個較為準確的往返時間平均值。a). 主機A的traceroute使用UDP向終點B發(fā)送一個分組,被封裝成IP分組,且TTL值為1,并記下發(fā)送時間。b). 路由器R1收到該分組,TTL減一變?yōu)?,R1丟棄該分組并向主機A發(fā)送ICMP超時報文。c). 主機A收到ICMP報文,利用IP的源地址找出R1地址,并記下分組的到達時間。與a)中的時間差即為往返時間。
然后,主機A重復以上步驟來找出R2的地址,此次TTL為2,因此R1會轉(zhuǎn)發(fā)分組,而R2會丟棄并發(fā)送ICMP超時報文。
最后,分組的TTL設(shè)為3,但主機B接收到該分組后并不會丟棄該分組,因為已經(jīng)到達終點B。traceroute使用一種策略,UDP的目的端口被設(shè)置成UDP協(xié)議不支持的一個端口,這樣當主機B收到該分組后,會因為找不到可以接收交付的程序而丟棄該分組,并向主機A發(fā)送一個ICMP終點不可達報文。因為路由器不會檢查UDP首部,所以不會在R1和R2處被檢查出來而丟棄。主機A收到ICMP報文后,因為終點已找出,不會再發(fā)送更多分組。
3. ICMP軟件構(gòu)成
由輸入模塊和輸出模塊組成,前者處理到來的ICMP分組,后者處理對ICMP服務(wù)的請求。
輸入模塊:當一個來自IP層的ICMP分組要交付給它時,就被激活。若收到的是請求報文,則輸入模塊產(chǎn)生回答報文并發(fā)送。若收到的是改變路由報文,則更新路由表。若收到的是差錯報文,則通知相關(guān)協(xié)議有關(guān)差錯的情況。
輸出模塊:根據(jù)高層協(xié)議或IP協(xié)議的要求來創(chuàng)建請求報文、詢問報文或差錯報文。若來自IP,則輸出模塊必須檢查是否合理,有四種情況不允許創(chuàng)建ICMP報文:攜帶ICMP差錯報文的IP分組、被分片的IP分組、多播IP分組、IP地址為0.0.0.0或127.X.Y.Z的IP分組。
移動IP
1. 編址
使用IP協(xié)議提供移動通信時必須解決的主要問題是編址。
最初的的IP編址的假設(shè):主機是固定的,并且連接到某個特定的網(wǎng)絡(luò)。所以IP地址由兩部分組成:前綴(網(wǎng)絡(luò)地址)+后綴(主機地址)。暗示因特網(wǎng)上的主機無法攜帶一個IP地址從一個地方到其他地方而保持不變。只有連接到對應(yīng)的網(wǎng)絡(luò)上,這個地址才是有效的,如果網(wǎng)絡(luò)改變了,則之前的地址就無效了。
對于移動主機,有幾種解決方案。
改變地址:移動到新的網(wǎng)絡(luò)時改變它的地址,使用DHCP來獲得新地址。缺點:配置文件可能改變;移動到新網(wǎng)絡(luò)后,主機需要重啟;DNS表必須更新,以使因特網(wǎng)上的其他主機都知道變化;移動過程中,數(shù)據(jù)傳輸會中斷,因為客戶端和服務(wù)器端在傳輸時IP地址和端口號需要保持不變。
兩個地址:原始地址稱為歸屬地址,臨時地址稱為轉(zhuǎn)交地址。前者使得主機和它的歸屬網(wǎng)絡(luò)相關(guān)聯(lián),后者與移動到的新網(wǎng)絡(luò)相關(guān)聯(lián)。
2. 代理
當移動主機接入一個外地網(wǎng)絡(luò)時,它就會在代理發(fā)現(xiàn)階段和登記階段收到自己的轉(zhuǎn)交地址。
需要一個歸屬代理和外地代理。
歸屬代理通常是連接在移動主機的歸屬網(wǎng)絡(luò)上的路由器,當遠程主機向移動主機發(fā)送數(shù)據(jù)時,歸屬代理就充當該移動主機。接收后,再把分組轉(zhuǎn)交給外地代理。
外地代理通常是連接在外地網(wǎng)絡(luò)上的路由器,接收歸屬代理發(fā)送過來的分組,并轉(zhuǎn)交給移動主機。移動主機也可以充當外地代理,此時必須能夠收到自己的轉(zhuǎn)交地址,通常是用DHCP來實現(xiàn)。
3. 三個階段
要與遠程主機通信,有三個階段:代理發(fā)現(xiàn)、登記、數(shù)據(jù)傳送。
代理發(fā)現(xiàn):移動主機在離開歸屬網(wǎng)絡(luò)之前發(fā)現(xiàn)歸屬代理,掌握歸屬代理的地址;在移動到外地網(wǎng)絡(luò)后發(fā)現(xiàn)外地代理。
當一個路由器充當代理的角色,則可使用ICMP的路由器通告分組,在后面附帶代理通告報文來實現(xiàn)代理通告。
當移動主機移動到新網(wǎng)絡(luò)但沒收到代理通告時,可使用ICMP詢問報文通知代理,讓代理知道它的需求,即為一個代理詢問。
登記:移動主機向外地代理登記;外地代理以移動主機的身份來向歸屬代理登記;截止期到了后移動主機必須更新登記;移動主機回歸歸屬網(wǎng)絡(luò)后必須取消登記。
登記請求或回答使用UDP,代理使用端口是434。
數(shù)據(jù)傳送:分為四個步驟。
1.從遠程主機到歸屬代理。遠程主機發(fā)送分組時還以為移動主機在歸屬網(wǎng)絡(luò),分組被歸屬代理截獲,使用了代理ARP技術(shù)。
2.從歸屬代理到外地代理。使用隧道技術(shù),將分組發(fā)送給外地代理。歸屬代理將原IP分組封裝在另一個IP分組中。
3.從外地代理到移動主機。從大IP分組中取出原IP分組,并查詢登記表,找到轉(zhuǎn)交地址,并發(fā)送。
4.從移動主機到遠程主機。正常發(fā)送,使用歸屬地址作為源地址。
移動主機對于因特網(wǎng)的其余部分是不可知的,遠程主機發(fā)送時使用的目的地址,以及收到的分組中的源地址,都是移動主機的歸屬地址,所以不可知。
4. 低效率
很嚴重的情況成為兩次穿越或2X。中等嚴重的情況成為三角路由選擇或狗腿路由選擇。
兩次穿越:移動主機與遠程主機處于同一網(wǎng)絡(luò)。移動主機到遠程主機不存在低效問題,而遠程主機到移動主機通信時,卻需要穿越互聯(lián)網(wǎng)兩次,造成低效。
三角路由選擇:低效情況較輕,此種情況下移動主機和遠程主機沒有連接在一個網(wǎng)絡(luò)上。移動主機到遠程主機不存在低效問題,而遠程主機到移動主機通信時,需要先到歸屬代理,再由外地代理找到移動主機,相當于三角形的兩邊,而不只是一條邊。
一種解決方案是,當歸屬代理收到第一個來自遠程主機的分組時,進行轉(zhuǎn)發(fā)的同時,向遠程主機發(fā)送一個更新綁定分組,使之在以后發(fā)送給該移動主機時選擇這個轉(zhuǎn)交地址,遠程主機會將此信息存入高速緩存中。引入的問題是,一旦移動主機又移動,則高速緩存的信息會過時,這種情況下,歸屬代理需要向遠程主機發(fā)送告警分組以通知改變。
參考
《TCP/IP協(xié)議族(第4版)》 (Behrouz A.Forouzan) 第八、九、十章