TCP/IP指南(RFC1180)

LT-0807,2018.03.11翻譯,@成都

聲明

本文是一篇關(guān)于TCP/IP協(xié)議組件的RFC,聚焦于一個IP數(shù)據(jù)包經(jīng)過一個路由器從源主機(jī)發(fā)送到目標(biāo)主機(jī)的具體步驟。本文沒有定義任何新的互聯(lián)網(wǎng)標(biāo)準(zhǔn)。你可以不受限制的發(fā)行本RFC(Request for Comments 1180)。

目錄

  • 01 簡介
  • 02 TCP/IP概要
  • 03 以太網(wǎng)
  • 04 ARP
  • 05 IP
  • 06 UDP
  • 07 TCP
  • 08 上層應(yīng)用
  • 09 補充信息
  • 10 參考文獻(xiàn)
  • 11 與其他RFC的關(guān)系
  • 12 安全建議
  • 13 聯(lián)系作者

01 簡介

本文闡述了一個TCP/IP最顯著的特點,它也是TCP/IP技術(shù)的本質(zhì)。本文忽略了TCP/IP的發(fā)展歷程、商業(yè)案例、未來路線圖以及與ISO/OSI參考模型之間的比較,事實上許多的技術(shù)細(xì)節(jié)也被忽略掉了,僅最低限度地保留了在TCP/IP環(huán)境中工作的專業(yè)人士必須要了解的知識,這些專業(yè)人士包括系統(tǒng)管理員、程序員以及網(wǎng)絡(luò)管理員。

本文使用的樣例來自Unix環(huán)境,但是TCP/IP是通用的。

注意:本文的目的是解釋,而非定義。如果你對文中某個協(xié)議的說明有任何的質(zhì)疑,請查閱相關(guān)的RFC并以事實標(biāo)準(zhǔn)為準(zhǔn)。

下一節(jié)是TCP/IP的概覽,接下來再單獨對每一個組件進(jìn)行詳細(xì)講解。

02 TCP/IP概要

術(shù)語“TCP/IP”常常意味著每一樣與TCP、IP技術(shù)相關(guān)的,甚至不屬于TCP、IP范疇的東西。它指的可能是其它一些協(xié)議,也有可能是上層應(yīng)用甚至網(wǎng)絡(luò)媒介。例如常見的UDP、ARP以及ICMP協(xié)議,常見的應(yīng)用:Telnet、FTP以及RCP。有一個更準(zhǔn)確的叫法:“互聯(lián)網(wǎng)技術(shù)(internet technology)”。一個網(wǎng)絡(luò)如果使用了互聯(lián)網(wǎng)技術(shù)則可以稱之為互聯(lián)網(wǎng)。

02.01 基礎(chǔ)結(jié)構(gòu)

想要理解這門技術(shù),你首先要理解下圖的邏輯結(jié)構(gòu)。


▲圖1

這就是互聯(lián)網(wǎng)中一臺主機(jī)的內(nèi)部網(wǎng)絡(luò)協(xié)議的層狀邏輯結(jié)構(gòu)圖。每一臺使用互聯(lián)網(wǎng)技術(shù)相連的主機(jī)內(nèi)部都有這樣的邏輯結(jié)構(gòu)。也正是這樣的邏輯結(jié)構(gòu)決定了主機(jī)在互聯(lián)網(wǎng)上的表現(xiàn)行為。圖中的矩形框代表數(shù)據(jù)經(jīng)過主機(jī)時的處理過程,連接矩形框的線條代表數(shù)據(jù)通過的路徑。最底端的水平線條代表連接網(wǎng)絡(luò)的物理線纜,符號“o”代表調(diào)制解調(diào)器,“*”代表IP地址,“@”代表Mac地址。理解這個邏輯結(jié)構(gòu)是理解互聯(lián)網(wǎng)技術(shù)的關(guān)鍵,它也自始至終地貫穿于本文。

02.02 術(shù)語

在網(wǎng)絡(luò)中傳輸?shù)拿總€單元的數(shù)據(jù)叫什么名字取決于它存在于哪一層協(xié)議棧。簡單的來講,數(shù)據(jù)如果在網(wǎng)卡以下可以稱之為以太幀,如果在網(wǎng)卡與IP模塊之間可以稱之為IP包,如果在IP模塊與UDP模塊之間可以稱之為UDP數(shù)據(jù)報,如果在IP模塊與TCP模塊之間可以稱之為TCP段(通常叫TCP消息),數(shù)據(jù)如果在上層應(yīng)用中則稱之為應(yīng)用消息。

這些定義并不完美,事實上在不同的版本中定義是千變?nèi)f化的。更具體的定義可以參考RFC1122的1.3.3節(jié)。

本文中,驅(qū)動是指可以直接與網(wǎng)絡(luò)硬件進(jìn)行通信的軟件,模塊是指可以與驅(qū)動或應(yīng)用或其他模塊進(jìn)行通信的軟件。

術(shù)語“驅(qū)動、模塊、以太幀、IP包、UDP數(shù)據(jù)報、TCP消息、應(yīng)用消息”會根據(jù)需要適時使用于本文。

02.03 數(shù)據(jù)流

讓我們化身為數(shù)據(jù)向著圖1所示的各層協(xié)議棧穿流而下吧!一個應(yīng)用如果使用TCP協(xié)議(傳輸控制協(xié)議“Transmission Control Protocol”),數(shù)據(jù)會經(jīng)過應(yīng)用與TCP模塊;如果使用UDP協(xié)議(用戶數(shù)據(jù)報協(xié)議“User Datagram Protocol”),則經(jīng)過應(yīng)用與UDP模塊。FTP(文件傳輸協(xié)議“File Transfer Protocol”)就是一個典型的使用TCP的應(yīng)用,從上往下它依次用到FTP/TCP/IP/ENET。SNMP(簡單網(wǎng)絡(luò)管理協(xié)議“Simple Network Management Protocol”)則是一個常見的使用UDP的應(yīng)用,從上往下它依次用到SNMP/UDP/IP/ENET。

TCP模塊、UDP模塊以及以太網(wǎng)卡都是多對一的多路復(fù)用器,多路復(fù)用器可以把多路輸入整合為一路輸出;此外它們還是一對多的逆向多路復(fù)用器,可以根據(jù)協(xié)議頭的類型字段把一路輸入發(fā)散為多路輸出。

▲圖2

一個以太幀經(jīng)網(wǎng)卡驅(qū)動向上傳遞的時候,數(shù)據(jù)可以同時發(fā)往ARP和IP,此時以太幀的類型字段的值決定了該數(shù)據(jù)應(yīng)該發(fā)往ARP還是IP模塊。

一個IP包經(jīng)IP模塊向上傳遞的時候,可以同時發(fā)往TCP和UDP,IP包頭部的協(xié)議字段的值決定了該數(shù)據(jù)應(yīng)該發(fā)往TCP還是UDP模塊。

