第二章: 鏈路層

2.1 引言

從圖1-4中可以看出缆八,在TCP/IP協(xié)議族中,鏈路層主要有三個(gè)目的:(1)為IP模塊發(fā)送和接收IP數(shù)據(jù)報(bào);(2)為ARP模塊發(fā)送ARP請(qǐng)求和接收ARP應(yīng)答店归;(3)為RARP發(fā)送RARP請(qǐng)求和接收RARP應(yīng)答刃麸。TCP/IP支持多種不同的鏈路層協(xié)議醒叁,這取決于網(wǎng)絡(luò)所使用的硬件,如以太網(wǎng)泊业、令牌環(huán)網(wǎng)把沼、FDDI(光纖分布式數(shù)據(jù)接口)及RS-232串行線路等。

在本章中吁伺,我們將詳細(xì)討論以太網(wǎng)鏈路層協(xié)議饮睬,兩個(gè)串行接口鏈路層協(xié)議(SLIP和PPP),以及大多數(shù)實(shí)現(xiàn)都包含的環(huán)回(loopback)驅(qū)動(dòng)程序篮奄。以太網(wǎng)和SLIP是本書(shū)中大多數(shù)例子使用的鏈路層捆愁。對(duì)MTU(最大傳輸單元)進(jìn)行了介紹,這個(gè)概念在本書(shū)的后面章節(jié)中將多次遇到宦搬。我們還討論了如何為串行線路選擇MTU牙瓢。

2.2 以太網(wǎng)和IEEE 802封裝

以太網(wǎng)這個(gè)術(shù)語(yǔ)一般是指數(shù)字設(shè)備公司(Digital Equipment Corp.)、英特爾公司(Intel Corp.)和Xerox公司在1982年聯(lián)合公布的一個(gè)標(biāo)準(zhǔn)间校。它是當(dāng)今TCP/IP采用的主要的局域網(wǎng)技術(shù)矾克。它采用一種稱作CSMA/CD的媒體接入方法,其意思是帶沖突檢測(cè)的載波偵聽(tīng)多路接入(Carrier Sense, Multiple Access with Collision Detection)憔足。它的速率為10 Mb/s胁附,地址為48 bit酒繁。

幾年后,IEEE(電子電氣工程師協(xié)會(huì))802委員會(huì)公布了一個(gè)稍有不同的標(biāo)準(zhǔn)集控妻,其中802.3針對(duì)整個(gè)CSMA/CD網(wǎng)絡(luò)州袒,802.4針對(duì)令牌總線網(wǎng)絡(luò),802.5針對(duì)令牌環(huán)網(wǎng)絡(luò)弓候。這三者的共同特性由802.2標(biāo)準(zhǔn)來(lái)定義郎哭,那就是802網(wǎng)絡(luò)共有的邏輯鏈路控制(LLC)。不幸的是菇存,802.2和802.3定義了一個(gè)與以太網(wǎng)不同的幀格式夸研。文獻(xiàn)[Stallings 1987]對(duì)所有的IEEE 802標(biāo)準(zhǔn)進(jìn)行了詳細(xì)的介紹。

在TCP/IP世界中依鸥,以太網(wǎng)IP數(shù)據(jù)報(bào)的封裝是在RFC 894[Hornig 1984]中定義的亥至,IEEE 802網(wǎng)絡(luò)的IP數(shù)據(jù)報(bào)封裝是在RFC 1042[Postel and Reynolds 1988]中定義的。主機(jī)需求RFC要求每臺(tái)Internet主機(jī)都與一個(gè)10 Mb/s的以太網(wǎng)電纜相連接:

1:必須能發(fā)送和接收采用RFC 894(以太網(wǎng))封裝格式的分組贱迟。
2:應(yīng)該能接收與RFC 894混合的RFC 1042(IEEE 802)封裝格式的分組姐扮。
3:也許能夠發(fā)送采用RFC 1042格式封裝的分組。如果主機(jī)能同時(shí)發(fā)送兩種類型的分組數(shù)據(jù)衣吠,那么發(fā)送的分組必須是可以設(shè)置的茶敏,而且默認(rèn)條件下必須是RFC 894分組。

最常使用的封裝格式是RFC 894定義的格式蒸播。圖2-1顯示了兩種不同形式的封裝格式睡榆。圖中每個(gè)方框下面的數(shù)字是它們的字節(jié)長(zhǎng)度。

兩種幀格式都采用48 bit(6字節(jié))的目的地址和源地址(802.3允許使用16 bit的地址袍榆,但一般是48 bit地址)胀屿。這就是我們?cè)诒緯?shū)中所稱的硬件地址。ARP和RARP協(xié)議(第4章和第5章)對(duì)32 bit的IP地址和48 bit的硬件地址進(jìn)行映射包雀。

圖2-1 IEEE 802.2/802.3(RFC 1042)和以太網(wǎng)的封裝格式(RFC 894)

