TCP/IP詳解,卷1:協議--鏈 路 層

引言

在 T C P / I P 協議族中,鏈路層主要有三個目的:(1)爲 I P 模塊發送和
接收 I P 數據報;(2)爲 A R P 模塊發送 A R P 請求和接收 A R P 應答;(3)爲 R A R P 發送 R A R P 請
求和接收 R A R P 應答。T C P / I P 支持多種不一樣的鏈路層協議,這取決於網絡所使用的硬件,如以
太網、令牌環網、F D D I(光纖分佈式數據接口)及 R S-2 3 2 串行線路等。git

咱們將詳細討論以太網鏈路層協議,兩個串行接口鏈路層協議( S L I P 和 P P P),
以及大多數實現都包含的環回( l o o p b a c k)驅動程序。以太網和 S L I P 是本書中大多數例子使
用的鏈路層。對 M T U(最大傳輸單元)進行了介紹,這個概念在本書的後面章節中將屢次遇
到。服務器

以太網和 IEEE 802 封裝

以太網這個術語通常是指數字設備公司( Digital Equipment Corp.)、英特爾公司(I n t e l
C o r p .)和 X e r o x 公司在 1 9 8 2 年聯合公佈的一個標準。它是當今 T C P / I P 採用的主要的局域網技
術。它採用一種稱做 C S M A / C D 的媒體接入方法,其意思是帶衝突檢測的載波偵聽多路接入
(Carrier Sense, Multiple Access with Collision Detection)。它的速率爲 10 Mb/s,地址爲 48 bit。
幾年後,I E E E(電子電氣工程師協會) 8 0 2 委員會公佈了一個稍有不一樣的標準集,其中
8 0 2 . 3 針對整個 C S M A / C D 網絡,8 0 2 . 4 針對令牌總線網絡,8 0 2 . 5 針對令牌環網絡。這三者的共
同特性由 8 0 2 . 2 標準來定義,那就是 8 0 2 網絡共有的邏輯鏈路控制( L L C)。不幸的是,8 0 2 . 2 和
8 0 2 . 3 定義了一個與以太網不一樣的幀格式。文獻 [Stallings 1987]對全部的 IEEE 802 標準進行了
詳細的介紹。
網絡

在以太網幀格式中,類型字段以後就是數據;而在 8 0 2 幀格式中,跟隨在後面的是 3 字節
的 802.2 LLC 和 5 字節的 802.2 SNAP。目的服務訪問點( Destination Service Access Point,
D S A P)和源服務訪問點(Source Service Access Point, SSAP)的值都設爲 0 x a a。Ct r l 字段的
值設爲 3。隨後的 3 個字節 o rg code 都置爲 0。再接下來的 2 個字節類型字段和以太網幀格式同樣
(其餘類型字段值能夠參見 RFC 1340 [Reynolds and Postel 1992])。
C R C 字段用於幀內後續字節差錯的循環冗餘碼檢驗(檢驗和)(它也被稱爲 F C S 或幀檢驗
序列)。
8 0 2 . 3 標準定義的幀和以太網的幀都有最小長度要求。 8 0 2 . 3 規定數據部分必須至少爲 3 8 字
節,而對於以太網,則要求最少要有 4 6 字節。爲了保證這一點,必須在不足的空間插入填充
(p a d)字節。在開始觀察線路上的分組時將遇到這種最小長度的狀況異步

尾部封裝

RFC 893[Leffler and Karels 1984]描述了另外一種用於以太網的封裝格式,稱做尾部封裝
(trailer encapsulation)。這是一個早期 B S D 系統在 DEC VA X 機上運行時的試驗格式,它經過
調整 I P 數據報中字段的次序來提升性能。在以太網數據幀中,開始的那部分是變長的字段
(I P 首部和 T C P 首部)。把它們移到尾部(在 C R C 以前),這樣當把數據複製到內核時,就能夠
把數據幀中的數據部分映射到一個硬件頁面,節省內存到內存的複製過程。 T C P 數據報的長
度是 5 1 2 字節的整數倍,正好能夠用內核中的頁表來處理。兩臺主機經過協商使用 A R P 擴展協
議對數據幀進行尾部封裝。這些數據幀需定義不一樣的以太網幀類型值。
如今,尾部封裝已遭到反對,所以咱們不對它舉任何例子。有興趣的讀者請參閱 RFC 893
以及文獻[ L e ffler et al. 1989]的 11 . 8 節。分佈式