UDP數(shù)據(jù)報經(jīng)UDP模塊向上傳遞的時候,數(shù)據(jù)發(fā)往上層應(yīng)用則基于UDP數(shù)據(jù)報頭部的端口字段的值;TCP消息經(jīng)TCP模塊向上傳遞的時候,數(shù)據(jù)發(fā)往上層應(yīng)用則基于TCP消息頭部的端口字段的值。

多路復(fù)用向下傳輸數(shù)據(jù)的實現(xiàn)非常簡單,因為對于任何一個開始的節(jié)點,往下走都只有一條路。數(shù)據(jù)每流經(jīng)一層都會被添加上該層的協(xié)議頭,這樣目標(biāo)主機(jī)也可以方便的反向解碼數(shù)據(jù)。

不管是TCP還是UDP,數(shù)據(jù)都會匯聚到IP模塊,再往下,發(fā)送給底層的網(wǎng)卡驅(qū)動。

盡管互聯(lián)網(wǎng)技術(shù)支持諸多的網(wǎng)絡(luò)媒介,以太網(wǎng)卻是IP使用的最廣泛、最普及的物理網(wǎng)絡(luò),這也是本文采用以太網(wǎng)作為樣例的原因。圖1的主機(jī)只連接到一個網(wǎng)絡(luò),在一個以太網(wǎng)中,每個網(wǎng)絡(luò)接口都有一個唯一的6字節(jié)的Mac地址,它位于網(wǎng)卡驅(qū)動底部的接口上。

該主機(jī)還有一個4字節(jié)的IP地址,位于IP模塊底部的接口上。在同一個網(wǎng)絡(luò)中,每一個IP地址都是唯一的。

一臺運行中的主機(jī)總是清楚的知道自己的IP地址與Mac地址。

02.04 兩張網(wǎng)卡

一臺主機(jī)可以同時連接到兩個獨立的網(wǎng)絡(luò),如圖3:


▲圖3

注意,該主機(jī)有兩個Mac地址和兩個IP地址。

從上圖的邏輯結(jié)構(gòu)中,我們可以看到:這臺主機(jī)有兩張網(wǎng)卡,而IP模塊則變成了多對多的多路復(fù)用器/逆向多路復(fù)用器。

▲圖4

IP模塊自動調(diào)節(jié)輸入數(shù)據(jù)與輸出數(shù)據(jù),這樣就實現(xiàn)了兩個方向上的多路復(fù)用。一個IP模塊連接多個網(wǎng)絡(luò)要比我們第一個樣例復(fù)雜,因為它能夠在不同的網(wǎng)絡(luò)間轉(zhuǎn)發(fā)數(shù)據(jù)。數(shù)據(jù)可以從任一網(wǎng)絡(luò)入站,再轉(zhuǎn)發(fā)到另一個網(wǎng)絡(luò)。

▲圖5

IP包從一個網(wǎng)絡(luò)發(fā)往另一個網(wǎng)絡(luò)的過程叫做轉(zhuǎn)發(fā)IP包。一臺主機(jī)如果專注于轉(zhuǎn)發(fā)IP包的工作,可以稱之為IP路由器。

我們可以從圖5中看到:通過IP路由器轉(zhuǎn)發(fā)的IP包是到達(dá)不了TCP或者UDP模塊的,有些IP路由器甚至壓根就沒有TCP和UDP模塊。

02.05 IP創(chuàng)造了互聯(lián)網(wǎng)

IP模塊是互聯(lián)網(wǎng)技術(shù)取得成功的關(guān)鍵。當(dāng)數(shù)據(jù)往下層流轉(zhuǎn)時,每一層的模塊/驅(qū)動把自己的相關(guān)信息添加到數(shù)據(jù)形成消息頭。當(dāng)數(shù)據(jù)向上流轉(zhuǎn)發(fā)往上層應(yīng)用時,每一層的模塊/驅(qū)動則會剝?nèi)ハ鄳?yīng)的消息頭。IP消息頭包含有IP地址,它從眾多的物理網(wǎng)絡(luò)中創(chuàng)建了一個單獨的邏輯網(wǎng)絡(luò)。內(nèi)部相互連接的物理網(wǎng)絡(luò)就是名稱“互聯(lián)網(wǎng)(internet)”的由來。限制在一個IP包范圍以內(nèi)的一個連接著的物理網(wǎng)絡(luò)的集合,就叫做“互聯(lián)網(wǎng)(internet)”;

02.06 物理網(wǎng)絡(luò)的獨立性

IP向上層應(yīng)用隱藏了底部的網(wǎng)絡(luò)硬件設(shè)施。如果你發(fā)明了一個新的物理網(wǎng)絡(luò),只需要新開發(fā)一個可以連接到IP的底層驅(qū)動,就可以讓它運轉(zhuǎn)起來。上層應(yīng)用原封不動也不會因為硬件的改變而變得脆弱。

02.07 聯(lián)網(wǎng)

網(wǎng)絡(luò)中的兩臺主機(jī)可以相互通信,我們就說它“聯(lián)網(wǎng)”了。互聯(lián)網(wǎng)技術(shù)在主機(jī)上得到了很好的實現(xiàn),我們就說它“可聯(lián)網(wǎng)”。通常我們的聯(lián)網(wǎng)需求都得到了很好的滿足,因為市場上幾乎所有的主機(jī)都具備聯(lián)網(wǎng)能力。如果一臺主機(jī)無法聯(lián)網(wǎng),又無法添加聯(lián)網(wǎng)組件,它很有可能就賣不掉了。

02.08 概覽小結(jié)

有了以上的知識,我們還需要回答以下問題:

  • 當(dāng)我們發(fā)送一個出站的IP包時,目標(biāo)主機(jī)的Mac地址是如何確定的呢?
  • 在發(fā)送出站IP包時,底層有多個網(wǎng)絡(luò)接口,IP是如何確定應(yīng)該使用哪一個的呢?
  • 為什么既有TCP又有UDP,只要一個不行嗎?
  • 上層應(yīng)用具備哪些特性才算是可靠應(yīng)用?

所有這些疑問,在我們學(xué)習(xí)了以太網(wǎng)之后都會一一解答。

03 以太網(wǎng)

這一節(jié)是以太網(wǎng)技術(shù)的簡介

一個以太幀包含有目標(biāo)主機(jī)Mac地址、源主機(jī)Mac地址、類型字段以及數(shù)據(jù)。

Mac地址有6字節(jié)長。每一臺網(wǎng)絡(luò)設(shè)備都有自己的Mac地址,并且監(jiān)聽目標(biāo)地址是自己Mac地址的以太幀。所有的網(wǎng)絡(luò)設(shè)備還監(jiān)聽一個目標(biāo)地址是“FF-FF-FF-FF-FF-FF”(16進(jìn)制)的以太幀,這個地址叫做廣播地址。