接下來(lái)的2個(gè)字節(jié)在兩種幀格式中互不相同宿崭。在802標(biāo)準(zhǔn)定義的幀格式中,長(zhǎng)度字段是指它后續(xù)數(shù)據(jù)的字節(jié)長(zhǎng)度才写,但不包括CRC檢驗(yàn)碼葡兑。以太網(wǎng)的類型字段定義了后續(xù)數(shù)據(jù)的類型。在802標(biāo)準(zhǔn)定義的幀格式中赞草,類型字段則由后續(xù)的子網(wǎng)接入?yún)f(xié)議(Sub-network Access Protocol讹堤,SNAP)的首部給出。幸運(yùn)的是厨疙,802定義的有效長(zhǎng)度值與以太網(wǎng)的有效類型值無(wú)一相同洲守,這樣,就可以對(duì)兩種幀格式進(jìn)行區(qū)分。

在以太網(wǎng)幀格式中梗醇,類型字段之后就是數(shù)據(jù)知允;而在802幀格式中,跟隨在后面的是3字節(jié)的802.2LLC和5字節(jié)的802.2SNAP叙谨。目的服務(wù)訪問(wèn)點(diǎn)(Destination Service Access Point, DSAP)和源服務(wù)訪問(wèn)點(diǎn)(Source Service Access Point, SSAP)的值都設(shè)為0xaa温鸽。Ct rl字段的值設(shè)為3。隨后的3個(gè)字節(jié)org code都置為0手负。再接下來(lái)的2個(gè)字節(jié)類型字段和以太網(wǎng)幀格式一樣(其他類型字段值可以參見(jiàn)RFC 1340[Reynolds and Postel 1992])涤垫。

CRC字段用于幀內(nèi)后續(xù)字節(jié)差錯(cuò)的循環(huán)冗余碼檢驗(yàn)(檢驗(yàn)和)(它也被稱為FCS或幀檢驗(yàn)序列)。

802.3標(biāo)準(zhǔn)定義的幀和以太網(wǎng)的幀都有最小長(zhǎng)度要求竟终。802.3規(guī)定數(shù)據(jù)部分必須至少為38字節(jié)雹姊,而對(duì)于以太網(wǎng),則要求最少要有46字節(jié)衡楞。為了保證這一點(diǎn),必須在不足的空間插入填充(pad)字節(jié)敦姻。在開(kāi)始觀察線路上的分組時(shí)將遇到這種最小長(zhǎng)度的情況瘾境。

在本書(shū)中,我們?cè)谛枰臅r(shí)候?qū)⒔o出以太網(wǎng)的封裝格式镰惦,因?yàn)檫@是最為常見(jiàn)的封裝格式迷守。

2.3 尾部封裝

RFC 893[Leffler and Karels 1984]描述了另一種用于以太網(wǎng)的封裝格式,稱作尾部封裝(trailer encapsulation)旺入。這是一個(gè)早期BSD系統(tǒng)在DEC VA X機(jī)上運(yùn)行時(shí)的試驗(yàn)格式兑凿,它通過(guò)調(diào)整IP數(shù)據(jù)報(bào)中字段的次序來(lái)提高性能。在以太網(wǎng)數(shù)據(jù)幀中茵瘾,開(kāi)始的那部分是變長(zhǎng)的字段(IP首部和TCP首部)礼华。把它們移到尾部(在CRC之前),這樣當(dāng)把數(shù)據(jù)復(fù)制到內(nèi)核時(shí)拗秘,就可以把數(shù)據(jù)幀中的數(shù)據(jù)部分映射到一個(gè)硬件頁(yè)面圣絮,節(jié)省內(nèi)存到內(nèi)存的復(fù)制過(guò)程。TCP數(shù)據(jù)報(bào)的長(zhǎng)度是512字節(jié)的整數(shù)倍雕旨,正好可以用內(nèi)核中的頁(yè)表來(lái)處理扮匠。兩臺(tái)主機(jī)通過(guò)協(xié)商使用ARP擴(kuò)展協(xié)議對(duì)數(shù)據(jù)幀進(jìn)行尾部封裝。這些數(shù)據(jù)幀需定義不同的以太網(wǎng)幀類型值凡涩。

現(xiàn)在棒搜,尾部封裝已遭到反對(duì),因此我們不對(duì)它舉任何例子活箕。有興趣的讀者請(qǐng)參閱RFC 893以及文獻(xiàn)[Leffler et al.1989]的11.8節(jié)力麸。

2.4 SLIP:串行線路IP

SLIP的全稱是Serial Line IP。它是一種在串行線路上對(duì)IP數(shù)據(jù)報(bào)進(jìn)行封裝的簡(jiǎn)單形式,在RFC 1055[Romkey 1988]中有詳細(xì)描述末盔。SLIP適用于家庭中每臺(tái)計(jì)算機(jī)幾乎都有的RS-232串行端口和高速調(diào)制解調(diào)器接入Internet筑舅。

