鏈路層
簡介:從前一章節(jié)可以看出禁舷,
TCP/IP協(xié)議族
中彪杉,鏈路層主要有三個目的:
- 為
IP模塊
接收和發(fā)送數(shù)據(jù)報 - 為
ARP模塊
發(fā)送ARP
請求和接收ARP
應(yīng)答 - 為
RARP模塊
發(fā)送RARP
請求和接收RARP
應(yīng)答
TCP/IP
支持多種類型的鏈路層協(xié)議,這取決于網(wǎng)絡(luò)所使用的硬件牵咙,如以太網(wǎng)
在讶、令牌環(huán)網(wǎng)
等。
本文主要討論的是以太網(wǎng)鏈路層協(xié)議霜大,兩個串行接口鏈路層協(xié)議(SLIP
和 PPP
)构哺,以及大部數(shù)實現(xiàn)都包含的環(huán)回(loop back
) 驅(qū)動程序。
1.、以太網(wǎng)
和IEEE 802
封裝
在TCP/IP族中曙强,以太網(wǎng)IP數(shù)據(jù)報的封裝是在 RFC 894中定義的,IEEE 802
網(wǎng)絡(luò)的IP數(shù)據(jù)報分裝實在RFC 1042
中定義的残拐。主機需求RFC要求每臺Internet主機都與一個10Mb/s
的以太網(wǎng)電纜相連接:
- 必須能發(fā)送和接收采用
RFC 894
封裝格式的分組 - 應(yīng)該能接收與
RFC 894
混合的RFC 1042
封裝格式的分組 - 也許能夠發(fā)送采用
RFC 1042
格式封裝的分組。如果主機能同時發(fā)送兩種類型的分組數(shù)據(jù)碟嘴,那么發(fā)送的分組必須是可以設(shè)置溪食,而且默認(rèn)條件下必須是RFC 894
分組。
最常使用的封裝格式是RFC 894
定義的格式娜扇。
下圖顯示了兩種不同形式的封裝格式错沃;
兩種幀格式都采用48bit
(6字節(jié))的目的地址和源地址,這就是我們在本書中所稱的硬件地址雀瓢。ARP
和RARP
對32 bit
的IP地址
和48 bit
的硬件地址
進行映射枢析;
接下來的兩個字節(jié)在兩種幀格式中互不相同。在802
標(biāo)準(zhǔn)定義的幀格式中刃麸,長度字段表示它后續(xù)字段的字節(jié)長度醒叁,但不包括CRC
檢驗碼。以太網(wǎng)的類型字段的定義了后續(xù)數(shù)據(jù)的類型泊业。在802
標(biāo)準(zhǔn)定義的幀格式中把沼,類型字段則由后續(xù)的子網(wǎng)接入?yún)f(xié)議( Sub-network Access Protocol,SNAP
)的首部給出吁伺。幸運的是饮睬,802
定義的有效長度值與以太網(wǎng)的有效類型值無一相同,這樣篮奄,就可以對兩種幀格式進行區(qū)分.
在以太網(wǎng)幀格式中续捂,類型字段之后就是數(shù)據(jù);而在 802
幀格式中宦搬,跟隨在后面的是 3字節(jié)的802.2 LLC和5字節(jié)的802.2 SNAP牙瓢。目的服務(wù)訪問點( Destination Service Access Point,D S A P
)和源服務(wù)訪問點(Source Service Access Point, SSAP
)的值都設(shè)為0xaa
。Ctrl
字段的值設(shè)為3间校。隨后的3個字節(jié)orgcode
都置為0矾克。再接下來的2個字節(jié)類型字段和以太網(wǎng)幀格式一樣(其他類型字段值可以參見 RFC 1340
[Reynolds and Postel 1992])。CRC
字段用于幀內(nèi)后續(xù)字節(jié)差錯的循環(huán)冗余碼檢驗(檢驗和)(它也被稱為FCS或幀檢驗序列
)憔足。802.3
標(biāo)準(zhǔn)定義的幀和以太網(wǎng)的幀都有最小長度要求胁附。802.3
規(guī)定數(shù)據(jù)部分必須至少為 38字節(jié),而對于以太網(wǎng)滓彰,則要求最少要有 46字節(jié)控妻。為了保證這一點,必須在不足的空間插入填充(pad
)字節(jié)揭绑。在開始觀察線路上的分組時將遇到這種最小長度的情況弓候。在本書中郎哭,我們在需要的時候?qū)⒔o出以太網(wǎng)的封裝格式,因為這是最為常見的封裝格式菇存。
2夸研、尾部封裝
現(xiàn)在已經(jīng)遭到反對,故不再講解依鸥;
3亥至、SLIP
:串行線路IP
SLIP
全稱為:Serial Line Ip
。它是一種在串行線路上對IP數(shù)據(jù)報進行封裝的簡單形式贱迟,
它的要求如下:
- IP數(shù)據(jù)報以一個稱作
END (0xc0)
的特殊字符結(jié)束姐扮;同時為防止線程噪聲的干擾,大多數(shù)實現(xiàn)在數(shù)據(jù)報的開始也加入一個END
字符衣吠。 - 如果IP報文中含有
END
字符茶敏,則使用連續(xù)傳輸兩個字節(jié)0xdb
(也被稱為SLIP
的ESC
字符)和0xdc
來取代它. - 如果報文中某個字符為
SLIP
的ESC
字符,那么就要連續(xù)傳輸兩個字節(jié)0xdb
和0xdd
取代它蒸播。
一個簡單的例子如下:
SLIP
是一種簡單的幀封裝方法,還有一些值得一提的缺陷:
- 每一端都必須知道對方的IP地址萍肆,沒有辦法把本端的IP地址通知給另一端袍榆。
- 數(shù)據(jù)幀中沒有類型字段,類似于以太網(wǎng)中的類型字段塘揣,如果一條串行線路用于
SLIP
包雀,它就不能同時使用其他協(xié)議; -
SLIP
沒有校驗和亲铡,類似于以太網(wǎng)的CRC
字段才写,如果傳輸報文受到線路噪聲影響而發(fā)生錯誤,只能通過上層協(xié)議來實現(xiàn)奖蔓。
4赞草、PPP
:點對點協(xié)議
點對點協(xié)議,修改了SLIP
協(xié)議中的所有缺陷吆鹤;
5厨疙、環(huán)回接口
大多是產(chǎn)品都支持環(huán)回接口,以允許運行在同一臺主機上的客戶程序與服務(wù)器程序通過TCP/IP進行通信疑务。A 類網(wǎng)絡(luò)好 127就是為環(huán)回接口預(yù)留的沾凄。大多顯示系統(tǒng)把IP 地址為 127.0.0.0
分配給環(huán)回接口,命名為localhost
知允。
一旦傳輸層檢測到目的端地址為環(huán)回地址時撒蟀,可以省掉部分傳輸層與所有網(wǎng)絡(luò)層的邏輯操作。
下面時環(huán)回接口處理IP數(shù)據(jù)報的簡單過程:
關(guān)鍵點:
- 傳給廣播地址或多播地址的數(shù)據(jù)報復(fù)制一份傳給環(huán)回接口温鸽,然后送到以太網(wǎng)上保屯。
- 任何傳給該主機IP地址的數(shù)據(jù)均送到環(huán)回接口。
- 傳給環(huán)回地址的任何數(shù)據(jù)均作為IP輸入。
6配椭、最大傳輸單元 MTU
以太網(wǎng)和802.3 對數(shù)據(jù)幀的長度都有一個限制虫溜,其最大值分別為1500 和1492字節(jié)。鏈路層的這個特性稱作MTU
,最大傳輸單元股缸。
如果IP層有一個數(shù)據(jù)報長度比鏈路層的MTU
要大衡楞,則要對該數(shù)據(jù)報進行分片操作,要求每一片都小于MTU
7敦姻、路徑MTU
當(dāng)在同一網(wǎng)絡(luò)上的兩臺主機進行互相通信時瘾境,該網(wǎng)絡(luò)的MTU
就會很重要了。此時镰惦,兩臺通信主機路徑中的最小MTU
迷守,被稱為此路徑的路徑MTU
。
詳細內(nèi)會在后續(xù)章節(jié)進行解讀旺入;
8兑凿、穿行線路吞吐量計算
線路速度為 V b/s,而一個字節(jié)為 a bit ,再加上其實和結(jié)束 bit茵瘾,則線路的速率為 v= V/(a+2) B/s. 而一個分組為 m 字節(jié)礼华,則需要時間為: m/v ms;