天天看點

《分布式系統:概念與設計》一3.4.2 IP協定

ip協定将資料報從一個主機傳到另一個主機,如果需要的話還會經過中間路由器。完整的ip資料包格式是相當複雜的,圖3-17給出了其主要組成部分。有一些頭部域沒有顯示在圖中,它們是用于傳輸和路由算法的。

《分布式系統:概念與設計》一3.4.2 IP協定

ip提供的傳輸服務被描述成有不可靠或盡力而為這樣的傳輸語義,因為沒有傳輸上的保證。資料包可能會丢失、重複、延遲或順序錯誤,但這些錯誤隻在底層網絡失敗或目的地緩沖區滿的時候才會發生。ip中唯一的校驗和是頭部的校驗和,其計算代價不高,還能確定檢測到任何尋址和資料包管理資料中發生的錯誤。它沒有提供資料的校驗和,這避免了經過路由器時的開銷,而是讓更高層的協定(tcp和udp)來提供它們自己的校驗和——這是端對端争論中的一個實際例子(參見2.3.3節)。

ip層将ip資料報放入适合底層網絡(例如以太網)傳輸的網絡資料包中。當ip資料報的長度大于底層網絡的mtu時,就在發送端将ip資料報分割成多個小的資料包,然後在目的地重新組裝。資料包還可以進一步分割以适合從源位址到目的位址的路徑中所經過的網絡(每個資料包都有一個片斷辨別符,使得打亂順序的各個段能夠重新組合起來)。

ip層還必須在底層網絡中插入消息目的地的“實體”網絡位址。該位址可以從網際網路網絡接口層的位址解析子產品獲得(見下一小節的介紹)。

位址解析 位址解析子產品負責将網際網路位址轉為特定底層網絡所使用的網絡位址(有時稱為實體位址)。例如,如果底層網絡是以太網,那麼位址解析子產品将把32比特的網際網路位址轉換成48比特的以太網位址。111

這種轉換是與網絡技術相關的:

有一些主機直接與網際網路資料包交換機相連,ip資料包可以不需要位址翻譯就路由到它們。

一些區域網路允許動态地将網絡位址配置設定給主機,這樣就可以友善地選擇位址以比對網際網路位址中的主機辨別符部分——翻譯就是從ip位址中抽取主機辨別符。

對于以太網和其他區域網路,每個計算機的網絡位址都是和它的網絡硬體接口固定的,和網際網路位址沒有直接的關系——翻譯取決于主機的ip位址和以太網位址間的對應關系,其具體實作是通過位址解析協定(arp)完成的。

現在我們概述一下以太網中arp的實作。為了能在計算機加入區域網路時讓ip資料包在以太網上傳輸,使用了動态詢問并利用緩存來減少詢問消息。先考慮同一個以太網中一個主機用ip向另一個主機傳送消息的情況。發送方的ip軟體子產品在發送資料包前,必須将ip資料包中的接收方的網際網路位址翻譯成以太網位址。它調用發送方的arp子產品來完成這一任務。

每個主機上的arp子產品都維護一個緩存,儲存它以前獲得的(ip位址,以太網位址)對。如果需要的ip位址位于這個緩存中,請求就會立刻被應答。如果沒有需要的ip位址,arp子產品會在本地的以太網上發出一個以太網廣播資料包(arp請求資料包),資料包中包括了所需的ip位址。本地以太網中的每個計算機都收到這個arp請求資料包,并用自己的ip位址和資料包中的ip位址進行比對。如果比對,就給arp請求的發出方發送一個arp應答,應答中包括自己的以太網位址;如果不比對,就忽略該資料包。發出方的arp子產品在自己的本地(ip位址,以太網位址)緩存中加入新的ip位址到以太網位址的映射表,這樣将來如果響應類似的arp請求就不需要再廣播了。一段時間之後,每個計算機上的arp緩存中都包含了所有計算機的(ip位址,以太網位址)對。這時隻有在有新計算機加入到本地以太網時才需要arp廣播。

ip僞冒 我們已經看到,ip資料包中包括一個源位址——發送方計算機的ip位址。它與封裝在資料域中的端口位址(對于tcp和udp資料包)一起,經常被伺服器用來生成一個傳回位址。遺憾的是,并不能保證給定的源位址就是真正的發送方的位址。心懷叵測的發送者可以輕易地使用别的位址來代替它。這個漏洞已成為多起著名攻擊的源頭,包括1.5.3節提到的2000年2月出現的分布式拒絕服務攻擊[farrow 2000]。所使用的方法就是在幾個站點向大量的計算機發出ping請求(ping是一個簡單的服務,用于檢查主機的可用性)。這些惡意的ping請求在它們的發送方位址域中都填上了目标計算機的ip位址,是以ping的應答就指向目标計算機,112造成它們的輸入緩沖溢出,造成合法的ip資料包無法通過。這種攻擊将在第11章中進一步讨論。

繼續閱讀