以太網(wǎng)使用的是載波監(jiān)聽多點接入/碰撞檢測(CSMA/CD“Carrier Sense and Multiple Access with Collision Detection”)技術(shù)。載波監(jiān)聽多點接入/碰撞檢測意味著所有的設(shè)備都在同一個媒介上通信,因此同一時間只有一個設(shè)備能夠進(jìn)行數(shù)據(jù)發(fā)送,而其余的設(shè)備此時只能接收數(shù)據(jù)。如果同一時間兩臺設(shè)備都試圖發(fā)送數(shù)據(jù),那么傳輸沖突就會被檢測到,此時兩臺設(shè)備在嘗試再次發(fā)送數(shù)據(jù)之前都會等待隨機(jī)(短暫的)一段時間。

03.01 把CSMA/CD類比到人

以太網(wǎng)技術(shù)的一個很好的類比就是一群人在一個狹小、漆黑的屋子里談話。在這個類比中,網(wǎng)絡(luò)媒介由網(wǎng)絡(luò)線纜中傳輸?shù)碾娦盘栕兂蔀榱丝諝庵袀鞑サ穆曇簟?/p>

屋子里每一個人都能聽到其他人說的話(載波監(jiān)聽“Carrier Sense”);每一個人都有相同的說話能力(多點接入“Multiple Access”),但是他們都不會發(fā)表冗長的、啰嗦的演講,因為他們都特別有禮貌;要是誰沒有禮貌,他就會被請出這間屋子(關(guān)閉設(shè)備)。

其他人在說話的時候,沒有人會插嘴。但是同一時間如果有兩個人都開口說話,這兩人都是能夠覺察到的,因為他們聽到了不是自己說的話(碰撞檢測“Collision Detection”)。當(dāng)這兩人意識到這個情況后,他們就會停下來等待一段時間,然后其中一人會再說,另一個人聽到談話后他會等待其把話說完再開始自己的講話。

屋子中,每一個人都有一個唯一的名字(Mac地址唯一)以避免給大家?guī)砝_。每一次談話,發(fā)言人都會給自己的談話內(nèi)容加上前言:我是誰,這話是對誰講的(源主機(jī)Mac地址、目標(biāo)主機(jī)Mac地址),即:“你好Jane,我是Jack,吧啦吧啦……”。如果發(fā)言人想對所有人談話,他就會說“大家好(廣播地址)!我是Jack,吧啦吧啦……”。

04 ARP

當(dāng)發(fā)送一個出站IP包的時候,它是如何確定目標(biāo)主機(jī)的Mac地址的呢?

地址解析協(xié)議“ARP (Address Resolution Protocol)”負(fù)責(zé)把IP地址翻譯成為Mac地址。只有IP包出站的時候需要進(jìn)行IP地址-->Mac地址的翻譯,此時也是構(gòu)建IP頭和以太幀頭的時候。

04.01 ARP翻譯表

翻譯其實就是一個表的查詢操作。該表的表名叫ARP表,它存在于每臺主機(jī)的內(nèi)存中。表中有一個列存有IP地址,還有一個列存有Mac地址,把一個IP地址翻譯成為Mac地址,實質(zhì)就是在表中檢索目標(biāo)IP地址,取其對應(yīng)的Mac地址。下面是一張簡化的ARP表:


▲表1

第一列按照人們的習(xí)慣,用十進(jìn)制數(shù)字表示4字節(jié)的IP地址,中間用句點分隔;第二列Mac地址,6字節(jié),十六進(jìn)制表示,中間用減號或冒號分隔。

ARP表必須要有。因為IP地址和Mac地址是兩個獨立的存在,你無法通過一個算法或者公式把IP地址翻譯成為Mac地址。IP地址是網(wǎng)絡(luò)管理員根據(jù)主機(jī)在網(wǎng)絡(luò)中的位置指派的,當(dāng)主機(jī)在網(wǎng)絡(luò)中的位置發(fā)生變化,IP地址隨之改變。Mac地址是網(wǎng)絡(luò)硬件制造商根據(jù)以太網(wǎng)地址空間使用許可來確定的,Mac地址隨硬件接口的改變而改變。

04.02 典型的ARP翻譯場景

網(wǎng)絡(luò)上一個普通的主機(jī)間通信,比如Telnet遠(yuǎn)程主機(jī):Telnet消息傳遞到TCP,TCP傳遞相應(yīng)的TCP消息到IP。在這個過程中,Telnet、TCP、IP都是知道目標(biāo)主機(jī)IP地址的。這個節(jié)點上,IP包已經(jīng)構(gòu)造完畢并且準(zhǔn)備發(fā)往下一層(網(wǎng)卡驅(qū)動),但是首先,必須把目標(biāo)主機(jī)的Mac地址確定下來。

ARP表就是被用作查找與目標(biāo)主機(jī)IP地址相匹配的Mac地址的。

04.03 ARP請求/響應(yīng)對

那么最開始的時候ARP表中的數(shù)據(jù)又是從哪里來的呢?答案就是ARP模塊根據(jù)需要自動插入的。

當(dāng)ARP表無法翻譯一個IP地址時,會發(fā)生兩件事情:

  1. 一個ARP的請求包會通過廣播地址發(fā)給網(wǎng)絡(luò)上的所有主機(jī);
  2. 出站的IP包進(jìn)入暫存隊列。

其他主機(jī)收到廣播幀以后,檢查其類型字段并發(fā)往ARP模塊。ARP請求包含有提問“你的IP地址與我目標(biāo)主機(jī)的IP地址相同嗎?如果相同請告訴我你的Mac地址”。ARP請求包看起來就像這樣:

▲表2

各主機(jī)的ARP模塊檢查自己的IP地址是否與ARP請求包中的目標(biāo)地址相同,如果相同,它便會做出響應(yīng)“是的,我就是你要找的。請記錄我的Mac地址”。ARP響應(yīng)包與ARP請求包有相似的結(jié)構(gòu),只是發(fā)送主機(jī)和目標(biāo)主機(jī)的位置對調(diào)了:

▲表3

發(fā)送廣播的主機(jī)收到響應(yīng)以后,檢查其類型字段并發(fā)往ARP模塊。ARP模塊根據(jù)ARP響應(yīng)包中的內(nèi)容添加一條記錄到ARP表當(dāng)中。

更新后的ARP看起來就像這樣:


▲表4

04.04 尾聲

毫秒之間ARP請求/響應(yīng)對就完成了ARP表中新的IP地址到Mac地址映射關(guān)系的自動插入。剛才第二步我們提到,出站的IP包進(jìn)入了暫存隊列。接下來,通過查詢ARP表便實現(xiàn)了從IP地址到Mac地址的翻譯,最后以太幀發(fā)至網(wǎng)卡。因此,一個新的翻譯,還有步驟3、4、5,對發(fā)送主機(jī)而言:

  1. 一個ARP請求包通過廣播地址發(fā)給網(wǎng)絡(luò)上的每臺主機(jī);
  2. 出站IP包進(jìn)入暫存隊列;
  3. ARP響應(yīng)包返回,發(fā)送主機(jī)更新ARP表;
  4. 完成暫存隊列中IP包的翻譯;
  5. 以太幀發(fā)至網(wǎng)卡。