下面的規(guī)則描述了SLIP協(xié)議定義的幀格式:

1:IP數(shù)據(jù)報(bào)以一個(gè)稱作END(0xc0)的特殊字符結(jié)束。同時(shí)陨舱,為了防止數(shù)據(jù)報(bào)到來(lái)之前的線路噪聲被當(dāng)成數(shù)據(jù)報(bào)內(nèi)容翠拣,大多數(shù)實(shí)現(xiàn)在數(shù)據(jù)報(bào)的開(kāi)始處也傳一個(gè)END字符(如果有線路噪聲,那么END字符將結(jié)束這份錯(cuò)誤的報(bào)文游盲。這樣當(dāng)前的報(bào)文得以正確地傳輸误墓,而前一個(gè)錯(cuò)誤報(bào)文交給上層后,會(huì)發(fā)現(xiàn)其內(nèi)容毫無(wú)意義而被丟棄)益缎。
2:如果IP報(bào)文中某個(gè)字符為END谜慌,那么就要連續(xù)傳輸兩個(gè)字節(jié)0xdb和0xdc來(lái)取代它。0xdb這個(gè)特殊字符被稱作SLIP的ESC字符莺奔,但是它的值與ASCII碼的ESC字符(0x1b)不同欣范。
3:如果IP報(bào)文中某個(gè)字符為SLIP的ESC字符,那么就要連續(xù)傳輸兩個(gè)字節(jié)0xdb和0xdd來(lái)取代它令哟。

圖2-2中的例子就是含有一個(gè)END字符和一個(gè)ESC字符的IP報(bào)文恼琼。在這個(gè)例子中,在串行線路上傳輸?shù)目傋止?jié)數(shù)是原IP報(bào)文長(zhǎng)度再加4個(gè)字節(jié)屏富。


圖2-2 SLIP報(bào)文的封裝

SLIP是一種簡(jiǎn)單的幀封裝方法晴竞,還有一些值得一提的缺陷:

1:每一端必須知道對(duì)方的IP地址。沒(méi)有辦法把本端的IP地址通知給另一端狠半。

2:數(shù)據(jù)幀中沒(méi)有類型字段(類似于以太網(wǎng)中的類型字段)噩死。如果一條串行線路用于SLIP,那么它不能同時(shí)使用其他協(xié)議神年。

3:SLIP沒(méi)有在數(shù)據(jù)幀中加上檢驗(yàn)和(類似于以太網(wǎng)中的CRC字段)已维。如果SLIP傳輸?shù)膱?bào)文被線路噪聲影響而發(fā)生錯(cuò)誤,只能通過(guò)上層協(xié)議來(lái)發(fā)現(xiàn)(另一種方法是已日,新型的調(diào)制解調(diào)器可以檢測(cè)并糾正錯(cuò)誤報(bào)文)衣摩。這樣,上層協(xié)議提供某種形式的CRC就顯得很重要捂敌。在第3章和第17章中艾扮,我們將看到IP首部和TCP首部及其數(shù)據(jù)始終都有檢驗(yàn)和。在第11章中占婉,將看到UDP首部及其數(shù)據(jù)的檢驗(yàn)和卻是可選的泡嘴。

盡管存在這些缺點(diǎn),SLIP仍然是一種廣泛使用的協(xié)議逆济。

SLIP的歷史要追溯到1984年酌予,Rick Adams第一次在4.2BSD系統(tǒng)中實(shí)現(xiàn)磺箕。盡管它本身的描述是一種非標(biāo)準(zhǔn)的協(xié)議,但是隨著調(diào)制解調(diào)器的速率和可靠性的提高抛虫,SLIP越來(lái)越流行∷擅遥現(xiàn)在,它的許多產(chǎn)品可以公開(kāi)獲得建椰,而且很多廠家都支持這種協(xié)議雕欺。

2.5 壓縮的SLIP

由于串行線路的速率通常較低(19200 b/s或更低),而且通信經(jīng)常是交互式的(如Telnet和Rlogin棉姐,二者都使用TCP)屠列,因此在SLIP線路上有許多小的TCP分組進(jìn)行交換。為了傳送1個(gè)字節(jié)的數(shù)據(jù)需要20個(gè)字節(jié)的IP首部和20個(gè)字節(jié)的TCP首部伞矩,總數(shù)超過(guò)40個(gè)字節(jié)(19.2節(jié)描述了Rlogin會(huì)話過(guò)程中笛洛,當(dāng)敲入一個(gè)簡(jiǎn)單命令時(shí)這些小報(bào)文傳輸?shù)脑敿?xì)情況)。