SLIP:串行線路 IP
S L I P 的全稱是 Serial Line IP。它是一種在串行線路上對 I P 數據報進行封裝的簡單形式,在
RFC 1055[Romkey 1988]中有詳細描述。S L I P 適用於家庭中每臺計算機幾乎都有的 R S - 2 3 2 串
行端口和高速調制解調器接入 I n t e r n e t。
下面的規則描述了 S L I P 協議定義的幀格式:oop

  1. IP 數據報以一個稱做 E N D(0 x c 0)的特殊字符結束。同時,爲了防止數據報到來以前
    的線路噪聲被當成數據報內容,大多數實如今數據報的開始處也傳一個 E N D 字符(若是有線
    路噪聲,那麼 E N D 字符將結束這份錯誤的報文。這樣當前的報文得以正確地傳輸,而前一個
    錯誤報文交給上層後,會發現其內容毫無心義而被丟棄)。
  2. 若是 I P 報文中某個字符爲 E N D,那麼就要連續傳輸兩個字節 0 x d b 和 0 x d c 來取代它。
    0 x d b 這個特殊字符被稱做 S L I P 的 E S C 字符,可是它的值與 A S C I I 碼的 E S C 字符(0 x 1 b)不一樣。
  3. 若是 I P 報文中某個字符爲 S L I P 的 E S C 字符,那麼就要連續傳輸兩個字節 0 x d b 和 0 x d d 來
    取代它。
    圖 2 - 2 中的例子就是含有一個 E N D 字符和一個 E S C 字符的 I P 報文。在這個例子中,在串行
    線路上傳輸的總字節數是原 I P 報文長度再加 4 個字節。

S L I P 的歷史要追溯到 1 9 8 4 年,Rick Adams 第一次在 4 . 2 B S D 系統中實現。儘管它本
身的描述是一種非標準的協議,可是隨着調制解調器的速率和可靠性的提升, S L I P 越
來越流行。如今,它的許多產品能夠公開得到,並且不少廠家都支持這種協議性能

壓縮的 SLIP

因爲串行線路的速率一般較低( 19200 b/s 或更低),並且通訊常常是交互式的(如 Te l n e t
和 R l o g i n,兩者都使用 T C P),所以在 S L I P 線路上有許多小的 T C P 分組進行交換。爲了傳送 1 個
字節的數據須要 2 0 個字節的 I P 首部和 2 0 個字節的 T C P 首部,總數超過 4 0 個字節測試

既然認可這些性能上的缺陷,因而人們提出一個被稱做 C S L I P(即壓縮 S L I P)的新協議,
它在 RFC 1144[Jacobson 1990a]中被詳細描述。C S L I P 通常能把上面的 4 0 個字節壓縮到 3 或 5 個
字節。它能在 C S L I P 的每一端維持多達 1 6 個 T C P 鏈接,而且知道其中每一個鏈接的首部中的某些
字段通常不會發生變化。對於那些發生變化的字段,大多數只是一些小的數字和的改變。這
些被壓縮的首部大大地縮短了交互響應時間。
如今大多數的 S L I P 產品都支持 C S L I P。做者所在的子網(參見封面內頁)中有兩條
SLIP 鏈路,它們均是 CSLIP 鏈路。ui

PPP:點對點協議

P P P,點對點協議修改了 S L I P 協議中的全部缺陷。P P P 包括如下三個部分:設計

  1. 在串行鏈路上封裝 I P 數據報的方法。 P P P 既支持數據爲 8 位和無奇偶檢驗的異步模式
    (如大多數計算機上都廣泛存在的串行接口),還支持面向比特的同步連接。
  2. 創建、配置及測試數據鏈路的鏈路控制協議( L C P:Link Control Protocol)。它容許通
    信雙方進行協商,以肯定不一樣的選項。
  3. 針對不一樣網絡層協議的網絡控制協議( N C P:Network Control Protocol)體系。當前
    R F C 定義的網絡層有 I P、O S I 網絡層、D E C n e t 以及 A p p l e Ta l k。例如,IP NCP 容許雙方商定是
    否對報文首部進行壓縮,相似於 C S L I P(縮寫詞 N C P 也可用在 T C P 的前面)。

P P P 比 S L I P 具備下面這些優勢:(1) PPP 支持在單根串行線路上運行多種協議,
不僅是 I P 協議;(2) 每一幀都有循環冗餘檢驗; (3) 通訊雙方能夠進行 I P 地址的動態協商(使用
I P 網絡控制協議);(4) 與 C S L I P 相似,對 T C P 和 I P 報文首部進行壓縮; (5) 鏈路控制協議能夠
對多個數據鏈路選項進行設置。爲這些優勢付出的代價是在每一幀的首部增長 3 個字節,當建
立鏈路時要發送幾幀協商數據,以及更爲複雜的實現。
儘管 P P P 比 S L I P 有更多的優勢,可是如今的 S L I P 用戶仍然比 P P P 用戶多。隨着產品
愈來愈多,產家也開始逐漸支持 PPP,所以最終 PPP 應該取代 SLIP

環回接口