簡而言之,當(dāng)ARP不能完成一個翻譯時,讓IP包進(jìn)入暫存隊列,通過ARP請求/響應(yīng)迅速實現(xiàn)ARP表更新,最后完成隊列中待發(fā)送IP包的翻譯。

每一臺主機(jī)的每張網(wǎng)卡都有獨立的ARP表。如果目標(biāo)主機(jī)不存在,便不會有ARP響應(yīng)返回,因此發(fā)送ARP請求的主機(jī)不會更新ARP表。這時IP就會忽略掉這個出站的IP包。上層協(xié)議是區(qū)分不了一張壞掉的網(wǎng)卡和一臺不存在的主機(jī)之間的差別的。

有些IP和ARP不會在等待ARP響應(yīng)的時候暫存待發(fā)送的IP包,而是采用忽略/恢復(fù)策略:忽略IP包,TCP模塊或者采用UDP協(xié)議的上層應(yīng)用意識到有丟包,重發(fā)該IP包。這個策略是通過超時與重發(fā)來實現(xiàn)的。重發(fā)的數(shù)據(jù)總會發(fā)送成功,因為第一次的出站消息已經(jīng)觸發(fā)廣播,ARP請求/響應(yīng)會完成ARP表更新。

05 IP(Internet Protocol)

IP模塊是互聯(lián)網(wǎng)技術(shù)的核心,而IP模塊的核心是IP路由表,IP模塊就是使用這張運行在內(nèi)存中的表來確定IP包的去向應(yīng)該經(jīng)由哪條路線。IP路由表的內(nèi)容是網(wǎng)絡(luò)管理員設(shè)置的,如果設(shè)置不當(dāng)會阻塞網(wǎng)絡(luò)通信。

理解路由表的使用實質(zhì)就是理解互聯(lián)網(wǎng)是如何工作的,想要很好地管理和維護(hù)網(wǎng)絡(luò),就必須強(qiáng)化對它的理解。

學(xué)習(xí)路由表,我們分三步走:先看路由概要,再學(xué)習(xí)IP地址,最后研究其中的細(xì)節(jié)。

05.01 直接路由

下圖展示了一個簡單的互聯(lián)網(wǎng):有3臺主機(jī)(A、B、C),使用了圖1中的TCP/IP協(xié)議棧。每臺主機(jī)的網(wǎng)卡都有自己的Mac地址,網(wǎng)絡(luò)管理員還為每臺主機(jī)指派了相應(yīng)的IP地址和網(wǎng)絡(luò)號。


▲圖6

當(dāng)主機(jī)A發(fā)送一個IP包到主機(jī)B時,IP包頭含有源主機(jī)的Mac地址、IP地址(A的Mac地址和IP地址)以及目標(biāo)主機(jī)的Mac地址、IP地址(B的Mac地址和IP地址)。


▲表5

在這個樣例中,IP包的組裝過程屬于常規(guī)開銷:它本身對以太網(wǎng)服務(wù)沒有什么幫助,但是生成、傳輸和解析報文頭卻增加了CPU和網(wǎng)絡(luò)寬帶的開銷。

當(dāng)B主機(jī)的IP模塊收到來自A的IP包,它會檢查目標(biāo)IP地址是否跟自己的匹配,如果是,便向上一層協(xié)議棧傳遞該數(shù)據(jù)。

這就是A、B兩臺主機(jī)直連的路由過程。

05.02 非直接路由

下圖更加貼近實際的互聯(lián)網(wǎng):它有3個以太網(wǎng)和3個互聯(lián)網(wǎng)并通過名為D的IP路由器相連。每個互聯(lián)網(wǎng)中都包含有4臺主機(jī),每臺主機(jī)都有自己的IP地址和Mac地址。


▲圖7

除了D以外,每臺主機(jī)都使用了圖1中的TCP/IP協(xié)議棧。D是一臺IP路由器,它有3個IP地址、3個Mac地址、同時連接到了3個網(wǎng)絡(luò),它使用了圖3中的協(xié)議棧,只不過它有3張網(wǎng)卡和3個ARP模塊。注意:D只有一個IP模塊。

網(wǎng)絡(luò)管理員已經(jīng)為每一個網(wǎng)絡(luò)定義了網(wǎng)絡(luò)號:一個唯一的數(shù)字。上圖只展示了網(wǎng)絡(luò)名稱沒有展示網(wǎng)絡(luò)號。

當(dāng)主機(jī)A發(fā)送一個IP包給主機(jī)B時,路由過程跟之前的直接路由完全是一樣的。任何一個單獨的網(wǎng)絡(luò)上的主機(jī)間通信都跟之前討論的直接路由樣例相同。

主機(jī)D與A、D與E、D與H都是直接通信,因為他們每一組主機(jī)(DA、DE、DH)都在一個網(wǎng)絡(luò)上。

但是當(dāng)主機(jī)A需要與IP路由器D另一端的主機(jī)通信時,就無法直接通信了。A必須通過D來轉(zhuǎn)發(fā),IP包才能到達(dá)另一個網(wǎng)絡(luò)。這樣的通信過程就叫做非直接路由。

IP包的路由選擇是由IP模塊完成的,這個操作對TCP、UDP以及上層應(yīng)用是透明的。

當(dāng)主機(jī)A發(fā)送一個IP包給主機(jī)E時,源主機(jī)的IP地址、Mac地址就是A的IP地址和Mac地址,目標(biāo)主機(jī)IP地址是E的IP地址,但是由于需要通過D來轉(zhuǎn)發(fā),此時目標(biāo)主機(jī)的Mac地址是D的Mac地址。


▲表6

D的IP模塊收到這個IP包以后,檢查其目標(biāo)主機(jī)IP地址,發(fā)現(xiàn)不是發(fā)給自己的,于是直接轉(zhuǎn)發(fā)給了E。


▲表7

簡單的說,直接通信中源主機(jī)IP地址、Mac地址就是發(fā)送者的IP地址和Mac地址,目標(biāo)主機(jī)的IP地址和Mac地址就是接收者的IP地址和Mac地址。非直接通信就不完全是這樣的了。

這個樣例非常簡單,現(xiàn)實生活中的網(wǎng)絡(luò)要復(fù)雜得多:N個IP路由器,各種類型的物理網(wǎng)絡(luò)……這個樣例中的網(wǎng)絡(luò)劃分適用于把一個大的網(wǎng)絡(luò)切割為幾個小的網(wǎng)絡(luò)以避免全網(wǎng)廣播。

05.03 路由規(guī)則

