RFC 893[Leffler and Karels 1984]描述了另一種用于以太網的封裝格式,稱作尾部封裝(trailer encapsulation)。這是一個早期BSD系統在DEC VAX機上運行時的試驗格式,它通過調整I P數據報中字段的次序來提高性能。在以太網數據幀中,開始的那部分是變長的字段(ip首部和TCP首部)。把它們移到尾部(在CRC之前),這樣當把數據復制到內核時,就可以把數據幀中的數據部分映射到一個硬件頁面,節省內存到內存的復制過程。TCP數據報的長度是512字節的整數倍,正好可以用內核中的頁表來處理。兩臺主機通過協商使用ARP擴展協議對數據幀進行尾部封裝。這些數據幀需定義不同的以太網幀類型值。
現在,尾部封裝已遭到反對,因此我們不對它舉任何例子。有愛好的讀者請參閱RFC 893以及文獻[Leffleretal.1989]的11.8節。
SLIP的全稱是Serial Line IP。它是一種在串行線路上對I P數據報進行封裝的簡單形式,在RFC 1055[Romkey 1988]中有具體描述。SLIP適用于家庭中每臺計算機幾乎都有的RS-232串行端口和高速調制解調器接入Internet。
下面的規則描述了SLIP協議定義的幀格式:
1) IP數據報以一個稱作END(0xc0)的非凡字符結束。同時,為了防止數據報到來之前的線路噪聲被當成數據報內容,大多數實現在數據報的開始處也傳一個END字符(假如有線路噪聲,那么END字符將結束這份錯誤的報文。這樣當前的報文得以正確地傳輸,而前一個錯誤報文交給上層后,會發現其內容毫無意義而被丟棄)。
2) 假如IP報文中某個字符為END,那么就要連續傳輸兩個字節0xdb和0xdc來取代它。0xdb這個非凡字符被稱作SLIP的ESC字符,但是它的值與ASCII碼的ESC字符(0x1b)不同。
3) 假如IP報文中某個字符為SLIP的ESC字符,那么就要連續傳輸兩個字節0xdb和0xdd來取代它。
圖2-2中的例子就是含有一個END字符和一個ESC字符的IP報文。在這個例子中,在串行線路上傳輸的總字節數是原IP報文長度再加4個字節。
SLIP是一種簡單的幀封裝方法,還有一些值得一提的缺陷:
1) 每一端必須知道對方的IP地址。沒有辦法把本端的IP地址通知給另一端。
2) 數據幀中沒有類型字段(類似于以太網中的類型字段)。假如一條串行線路用于SLIP,那么它不能同時使用其他協議。
3 ) SLIP沒有在數據幀中加上檢驗和(類似于以太網中的CRC字段)。假如SLIP傳輸的報文被線路噪聲影響而發生錯誤,只能通過上層協議來發現(另一種方法是,新型的調制解調器可以檢測并糾正錯誤報文)。這樣,上層協議提供某種形式的CRC就顯得很重要。在第3章和第17章中,我們將看到IP首部和TCP首部及其數據始終都有檢驗和。在第11章中,將看到UDP首部及其數據的檢驗和卻是可選的。
盡管存在這些缺點, SLIP仍然是一種廣泛使用的協議。
SLIP的歷史要追溯到1984年,Rick Adams第一次在4.2BSD系統中實現。盡管它本身的描述是一種非標準的協議,但是隨著調制解調器的速率和可靠性的提高, SLIP越來越流行。現在,它的許多產品可以公開獲得,而且很多廠家都支持這種協議。
|
新聞熱點
疑難解答