既然承認(rèn)這些性能上的缺陷乃坤,于是人們提出一個(gè)被稱作CSLIP(即壓縮SLIP)的新協(xié)議苛让,它在RFC 1144[Jacobson 1990a]中被詳細(xì)描述。CSLIP一般能把上面的40個(gè)字節(jié)壓縮到3或5個(gè)字節(jié)湿诊。它能在CSLIP的每一端維持多達(dá)16個(gè)TCP連接蝌诡,并且知道其中每個(gè)連接的首部中的某些字段一般不會(huì)發(fā)生變化。對(duì)于那些發(fā)生變化的字段枫吧,大多數(shù)只是一些小的數(shù)字和的改變。這些被壓縮的首部大大地縮短了交互響應(yīng)時(shí)間宇色。

現(xiàn)在大多數(shù)的SLIP產(chǎn)品都支持CSLIP九杂。作者所在的子網(wǎng)(參見(jiàn)封面內(nèi)頁(yè))中有兩條SLIP鏈路,它們均是CSLIP鏈路宣蠕。

2.6 PPP:點(diǎn)對(duì)點(diǎn)協(xié)議

PPP例隆,點(diǎn)對(duì)點(diǎn)協(xié)議修改了SLIP協(xié)議中的所有缺陷。PPP包括以下三個(gè)部分:

1:在串行鏈路上封裝IP數(shù)據(jù)報(bào)的方法抢蚀。PPP既支持?jǐn)?shù)據(jù)為8位和無(wú)奇偶檢驗(yàn)的異步模式(如大多數(shù)計(jì)算機(jī)上都普遍存在的串行接口)镀层,還支持面向比特的同步鏈接。

2:建立皿曲、配置及測(cè)試數(shù)據(jù)鏈路的鏈路控制協(xié)議(LCP:Link Control Protocol)唱逢。它允許通信雙方進(jìn)行協(xié)商,以確定不同的選項(xiàng)屋休。

3:針對(duì)不同網(wǎng)絡(luò)層協(xié)議的網(wǎng)絡(luò)控制協(xié)議(NCP:Network Control Protocol)體系坞古。當(dāng)前RFC定義的網(wǎng)絡(luò)層有IP、OSI網(wǎng)絡(luò)層劫樟、DECnet以及AppleTalk痪枫。例如织堂,IP NCP允許雙方商定是否對(duì)報(bào)文首部進(jìn)行壓縮,類似于CSLIP(縮寫(xiě)詞NCP也可用在TCP的前面)奶陈。

RFC 1548[Simpson 1993]描述了報(bào)文封裝的方法和鏈路控制協(xié)議易阳。RFC 1332[McGregor 1992]描述了針對(duì)IP的網(wǎng)絡(luò)控制協(xié)議。PPP數(shù)據(jù)幀的格式看上去很像ISO的HDLC(高層數(shù)據(jù)鏈路控制)標(biāo)準(zhǔn)吃粒。圖2-3是PPP數(shù)據(jù)幀的格式潦俺。

每一幀都以標(biāo)志字符0x7e開(kāi)始和結(jié)束。緊接著是一個(gè)地址字節(jié)声搁,值始終是0xff黑竞,然后是一個(gè)值為0x03的控制字節(jié)。

圖2-3PPP數(shù)據(jù)幀的格式

接下來(lái)是協(xié)議字段疏旨,類似于以太網(wǎng)中類型字段的功能很魂。當(dāng)它的值為0x0021時(shí),表示信息字段是一個(gè)IP數(shù)據(jù)報(bào)檐涝;值為0xc021時(shí)遏匆,表示信息字段是鏈路控制數(shù)據(jù);值為0x8021時(shí)谁榜,表示信息字段是網(wǎng)絡(luò)控制數(shù)據(jù)幅聘。

CRC字段(或FCS,幀檢驗(yàn)序列)是一個(gè)循環(huán)冗余檢驗(yàn)碼窃植,以檢測(cè)數(shù)據(jù)幀中的錯(cuò)誤帝蒿。

由于標(biāo)志字符的值是0x7e,因此當(dāng)該字符出現(xiàn)在信息字段中時(shí)巷怜,PPP需要對(duì)它進(jìn)行轉(zhuǎn)義葛超。在同步鏈路中,該過(guò)程是通過(guò)一種稱作比特填充(bit stuffing)的硬件技術(shù)來(lái)完成的[Tanenbaum 1989]延塑。在異步鏈路中绣张,特殊字符0x7d用作轉(zhuǎn)義字符。當(dāng)它出現(xiàn)在PPP數(shù)據(jù)幀中時(shí)关带,那么緊接著的字符的第6個(gè)比特要取其補(bǔ)碼侥涵,具體實(shí)現(xiàn)過(guò)程如下:

1:當(dāng)遇到字符0x7e時(shí),需連續(xù)傳送兩個(gè)字符:0x7d和0x5e宋雏,以實(shí)現(xiàn)標(biāo)志字符的轉(zhuǎn)義芜飘。

2:當(dāng)遇到轉(zhuǎn)義字符0x7d時(shí),需連續(xù)傳送兩個(gè)字符:0x7d和0x5d磨总,以實(shí)現(xiàn)轉(zhuǎn)義字符的轉(zhuǎn)義燃箭。