前一節(jié)已經(jīng)揭示了路由的大體過程,接下來我們繼續(xù)研究IP模塊用到的規(guī)則或算法。

  • 對于一個出站的IP包,當(dāng)數(shù)據(jù)從上層協(xié)議到達(dá)以后,IP模塊必須判斷它是直發(fā)還是非直發(fā)才能進(jìn)一步確定應(yīng)該走哪一個底層網(wǎng)絡(luò)。這一系列操作是通過查詢路由表來實現(xiàn)的。
  • 對于一個從底層網(wǎng)絡(luò)來的入站IP包,IP模塊則須判斷它是轉(zhuǎn)發(fā)還是向上層協(xié)議傳遞。如果是轉(zhuǎn)發(fā),就視它為一個出站的IP包。
  • 一個入站的IP包到達(dá)以后,它就不會再發(fā)回它原來的網(wǎng)絡(luò)了。

這些操作在IP包往下一層協(xié)議傳遞和查詢ARP表之前就必須完成。

05.04 IP地址

網(wǎng)絡(luò)管理員根據(jù)主機(jī)所在的網(wǎng)絡(luò)指派其IP地址。4字節(jié)的IP地址由網(wǎng)絡(luò)位和地址位構(gòu)成。例如表1中,主機(jī)IP地址是223.1.2.1,其中網(wǎng)絡(luò)位是223.1.2,主機(jī)地址位是1。

4字節(jié)的IP地址中,哪些用作網(wǎng)絡(luò)位,哪些用作地址位是由高位地址(第一字節(jié)的前幾位)來確定的。本文樣例中IP地址都是C類地址,C類地址第一字節(jié)的前三位一定是110,接下來的21位是網(wǎng)絡(luò)位,最末8位是主機(jī)地址位。C類地址可以至多含有2,097,152個網(wǎng)絡(luò),每個網(wǎng)絡(luò)中至多可以有254臺主機(jī)。

IP地址是由NIC(網(wǎng)絡(luò)信息中心“Network Information Center”)來管理的。所有接入因特網(wǎng)的互聯(lián)網(wǎng)都必須使用NIC指派的網(wǎng)絡(luò)號。如果你組建了一個自己的互聯(lián)網(wǎng),即便不打算接入因特網(wǎng),你還是應(yīng)該從NIC中獲取自己的網(wǎng)絡(luò)號。因為如果你隨意指定網(wǎng)絡(luò)號,萬一某天你的網(wǎng)絡(luò)要與其他網(wǎng)絡(luò)相連,就會有混亂和干擾的風(fēng)險。

05.05 主機(jī)名與網(wǎng)絡(luò)名

人們常常通過名稱而非號碼來區(qū)分主機(jī)。假設(shè)一臺名為alpha的主機(jī),IP地址是223.1.2.1。在小型網(wǎng)絡(luò)中,各主機(jī)上的host文件保存了主機(jī)名稱與主機(jī)地址間的映射關(guān)系。在大型網(wǎng)絡(luò)中有專門的文件存儲在特定的服務(wù)器上方便客戶機(jī)隨時調(diào)用。摘錄幾行這個文件的數(shù)據(jù)如下:

223.1.2.1 alpha
223.1.2.2 beta
223.1.2.3 gamma
223.1.2.4 delta
223.1.3.2 epsilon
223.1.4.2 iota

IP地址為第一列,主機(jī)名稱為第二列。

正常情況下,同一個網(wǎng)絡(luò)中的所有主機(jī)都可以使用同一個host文件。你可能注意到了,為何主機(jī)delta有3個IP地址卻只有一條記錄?因為delta可以通過3個地址中的任意一個來訪問。當(dāng)delta收到一個IP包時,它會用它的每一個IP地址與IP包的目標(biāo)地址進(jìn)行匹配。

網(wǎng)絡(luò)也是有名字的。如果你有3個網(wǎng)絡(luò),那么保存網(wǎng)絡(luò)名字的networks文件看起來就像這樣:

223.1.2 development
223.1.3 accounting
223.1.4 factory

網(wǎng)絡(luò)號為第一列,網(wǎng)絡(luò)名稱為第二列。

從上面可以看出,alpha是development網(wǎng)絡(luò)上的1號主機(jī),beta是development網(wǎng)絡(luò)上的2號主機(jī),因此你還可以稱之為:development.1、development.2

對于普通用戶而言,前面的host文件已經(jīng)夠用了。但是對于網(wǎng)絡(luò)管理員,delta那一行可能會被替換為三行:

223.1.2.4 devnetrouter delta
223.1.3.1 facnetrouter
223.1.4.1 accnetrouter

host文件中的三行新記錄,為delta的每一個IP地址都添加了一個直觀的名字。事實上,第一個IP地址有兩個名字(devnetrouter 、delta),這兩個名字指同一臺主機(jī)。按照慣例,delta是針對普通用戶的主機(jī)名,另外3個名字是給管理員維護(hù)路由表用的。

這些文件被網(wǎng)絡(luò)命令和上層應(yīng)用用到,可以返回直觀的網(wǎng)絡(luò)名/主機(jī)名,不用過多的操作網(wǎng)絡(luò),但極大的方便了人們的工作。

05.06 IP路由表

在發(fā)送一個出站IP包的時候,IP是如何確定應(yīng)該走哪一個底層網(wǎng)絡(luò)的呢?IP模塊會從IP包中獲取目標(biāo)主機(jī)IP地址,并以此為關(guān)鍵字在路由表中檢索相應(yīng)的網(wǎng)絡(luò)號。

每一條路由在路由表中都存有一條記錄。路由表的前幾列分別是:網(wǎng)絡(luò)號,直發(fā)標(biāo)記,路由器IP地址,網(wǎng)絡(luò)接口號。IP模塊使用此表來確定每一個出站IP包的去向。

大部分主機(jī)上的路由表都可以使用route命令進(jìn)行修改。路由表的內(nèi)容由網(wǎng)絡(luò)管理員維護(hù),因為網(wǎng)絡(luò)管理員負(fù)責(zé)指派主機(jī)的IP地址。

05.07 直接路由的細(xì)節(jié)

為了解釋路由過程具體是怎樣的,以前面講的直接路由為例,我們再來詳細(xì)探討一下其中的細(xì)節(jié)。


▲圖8

alpha內(nèi)部的路由表看起來就像這樣:


▲表8

在Unix操作系統(tǒng)中,可以使用命令netstat -r查詢這張視圖。樣例中這樣簡單的網(wǎng)絡(luò),所有的主機(jī)都使用相同的路由表。

為了便于討論,我們把視圖中的網(wǎng)絡(luò)名稱替換為網(wǎng)絡(luò)號:


▲表9

05.08 直接路由場景

當(dāng)alpha發(fā)送一個IP包到beta時,IP包在alpha的IP模塊,目標(biāo)地址是beta或者223.1.2.2。IP模塊從目標(biāo)地址網(wǎng)絡(luò)位中取出網(wǎng)絡(luò)號,并在路由表的第一列中檢索這個網(wǎng)絡(luò),再返回第一條匹配的記錄。