大多數的產品都支持環回接口( Loopback Interface),以容許運行在同一臺主機上的客戶
程序和服務器程序經過 T C P / I P 進行通訊。A 類網絡號 1 2 7 就是爲環回接口預留的。根據慣例,
大多數系統把 I P 地址 1 2 7 . 0 . 0 . 1 分配給這個接口,並命名爲 l o c a l h o s t。一個傳給環回接口的 I P 數
據報不能在任何網絡上出現

咱們想象,一旦傳輸層檢測到目的端地址是環回地址時,應該能夠省略部分傳輸層和所
有網絡層的邏輯操做。可是大多數的產品仍是照樣完成傳輸層和網絡層的全部過程,只是當
I P 數據報離開網絡層時把它返回給本身。
圖 2 - 4 是環回接口處理 I P 數據報的簡單過程

圖中須要指出的關鍵點是:

  1. 傳給環回地址(通常是 1 2 7 . 0 . 0 . 1)的任何數據均做爲 I P 輸入。
  2. 傳給廣播地址或多播地址的數據報復制一份傳給環回接口,而後送到以太網上。這是
    由於廣播傳送和多播傳送的定義(第 1 2 章)包含主機自己。
    3 ) 任何傳給該主機 I P 地址的數據均送到環回接口。
    看上去用傳輸層和 I P 層的方法來處理環回數據彷佛效率不高,但它簡化了設計,由於環
    回接口能夠被看做是網絡層下面的另外一個鏈路層。網絡層把一份數據報傳送給環回接口,就
    像傳給其餘鏈路層同樣,只不過環回接口把它返回到 I P 的輸入隊列中。

最大傳輸單元 MTU

路徑 MTU

當在同一個網絡上的兩臺主機互相進行通訊時,該網絡的 M T U 是很是重要的。可是若是
兩臺主機之間的通訊要經過多個網絡,那麼每一個網絡的鏈路層就可能有不一樣的 M T U。重要的
不是兩臺主機所在網絡的 M T U 的值,重要的是兩臺通訊主機路徑中的最小 M T U。它被稱做路
徑 M T U。

串行線路吞吐量計算

若是線路速率是 9600 b/s,而一個字節有 8 bit,加上一個起始比特和一箇中止比特,那麼
線路的速率就是 960 B/s(字節/秒)。以這個速率傳輸一個 1 0 2 4 字節的分組須要 1066 ms。若是
用 S L I P 連接運行一個交互式應用程序,同時還運行另外一個應用程序如 F T P 發送或接收 1 0 2 4 字
節的數據,那麼通常來講就必須等待一半的時間( 533 ms)才能把交互式應用程序的分組數
據發送出去。
假定交互分組數據能夠在其餘「大塊」分組數據發送以前被髮送出去。大多數的 S L I P 實
現確實提供這類服務排隊方法,把交互數據放在大塊的數據前面。交互通訊通常有 Te l n e t、
R l o g i n 以及 F T P 的控制部分(用戶的命令,而不是數據)。
這種服務排隊方法是不完善的。它不能影響已經進入下游(如串行驅動程序)隊
列的非交互數據。同時,新型的調制解調器具備很大的緩衝區,所以非交互數據可能
已經進入該緩衝區了。
對於交互應用來講,等待 533 ms 是不能接受的。關於人的有關研究代表,交互響應時間
超過 1 0 0 ~ 200 ms 就被認爲是很差的 [Jacobson 1990a]。這是發送一份交互報文出去後,直到
接收到響應信息(一般是出現一個回顯字符)爲止的往返時間。
不幸的是,當使用新型的糾錯和壓縮調制解調器時,這樣的計算就更難了。這些調製解
調器所採用的壓縮方法使得在線路上傳輸的字節數大大減小,但糾錯機制又會增長傳輸的時
間。不過,這些計算是咱們進行合理決策的入口點。

小結

這討論了 I n t e r n e t 協議族中的最底層協議,鏈路層協議。咱們比較了以太網和 I E E E
8 0 2 . 2 / 8 0 2 . 3 的封裝格式,以及 S L I P 和 P P P 的封裝格式。因爲 S L I P 和 P P P 常常用於低速的鏈路,
兩者都提供了壓縮不常變化的公共字段的方法。這使交互性能獲得提升。
大多數的實現都提供環回接口。訪問這個接口能夠經過特殊的環回地址,通常爲
1 2 7 . 0 . 0 . 1。也能夠經過發送 I P 數據報給主機所擁有的任一 I P 地址。當環回數據回到上層的協議
棧中時,它已通過傳輸層和 I P 層完整的處理過程。

咱們描述了不少鏈路都具備的一個重要特性, M T U,相關的一個概念是路徑 M T U。根據 典型的串行線路 M T U,對 S L I P 和 C S L I P 鏈路的傳輸時延進行了計算。 這的內容只覆蓋了當今 T C P / I P 所採用的部分數據鏈路公共技術。 T C P / I P 成功的緣由之 一是它幾乎能在任何數據鏈路技術上運行。

相關文章
相關標籤/搜索