3:默認(rèn)情況下,如果字符的值小于0x20(比如舍败,一個(gè)ASCII控制字符)招狸,一般都要進(jìn)行轉(zhuǎn)義敬拓。例如,遇到字符0x01時(shí)需連續(xù)傳送0x7d和0x21兩個(gè)字符(這時(shí)裙戏,第6個(gè)比特取補(bǔ)碼后變?yōu)?乘凸,而前面兩種情況均把它變?yōu)?)。

這樣做的原因是防止它們出現(xiàn)在雙方主機(jī)的串行接口驅(qū)動(dòng)程序或調(diào)制解調(diào)器中累榜,因?yàn)橛袝r(shí)它們會(huì)把這些控制字符解釋成特殊的含義营勤。另一種可能是用鏈路控制協(xié)議來(lái)指定是否需要對(duì)這32個(gè)字符中的某一些值進(jìn)行轉(zhuǎn)義。默認(rèn)情況下是對(duì)所有的32個(gè)字符都進(jìn)行轉(zhuǎn)義壹罚。

與SLIP類似葛作,由于PPP經(jīng)常用于低速的串行鏈路,因此減少每一幀的字節(jié)數(shù)可以降低應(yīng)用程序的交互時(shí)延猖凛。利用鏈路控制協(xié)議赂蠢,大多數(shù)的產(chǎn)品通過(guò)協(xié)商可以省略標(biāo)志符和地址字段,并且把協(xié)議字段由2個(gè)字節(jié)減少到1個(gè)字節(jié)辨泳。如果我們把PPP的幀格式與前面的SLIP的幀格式(圖2-2)進(jìn)行比較會(huì)發(fā)現(xiàn)虱岂,PPP只增加了3個(gè)額外的字節(jié):1個(gè)字節(jié)留給協(xié)議字段,另2個(gè)給CRC字段使用菠红。另外第岖,使用IP網(wǎng)絡(luò)控制協(xié)議,大多數(shù)的產(chǎn)品可以通過(guò)協(xié)商采用Van Jacobson報(bào)文首部壓縮方法(對(duì)應(yīng)于CSLIP壓縮)试溯,減小IP和TCP首部長(zhǎng)度蔑滓。

總的來(lái)說(shuō),PPP比SLIP具有下面這些優(yōu)點(diǎn):(1)PPP支持在單根串行線路上運(yùn)行多種協(xié)議遇绞,不只是IP協(xié)議键袱;(2)每一幀都有循環(huán)冗余檢驗(yàn);(3)通信雙方可以進(jìn)行IP地址的動(dòng)態(tài)協(xié)商(使用IP網(wǎng)絡(luò)控制協(xié)議)试读;(4)與CSLIP類似,對(duì)TCP和IP報(bào)文首部進(jìn)行壓縮荠耽;(5)鏈路控制協(xié)議可以對(duì)多個(gè)數(shù)據(jù)鏈路選項(xiàng)進(jìn)行設(shè)置钩骇。為這些優(yōu)點(diǎn)付出的代價(jià)是在每一幀的首部增加3個(gè)字節(jié),當(dāng)建立鏈路時(shí)要發(fā)送幾幀協(xié)商數(shù)據(jù)铝量,以及更為復(fù)雜的實(shí)現(xiàn)倘屹。

盡管PPP比SLIP有更多的優(yōu)點(diǎn),但是現(xiàn)在的SLIP用戶仍然比PPP用戶多慢叨。隨著產(chǎn)品越來(lái)越多纽匙,產(chǎn)家也開(kāi)始逐漸支持PPP,因此最終PPP應(yīng)該取代SLIP拍谐。

2.7 環(huán)回接口

大多數(shù)的產(chǎn)品都支持環(huán)回接口(Loopback Interface)烛缔,以允許運(yùn)行在同一臺(tái)主機(jī)上的客戶程序和服務(wù)器程序通過(guò)TCP/IP進(jìn)行通信馏段。A類網(wǎng)絡(luò)號(hào)127就是為環(huán)回接口預(yù)留的。根據(jù)慣例践瓷,大多數(shù)系統(tǒng)把IP地址127.0.0.1分配給這個(gè)接口院喜,并命名為localhost。一個(gè)傳給環(huán)回接口的IP數(shù)據(jù)報(bào)不能在任何網(wǎng)絡(luò)上出現(xiàn)晕翠。

我們想象喷舀,一旦傳輸層檢測(cè)到目的端地址是環(huán)回地址時(shí),應(yīng)該可以省略部分傳輸層和所有網(wǎng)絡(luò)層的邏輯操作淋肾。但是大多數(shù)的產(chǎn)品還是照樣完成傳輸層和網(wǎng)絡(luò)層的所有過(guò)程硫麻,只是當(dāng)IP數(shù)據(jù)報(bào)離開(kāi)網(wǎng)絡(luò)層時(shí)把它返回給自己。