另外,我們還可以從這條記錄中得知:這個網(wǎng)絡(luò)中的主機(jī)都可以通過網(wǎng)卡1直接通信。alpha查詢ARP表得到beta的Mac地址,這樣以太幀就通過網(wǎng)卡1直接發(fā)往了beta主機(jī)。

如果一個上層應(yīng)用發(fā)送數(shù)據(jù)的目標(biāo)地址不在development網(wǎng)絡(luò)上,在路由表中找不到能夠匹配的記錄,那么IP會忽略掉這個IP包。有些主機(jī)會返回“目標(biāo)主機(jī)不可達(dá)”的錯誤信息。

05.09 非直接路由的細(xì)節(jié)

現(xiàn)在,我們再近距離地觀察一下之前提到的更復(fù)雜的非直接路由過程。


▲圖9

alpha內(nèi)部的路由表看起來就像這樣:


▲表10

為了方便討論,我們還是把網(wǎng)絡(luò)名稱替換為網(wǎng)絡(luò)號:


▲表11

alpha的路由表中路由器指向了delta連接“development”網(wǎng)絡(luò)的IP地址。

05.10 非直接路由場景

當(dāng)alpha發(fā)送一個IP包到epsilon時。IP包在alpha的IP模塊,目標(biāo)地址是223.1.3.2。IP從目標(biāo)地址網(wǎng)絡(luò)位中取出網(wǎng)絡(luò)號(223.1.3),并在路由表的第一列檢索這個網(wǎng)絡(luò),表中第二條記錄匹配上了,故返回此條記錄。

這條記錄表明,網(wǎng)絡(luò)223.1.3上的主機(jī)都可以通過路由器devnetrouter訪問。故alpha的IP模塊查詢ARP表得到路由器devnetrouter的Mac地址,IP包便通過網(wǎng)卡1直接發(fā)往devnetrouter,此時IP包中目標(biāo)主機(jī)的IP地址仍然是epsilon的IP。

IP包穿過delta的development網(wǎng)絡(luò)接口后,向上傳遞給delta的IP模塊。檢查其目標(biāo)IP地址,由于不能跟自己的任意一個IP匹配上,delta便會轉(zhuǎn)發(fā)該IP包。

delta的IP模塊從目標(biāo)地址網(wǎng)絡(luò)位中取出網(wǎng)絡(luò)號,在路由表中檢索這個網(wǎng)絡(luò)。delta的路由表看起來就像這樣:


▲表12

同樣把網(wǎng)絡(luò)名替換為網(wǎng)絡(luò)號:


▲表13

表中第二條記錄匹配上了,返回。delta的IP模塊便通過網(wǎng)卡3直接發(fā)送IP包至epsilon。此時IP包目標(biāo)主機(jī)IP地址與Mac地址都是epsilon。

IP包到達(dá)epsilon以后向上傳遞,IP模塊進(jìn)行目標(biāo)IP地址檢查,發(fā)現(xiàn)正好匹配上自己的地址,便再傳遞給上層協(xié)議。

05.11 小結(jié)

當(dāng)一個IP包穿過一個大型網(wǎng)絡(luò),到達(dá)目標(biāo)主機(jī)之前,它可能會經(jīng)過許多的路由器。路徑的選擇不是由某個中央服務(wù)器來決定的,而是不斷的查詢途經(jīng)的各個路由器的路由表。每一臺路由器都只決定下一個躍點的位置,并且依賴下一個躍點按照同樣的方式來發(fā)送IP包。

05.12 管理網(wǎng)絡(luò)

在大型網(wǎng)絡(luò)中,保證每一臺主機(jī)的路由表都正確是一項艱巨的任務(wù),由于需求不斷的變化,網(wǎng)絡(luò)管理員可能會不停的修改網(wǎng)絡(luò)配置。路由表出錯就會阻塞網(wǎng)絡(luò)通信,而排錯又極其的痛苦、乏味。

所以保持一個簡單的網(wǎng)絡(luò)配置對構(gòu)建一個可靠的網(wǎng)絡(luò)是大有裨益的。例如,給以太網(wǎng)分配網(wǎng)絡(luò)號最直觀的方法就是給每一個以太網(wǎng)單獨分配一個網(wǎng)絡(luò)號。

某些協(xié)議或應(yīng)用的幫助信息也是非常有用的。ICMP(“Internet控制報文協(xié)議”Internet Control Message Protocol)就會反饋某些路由問題。在小型網(wǎng)絡(luò)中,各主機(jī)上的路由表是由網(wǎng)絡(luò)管理員手動添加的;在大型網(wǎng)絡(luò)中這個手工操作,可以使用路由協(xié)議自動分發(fā)路由信息到整個網(wǎng)絡(luò)。

當(dāng)一臺主機(jī)從一個網(wǎng)絡(luò)遷移到另一個網(wǎng)絡(luò)時,其IP地址必須重新分配;當(dāng)一臺主機(jī)從一個網(wǎng)絡(luò)上撤走時,它的IP地址也必然不可用了。這些變化需要頻繁的更新host文件,即便是在中等規(guī)模的網(wǎng)絡(luò)中,維護(hù)這個文件也是很困難的。DNS便應(yīng)運而生了。

06 UDP(用戶數(shù)據(jù)報協(xié)議“User Datagram Protocol”)

UDP是IP協(xié)議棧上層的兩個主要協(xié)議之一。它直接為上層應(yīng)用提供服務(wù)。常見使用UDP的應(yīng)用有:網(wǎng)絡(luò)文件系統(tǒng)(NFS “Network File System”),簡單網(wǎng)絡(luò)管理協(xié)議(SNMP “Simple Network Management Protocol”)。UDP可以看作IP的一個接口。

UDP屬于無連接協(xié)議,因此它無法保證數(shù)據(jù)報一定能發(fā)送成功。相互通信的主機(jī)其UDP模塊并不會建立端到端的連接,它只負(fù)責(zé)推送出站的數(shù)據(jù)報和接收入站的數(shù)據(jù)報。

UDP為IP添加了兩個新的特性:一是不同的應(yīng)用使用不同的端口,實現(xiàn)了信道充分利用;二是使用校驗碼實現(xiàn)了數(shù)據(jù)的完整性校驗。

06.01 端口

數(shù)據(jù)是怎么從客戶端到達(dá)服務(wù)器的呢?
應(yīng)用與UDP模塊間的通信是通過端口建立起來的。端口是從〇開始的一個有限整數(shù)(0 ~ 65535)。一個應(yīng)用要對外提供服務(wù),它便會監(jiān)聽一個指定的端口,它會在該端口耐心的等待客戶端發(fā)起請求。

例如,SNMP服務(wù)器,又叫SNMP代理。它的監(jiān)聽端口是161。一臺主機(jī)上只可能有一個SNMP代理,因為一臺主機(jī)只有一個161端口。161是一個保留端口,一個在互聯(lián)網(wǎng)內(nèi)部已指定用途的端口,這是眾所周知的。當(dāng)一個SNMP客戶端想要連接服務(wù)器時,它便會把請求發(fā)往SNMP代理的161號端口。

遠(yuǎn)端主機(jī)收到應(yīng)用通過UDP發(fā)送的數(shù)據(jù)都是一個個獨立的數(shù)據(jù)包。例如,一個應(yīng)用通過UDP發(fā)送了5個數(shù)據(jù)包,那么遠(yuǎn)端主機(jī)上的應(yīng)用也要從UDP中接收5個數(shù)據(jù)包。發(fā)送方與接收方的每個數(shù)據(jù)包大小完全是一樣的。

UDP會保存應(yīng)用定義的消息邊界。UDP不會把兩個不同應(yīng)用的消息合并為一個數(shù)據(jù)包,也不會把一個應(yīng)用的消息拆分為幾個。

06.02 校驗碼

一個入站的IP包,IP頭的類型字段會指明它采用了哪種協(xié)議,如果是UDP,IP便會把它傳遞給UDP模塊。當(dāng)UDP模塊收到來自IP的數(shù)據(jù)報以后,它會檢查其校驗碼。如果校驗碼為〇,意味著這個校驗碼不是發(fā)送者的計算結(jié)果,這個數(shù)據(jù)報可以忽略掉。發(fā)送主機(jī)的UDP模塊可以開啟或關(guān)閉生成校驗碼。如果一個網(wǎng)絡(luò)上只有兩臺主機(jī)通過UDP通信,這時你可以不用校驗數(shù)據(jù),但還是建議你總是啟用校驗,因為誰也不知道何時路由表會改變,網(wǎng)絡(luò)會變得不可靠。

如果校驗碼是有效的,UDP會檢查是否有應(yīng)用綁定在目標(biāo)端口上。如果有,一個應(yīng)用消息便進(jìn)入隊列等待應(yīng)用讀取,否則忽略這個數(shù)據(jù)報。如果UDP數(shù)據(jù)報的入站速度超過了應(yīng)用讀取消息的速度、隊列中待讀取的消息也達(dá)到了最大值,那么直到隊列中有空間為止,后來的UDP數(shù)據(jù)報都會被忽略掉。

07 TCP(傳輸控制協(xié)議“Transmission Control Protocol”)

TCP提供了與UDP完全不同的另一種服務(wù)。TCP是面向連接的,字節(jié)流的,保證交付(可靠)的一種協(xié)議。

對可靠性要求較高(不能有超時或重發(fā))的應(yīng)用常選用TCP協(xié)議。最常見的兩個使用TCP的應(yīng)用是FTP(文件傳輸協(xié)議“File Transfer Protocol”)和Telnet。還有不少受歡迎的應(yīng)用諸如X-Window圖形化界面(X-Window System),rcp (remote copy)以及r家族命令(r-series commands)也是采用TCP。TCP的高可靠性也是有代價的:它需要更多的CPU開銷和更大的網(wǎng)絡(luò)帶寬。TCP的內(nèi)部構(gòu)造要比UDP復(fù)雜得多。

跟UDP一樣,TCP也通過端口與應(yīng)用通信。不同的應(yīng)用對應(yīng)不同的端口,例如:Telnet服務(wù)對應(yīng)的端口是23。Telnet客戶端通過TCP協(xié)議連接指定主機(jī)的23號端口可以輕松地訪問服務(wù)器。

當(dāng)應(yīng)用第一次使用TCP發(fā)消息時,客戶端與服務(wù)器端的TCP模塊便開始建立通信了。這一對端到端的TCP模塊通過定義虛擬電路來維持連接狀態(tài)。這個虛擬電路會同時給兩臺主機(jī)帶來開銷。虛擬電路采用全雙工模式工作,即數(shù)據(jù)可以在兩個方向上同時進(jìn)行傳輸操作。本地應(yīng)用往端口中寫入數(shù)據(jù),數(shù)據(jù)穿過網(wǎng)絡(luò)被遠(yuǎn)端應(yīng)用讀取。

TCP對字節(jié)流的封包是任意的,它不會記錄兩次寫操作間的邊界。例如:一個應(yīng)用在指定的TCP端口執(zhí)行了5次寫操作,遠(yuǎn)端應(yīng)用有可能需要10次讀操作才能取完所有數(shù)據(jù),也有可能只用1次讀操作就把所有數(shù)據(jù)取完了。兩端的讀操作與寫操作的次數(shù)、大小都沒有直接聯(lián)系。

TCP使用滑動窗口機(jī)制,自帶超時與重發(fā)功能。遠(yuǎn)端主機(jī)TCP必須發(fā)送回執(zhí)確認(rèn)收到的出站數(shù)據(jù)?;貓?zhí)由傳輸數(shù)據(jù)捎帶過來。兩端都能控制對端的數(shù)據(jù)流量,這樣可以防止緩沖區(qū)溢出。

跟所有采用滑動窗口機(jī)制的協(xié)議一樣,TCP也有窗口大小。窗口大小決定了在要求一次確認(rèn)回執(zhí)之前可以傳輸多少數(shù)據(jù)。對TCP而言,窗口數(shù)據(jù)的大小不是以TCP消息為單位,而是以字節(jié)為單位。

08 上層應(yīng)用

為什么既有TCP又有UDP,只要一個不行嗎?

答案是它們各自滿足了不同的需求。許多上層應(yīng)用都只采用了TCP/UDP中的一種協(xié)議。在編程的時候你也只需要選取一種能滿足自己需求的協(xié)議就行了。如果你需要可靠的數(shù)據(jù)流服務(wù),TCP是最好的選擇;如果需要數(shù)據(jù)報服務(wù),UDP是最好的選擇;如果需要建立長連接,TCP是最好的選擇;如果需要低延遲傳輸數(shù)據(jù),UDP是最好的選擇。如果你的需求不在以上范圍以內(nèi),那該選哪種協(xié)議還真不好說。但是應(yīng)用可以通過優(yōu)化編程來彌補協(xié)議上的不足。例如,你的應(yīng)用采用UDP協(xié)議,又想擁有高可靠性,那么在編程的時候就應(yīng)該足夠健壯;如果你選擇了TCP協(xié)議,又想要優(yōu)化寫速度,那么在傳輸數(shù)據(jù)時就應(yīng)往比特流中插入標(biāo)記以拆分?jǐn)?shù)據(jù)。

什么樣的應(yīng)用才算是可靠應(yīng)用呢?

可靠的應(yīng)用有太多的特點了,而且這些特點還在不斷的增長中。
有些應(yīng)用在創(chuàng)世紀(jì)之初就已經(jīng)存在了:TELNET、FTP;還有一些是后來誕生的:X-Window、SNMP。下面簡單地介紹一下文中提到的那些應(yīng)用。

08.01 TELNET