圖2-4是環(huán)回接口處理IP數(shù)據(jù)報(bào)的簡(jiǎn)單過(guò)程樊卓。

圖2-4 環(huán)回接口處理IP數(shù)據(jù)報(bào)的過(guò)程

圖中需要指出的關(guān)鍵點(diǎn)是:

1:傳給環(huán)回地址(一般是127.0.0.1)的任何數(shù)據(jù)均作為IP輸入拿愧。

2:傳給廣播地址或多播地址的數(shù)據(jù)報(bào)復(fù)制一份傳給環(huán)回接口,然后送到以太網(wǎng)上简识。這是因?yàn)閺V播傳送和多播傳送的定義(第12章)包含主機(jī)本身赶掖。

3:任何傳給該主機(jī)IP地址的數(shù)據(jù)均送到環(huán)回接口。

看上去用傳輸層和IP層的方法來(lái)處理環(huán)回?cái)?shù)據(jù)似乎效率不高七扰,但它簡(jiǎn)化了設(shè)計(jì)奢赂,因?yàn)榄h(huán)回接口可以被看作是網(wǎng)絡(luò)層下面的另一個(gè)鏈路層。網(wǎng)絡(luò)層把一份數(shù)據(jù)報(bào)傳送給環(huán)回接口颈走,就像傳給其他鏈路層一樣膳灶,只不過(guò)環(huán)回接口把它返回到IP的輸入隊(duì)列中。

在圖2-4中立由,另一個(gè)隱含的意思是送給主機(jī)本身IP地址的IP數(shù)據(jù)報(bào)一般不出現(xiàn)在相應(yīng)的網(wǎng)絡(luò)上轧钓。例如,在一個(gè)以太網(wǎng)上锐膜,分組一般不被傳出去然后讀回來(lái)毕箍。某些BSD以太網(wǎng)的設(shè)備驅(qū)動(dòng)程序的注釋說(shuō)明,許多以太網(wǎng)接口卡不能讀回它們自己發(fā)送出去的數(shù)據(jù)道盏。由于一臺(tái)主機(jī)必須處理發(fā)送給自己的IP數(shù)據(jù)報(bào)而柑,因此圖2-4所示的過(guò)程是最為簡(jiǎn)單的處理辦法。

4.4BSD系統(tǒng)定義了變量useloopback荷逞,并初始化為1媒咳。但是,如果這個(gè)變量置為0种远,以太網(wǎng)驅(qū)動(dòng)程序就會(huì)把本地分組送到網(wǎng)絡(luò)涩澡,而不是送到環(huán)回接口上。它也許不能工作坠敷,這取決于所使用的以太網(wǎng)接口卡和設(shè)備驅(qū)動(dòng)程序妙同。

2.8 最大傳輸單元MTU

正如在圖2-1看到的那樣射富,以太網(wǎng)和802.3對(duì)數(shù)據(jù)幀的長(zhǎng)度都有一個(gè)限制,其最大值分別是1500和1492字節(jié)渐溶。鏈路層的這個(gè)特性稱作MTU ,最大傳輸單元辉浦。不同類型的網(wǎng)絡(luò)大 多數(shù)都有一個(gè)上限。

如果IP層有一個(gè)數(shù)據(jù)報(bào)要傳茎辐,而且數(shù)據(jù)的長(zhǎng)度比鏈路層的MTU還大,那么IP層就需要進(jìn)行分片(fragmentation)宪郊,把數(shù)據(jù)報(bào)分成若干片,這樣每一片都小于MTU拖陆。我們將在11.5節(jié)討論IP分片的過(guò)程弛槐。

圖2-5列出了一些典型的MTU值,它們摘自RFC 1191[Mogul and Deering 1990]。點(diǎn)到點(diǎn)的鏈路層(如SLIP和PPP)的MTU并非指的是網(wǎng)絡(luò)媒體的物理特性依啰。相反乎串,它是一個(gè)邏輯限制,目的是為交互使用提供足夠快的響應(yīng)時(shí)間速警。在2.10節(jié)中叹誉,我們將看到這個(gè)限制值是如何計(jì)算出來(lái)的。

圖2-5 幾種常見(jiàn)的最大傳輸單元(MTU)

在3.9節(jié)中闷旧,我們將用netstat命令打印出網(wǎng)絡(luò)接口的MTU长豁。

2.9 路徑MTU

當(dāng)在同一個(gè)網(wǎng)絡(luò)上的兩臺(tái)主機(jī)互相進(jìn)行通信時(shí),該網(wǎng)絡(luò)的MTU是非常重要的忙灼。但是如果兩臺(tái)主機(jī)之間的通信要通過(guò)多個(gè)網(wǎng)絡(luò)匠襟,那么每個(gè)網(wǎng)絡(luò)的鏈路層就可能有不同的MTU。重要的不是兩臺(tái)主機(jī)所在網(wǎng)絡(luò)的MTU的值该园,重要的是兩臺(tái)通信主機(jī)路徑中的最小MTU酸舍。它被稱作路徑MTU。