TELNET通過TCP實現(xiàn)了遠(yuǎn)程登錄。TELNET操作有點像通過電話交換系統(tǒng)進(jìn)行鍵盤撥號。用戶在命令行中輸入“TELNET delta”時會收到主機(jī)delta的一個登錄提示符。
TELNET雖然古老,但尚未被淘汰,今天它也仍然廣泛存在于各種網(wǎng)絡(luò)中。使用TELNET的場合往往是跨平臺的登錄,例如,TELNET客戶端可能在VAX/VMS上,而TELNET服務(wù)端卻在UNIX System V上。

08.02 FTP

文件傳輸協(xié)議(FTP“File Transfer Protocol”),跟Telnet一樣古老,也是采用TCP協(xié)議,也還廣泛地活躍在各種網(wǎng)絡(luò)中。FTP有點像Telnet到遠(yuǎn)程主機(jī)之后執(zhí)行的操作,只不過不是敲入常用的命令,而必須使用如顯示目錄(DIR/LS)之類的FTP的一系列簡短的命令。FTP方便我們在不同的主機(jī)間傳輸文件。

08.03 rsh

遠(yuǎn)程shell(rshremsh)是Unix下r家族命令中的一員。Unix下的復(fù)制命令cp演化為rcp,登錄查詢命令who演化為rwho。r家族命令又叫r系列命令或r*命令,該家族命令還在不斷的增長中。

r家族命令主要工作在Unix環(huán)境,設(shè)計的初衷是方便受信任的主機(jī)間通信。它對安全因素考慮較少,但是對用戶非常友好。

想在遠(yuǎn)程主機(jī)delta執(zhí)行命令cc file.c,只需要輸入rsh delta cc file.c;想復(fù)制文件file.c到主機(jī)delta,只需要輸入rcp file.c delta:;想登陸到delta,只需要輸入rlogin delta。如果你配置得當(dāng),使用這些命令甚至無需輸入密碼。

08.04 NFS

網(wǎng)絡(luò)文件系統(tǒng)(NFS“Network File System”),最初由Sun公司開發(fā),使用UDP協(xié)議,在多個主機(jī)掛載Unix文件系統(tǒng)上有著極好的性能。無硬盤工作站可以通過NFS連接到服務(wù)器分配給自己的硬盤上。主機(jī)alpha上數(shù)據(jù)庫的一個單獨的備份硬盤,可以供主機(jī)beta使用,如果beta的數(shù)據(jù)庫文件系統(tǒng)采用的是NFS的話。

NFS會占用海量的網(wǎng)絡(luò)帶寬,在低網(wǎng)速環(huán)境中性能也很低,好在它帶來的裨益也不少。NFS客戶端已經(jīng)集成到了操作系統(tǒng)核心當(dāng)中,允許上層應(yīng)用或者命令像掛載本地磁盤一樣調(diào)用NFS掛載硬盤。

08.05 SNMP

簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)使用UDP,主要用作核心網(wǎng)絡(luò)設(shè)備的管理。它被人們所熟知的特點就是只要有足夠的信息,網(wǎng)絡(luò)管理員就能夠診斷網(wǎng)絡(luò)故障。核心交換機(jī)/路由器通過SNMP從網(wǎng)絡(luò)上的其他主機(jī)收集該信息。SNMP僅定義數(shù)據(jù)格式,數(shù)據(jù)內(nèi)容由核心網(wǎng)絡(luò)設(shè)備或者網(wǎng)絡(luò)管理員定義。

08.06 X-Window

圖形化界面使用基于TCP的X-Window協(xié)議。X-Window不僅僅是一個圖形化界面的組件,它還有一套完整的用戶接口設(shè)計理念。

09 補充信息

互聯(lián)網(wǎng)技術(shù)的許多內(nèi)容在本文中都沒有提到,對于那些想要了解更多知識的讀者,下面的清單列出了下一階段需要學(xué)習(xí)的內(nèi)容:

  • 管理命令:arp, route, netstat
  • ARP:permanent entry, publish entry, time-out entry, ARP欺騙(spoofing)
  • IP路由表:host entry, 默認(rèn)網(wǎng)關(guān)(default gateway), 子網(wǎng)(subnets)
  • IP:TTL(time-to-live counter), IP段(fragmentation), ICMP
  • RIP,路由環(huán)路(routing loops)
  • 域名系統(tǒng)(Domain Name System)

10 參考文獻(xiàn)

  • [1] Comer, D., "Internetworking with TCP/IP Principles, Protocols,
    and Architecture", Prentice Hall, Englewood Cliffs, New Jersey,
    U.S.A., 1988.
  • [2] Feinler, E., et al, DDN Protocol Handbook, Volume 2 and 3, DDN
    Network Information Center, SRI International, 333 Ravenswood
    Avenue, Room EJ291, Menlow Park, California, U.S.A., 1985.
  • [3] Spider Systems, Ltd., "Packets and Protocols", Spider Systems
    Ltd., Stanwell Street, Edinburgh, U.K. EH6 5NG, 1990.

11 與其他RFC的關(guān)系

本文并未更新或者淘汰任何其他的RFC!

12 安全建議

這里有一些關(guān)于TCP/IP協(xié)議組件的安全建議,對某些用戶而言至關(guān)重要;對其他用戶而言可能無關(guān)緊要,這完全取決于用戶的需求。

本文并未對這些問題展開討論,如果你想了解更多的知識,建議從ARP欺騙開始,再到RFC1122-“安全建議”對各章節(jié)進(jìn)行系統(tǒng)學(xué)習(xí)。

13 聯(lián)系作者

Theodore John Socolofsky
Spider Systems Limited
Spider Park
Stanwell Street
Edinburgh EH6 5NG
United Kingdom

Phone:

  • from UK 031-554-9424
  • from USA 011-44-31-554-9424

Fax:

  • from UK 031-554-0649
  • from USA 011-44-31-554-0649

EMail: TEDS@SPIDER.CO.UK

Claudia Jeanne Kale
12 Gosford Place
Edinburgh EH6 4BJ
United Kingdom

Phone:

  • from UK 031-554-7432
  • from USA 011-44-31-554-7432

EMail: CLAUDIAK@SPIDER.CO.UK

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.這篇文章不是本人原創(chuàng)的,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,377評論 6 174
  • 個人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,196評論 0 8
  • 同樣的,本文篇幅也比較長,先來一張思維導(dǎo)圖,帶大家過一遍。 一、 計算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)分層 二、 TCP/IP 基礎(chǔ)...
    滌生_Woo閱讀 66,159評論 38 1,037
  • 協(xié)議基礎(chǔ) 協(xié)議就是計算機(jī)之間通過網(wǎng)絡(luò)實現(xiàn)通信時實現(xiàn)所達(dá)成的一種“約定”,這種約定使得那些由不同廠商的設(shè)備,不同的C...
    d9fc24a0c9a9閱讀 2,537評論 0 6
  • 0. 介紹 本文源自《圖解TCP/IP》第四、五章讀書筆記。一篇文章讓你了解IP協(xié)議。閱讀的時候,注意一般知識點結(jié)...
    天才木木閱讀 5,461評論 0 14

友情鏈接更多精彩內(nèi)容