兩臺(tái)主機(jī)之間的路徑MTU不一定是個(gè)常數(shù)里初。它取決于當(dāng)時(shí)所選擇的路由啃勉。而選路不一定是對(duì)稱的(從A到B的路由可能與從B到A的路由不同),因此路徑MTU在兩個(gè)方向上不一定是一致的双妨。

RFC 1191[Mogul and Deering 1990]描述了路徑MTU的發(fā)現(xiàn)機(jī)制淮阐,即在任何時(shí)候確定路徑MTU的方法。我們?cè)诮榻B了ICMP和IP分片方法以后再來(lái)看它是如何操作的斥难。在11.6節(jié)中枝嘶,我們將看到ICMP的不可到達(dá)錯(cuò)誤就采用這種發(fā)現(xiàn)方法帘饶。在11.7節(jié)中哑诊,還會(huì)看到,traceroute程序也是用這個(gè)方法來(lái)確定到達(dá)目的節(jié)點(diǎn)的路徑MTU及刻。在11.8節(jié)和24.2節(jié)镀裤,將介紹當(dāng)產(chǎn)品支持路徑MTU的發(fā)現(xiàn)方法時(shí)竞阐,UDP和TCP是如何進(jìn)行操作的。

2.10 串行線路吞吐量計(jì)算

如果線路速率是9600 b/s暑劝,而一個(gè)字節(jié)有8bit骆莹,加上一個(gè)起始比特和一個(gè)停止比特,那么線路的速率就是960 B/s(字節(jié)/秒)担猛。以這個(gè)速率傳輸一個(gè)1024字節(jié)的分組需要1066 ms幕垦。如果用SLIP鏈接運(yùn)行一個(gè)交互式應(yīng)用程序,同時(shí)還運(yùn)行另一個(gè)應(yīng)用程序如FTP發(fā)送或接收1024字節(jié)的數(shù)據(jù)傅联,那么一般來(lái)說(shuō)就必須等待一半的時(shí)間(533 ms)才能把交互式應(yīng)用程序的分組數(shù)據(jù)發(fā)送出去先改。

假定交互分組數(shù)據(jù)可以在其他“大塊”分組數(shù)據(jù)發(fā)送之前被發(fā)送出去。大多數(shù)的SLIP實(shí)現(xiàn)確實(shí)提供這類服務(wù)排隊(duì)方法蒸走,把交互數(shù)據(jù)放在大塊的數(shù)據(jù)前面仇奶。交互通信一般有Telnet、Rlogin以及FTP的控制部分(用戶的命令比驻,而不是數(shù)據(jù))该溯。

這種服務(wù)排隊(duì)方法是不完善的。它不能影響已經(jīng)進(jìn)入下游(如串行驅(qū)動(dòng)程序)隊(duì)列的非交互數(shù)據(jù)别惦。同時(shí)狈茉,新型的調(diào)制解調(diào)器具有很大的緩沖區(qū),因此非交互數(shù)據(jù)可能已經(jīng)進(jìn)入該緩沖區(qū)了步咪。

對(duì)于交互應(yīng)用來(lái)說(shuō)论皆,等待533 ms是不能接受的。關(guān)于人的有關(guān)研究表明猾漫,交互響應(yīng)時(shí)間超過(guò)100~200 ms就被認(rèn)為是不好的[Jacobson 1990a]点晴。這是發(fā)送一份交互報(bào)文出去后,直到接收到響應(yīng)信息(通常是出現(xiàn)一個(gè)回顯字符)為止的往返時(shí)間悯周。

把SLIP的MTU縮短到256就意味著鏈路傳輸一幀最長(zhǎng)需要266 ms粒督,它的一半是133 ms(這是一般需要等待的時(shí)間)。這樣情況會(huì)好一些禽翼,但仍然不完美屠橄。我們選擇它的原因(與64或128相比)是因?yàn)榇髩K數(shù)據(jù)提供良好的線路利用率(如大文件傳輸)。假設(shè)CSLIP的報(bào)文首部是5個(gè)字節(jié)闰挡,數(shù)據(jù)幀總長(zhǎng)為261個(gè)字節(jié)锐墙,256個(gè)字節(jié)的數(shù)據(jù)使線路的利用率為98.1%,幀頭占了1.9%长酗,這樣的利用率是很不錯(cuò)的溪北。如果把MTU降到256以下,那么將降低傳輸大塊數(shù)據(jù)的最大吞吐量。

在圖2-5列出的MTU值中之拨,點(diǎn)對(duì)點(diǎn)鏈路的MTU是296個(gè)字節(jié)茉继。假設(shè)數(shù)據(jù)為256字節(jié),TCP和IP首部占40個(gè)字節(jié)蚀乔。由于MTU是IP向鏈路層查詢的結(jié)果烁竭,因此該值必須包括通常的TCP和IP首部。這樣就會(huì)導(dǎo)致IP如何進(jìn)行分片的決策吉挣。IP對(duì)于CSLIP的壓縮情況一無(wú)所知派撕。

我們對(duì)平均等待時(shí)間的計(jì)算(傳輸最大數(shù)據(jù)幀所需時(shí)間的一半)只適用于SLIP鏈路(或PPP鏈路)在交互通信和大塊數(shù)據(jù)傳輸這兩種情況下。當(dāng)只有交互通信時(shí)睬魂,如果線路速率是9600 b/s腥刹,那么任何方向上的1字節(jié)數(shù)據(jù)(假設(shè)有5個(gè)字節(jié)的壓縮幀頭)往返一次都大約需要12.5ms。它比前面提到的100~200 ms要小得多汉买。需要注意的是衔峰,由于幀頭從40個(gè)字節(jié)壓縮到5個(gè)字節(jié),使得1字節(jié)數(shù)據(jù)往返時(shí)間從85 ms減到12.5ms蛙粘。

不幸的是垫卤,當(dāng)使用新型的糾錯(cuò)和壓縮調(diào)制解調(diào)器時(shí),這樣的計(jì)算就更難了出牧。這些調(diào)制解調(diào)器所采用的壓縮方法使得在線路上傳輸?shù)淖止?jié)數(shù)大大減少穴肘,但糾錯(cuò)機(jī)制又會(huì)增加傳輸?shù)臅r(shí)間。不過(guò)舔痕,這些計(jì)算是我們進(jìn)行合理決策的入口點(diǎn)评抚。

在后面的章節(jié)中,我們將用這些串行線路吞吐量的計(jì)算來(lái)驗(yàn)證數(shù)據(jù)從串行線路上通過(guò)的時(shí)間伯复。

2.11 小結(jié)

本章討論了Internet協(xié)議族中的最底層協(xié)議慨代,鏈路層協(xié)議。我們比較了以太網(wǎng)和IEEE802.2/802.3的封裝格式啸如,以及SLIP和PPP的封裝格式侍匙。由于SLIP和PPP經(jīng)常用于低速的鏈路,二者都提供了壓縮不常變化的公共字段的方法叮雳。這使交互性能得到提高想暗。

大多數(shù)的實(shí)現(xiàn)都提供環(huán)回接口。訪問(wèn)這個(gè)接口可以通過(guò)特殊的環(huán)回地址帘不,一般為127.0.0.1说莫。也可以通過(guò)發(fā)送IP數(shù)據(jù)報(bào)給主機(jī)所擁有的任一IP地址。當(dāng)環(huán)回?cái)?shù)據(jù)回到上層的協(xié)議棧中時(shí)寞焙,它已經(jīng)過(guò)傳輸層和IP層完整的處理過(guò)程储狭。

我們描述了很多鏈路都具有的一個(gè)重要特性告唆,MTU,相關(guān)的一個(gè)概念是路徑MTU晶密。根據(jù)典型的串行線路MTU,對(duì)SLIP和CSLIP鏈路的傳輸時(shí)延進(jìn)行了計(jì)算模她。

本章的內(nèi)容只覆蓋了當(dāng)今TCP/IP所采用的部分?jǐn)?shù)據(jù)鏈路公共技術(shù)稻艰。TCP/IP成功的原因之一是它幾乎能在任何數(shù)據(jù)鏈路技術(shù)上運(yùn)行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侈净,一起剝皮案震驚了整個(gè)濱河市尊勿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畜侦,老刑警劉巖元扔,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異旋膳,居然都是意外死亡澎语,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門验懊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)擅羞,“玉大人,你說(shuō)我怎么就攤上這事义图〖跚危” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵碱工,是天一觀的道長(zhǎng)娃承。 經(jīng)常有香客問(wèn)我,道長(zhǎng)怕篷,這世上最難降的妖魔是什么历筝? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任苔货,我火速辦了婚禮舱禽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屋匕。我一直安慰自己蹂析,他們只是感情好舔示,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著电抚,像睡著了一般惕稻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蝙叛,一...
    開(kāi)封第一講書(shū)人閱讀 48,954評(píng)論 1 283
  • 那天俺祠,我揣著相機(jī)與錄音,去河邊找鬼。 笑死蜘渣,一個(gè)胖子當(dāng)著我的面吹牛淌铐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔫缸,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼腿准,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拾碌?” 一聲冷哼從身側(cè)響起吐葱,我...
    開(kāi)封第一講書(shū)人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎校翔,沒(méi)想到半個(gè)月后弟跑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡防症,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年孟辑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔫敲。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扑浸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出燕偶,到底是詐尸還是另有隱情喝噪,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布指么,位于F島的核電站酝惧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏伯诬。R本人自食惡果不足惜晚唇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盗似。 院中可真熱鬧哩陕,春花似錦、人聲如沸赫舒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)接癌。三九已至心赶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缺猛,已是汗流浹背缨叫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工椭符, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耻姥。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓销钝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親琐簇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒸健,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容