天天看點

計算機網絡(自頂向下方法)讀書筆記----吐血整理

第 1 章 計算機網絡和網際網路

1.1 什麼是網際網路

1.1.1 組成描述描述

1.1.2 服務描述

1.1.3 協定

1.2 網絡的邊緣

1.2.1 接入網

1.2.2 實體媒體

1.3 網絡核心

1.3.1 分組交換

1.3.2 電路交換

1.3.3 分組交換和電路交換的對比

1.3.4 網絡的網絡

1.4 分組交換中的時延、丢包、吞吐量

1.4.1 分組交換網中的時延概述

1.4.2 排隊時延和丢包

1.4.3 端到端時延

1.4.4 計算機網絡的吞吐量

1.5 協定層次及其服務模型

1.5.1 分層體系結構

1.5.2 封裝

第 2 章 應用層

2.1 應用層協定原理

2.1.1 網絡應用程式體系結構

2.1.2 程序通信

2.1.3 可供應用程式使用的運輸服務

2.1.4 網際網路提供的傳輸層服務

2.1.5 應用層協定

2.1.6 本部落格涉及的網絡應用

2.2 web和http

2.2.1 http概述

2.2.2 持續連接配接和非持續連接配接

2.2.3 http封包格式

2.2.4 使用者與伺服器的互動:cookie

2.2.5 web緩存

2.2.6 條件get方法

2.3 網際網路中的電子郵件

2.3.1 smtp

2.3.2 與http對比

2.3.3 郵件封包格式

2.3.4 郵件通路協定

2.4 dns:網際網路的目錄服務

2.4.1 dns提供的服務

2.4.2 dns工作機理概述

2.4.3 dns記錄和封包

2.5 p2p應用

2.7 套接字程式設計

第三章 傳輸層

3.1 概述和運輸層服務

3.1.1 傳輸層和網絡層的關系

3.1.2 網際網路傳輸概述

3.2 多路複用和多路分解

3.3 無連接配接運輸:udp

3.3.1 udp封包結構

3.3.2 udp 檢驗和

3.4 可靠資料傳輸原理

3.4.1 構造可靠信道的可靠資料傳輸

3.4.2 流水線可靠資料傳輸協定

3.4.3 回退n步(gbn)

3.4.4 選擇重傳(sr)

3.5 面向連接配接的tcp

3.5.1 tcp連接配接

3.5.2 tcp封包段結構

3.5.3 往返時間的估計與逾時

3.5.4 可靠資料傳輸

3.5.5 流量控制

3.5.6 tcp連接配接管理

3.6 擁塞控制原理

3.6.1 擁塞原因與代價

3.6.2 擁塞控制方法

3.7 tcp擁塞控制原理

3.7.1 公平性

第四章 網絡層

4.1 概述

4.1.1 轉發和路由選擇

4.1.2 網絡服務模型

補:虛電路和資料報網絡

虛電路網絡

資料報網絡

虛電路和資料報網絡對比

4.2 路由器工作原理

4.2.1 輸入端口處理和基于目的地轉發

4.2.2 交換

4.2.3 輸出端口處理

4.2.4 何處出現排隊

4.2.5 分組排程

4.3 網際協定:ipv4、尋址、ipv6 及其他

4.3.1 ipv4 資料報格式

4.3.2 ipv4 資料報分片

4.3.3 ipv4 編址

4.3.4 網絡位址轉換

4.3.5 ipv6

4.5 路由選擇算法

4.5.1 鍊路狀态路由選擇算法

4.5.2 距離向量路由選擇算法

4.5.3 層次路由選擇

4.6 網際網路中的路由選擇

4.6.1 rip(dv思想)

4.6.2 網際網路中自治系統内部的路由選擇:ospf(ls思想)

4.6.3 isp 之間的路由選擇:bgp

4.7 廣播和多點傳播路由選擇

第五章、鍊路層

5.1 鍊路層概述

5.1.1鍊路層提供的服務

5.1.2 鍊路層在何處實作

5.2 差錯檢測和糾正技術

5.2.1 奇偶校驗

5.2.2 檢驗和方法

5.2.3 循環備援檢測

5.3 多路通路鍊路和協定

5.3.1 信道劃分協定

5.3.2 随機接入協定

5.3.3 輪流協定

5.4 交換區域網路

5.4.1 鍊路層尋址和arp

5.4.2 以太網

5.4.3 鍊路層交換機

5.4.4 虛拟區域網路

我們可以從兩個角度來回答這個問題:一種是描述組成它的軟硬體;另一種是将其視為為分布式應用提供基礎服務的聯網設施來描述。其實,第一種角度,是從它的組成來描述,第二種角度是從它的功能來描述。
網際網路是一個世界範圍的計算機網絡,這意味着它互聯了數以億計的計算裝置(不僅僅是計算機哦);這些裝置包括但不限于傳統pc、工作站以及所謂的伺服器。現在有更多的裝置加入到網際網路中,比如便攜式計算機、電視機、汽車、傳感器等。用網際網路的術語來說,所有連入網際網路的裝置都叫做主機或者端系統。 以下是重點的一些概念: 端系統通過通信鍊路和分組交換機連接配接到一起。 端系統之間發送資料時,發送端系統将其資料分成一段一段,然後加上必要的資訊後形成一個個的資料包,這個資料包用術語來說叫做分組。于是分組==使用者資料+必要資訊。鍊路系統就是用來傳輸分組的。分組到達接收端系統後,接收端系統将根據必要資訊來抽取使用者資料; 分組交換機從它的一條傳入連結路接收分組,并且選擇一條對外連結路将分組轉發出去;分組交換機也有很多種類,最為有名的是路由器和鍊路層交換機;兩者的的不同之處在于,鍊路層交換機主要用在接入網中,路由器主要用在網絡核心。 端系統通過網際網路服務提供商(internet service provider,簡稱isp)接入網際網路; 很有名的協定有:tcp(transport control protocol,傳輸控制協定)和 ip(internet protocol,網際協定);因為協定控制了資訊的傳遞,是以對協定達成一緻就很重要,是以需要一個标準來規範協定,以便創造可以協同工作的系統和産品 可以将計算機網絡結構了解為三部分組成: 網絡邊緣:如主機,網絡應用 接入網絡,實體媒體:如有線或無線通信鍊路 網絡核心(核心網絡):如互聯的路由器(或分組轉發裝置)
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:網際網路的一些部件

人類活動的類比

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:人類協定和計算機網絡協定

網絡協定

前面提到了分組這一概念,分組==使用者資料+必要資料;這些必要資料為分組接收者了解使用者資料提供保障,而協定就是如何使用必要資料了解使用者資料的方法或者規則;分組接收者接收到分組并按照協定獲得了使用者資料後,還應該對此消息做出反應,而如何做出反應也是協定規範的一部分(不反應也是一種反應哦) 協定:定義了在兩個或多個通信實體之間交換的封包格式和次序,以及封包發送和/或接收一條封包或其他事件所采取的動作。 凡是通信實體的所有活動都要受到協定的限制。比如,硬體實作的控制協定控制了兩塊網卡之間的比特流;在端系統中,擁塞控制協定控制了發送方和接收方之間傳輸資料的速率等
端系統:與網際網路相連的計算機和其它裝置,往往處于網絡的邊緣 端系統分類:客戶和伺服器
接入網:是指将端系統連入到邊緣路由器的實體鍊路 邊緣路由器:是指端系統到任何其他遠端端系統路徑上的第一台路由器

數字使用者線(digital subscribe line,dsl)

這是一種寬帶住宅接入的方法,用已有的電話線連接配接中心局的 dslam,資料通信通過 dsl 電話線接入 internet,語音(電話)通過dsl電話線接入電話網。使用的通信鍊路的實體材質為電話線,是一種雙絞線。 使用者使用 dsl 數據機通過電話線與 isp 中的數字使用者線接入複用器(dslam)來交換資料;家庭 dsl 數據機将數字資料轉換為高頻音後通過電話線傳輸到 isp 中心,并且通過 dsl 解調器将 dslam 發送過來的模拟信号轉為數字信号;
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:dsl 網際網路接入

電纜網際網路接入(cable internet access,cic)

這是另一種寬帶住宅接入方法,它的 isp 是有線電視公司。其使用的通信鍊路的實體材質有光纖和同軸電纜,也被稱為混合光纖同軸(hybrid fiber coax hfc); 使用者使用電纜數據機通過同軸電纜與光纖結點相連,光纖結點通過光纜與電纜頭端相連,而電纜頭端接入了網際網路。在電纜頭端,電纜數據機端接系統(cable modem termination system)起到 dslam 的作用,即實作模拟信号和數字信号的轉換;
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:電纜網絡

光纖到戶(fiber to the home,ftth)

這裡主要是指使用光纖作為通信鍊路的材質,有兩種競争性的光纖分布方案,一種是主動光纖網絡(active optical network),另一種是被動光纖網絡(passive optical network).其主要差別在于,是否在傳輸資料時共享光纖。

以太網和wifi

以太網接入是一種在公司、大學、家庭裡很流行的接入方式;使用者使用雙絞線與以太網交換機相連,進而接入網際網路;接入以太網交換機的速度可達 100mbps; 在無線區域網路中,無線使用者從一個接入點發送和接收資料,而該接入點與企業網相連,企業網最終接入網際網路;在無線 lan 中,使用者需要在一個接入點的幾十米範圍之内;
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:機構(企業)接入網絡

廣域無線接入

在移動裝置中,通過蜂窩網提供商營運的基站來發送和接收分組,與 wifi 不同的是,使用者僅需要位于基站的數萬米範圍之内即可;
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:典型家庭網絡的接入

傳輸媒體是構成通信鍊路的主要部分,實體媒體通常可以分為導引性媒體和非導引性媒體;對于導引性媒體,電波沿着固體媒體前行,如光纜、雙絞線活同軸電纜。對于非導引性媒體,電波在空氣或外層空間中傳播。 值得注意的是,架設傳輸媒體的人曆成本要遠遠高于實體材料的成本
雙絞線 最便宜的引導性傳輸媒體,由兩條互相螺旋纏繞的銅線組成。目前區域網路中的雙絞線資料傳輸速率在10mbps到10gbps之間,所能達到的資料傳輸速率取決于線的粗細以及傳輸距離;雙絞線實際上已經成為高速區域網路聯網的主要方式;因為現代的雙絞線技術速率和傳輸距離都是很不錯的; 同軸電纜 也由兩個銅導體構成,但是它們是同心的,而非并行的;借助特殊的結構和絕緣層,同軸電纜可得到較高的資料傳輸速率;在電視系統中應用廣泛;同軸電纜可被用作引導性的共享媒體; 光纖 一種可以引導光脈沖的媒體 陸地無線電信道 無線電信道承載電磁頻譜中的信号,不需要實體線路,提供與移動使用者的連接配接以及長距離承載信号的方式;是一種有吸引力的媒體; 衛星無線電信道 通過衛星連接配接兩個或多個在地球上的微波發射方(也被稱為地面站),該衛星在一個頻段上接收信号,在另一個頻段上發送信号;種類有同步衛星和近地軌道衛星;
網絡核心即為由互聯端系統的分組交換機和鍊路構成的網狀網絡, 網絡核心的關鍵功能: 路由+轉發 通過網絡鍊路和交換機移動資料有兩種基本方法:電路交換和分組交換
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:網絡核心功能--路由與轉發

分組在通信鍊路上以等于該鍊路的最大傳輸速率傳輸通過通信鍊路。是以如果某條鍊路的最大傳輸速率為r,分組長度為l,則該鍊路傳輸該分組的時間為l/r;這個時間也被稱為傳輸時延;分組交換的常見方式是存儲轉發機制; 分組:封包分拆出來的一系列相對較小的資料包,分組交換需要封包的拆分與重組,會産生額外開銷

存儲轉發

大多數分組交換機采用存儲轉發機制來轉發分組;所謂存儲轉發是指交換機在收到一個完成的分組,才會向鍊路輸出轉發分組,否則就将收到的部分分組緩存起來;因為緩存等待一個分組的全部資料而導緻的時間開銷被稱為存儲轉發時延

排隊時延與分組丢失

因為需要緩存分組,是以此時分組交換機需要一個輸出緩存和輸出隊列;緩沖隊列的空間有限性就有可能導緻分組交換機無法繼續緩存分組(因為鍊路被占用或者分組還沒全部到位)而使到達分組交換機的資料包被迫丢棄;這就導緻了分組不但承擔了傳輸時延,還承擔了隊列時延。

轉發表與路由選擇協定

實際上,分組交換機之是以能夠知道往哪去是因為其内部有一個轉發表,這個表維護了一個ip位址和鍊路的對應關系,是以處理流程為: 通過分組的必要資訊,獲得目的端系統的ip位址 通過ip位址索引轉發表,進而确定輸對外連結路
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:分組交換

在電路交換網絡中,在端系統通信會話期間,交換機會預留端系統間通信路徑上的相關資源(緩存,鍊路傳輸速率),即先建立連接配接,然後通信,獨占資源;而在分組交換網絡中,這些資源沒有被預留;也就是說,在端系統進行通信時,其所需要的資源是被保持的,其他通信是無法使用這一部分資源的;也就說,端系統間真正建立了一條“連接配接”;而這一連接配接,用電話的術語被稱為“電路”。傳統的電話網絡就是電路交換網絡的例子。

電路交換網絡中的複用

時分複用(time-division multiplexing tdm):是指将時間劃分為固定區間的幀,每個幀則又被劃分為固定數量的時間空隙;當網絡需要建立一條連接配接時,網絡将在每個幀中為該連接配接指定一個時隙;在該時隙内,鍊路用來傳輸該連結的資料;
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:時分多路複用tdm

頻分複用(frequency-division multiplexing):将頻率域劃分為頻段,然後将頻段配置設定給連接配接;此頻段被用來專門傳輸連結的資料。該頻段的寬度成為帶寬。
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:頻分多路複用fdm

除此之外,多路複用技術還有波分多路複用(wavelength division multiplexing-wdm)和和碼分多路複用( code division multiplexing-cdm),波分複用就是光的頻分複用
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:波分多路複用wdm

資料交換除了電路交換和分組交換,還有一種書上未介紹的封包交換,封包:源(應用)發送資訊整體,比如一個檔案,作為整體進行發送。
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:封包交換

封包交換與分組交換均采用存儲-轉發交換方式,差別: 封包交換以完整封包進行“存儲-轉發” 分組交換以較小的分組進行“存儲-轉發”
分組交換的優點: 它提供了比電路交換更好的帶寬共享; 它比電路交換更簡單、更有效、實作成本更低; 分組交換的缺點: 分組交換不适合實時服務,因為端到端的時延是可變、不可預測的,這和整個網絡的情況相關; 電路交換的優點: 提供了端對端傳輸資料的速率保證; 電路交換的缺點: 電路交換存在靜默期,這是指專用電路空閑時,其占用的資源并沒有得到充分的利用; 建立連接配接的過程比較複雜;
總體上來說,分組交換的性能要好于電路交換的性能,但是不同類型的分組交換方式有不同的應用場景;比如一些對最低速率有着嚴格要求的應用,比如實時服務等,為了獲得速率保證,犧牲網絡的效率也是可以接受的。趨勢向着分組交換發展

不得不說,網際網路是一個龐大而複雜的系統,但是我們仍然有辦法描述它(我們不是已經這麼做過了嗎?),但是我們需要一個模型來刻畫網際網路的結構;該用什麼樣的結構來刻畫網際網路呢?我想,最普遍的說法就是:網際網路是網絡的網絡。但是這一說法足夠精煉的同時也不夠明确。更重要的是,我們可以選擇更明确的方法來刻畫網際網路;書中通過5個模型不斷過渡到最終模型,其實過渡的過程就結構不斷合理、連接配接方式不斷明确的過程。

我們在什麼是網際網路 一節中介紹isp,端系統是通過isp接入網際網路的,為了實作端系統的互聯,isp也必須互聯,其實網絡模型就是用來表達isp和端系統以及isp之間的結構的抽象;

網絡結構1:存在唯一的全球承載isp互聯所有的接入isp,這是指,全球isp是一個又路由器和通信鍊路構成的網絡,該網絡跨越全球,并且其他的接入isp都至少和一個它的路由器相連;

網絡結構2:存在多個全球承載isp,它們分别于一部分的接入isp互聯;為了實作端系統的互聯,這多個全球isp也必須互聯;網絡結構是一個兩層結構,其中全球承載isp位于頂層,接入isp處于底層;

網絡結構3:頂層全球承載isp基本上已經定型,但是接入isp現在還很混亂,比如,它們直接同頂層isp相連;而網絡結構3中,接入isp也是分層的:較小區域中的isp連入較大區域的isp,而不是直接與頂層isp相連;為什麼會出現這樣的結構呢?這是因為,如果都直接同頂層isp相連,那麼兩個同一較小區域内,分屬不同isp的端系統之間通信的資料也會到頂層isp中心去一趟,如果它們不是直接接入頂層isp,而是接入了一個較大區域的isp,那麼它們之間的通信資料就不用去頂層isp中心了,因為它們通過較大區域的isp已經實作了互連,是以通信速度肯定就上去了。

網絡結構4:是在網絡結構3的基礎上,增加了以下特點而形成的結構:存在點(point of presence,pop)、多宿、對等、網際網路交換點(internet exchange point,ixp)。

pop存在于等級結構中所有層次,但是底層isp除外;一個pop是isp網絡中的一台或者多台路由器群組,其中客戶isp能夠通過第三方提供的高速鍊路直接将它的路由器和供應商的pop連接配接,進而實作與提供商isp連接配接。這樣接入速度很明顯就提高了。

多宿(multi-home)是指,任何isp(除第一層isp)都可以與兩個或者多個提供商isp連接配接,這被稱為多宿;這樣網絡的可靠性就提高了

對等(peer) 是指,位于相同等級結構層次的一對鄰近isp能夠直接将它們的網絡連接配接到一起,使它們之間流量經直接連接配接而不是經過上遊的中間isp傳輸,這樣既不用付費,速度也可能會快一些;

網際網路交換點是為了實作多個isp可以對等而建立的。

網絡結構5:網絡結構5是在網絡結構4的基礎上增加了内容提供商網絡而構成。内容提供商建構自己的網絡,并且通過與較低層isp對等而“繞過”較高層網際網路isp,而且内容提供商對端使用者也有了更多的控制。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:isp的互聯

總體來說,今天的網際網路是一個“網絡的網絡”,其結構複雜,由十多個頂層isp和數十萬個較低層isp構成。近年來,主要的内容提供商建立自己的網絡,直接在可能的地方與較低層isp互聯

網際網路能夠看成是一種運作在端系統上的分布式應用提供服務的基礎設施 計算機網絡必定要要限制在端系統之間的吞吐量,故在端系統之間存在時延、丢包;
一個分組在沿途每個節點承受不同類型的時延,這些時延中最為重要的是:結點處理時延、排隊時延、傳輸時延和傳播時延.這些時延總體累加起來是結點總時延

時延的類型

(1)處理時延(nodal processing delay 處理時延是因為節點需要解析分組的必要資訊然後決定其對外連結路(索引轉發表等操作)而産生的,通常在微秒或者更低數量級; (2)排隊時延(queueing delay) 排隊時延是因為分組所對應的對外連結路前面有其他分組正在傳輸,是以分組需要該鍊路的緩沖隊列裡等待其他分組傳輸完畢而産生的;一般來說,排隊時延是到達該隊列的流量強度和性質的函數,通常可以達到毫秒級到微秒級; (3)傳輸時延(transmission delay) 傳輸時延是将所有分組的比特推向鍊路所有需要的時間,實際的傳輸時延通常在毫秒到微秒數量級。用l表示分組的長度,用rbps表示從路由器a到b的鍊路傳輸速率。傳輸時延是l/r。 dtrans = l/r,其中 l 是分組長度(bits),r 是鍊路帶寬 (bps) (4)傳播時延(propagation delay) 傳播時延是指比特進傳入連結路後,從該鍊路的起點到下一個結點所用的時間;一旦分組中的最後一個比特到達路由器就意味着該分組的所有比特都已到達路由器;廣域網中,傳播時延一般是毫秒級的。傳播時延是d/s。d是路由器a到b的距離。s是鍊路的傳播速率。 dprop = d/s,其中 d 是實體鍊路長度,s 是信号傳播速度 (~2×10 8m/sec)
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:四種分組延遲

傳輸時延和傳播時延的對比

如果打個比方的話,傳輸時延就是大卡車經過收費站的時間而傳播時間就是車在高速公路上行駛的時間。傳輸時延是分組長度和鍊路傳輸速率的函數。傳播時延是兩台路由器間距離的函數
丢包:到達的分組發現一個滿的隊列。由于沒有地方存儲這個分組,路由器将丢棄該分組,該分組将會丢失 排隊時延和丢包與網絡的狀況和結點的緩沖空間大小、處理速度相關;如果分組到達的速度高于結點的處理速度,那麼分組就會在緩沖隊列裡排隊等待。當緩沖空間用完後,如果還有到的分組,那麼該分組将被迫丢棄 為了描述網絡狀體,我們引入了流量強度這一概念:流量強度=分組到達的速度/結點的處理速度;流量工程裡一個金科玉律就是:設計系統時流量強度不能大于1; 當流量強度持續大于1時,就将出現丢包現象
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:分組丢失(丢包)

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:平均排隊時延與流量強度的關系

dend-end = n(dproc + dtrans + dprop) dproc:每台路由器和源主機上的處理時延 dtrans = l/r,r是輸出速率,l是分組長度 dpgp:鍊路的傳播時延
計算機網絡的吞吐量實際上是一個速度名額,它描述了比特經過某個節點的速度。對于某條路徑上的結點來說,和該結點有關的速度有兩個:接收資料的速度和發送資料的速度,而該結點的吞吐量是這兩個速度中較小的一個;對于某條路徑來說,該路徑的吞吐量則是所有節點的吞吐量的最小值;網絡的吞吐量可以衡量網絡的性能. 任何時間的瞬時吞吐量是主機b接受到該檔案的速率 如果該檔案由f比特組成,主機b接受到所有比特用去ts,則檔案的平均吞吐量為f/tbps 吞吐量可以近似為源和目的地之間路徑的最小傳輸速率。最小傳輸速率的鍊路為瓶頸鍊路。 在今天,網際網路對吞吐率的限制因素通常是接入網。
網際網路是一個極為複雜的系統,該系統裡存在着大量的應用程式和協定、各種類型的端系統、分組交換機和各種類型的鍊路級媒體。但是它同時也是有着清晰結構的,就像我們前面在網絡核心 一節介紹的,我們仍能建構它的結構模型
計算機網絡采用分層的體系結構,分層的體系結構因為提供子產品化而具有很高的價值,同時也易于服務實作的多樣性:某一層對其上一層提供服務,同時它可以利用下一層提供的服務。隻要對上提供的服務和對下利用的服務沒有變化,其層内部的實作并不會對系統結構産生影響;對于大而複雜且需要不斷更新的系統來說,改變服務的實作而不影響系統其他元件是分層模式的另一個重要優點 為了給網絡協定的設計提供一個結構,網絡設計者以分層的方式組織協定以及實作這些協定的軟硬體 一個協定層可以使用軟硬體實作,同時某個協定層的不同部分常常位于網絡元件的各部分。協定分層具有概念化和結構化的優點。子產品化使得更新系統元件更為容易。但是分層也有其缺點,就是功能上的備援,比如許多協定棧針對鍊路和端到端兩種情況都提供了差錯恢複功能。第二種潛在的缺點就是某層的功能可能需要僅在其它層才出現的資訊
總體來說,将各層的所有協定組合起來,稱為協定棧。網際網路的協定棧有5個層次組成:實體層、鍊路層、網絡成、傳輸層、應用層 應用層:支援各種網絡應用,如 ftp, smtp, http 傳輸層:程序-程序的資料傳輸,如 tcp, udp 網絡層:源主機到目的主機的資料分組路由與轉發,如 ip 協定、路由協定等 鍊路層:相鄰網絡元素(主機、交換機、路由器等)的資料傳輸,如以太網(ethernet)、802.11 (wifi)、ppp 實體層:比特傳輸

osi模型

在網際網路協定棧出現以前,osi模型是iso組織研發的計算機網絡結構模型。osi的模型一共有7層,從下到上依次為:實體層,鍊路層,網絡層,傳輸層,會話層,表示層,應用層。相比網際網路體系結構,osi多了兩層。 網際網路将兩層的功能留給了開發者自行實作。
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:osi 7 層參考模型資料封裝與通信過程

一個分組,在不同的層次有不同的稱謂,是因為它們經過每一層的時候就被該層封裝上了屬于該層的相關資訊,也就是前面提到的必要資訊;于是,每一分層的分組有兩種類型的字段:首部字段和有效負載;其中有效負載即為來自上一層的分組資料,而首部字段就是該層加上的必要資訊;分組不斷被封裝以實作各層協定規定的相關功能 封裝增加控制資訊,構造協定資料單元 (pdu);控制資訊主要包括:位址,差錯檢測編碼(error-detecting code),協定控制(protocol control),協定控制實作協定功能的附加資訊,如: 優先級(priority)、服務品質(qos)、 和安全控制等
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:5層模型的資料封裝

研發網絡應用的核心是寫出能夠運作在不同端系統和通過網絡彼此通信的程式;值得注意的是,我們不需要寫在網絡核心裝置如路由器或者鍊路層交換機上運作的軟體,這種設計方式即将應用程式限制在端系統的方法,促進了大量網絡應用程式的迅速研發和部署
應用程式的體系結構不同于網絡的體系結構。從應用程式研發者的角度來看,網絡體系結構是固定的,并為應用程式提供特定的服務集合;換言之,應用程式體系結構使用應用程式開發設計的,它規定了在端系統上如何組織應用程式。兩種常見的現代網絡應用程式所采用的體系結構為:客戶-伺服器體系和對等體系結構

客戶-伺服器體系結構

在該體系結構中,有一個總是打開的主機,即伺服器,它接收和服務來自其他許多被稱為客戶的主機請求;值得注意的是,在該體系結構中,客戶之間是不直接通信的;該伺服器具有固定的、周知的位址。

客戶-伺服器體系結構的著名應用有:web、ftp、telnet和電子郵件。

通常,如果僅有一台伺服器處理所有的請求,那麼伺服器系統将很快變得不堪重負,為此,配備大量主機的資料中心常被用于建立強大的虛拟的伺服器,一個資料中心可以有數十萬台伺服器,它們需要供電和維護,同時服務提供商還需要支付不斷出現的互聯和帶寬費用,以及發送和接收到達/來自資料中心的資料;

p2p 體系結構

在p2p體系結構中,對位于資料中心的專用伺服器有着最小(或者沒有)依賴。應用程式在間斷連接配接的主機對之間使用直接通信,這些主機被稱為對等方。對等方并不為服務提供商所擁有,因為這種對等方通信不需要通過專門的伺服器,是以該體系結構也被稱為對等方到對等方結構

目前,流量密集型應用都是p2p體系結構的。這些應用包括檔案共享(例如 bittorrent)、協助下載下傳(例如迅雷)、網際網路電話(例如 skype)和 iptv (例如迅雷看看)。

值得注意的是,某些應用具有混合的體系結構,它們結合了客戶-伺服器和p2p這兩種體系結果,比如許多的即時通訊工具,伺服器用來跟蹤使用者ip位址,但是使用者之間的通信則使用直接發送

p2p 體系結構最引人入勝的特性之一就是它們的自擴充性。比如在檔案共享應用中,對等方可能通過向檔案的原始擁有者送出請求而産生工作量,但是對等方也有可能通過為其他對等方傳送檔案而為原始擁有者分擔壓力;p2p體系結構也是成本有效的,因為他通常不需要龐大的伺服器基礎設施和服務帶寬。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:客戶機/伺服器結構、p2p結構

但是 p2p 也面臨着以下三個問題:

isp 友好。大多數住宅 isp 受制于非對稱帶寬應用,也就是下載下傳比上傳要多得多。但是 p2p 視訊和檔案分發應用改變了從伺服器到住宅isp的上載流量,因而給 isp 帶來壓力;

安全性。因為其高度的分布和開放式,p2p應用也可能給安全帶來挑戰;

激勵。如何說服使用者資源向應用提供帶寬、存儲和計算資源?這是一個問題;

在作業系統中,實際進行通信的是程序而不是應用程式;當程序運作在同一個端系統上時,它們使用程序間通信機制互相通信;而程序間通信的規則是由端系統上的作業系統确定的。當程序運作在不同的端系統上時,它們通過跨越計算機網絡的封包互相通信;發送程序産生封包并且向網絡中發送,接收程序接收封包并對此作出響應(不響應也是一種響應)。

客戶程序和伺服器程序

對于沒對通信程序,我們通常将這兩個程序之一辨別為客戶,而另一個程序辨別為伺服器。

需要注意的是,在某些p2p應用中,一個程序可能既是客戶也是伺服器,因為在一個檔案共享應用中,一個程序的确既能請求檔案也能發送檔案。是以從程序所扮演的角色來區分是客戶程序還是伺服器程序不夠精确,是以我們從發起通信的順序來定義它們:在給定的一對進城之間,首先發起通信的程序被标記為客戶程序,在會話開始時等待聯系的程序被稱為伺服器程序。

程序與計算機網絡之間的接口

多數應用程式是由通信程序對組成的,運作在不同端系統上的程序對之間通過計算機網絡來實作通信。是以,在應用程式程序和計算機網絡之間存在一個接口,該接口被稱為套接字。更為準确的說,套接字是同一台主機内應用層和運輸層之間的接口。由于該套接字是建立網絡應用程式的可程式設計接口,是以套接字也被稱為應用程式和網絡之間的應用程式設計接口(application programming interface).

應用程式開發者可以控制套接字在應用層的一切内容,但是對于運輸層的相關部分,幾乎沒有控制權,可以做的有:① 選擇傳輸層協定,②設定幾個傳輸層參數,比如最大緩存和最長傳輸層封包長度

程序尋址

為了向特定目的程序發送封包,發送機程序需要知道接收程序(更為準确的說是,接收程序對應的套接字)的标記。該标記由兩部分組成:①接收程序所在的主機位址,②接收程序在該主機中的标記;在網際網路中,主機由ip位址标記,其中ip位址是一個32位(ipv4)标記;而接收程序(或者說是其對應的套接字)使用端口号标記;一些常用的應用程式有着固定的端口号,比如web伺服器使用80端口、郵件伺服器(運作smtp協定)使用25端口等

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:應用程序、套接字和下面的運輸層協定

傳輸層協定的特點大緻可以從以下這四個方面考量:可靠資料傳輸、吞吐量、定時和安全性

可靠資料傳輸

如同在第一章中介紹的,分組在傳輸過程中可能會丢失。比如,分組因為路由器中的緩存溢出而被丢棄或者分組在傳輸的過程中發生了損壞等情況;有些應用是不允許資料發生丢失的,比如電子郵件、檔案傳輸、遠端主機通路、web文檔傳輸以及金融應用等。為了支援這些應用,必須做一些工作以確定應用程式一段發送的資料正确、完全地傳遞給接收資料的程序。如果一個協定提供了這樣得確定資料傳遞的服務,就認為該協提供了可靠資料傳輸。當應用程式使用可靠資料傳輸的傳輸層協定時,隻要将要發送的資料傳輸進套接字就可以完全相信該資料可以完整無差錯地到達接收方;

當一個運輸層協定不提供可靠資料傳輸時,由發送方發送的資料就可能不能夠到達接收程序。有些應用是允許這樣的情況發生的,這些應用被稱為丢失允許的應用。這類應用常見的有:交談式音頻和視訊。它們能夠承擔丢失一定量的資料損失,在這些應用中,如果丢失少量資料将出現小幹擾,但是不會出現緻命的損傷,這些應用為容忍丢失的應用。

吞吐量

在一條網絡路徑上的兩個程序之間的通信會話中,可用吞吐量就是指能夠向接收程序傳遞比特的速率。因為會有其他會話共享該網絡的路徑的帶寬,并且因為這些會話的到來和離開,可用吞吐量将發生變化;這就導緻另一種自然的服務,即運輸層協定能夠提供确切的可用吞吐量。使用這種服務時,應用程式就能以明确的速度接收資料,并且運輸層應當保證可用吞吐量必須總是至少為該速度;

對吞吐量有明确要求的應用程式被稱為帶寬敏感的應用。許多多媒體應用是帶寬敏感的(盡管某些多媒體應用程式可能采用自适應編碼技術對數字視訊和音頻以與目前可用帶寬相比對的速度加解碼。),比如網際網路電話。而彈性應用則對吞吐量沒有嚴格的要求。這類應用包括:電子郵件、檔案傳輸以及web傳送等。值得注意的是,吞吐量當然是越多越好了。

定時

定時和吞吐量都是關于速度的。一個提供定時服務的例子是:發送方注入套接字中的每個比特到達接收方的套接字不遲于100ms。也就是說,定時是對資料從發送到到達所需時間的要求,而吞吐量是對資料傳遞速度的要求。打個比方,吞吐量是指一個小時内經過某個收費站的汽車數目,而定時則是第一輛車從出發到進入收費站的時間。有些應用為了服務的有效性而對資料到達時間有嚴格的要求,常見的應用有:網際網路電話、多方線上遊戲等;

安全性

運輸層可以提供一些安全服務,以防止傳輸的資料以某種方式在這兩個程序之間被察覺到。這些安全服務包括:資料的加解密、資料的完整性和端點鑒别等。

網際網路(更一般的是tcp/ip網絡)為應用程式提供連個運輸層協定,即udp和tcp。每個協定對應用程式提供了不同服務的組合。以下為常見的網際網路應用的特點:

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:常見的網路應用的要求

tcp服務

tcp服務模型包括了面向連接配接的服務和可靠資料傳輸服務。

面向連接配接的服務:在應用層資料封包開始流動之前,tcp會在用戶端和伺服器端互相交換傳輸層控制資訊。這個握手過程将提示用戶端和伺服器端,讓它們為即将到來的大量分組做好準備;握手階段接收後将建立一個tcp連接配接。這條連結是全雙工的,即連接配接雙方使用該條連結可以同時進行封包的收發。這條連接配接将在通訊結束後拆除;

可靠的資料傳輸:應用程式使用tcp協定可實作無差錯、按适當順序傳遞所有發送的資料,沒有位元組的丢失和備援;

tcp服務還提供了擁塞控制機制。該機制不一定會給通行雙方帶來好處,但是會給網絡帶來整體好處;當發送方和接收方之間的網絡出現擁塞時,tcp将使用擁塞控制機制來使網絡恢複正常

udp服務

udp服務是一種不提供不必要服務的輕量級運輸協定。它僅提供最小服務。udp是無連接配接的也就是說通信之前沒有握手;udp不提供資料的可靠傳輸;udp也沒有擁塞控制機制。有些應用場景下,udp協定将帶來更多的便利和效率,比如dns和一些網際網路電話服務(為了避免擁塞控制協定的控制而使用udp)

傳輸層無法提供的服務

從可靠資料傳輸、吞吐量、定時、安全性等四個角度來看運輸層提供的服務,我們發現,運輸層無法對吞吐量和定時做出保證。但是,今天的網際網路能夠為時間敏感的應用提供滿意的服務,盡管它并不提供任何定時或者帶寬保證;

應用層協定定義運作在不同端系統上的應用程式程序如何互相傳遞資訊。涉及的内容包括:交換的封包類型(請求或者響應)、封包中包含哪些字段、字段如何被解釋、一個程序何時收發封包并如何對封包進行響應等内容

需要注意的是,應用層協定是網絡應用的一部分

即将介紹的應用包括:web、檔案傳輸、電子郵件、目錄服務和p2p。web部分将介紹http協定,它比較簡單和易于了解;ftp則和http形成了對照;電子郵件是比web更為複雜的應用,因為它使用了多個應用層協定;大多數使用者不會直接和dns接觸,但是dns很好地說明了一種核心的網絡功能是如何在應用層實作的。最後便是p2p應用的簡單介紹了。

http(hypertext transfer protocol)是web的應用層協定,它是web的核心;http有兩部分實作,一個用戶端程式一個伺服器程式;http定義了客戶和伺服器進行封包交換的方法; web頁面是由對象組成的,一個對象是一個檔案,它們通過一個url位址進行尋址。客戶和伺服器互動的核心思想是客戶通過http請求對伺服器發出對web頁面的請求封包,伺服器收到該封包後将傳回包含該對象的http響應封包。url位址由兩部分組成:存放對象的伺服器主機名和對象的路徑名 http使用tcp作為它的傳輸層協定;http客戶首先發起一個與伺服器的tcp連接配接,需要注意的是,伺服器根據請求作出響應,但是不存儲任何關于該客戶的狀态資訊;也正因為這樣,http被稱為無狀态協定。同時,web使用了用戶端-伺服器的應用體系結構;其中web伺服器總是開着的
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:http的請求--響應行為

在網際網路應用程式中,用戶端和伺服器将在很長的時間範圍裡通信;應用程式将根據自身的特點,選擇以規則的間隔周期性性送出請求也可以間斷性一個個送出請求。當通信是使用tcp協定時,伺服器端需要做出一個決定:這些請求是使用一個tcp連接配接完成還是通過獨立的tcp連接配接完成。如果采取前一個方法,則稱應用程式使用持續連接配接,如果使用後一種方式,則稱為非持續連接配接。 http既可使用持續連接配接也可以使用非持續連接配接。盡管http在靜默情況下使用持續連接配接

采用非持續連接配接的http

使用非持續連接配接時,每個tcp連接配接在伺服器發送一個對象後就會關閉,也就是每個tcp隻傳送一個請求封包和響應封包; 為了描述持續連接配接和非持續連接配接的特點,我們引入往返時間(round-trip time,rtt)。rtt指的是,一個短分組從用戶端到伺服器,然後再傳回用戶端所用的時間。rtt包括分組的傳播時延、排隊時延、處理時延(因為是短分組,是以其傳輸時延可不計);因為用戶端和伺服器建立tcp連接配接的時候,會通過一個三次握手的過程來交換傳輸控制資訊。三次握手的前兩次占用了一個rtt,客戶結合第三次握手通行會通過該連接配接發送一個http請求封包,一旦該分組到達伺服器,伺服器便開始使用tcp傳輸html對象。是以,粗略地說,響應時間是兩個rtt加上傳輸html的時間(不是傳播)。
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:非持久性連接配接舉例

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:請求并接收一個html檔案所需的時間估算

采用持續連接配接的http

非持續連接配接缺點:第一、 必須為每一個請求的對象建立和維護一個全新的連接配接,而每個tcp連接配接将占用系統資源,包括緩沖區和變量等,這樣伺服器的負擔就很重了。 第二,每一個對象經受兩倍 rtt 的傳遞時延。 如果使用持續連接配接,一個完整的web頁面 ( 上例中的 html 基本檔案加上10個圖形 ) 可以用單個持續 tcp 連接配接進行傳送。更有甚者,同一台伺服器上的多個頁面也可以通過同一個連接配接發送。對對象的這些請求可以一個接一個地發出,而不必等待對未決請求的回答。 無流水(pipelining)的持久性連接配接:用戶端隻有收到前一個響應後才發送新的請求,每個被引用的對象耗時1個rtt 帶有流水機制的持久性連接配接:http 1.1的預設選項,用戶端隻要遇到一個引用對象就盡快送出請求,理想情況下,收到所有的引用對象隻需耗時約1個rtt 一般來說,如果一條連接配接在一定的時間間隔後沒被使用的話,就會被關閉。http預設使用的是帶流水線的持續連接配接。

請求封包

計算機網絡(自頂向下方法)讀書筆記----吐血整理
一個請求封包具有至少一行的内容。請求封包的第一行稱為請求行(request line),其後繼的各行被稱為首部行(header lines)。請求行包含三個内容:方法字段、url字段、http版本;其中方法字段可為:get、post、put、delete、head等。url字段裡可以傳遞請求對象的标志; 首部行 host : www. someschool. edu 指明了對象所在的主機。connection : close 浏覽器告訴伺服器使用非持續連接配接;浏覽器版本是 mozilla/5.0,即 firefox 浏覽器; accept-language 首部行表示使用者想得到該對象的法語版本。 在首部行之後一個空行,之後便是請求的“實體體”。該實體體可以在post方法裡傳遞form表單内容或者傳遞其它一些二進制流資料等。值得注意的是,表單也不一定必須使用post方法。如果使用get,實體體為空,會顯示在url中。 head類似于get方法,将會用一個http封包進行響應,但是不傳回請求對象,經常用作調試跟蹤。put方法允許使用者上傳對象到指定的web伺服器上指定的路徑。delete方法允許使用者或應用程式删除web伺服器上的對象。

http響應封包格式

計算機網絡(自頂向下方法)讀書筆記----吐血整理
響應封包總體上也分三個部分,第一部分是狀态行(status line),包含http版本、狀态以及狀态資訊等内容;第二部分是首部行(header lines),包含發送日期、伺服器類型、上一次修改請求資源的時間、内容的類型等内容。第三部分是實體體(entity body),實體體包含請求對象本身。 這裡的date是從檔案系統中檢索到該對象,插入到響應封包,并發送該響應封包的時間。 常見狀态碼 200:請求成功 處理方式:獲得響應的内容,進行處理 301:請求到的資源都會配置設定一個永久的url,這樣就可以在将來通過該url來通路此資源 處理方式:重定向到配置設定的url 400:非法請求 處理方式:丢棄 404:沒有找到 處理方式:丢棄 505:伺服器不支援請求封包使用的http版本。
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:用 cookie 跟蹤用滬軟态

前面提到,http是無狀态協定,但是web站點為了識别使用者身份或者限制使用者通路的時間或者将使用者通路的内容同使用者身份相關聯,web站點可以使用cookie技術;

cookie技術包含4個元件

http響應封包裡增加一個關于cookie的首部行;

http請求封包裡增加一個關于cookie的首部行;

使用者端系統保留一個cookie檔案,由浏覽器儲存維護;

web站點建立cookie和使用者身份的關聯;

cookie 可以用于辨別一個使用者。使用者首次通路一個站點時,可能需要提供一個使用者辨別(可能是名字)。 在後繼會話中,浏覽器向伺服器傳遞一個 cookie 首部,進而向該伺服器辨別了使用者。

雖然,cookie的使用友善了使用者也友善了服務端,但是它的使用存在争議,因為使用cookie被認為是對使用者隐私的一種侵犯,因為web站點可以通過cookie得到很多使用者的資訊,并有可能将這部分資訊賣給第三方等

web緩存器( web cache)也被稱為代理伺服器,它代表初始web伺服器來滿足http請求。它有自己的存儲空間,并在存儲空間裡保持有最近請求過的對象的副本;可以通過配置浏覽器,将所有指向初始伺服器的請求首先指向代理伺服器。

當代理伺服器收到一個http請求後,它将檢查本地是否緩存過該對象,如果所請求對象在緩存中,緩存傳回對象,否則,緩存伺服器向原始伺服器發送http請求,擷取對象,然後傳回給用戶端并儲存該對象。緩存既充當用戶端,也充當伺服器

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:客戶通過web緩存器請求對象

通常,代理伺服器與用戶端的通信速度要快于初始伺服器與用戶端的連接配接速度。web代理伺服器可以大起大減少對客戶請求的響應時間;能夠大大減少一個機構的接傳入連結路到網際網路的通信量。此外,web 緩存器能從整體上大大減低網際網路上的 web 應用層流量, 進而改善了所有應用的性能。

web 緩存示例

假定: 對象的平均大小=100,000比特 機構網絡中的浏覽器平均每秒有15個到原始伺服器的請求 從機構路由器到原始伺服器的往返延遲=2秒 網絡性能分析: 區域網路(lan)的使用率=15% 接入網際網路的鍊路的使用率=100% 總的延遲=網際網路上的延遲+通路延遲+區域網路 延遲=2秒+幾分鐘+幾微秒
計算機網絡(自頂向下方法)讀書筆記----吐血整理
解決方案1: 提升網際網路接入帶寬=10mbps 接入網際網路的鍊路的使用率=15% 延遲=2秒+幾微秒+幾微秒 問題:成本太高
解決方案2: 安裝web緩存 假定緩存命中率是0.4 40%的請求立刻得到滿足,60%的請求通過原始伺服器滿足 接入網際網路的鍊路的使用率下降到60%,進而其延遲可以忽略不計,例如10微秒 總的平均延遲=網際網路上的延遲+通路延遲+區域網路延遲 =0.6×2.01秒+0.4×n微秒<1.4秒
計算機網絡(自頂向下方法)讀書筆記----吐血整理

高速緩存器的使用,帶來很多好處,但是有一個問題就是代理伺服器對緩存對象的管理:如何確定所請求的對象是最新的?其實http提供了一種機制,允許緩存器證明其使用的對象是最新的,這種機制就是條件get(conditional get)方法。使用條件get方法隻需在使用get方法的時候,增加一個if-modified-since首部行,其對應的内容是一個時間,如果所請求的資源在指定日期後被修改了,那麼伺服器将傳回新的對象,否則伺服器将傳回一個包含空實體體的封包。這樣代理伺服器就可以确認緩存是否過期了。

網際網路電子郵件系統有三個核心元件:使用者代理(user agent)、 郵件伺服器 (mail server)和簡單郵件傳輸協定(simple mail transfer protocol,smtp)

每個收發方在郵件伺服器上擁有一個郵箱;一個典型的郵件發送過程是:從發送方的使用者代理開始,傳輸到發送方的郵件伺服器,再傳輸到接收方的郵件伺服器,然後在這裡被分發到接收方的郵箱中。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖: 網際網路電子郵件系統的總體描述

smtp是網際網路中電子郵件的主要應用層協定,它使用tcp可靠資料傳輸從發送方的郵件伺服器向接收方的郵件伺服器發送郵件;在每台郵件伺服器上同時運作smtp伺服器和smtp用戶端。當郵件伺服器接收其他郵件伺服器的郵件時,它表現為smtp伺服器,當郵件伺服器向其他郵件伺服器發送郵件時,表現為smtp用戶端。

如果發送端不能将郵件發送個接受端的伺服器,發送端的郵件伺服器會在一個封包隊列中保持該封包并在以後嘗試再次發送。

傳輸的三個階段:握手、傳輸、關閉連接配接。

看一個示例:假設 alice 想給 bob 發送一封簡單的 ascii 封包 。

alice 調用她的郵件代理程式并提供 bob 的郵件位址,撰寫封包, 然後訓示使用者代理發送該封包 。

alice 的使用者代理把封包發給她的郵件伺服器,該封包被放在封包隊列中。

運作在 alice 的郵件伺服器上的 smtp 用戶端發現了封包隊列中的這個封包,建立一個到運作在 bob 的郵件伺服器上的 smtp 伺服器的 tcp 連接配接。

在經過一些初始 smtp 握手後 , smtp 客戶發送 alice 的封包。

在 bob 的郵件伺服器上,smtp 的伺服器端接收該封包。bob 的郵件伺服器然後将該封包放入 bob 的郵箱中。

在 bob 友善的時候 , 他調用使用者代理閱讀該封包。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:發送一條封包示例

值得注意的是,smtp封包一般不使用中間郵件伺服器發送封包,也就是郵件不會在中間某個郵件伺服器保留;在smtp握手階段,smtp用戶端将介紹發送方和接收方的郵箱位址;一旦介紹完畢後,smtp用戶端将開始發送封包。

smtp 使用25号端口。smtp是持續連接配接的。smtp限制郵件封包的所有部分隻能使用7比特的ascii表示,這就導緻二進制多媒體檔案需要編碼為ascii,而且在發送方需要編碼,接收方則需要解碼。

smtp 互動示例如下:

客戶發送了 5 條指令:helo(是 hello 的縮寫)、mail from、rcptto、data 以及 quit,都是自解釋的。

封包内容:“do you like ketchup? how about pickles?”

客戶發送一個隻包含一個句點的行,向伺服器訓示該封包結束了。

使用 telnet 與一個 smtp 伺服器進行一次直接對話,有興趣的可以參考利用 telnet 指令測試 smtp 服務

http和smtp都是用tcp協定;持續的http和smtp都是用持續連接配接;但是兩者也有差別。

首先http被設計為一個pull協定而smtp被設計為一個push協定。即使用者通過http主動向伺服器請求内容,而smtp則是客戶将内容推向伺服器端;

第二個差別就是http傳輸的資料不一定是用ascii字元,但是smtp則隻能使用ascii字元;

第三個重要差別就是,http将每個對象封裝在自己的響應封包裡,而smtp則将所有的封包對象放到一個封包之中;

封包由兩部分組成:一個包含環境資訊的首部和一個包含郵件内容的封包體;首部和封包體之間使用空行分開;首部行的格式為關鍵字跟冒号及其值;每個首部必須包含一個from和to首部行。首部也可以包含其它資訊,比如subject等。這與2.3.1中接觸的smtp指令不同,那節中的指令是握手協定的一部分;本節中研究的内容是郵件封包自身的一部分

需要注意的是,smtp是郵件伺服器之間發送郵件封包的協定,并不是使用者通過代理和郵件伺服器之間通信的協定;使用者代理使用郵件通路協定來從郵件伺服器上擷取郵件資訊;目前常用的郵件通路協定有第三版的郵局協定(post office protocol—version 3,pop3)、網際網路郵件通路協定(internet mail access protocol,imap)以及 http。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:電子郵件協定及其通信實體

pop3

pop3是一個非常簡單的協定,因為簡單,是以功能有限;pop3使用端口110來建立tcp連接配接(smtp使用端口25);pop3按照三個階段進行工作:特許、事務處理和更新;在特許階段,使用者代理發送密碼和使用者名,進行身份鑒别;第二階段,使用者代理取回封包,同時還可以做删除、取消删除等标記或者統計郵件資訊;第三個階段是在使用者退出後,pop3結束會話,删除被标記的郵件;

一個需要注意的是,pop3使用者代理可以使用兩種事務處理模式:一種是下載下傳并删除,另一種是下載下傳保留;下載下傳并删除的方法存在的問題是,如果使用者在一台裝置上檢視了郵件(下載下傳了郵件)後,郵件将被删除,那麼在其他裝置上将無法檢視郵件;這給使用者帶來一定的不便。使用下載下傳儲存方式,則使用者下載下傳郵件後,郵件還在伺服器上。

imap

pop3協定無法為使用者提供郵件分類管理的功能,雖然使用者可以通過将郵件下載下傳到本地,然後由使用者代理程式做分類管理,但是處理的結果是無法同步到其他檢視裝置上的。為了解決這一問題,imap誕生了。imap是一個郵件通路協定,比pop3要複雜的多,當然也就有更多的特色了。

imap将每一份郵件和一個檔案夾聯系起來,當封包第一次到達伺服器時,它與收件人的inbox相關聯。收件人可以将郵件移到新建立的檔案夾,閱讀郵件,删除郵件等。imap允許使用者在不同檔案夾裡移動郵件并且查詢郵件。值得注意的是,imap伺服器維護了imap會話的使用者狀态資訊,但是pop3并不;imap協定還允許使用者代理擷取封包元件而不是封包整體。

基于web的電子郵件

這種方式主要是指,使用者使用http協定和郵件伺服器通信。使用者代理就是普通的浏覽器,但是,郵件伺服器之間還是使用smtp協定的。

問題:域名和ip位址之間如何映射?

計算機網絡裡有一種應用專門提供這樣的服務,它就是域名系統(domain name system,dns)。dns是:①一個由分層的dns伺服器(dns serve)組成的分布式資料庫;②一個使得主機可以查詢分布式資料庫的應用層協定組成;

dns通常被其他應用層協定使用,比如:http、smtp和ftp等。這些協定在正式工作以前,首先利用dns提供的服務,将主機名轉換為ip位址,可以發現的是,dns為使用者帶來友善的同時,也為網絡應用帶來額外的時延——查詢dns伺服器的時延。需要注意的是,緩存作為一種提高性能,特别是查詢性能的手段,在dns中同樣适用。

dns運作在udp之上,使用53号端口。

除了提供主機名到ip位址的轉換外,dns還提供以下重要服務:

主機名稱:雖然,主機名比起ip位址好記多了,但是有時候我們的主機名仍然很長,很不好記憶,是以我們需要為主機名再起一個名字,這就是主機名稱,dns不但提供主機名到ip位址的轉換服務,還提供主機名與主機名稱的轉換;此時主機名被稱為規範主機名;

郵件伺服器别名:dns同樣也提供郵件伺服器主機名和别名的轉換服務,實際上,公司的郵件伺服器和web伺服器可以使用相同的主機名稱。

負載配置設定:dns也被用在備援的伺服器之間配置設定負載。每個伺服器有着不同的ip位址,但是它們都和同一個主機名相關聯,也就是一個ip位址集合同一個規範主機名相聯系;當某個dns伺服器收到dns請求時,該伺服器獎使用ip位址的整個集合作為相應,但是在每個應答中,循環這些位址的次序。因為用戶端通常都是使用ip位址集合的首個元素,是以dns就在備援的web伺服器之間配置設定了負載。同理,多個郵件伺服器可以具有相同的别名。

首先,dns使用udp作為其傳輸層協定;dns服務使用53端口;當主機上的dns用戶端收到一個轉換請求時,用戶端将向網絡發送一個dns查詢封包,然後用戶端将收到一個包含相關資訊的dns回答封包,這個封包裡有用戶端想要的内容,之後dns用戶端将ip位址傳回給請求的提出者即可。從使用dns服務的請求者來看,dns就像一個簡單的提供直接轉換服務的黑盒子。

dns采用分布式的設計方案,實際上,dns是一個在網際網路實作分布式資料庫的精彩範例!而之是以這樣做,是因為,單一的dns伺服器存在單點故障、無法保證通信容量以及無法臨近所有的查詢主機和維護困難等問題

分布式層次的資料庫

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:部分dns伺服器的層次結構

為了處理擴充性問題,dns伺服器采用層次式組織,并且分布在全世界範圍内;大緻來說,存在三種dns伺服器:根dns伺服器、頂級域(top level domain, tld)dns伺服器和權威dns伺服器。舉例說明,假定一個 dns 客戶要擷取主機名 www.amazon.com 的 ip 位址。客戶首先與根伺服器之一聯系,它将傳回頂級域名 com 的 tld 伺服器的 ip位址。 該客戶與這些 tld 伺服器之一聯系,它将為 amazon.com 傳回權威伺服器的 ip 位址。最後,客戶與amazon.com 權威伺服器之一聯系,傳回其 ip 位址。

根dns伺服器:網際網路上有13個根dns伺服器,大部分分布在北美洲。

頂級域dns伺服器:負責頂級域名,如com,org,net,edu,gov以及各個國家的頂級域名的轉換。

權威dns伺服器:組織的域名解析伺服器,提供組織内部伺服器的解析服務

除了上面三種dns伺服器,還有一種不在dns層次結構之中,但是很重要的dns,是本地dns伺服器。本地dns伺服器通常鄰近其所在網絡的其他主機。當主機發出dns請求時,該請求被發往本地dns伺服器,它起着代理的作用,并将請求轉發到dns伺服器層次結構中。

dns查詢有兩種,一種是遞歸查詢一種是疊代查詢;實踐中,查詢通常滿足這樣的模式:從請求主機到本地dns伺服器的查詢是遞歸的,其餘查詢是疊代的。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:dns中的遞歸查詢、疊代查詢

dns緩存

dns緩存實際上是為了改善時延性能并且減少在網際網路上傳輸的dns封包數量而引入的。dns緩存原理十分簡單,每當dns伺服器送出請求後收到回答時,就将回答的内容緩存在它自己的主機空間上。這樣,如果有相同的請求到達時,就不需要再去送出請求,直接使用緩存即可;因為有了緩存,本地dns就可以直接提供一些經常被通路的主機名所對應的ip位址,而不需要詢問根dns伺服器了。需要注意的是,緩存不可避免的一個問題:有效時間。如果緩存過時而未得到更新,那麼就會導緻一些請求失敗。

共同實作分布式資料庫的所有dns伺服器存儲了資源記錄(resource record)。而rr提供了主機名到ip位址的映射資訊;一條rr是具有一下字段的4元組:(name, value, type, ttl);其中ttl是指該記錄的生存時間,它決定了該條記錄何時被删除。

type

name

value

舉例

a

主機域名

對應的ip位址

(tayl.bar.foo.com, 145.37.93.126, a)

ns

該域權威域名解析伺服器的主機域名

(fgcom, cins.foo.com, ns)

cname

主機名稱

規範主機名

(foo.com, relay1.bar.foo.com, cname)

mx

郵件伺服器的規範主機名

(foo.com, mail.bar.foo.com, mx)

舉例來說,假設一台 edu tld 伺服器不是主機 gaia.cs.umass.edu 的權威 dns 伺服器,則該伺服器将包含一條包括主機 cs.umass.edu 的域記錄,如(umass.edu,dns.umass.edu,ns);該 edu tld 伺服器還将包含一條類型 a 記錄,如(dns.umass.edu,128.19.40.111,a),該記錄将名字 dns. umass. edu 映射為一個 ip 位址。

dns封包

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:dns封包結構

dns封包有兩種,即查詢封包和回答封包,并且兩種封包有着相同的結構: 前12位元組為首部區域。辨別符是一個用來标記該查詢的16比特數。該标志符會被複制到相應的回答封包裡,以便比對請求和回答; 标志字段有若幹标志,用來指出封包的類型(請求還是響應)、查詢類型(遞歸還是疊代)、是否是所請求名字的權威dns伺服器、以及4個有關數量的字段,用來訓示4類資料區域出現的數量; 問題區域包含了正在進行的查詢資訊,包括名字字段、查詢類型; 回答區域包含了對最初請求的名字的資源記錄,回答封包的回答區域可以包含多條rr,是以一個主機名能有多個ip位址; 權威區域包含了其他權威伺服器的資訊; 附加區域包含了其它有幫助的記錄,比如在對于一個mx類型的請求回答封包裡,回答區域裡指出了郵件伺服器的規範主機名,而附加區域裡就有可能包含一個類型為a的關于該規範主機名的的ip位址;

向dns資料庫中插入資料

需要在注冊登記機構完成這一任務,當你注冊一個域名時,需要向該機構提供你的基本和輔助dns伺服器的名字和ip位址;該注冊機構将確定一個類型為ns和類型為a的記錄輸入對應的頂級域名伺服器;這樣就完成了插入資料。

p2p 體系結構的擴充性

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:檔案分發問題的示例圖

問題 : 從一個伺服器向n個節點分發一個檔案需要多長時間?下面對比客戶機/伺服器 和 p2p 檔案分發時間。

對于客戶機/伺服器模式下的檔案分發:伺服器串行地發送n個副本,用時 nf/us,客戶機 i 需要 f/di 時間下載下傳。則最小的分發時間 dcs = max{nf/us,f/min(di)}

對于 p2p 模式的檔案分發:伺服器必須發送一個副本,使用者 f/us,客戶機 i 需要f/di 時間下載下傳,總共需要下載下傳 nf 比特,最快的可能上傳速率為 us + ui。則最小的檔案分發時間 dp2p = max { f/us,f/min(di),nf/(us + ui)}

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:p2p 和客戶-伺服器體系結構的分發時間

bittorrent

bittorrent 是一種用于檔案分發的流行p2p協定;用bittorrent的術語來說,參與一個特定檔案分發的所有對等方的集合被稱為一個洪流(torrent);在一個洪流中的對等方彼此下載下傳等長度的檔案塊;當一個對等方下載下傳檔案塊的時候,也向其他對等方發送了多個塊;一旦某對等方獲得了完整檔案,就可以自私地離開洪流或者大公無私地留下來繼續向其他對等方發送檔案。 每個洪流都有一個追蹤器(tracker),當一個對等方加入某洪流時,它向追蹤器注冊自己,并周期性地通知追蹤器它仍在該洪流中。以這種方式,追蹤器跟蹤參與在洪流中的對等方。 舉例說明:alice加入某洪流時,會在追蹤器裡進行注冊,周期性通知追蹤器它仍在洪流中。我們稱所有與alice成功的建立了一個tcp連結的對等方成為鄰近對等方。洪流随機從參與對等方的結合中選擇一個子集,将他們的ip位址發給alice,alice維護這張對等方清單,試圖與所有對等方建立并行的tcp連接配接。alice周期詢問每個鄰近對等方(連上的)他們有的檔案塊清單,她随時知道鄰居有哪些檔案塊。
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:用 bittorrent 分發檔案

在決定請求哪些塊的過程中 , alice 使用一種稱為最稀缺優先(rarest erst)的技術。這種技術的思路是,針對她沒有的塊在她的鄰居中決定最稀缺的塊(數量最少的塊),并首先請求那些最稀缺的塊。這樣,最稀缺塊得到更為迅速的重新分發,其目标是均衡每個塊在洪流中的副本數量。

alice優先從像她傳時速度最快的鄰居(4個,每10s修改一次)那裡擷取檔案塊。每過30s,alice也要随機選擇另外一個對等方bob,向他發送塊。若alice是bob最快的前四快,bob也是alice的前4快,則bob和alice互相發送資料。每過30s換一個新的對象,互相交換資料(一報還一報),為了使對等方能夠找到彼此協調的速率上傳。

傳輸層協定為運作在不同端系統上的應用程序之間提供邏輯通信功能;應用層程序使用傳輸層提供的邏輯通信功能而無需考慮實作通信的實體基礎設施的細節;

值得注意的是,傳輸層協定是在端系統中實作的而不是在路由器中實作的。發送方将應用遞交的消息分成一個或多個的 segment,并向下傳給網絡層;接收方将接收到的segment組裝成消息,并向上交給應用層。

網絡應用可以使用多種傳輸層協定,網際網路有兩種傳輸層協定,即tcp和udp,不同的傳輸層協定提供不同的運輸層服務

網絡層提供主機之間的邏輯通信機制

傳輸層提供應用程序之間的邏輯通信機制,位于網絡層之上,依賴于網絡層服務,對網絡層服務進行(可能的)增強

網際網路為應用層提供了截然不同的兩種傳輸層協定:udp(使用者資料報協定)它提供一種不可靠、無連接配接的服務;另一種是tcp,它提供可靠的,面向連接配接的服務,有擁塞控制,流量控制機制和連接配接建立過程; 我們将運輸層分組稱為封包段 ( segment) 。

簡單了解一下網際網路的網絡層,網絡層協定有一個名字即ip,即網際協定。ip為主機間提供邏輯通信,ip的服務模型為盡力而為傳遞服務(best-effort delivery service)。它不保證封包段的傳遞、不保證封包段按序傳遞、不保證封包段中資料的完整性;即ip提供一種不可靠的服務;每台主機都需要有一個網絡層位址,即ip位址。

将主機間傳遞擴充到程序間傳遞被稱為運輸層的多路複用(transport-layer multiplexing)與多路分解(demultiplexing)

将運輸層封包段中的資料傳遞到正确的套接字的工作稱為多路分解 ( demultiplexing)。在源主機從不同套接字中收集資料塊,并為每個資料塊封裝上首部資訊(這将在以後用于分解)進而生成封包段,然後将封包段傳遞到網絡層,所有這些工作稱為多路複用 ( nmhiplexing) 。

實際上,每個套接字都有一個唯一的id,被稱為端口号;而在傳輸層接收到來自應用程式的分組并通過添加傳輸層首部而形成封包段的過程中,該端口号被寫入;端口号大小在0-65535之間,其中0-1023屬于周知端口号,它們為特定的socket而擁有。

無連接配接的多路複用與多路分解

需要注意的是,在建立socket的時候,是由傳輸層為之配置設定端口号;一個udp套接字由二進制組标志:(目的ip位址,目的端口号);如果兩個udp封包段有不同的源ip位址或者源端口号,但是有相同的目的ip和目的端口号的話,它們将通過同一個socket到達同一個應用程式。

面向連接配接的多路複用與多路連接配接

tcp協定中的socket是通過一個四元組來标記的:(源ip位址,源端口号,目的ip位址,目的端口号);兩個具有不同源ip位址或者源端口号,但有相同的目的ip位址和目的端口号的tcp封包段将通過兩個不同的socket進入同一應用程序;這也表示,一個應用程序可以關聯多個socket,而一個socket将隻關聯一個應用程序;常常,這樣的對應關系是通過線程來實作的:一個程序有多個線程,而每個線程關聯了一個socket;這樣做可以提高伺服器性能嘛

實際上,傳輸層就是根據這些資訊來實作多路分解的;而這些資訊是在多路複用的時候被放置在封包段中的

udp除了實作了複用/分用功能和簡單的錯誤校驗外,幾乎沒有對 ip 增加别的東西;udp 提供盡力而為傳遞服務服務,udp段可能丢失、非按序到達;udp是無連接配接的,發送方和接收方之間不需要握手,每個udp段的處理獨立于其他段。

tcp提供可靠資料傳輸和擁塞控制,為什麼還需要udp呢?udp有以下好處:

應用可更好地控制發送時間和速率

無需建立連接配接 (減少延遲減少延遲)。這也可能是dns使用udp而不是tcp的主要原因,如果使用tcp的話,dns服務将會慢很多。

無需維護連接配接狀态:tcp為了實作可靠資料傳輸和擁塞控制需要在端系統中維護一些參數,這些參數包括:接收和發送的緩存、擁塞控制參數、确認号和序号;這些參數資訊都是必須的;而udp因為不建立連接配接,是以自然也就不需要維護這些狀态,這就減少了時空開銷;

分組首部更小:tcp有20位元組的首部開銷,而udp隻有8位元組;

udp常用于流媒體應用,容忍丢失,速率敏感,udp還用于dns和snmp。

表: 流行的網際網路應用及其下面的運輸協定

應用

應用層協定

運輸層協定

電子郵件

smtp

tcp

遠端終端通路

telnet

web

http

檔案傳輸

ftp

遠端檔案伺服器

nfs

udp

流式多媒體

通常專用

udp或tcp

網際網路電話

網絡管理

snmp

路由選擇協定

rip

名字轉換

dns

需要注意的是,使用udp仍然可以實作可靠資料傳輸,隻不過這一部分功能需要在應用程式中自主開發;将可靠性直接建構于應用程式中,将使其既可以可靠地傳輸資料又可以避免受制于tcp的擁塞控制(傳輸速率的控制)

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:udp封包段結構

udp首部隻有4個字段,每個字段占用兩個位元組,分别是:源端口号、目的端口号、長度和校驗和;長度字段訓示了在 udp 封包段中的位元組數(首部加資料)。接收方使用檢驗和來檢查在該封包段中是否出現了差錯。

檢測目的:檢測udp段在傳輸中是否發生錯誤(如位翻轉)

發送方

将段的内容視為16-bit整數

校驗和計算:計算所有整數的和,進位加在和的後面,将得到的值按位求反,得到校驗和

發送方将校驗和放入校驗和字段

接收方

計算所收到段的校驗和

将其與校驗和字段進行對比,不相等就是檢測出錯誤,相等就是沒有檢測出錯誤(但可能有錯誤)

校驗和計算示例,注意:最高位進位必須被加進去

計算機網絡(自頂向下方法)讀書筆記----吐血整理

可靠資料傳輸為上層實體提供的服務抽象是:資料可以通過一套可靠的信道進行傳輸,借助于可靠信道,傳輸資料就不會受到損壞或者丢失;并且所有資料都可以按照其發送順序進行傳遞。而這正是tcp向調用它的應用所提供的服務模型。

實作這種抽象服務是可靠資料傳輸的責任,但是因為可靠資料傳輸的底層協定可能是不可靠的,是以這項任務有一點困難;

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:可靠資料傳輸:服務模型與服務實作

1. 經完全可靠信道的可靠資料傳輸:rdt 1.0

考慮最簡單的情況,即底層信道是完全可靠的。我們稱該協定為 rdt 1.0
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:rdt1.0:用于完全可靠信道的協定

2. 經具有比特差錯信道的可靠資料傳輸:rdt 2.0

rdt 2.0 中引入的新機制 差錯檢測:利用校驗和檢測位錯誤 接收方回報控制消息:ack/nak,确認機制(acknowledgements, ack)接收方顯式地告知發送方分組已正确接收 接收方顯式地告知發送方分組已正确接收;nak:接收方顯式地告知發送方分組有錯誤 重傳:發送方收到nak後,重傳 這種基于重傳機制的可靠資料傳輸協定稱為自動重傳請求(automatic repeat request,ar)協定。 rdt2.0的發送端每發送一個分組需要等待接收端的确認信号,這種協定被稱為停等( stop-and-wait)協定。
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:rdt2.0:用于具有比特差錯信道的協定

3. rdt 2.1:應對ack/nak 破壞

rdt 2.0 中有一個緻命的缺陷,就是沒有考慮到 ack 和 nak 分組受損的可能性。這裡的難點在于,如果一個 ack 或 nak 分組受損,發送方無法知道接收方是否正确接收了上一塊發送的資料 。 考慮ack和nak受損的個兩可能性: 增加足夠的校驗和比特 當接受到模糊不清的ack和nak分組時,隻需要重傳目前資料分組。這引入了備援分組 備援分組的根本困難在于接收方不知道它上次所發送的ack和nak是否被發送方正确接收到。是以它無法事先知道接收到的分組是新的還是一次重傳。 解決這個新問題的一個簡單的方法就是發送方給每個分組增加序列号,接收方丢棄重複分組。
與rdt 2.0相比,rdt 2.1變化如下: 發送方: 為每個分組增加了序列号,因為是停等協定,兩個序列号(0, 1)就夠用 需校驗ack/nak消息是否發生錯誤 狀态數量翻倍:狀态必須“記住”“目前”的分組序列号 需判斷分組是否是重複,目前所處狀态提供了期望收到分組的序列号 注意:接收方無法知道ack/nak是否被發送方正确收到
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:rdt2.1

4. rdt 2.2: 無nak消息協定

我們真的需要兩種确認消息(ack + nak)嗎?與rdt2.1功能相同,但是隻使用ack,如何實作呢? 接收方通過ack告知最後一個被正确接收的分組,在ack消息中顯式地加入被确認分組的序列号 發送方收到重複ack 之後,重傳目前分組
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:rdt 2.2 發送端

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:rdt 2.2 接收端

5. 經具有比特差錯的丢包信道的可靠資料傳輸:rdt3.0

如果信道既可能發生錯誤,也可能丢失分組,“校驗和 + 序列号 + ack + 重傳”就不夠了 方法:發送方等待“合理”時間 需要定時器 如果沒收到ack,重傳 如果分組或ack隻是延遲而不是丢了,重傳會産生重複,序列号機制能夠處理,接收方需在ack中顯式告知所确認的分組
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:rdt 3.0

在 rdt 3.0 中,丢包的問題讓發送方解決。不管是發送的分組丢失,還是接收方傳回的确認分組丢失,隻要在經過一定的時延後,讓發送方重發該分組即可。 由此産生的 備援資料分組 則由接收方通過序号處理。為了實作基于時間的重傳機制,需要一個倒計時定時器 因為分組序号在 0 和 1 之間交替,是以 rdt 3.0 有時被稱為 比特交替協定。
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:rdl3.0 的運作,比特交替協定

rdt 3.0的核心問題在于他是一個停等協定

流水線協定

rdt 3.0 是一個功能正确的協定,但是由于它是一個停等協定,大部分的時間都浪費在等待确認上面,是以性能不好。解決這種特殊性能問題的一個簡單的方法是:不使用停等方式運作,允許發送方發送多個分組而無需等待确認。這種技術被稱為 流水線。 要使用流水線技術,則須: 增加序号範圍。因為要傳送多個分組,而每個傳輸中的分組必須有一個單獨的序号。 協定的發送方和接收方兩端必須能緩存多個分組。發送方至少得能緩存那些已發送但未确認的分組,而接收方或許也需要緩存那些已經正确接收的分組。 所需序号的範圍和對緩沖的要求取決于資料傳輸協定如何處理丢失、損壞及延時過大的分組。 流水線的差錯恢複有兩種基本方法: 回退 n 步(go-back-n,gbn)) 選擇重傳(selective repeat,sr)
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:停等和流水線發送

分組頭部包含 k-bit 序列号

[0,base - 1] 對應已經發送并被确認的分組

[base,nextseqnum - 1]對應已經發送但未被确認的分組

[nextseqnum,base + n - 1] 對應要被立即發送的分組

大于或等于 base + n 的序号是不能使用的

n 被稱為視窗長度(window size),gbn 協定也常被稱為滑動視窗協定(sliding-window protocol)

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:在 gbn 中發送方看到的序号

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:gbn發送方、接收方的擴充fsm描述

發送方需要響應的事件有:上層調用、收到ack、逾時事件;

上層調用:檢查next sequence是否在視窗之内,如果在,這說明發送方還有發送能力,發送;

收到ack:回退n步政策對序号為n的分組采取累積确認的方式,即當收到序号為n的ack時,表明序号小于等于n的分組全部到位;

逾時事件:如果發生逾時事件,那麼發送方會重發所有已發送但是未确認的分組,即分組号在base和next sequence-1之間的所有分組;這也是為什麼叫“回退n步”,如果收到一個ack,則定時器會重行啟動;如果沒有待确認的分組,定時器将被終止;

在接收方,隻需要記住唯一的expectedseqnum。如果到達分組的序号為n且該分組是按序到達,那麼發送ack,這就導緻發送方移動視窗;

如果不是按序到達,接收方沒有緩存,丢棄所有失序分組,重新确認序列号最大的、按序到達的分組,丢棄一個正确接收的失序分組可能會導緻更多的重傳。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:運作中gbn

gbn 的缺點:單個分組的差錯就能夠引起 gbn 重傳大量分組,許多分組根本沒有必要重傳。 選擇重傳(sr)協定通過讓發送方僅重傳那些它懷疑在接收方出錯(即丢失或受損)的分組而避免了不必要的重傳。
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖: 選擇重傳(sr)發送方與接收方的序号空間

sr 發送方的事件和動作: 從上層接收資料:檢查下一個可用于該分組的序号,若在發送方的視窗内,則将資料打包發送。 逾時:定時器再次用來防止丢失分組。但是現在每個分組必須得有單獨的定時器。 收到 ack:倘若該分組序号在視窗内,則 sr 發送方将那個被确認的分組标記為已接收。如果該分組的序号等于send_base,則視窗基序号向前移動到具有最小序号的未确認分組處。
sr 接收方的事件于動作: 序号在 [rcv_base,rcv_base + n -1] 内的分組被正确接收。在此情況下,收到的分組落在接收方的視窗内,一個選擇 ack 被回送給發送方。如果該分組以前沒收到過,則緩存該分組。如果該分組的序号等于接收視窗的基序号,則該分組及以前緩存的序号連續的分組傳遞給上層。 序号在 [rcv_base - n,rcv_base - 1] 内的分組被正确接收。産生一個 ack,即使該分組是接收方以前已确認過的分組。 其他情況:忽略該分組。
計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖: sr操作

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:sr接收方視窗太大的困境:是一個新分組還是一次重傳

要避免這個問題,序列号空間大小與視窗尺寸需滿足如下關系,ns +nr <=2k

tcp協定是面向連接配接的協定。tcp隻運作在端系統之上,更像一種狀态而不是實體的、實際的連接配接。tcp提供全雙工服務,并且是點對點的,tcp協定無法提供“多點傳播”服務,一條tcp連接配接隻關聯一個發送方和接收方;

tcp建立過程稱為“三次握手”,前兩次封包段不承載“有效負載”,第三次握手封包段是可以裝載“有效負載”。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:tcp三次握手

當tcp連接配接建立後,兩個應用程序就可以發送資料了。應用程式将要發送的資料通過socket傳遞給tcp,tcp将資料引導到該連接配接的發送緩存,發送緩存大小是在三次握手的過程中确定的;之後tcp将時不時從該緩存中拿出資料進行發送,一個有趣的事情是,tcp規範中沒有規定tcp應該在何時發送緩存裡的資料,描述為“tcp應該在它友善的時候以封包段的形式發送資料”;tcp每次可以從緩存中發送的最大資料長度稱為于最大封包段長度(maximum segment size,mss)。一般來說,mss+tcp/ip首部的長度要小于等于鍊路的最大傳輸單元(maximum transmission unit,mtu)。而以太網和ppp的mtu都等于1500位元組,tcp/ip的首部通常為40位元組,是以mss一般來說為1460位元組。

tcp連接配接的每一端都有發送和接收緩存。

tcp封包段結構,從整體上來說由首部+資料字段組成;其中資料字段來自應用層,其長度不能大于mss;首部的正常長度為20位元組,但是值得注意的是,tcp首部是可變長的;tcp首部是以32比特為機關組織的,其結構組成如下圖:

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:tcp封包段結構

源端口号和目的端口号:這兩個資料用于tcp的多路複用和多路分解;分别為16位;

序号:序列号指的是segment中第一個位元組的編号,而不是中第一個位元組的編号。建立tcp連接配接時,雙方随機選擇序列号;

确認号:tcp被稱為提供累積确認,确認号表示期望收到的下一位元組的序号。

首部長度:以32比特的字為機關的tcp首部長度。

選項字段:該字段用于在發送方和接收方之間協商mss的大小,在高速網絡環境下,也可用于調節視窗大小;

标記字段

1)ack位表示确認号字段的裡的值是否有效,如果ack被置位,那麼該封包段就對确認号所訓示的封包段進行了确認;

2)rst、syn和fin位用于tcp的連接配接和拆除;

3)psh被置位時,訓示接收方應該立即将資料交給上層;

4)urg被置位時表示封包段裡存在着發送端的上層實體置為緊急的資料;緊急資料的最後一個位元組由16位緊急指針指出。當緊急資料存在并且給出了指向緊急資料尾指針時,tcp必須通知接收端的上層實體;

實際上,psh、urg和緊急資料指針在實踐中并沒有被使用;标記字段一共6比特;

1. 估計往返時間

tcp使用一種sample rtt的方法來估計rtt。sample rtt就是從某封包段發出到收到對該封包段的确認之間的時間量。大多數tcp的實作是在某個時刻做一個sample rtt測試。tcp并不為已經重發的封包段做sample rtt測試,它隻為傳輸一次的封包段測量sample rtt。

tcp 維持一個 samplertt 均值(稱為estimatedrtt),一旦獲得一個新samplertt時,tcp 就會根據下列公式來更新 estimated rtt,這種方法也被稱為指數權重移動平均:estimated rtt=(1-a)estimated rtt+a*sample

測量rtt的變化也是有價值的。devrtt用于估算samplertt偏離estimatedrtt的程度。devrtt =(1-b)devrtt+b*|sample rtt-estimated rtt|

其中b的推薦值為0.25;當sample rtt變化較大的時候,devrtt的值較大,當sample rtt變化較小的時候,devrtt就較小;

2. 設定和管理重傳逾時間隔

tcp是如何考慮逾時時間的呢?該時間因略大于測量的rtt,過小容易引起不必要的重傳,過大時網絡對于封包段丢失情況的反應就會變慢;最後tcp采用了如下計算方式:timeout interval=estimated rtt+4*dev rtt

當出現逾時後,timeoutinteval 值将加倍。一旦封包段收到并更新estimated rtt後,timeinteval 就又用上值計算了。

tcp使用逾時重傳和備援确認技術來處理逾時、丢失等情況;使用确認号、序号等技術來保證按序到達;使用校驗和來檢驗是否封包段在傳輸過程中是否發生了錯誤; tcp 發送方有三個與發送和重傳有關的事件: 從上層應用程式接收資料 定時器 收到 ack

1. 逾時時間加倍

在大多數tcp實作中,當發生逾時事件時,直接将逾時時間設定為原來的兩倍;然而,每當定時器在另兩個事件(收到ack和接收到上層應用資料)發生時,新的逾時時間将由 estimated rtt和 dev rtt 兩個值計算出來。

2. 快速重傳

一旦收到 3 個備援 ack,tcp 就執行快速重傳(fast retransmit)。如果發送方收到備援ack,說明有多個封包段到達了接收端,但不是接收端所期望的——這意味着,很有可能發生了丢失。是以發送方可以在定時器過時之前快速重傳所丢失的封包段。

是回退n步還是選擇重傳

tcp 确認是累積式的,tcp 發送方僅需維持已發送過但未被确認的位元組的最小序号(sendbase)和下一個要發送的位元組的序号(nextseqnum)。在這種意義下,tcp 看起來更像一個 gbn 風格的協定。但是 tcp 和 gbn 協定之間有着一些顯著的差別。許多 tcp 實作會将正确接收但失序的封包段緩存起來。

對tcp提出的一種修改意見是所謂的選擇确認——即接收方對失序到達的分組也會确認,當該機制和重傳機制相結合使得tcp更像選擇重傳,于是tcp的差錯恢複協定最好被分類為gbn和sr協定的混合體。

流量控制是一個速度比對服務:tcp連接配接的發送方和接收方都各自維護一個緩存,是以兩者的資料交換應該在一個合理的速度範圍内:不讓對方發生資料溢出;tcp為它的應用程式提供了這種服務:流量控制服務。雖然流量控制和擁塞控制所采取的動作非常相似,但是它們的目的很明顯并不同。在接下來的讨論中,我們将假設tcp是這樣實作的,即tcp接收方丢棄失序到達的封包段

在tcp首部中有一個接收視窗字段,tcp連接配接的雙方通過該字段來向對方表明自己的視窗大小,即緩存空間的大小;同樣,在tcp連接配接的兩端,各自維護着相關的變量:last sent、last acked;在發送方,這兩個變量之間的分組就是已經發送但是尚未确認的分組;而在接收方,last read表示應用程序下一次讀取的資料,last revd表示最後納入緩存的封包段編号(注意,我們讨論的前提是tcp會将失序到達的封包段丢棄);通過這些變量以及封包段首部中視窗大小字段,我們就可以對發送速度做一些控制:在發送方last sent-last acked應該小于等于接收方的視窗大小;在接收端a=last received-last read就是已經使用的空間大小,是以視窗大小=buffer-a;

當接收到視窗大小為0的封包段後,發送方會向接收方間隔發送隻有一個位元組的資料。

1. tcp三次握手

一開始,用戶端和服務端都處于 closed 狀态。先是服務端主動監聽某個端口,處于 listen 狀态

第一個封包——syn 封包

用戶端會随機初始化序号(client_isn),将此序号置于 tcp 首部的"序号"字段中,把 syn 标志位置為 1 ,表示 syn 封包。把syn封包發給服務端表示向服務端發起連接配接,之後用戶端處于 syn-sent 狀态。

第二個封包——syn + ack 封包

服務端收到用戶端的 syn 封包後,首先服務端也随機初始化自己的序号(server_isn),将此序号填入 tcp 首部的"序号"字段中,其次把 tcp 首部的"确認号"字段填入 client_isn + 1,把 syn 和 ack 标志位置為 1,發給用戶端,服務端處于 syn-rcvd 狀态。

第三個封包 —— ack 封包

用戶端還要回應一個應答封包,應答封包 tcp 首部 ack 标志位置為 1 ,其次“确認号”字段填入 server_isn + 1 發送給服務端,用戶端處于 established 狀态。

伺服器收到用戶端的應答封包後,也進入 established 狀态。

第三次握手可以攜帶資料,前兩次握手不可以攜帶資料

計算機網絡(自頂向下方法)讀書筆記----吐血整理

為什麼連接配接建立需要三次握手,而不是兩次握手?

防止失效的連接配接請求封包段被服務端接收,進而産生錯誤。(主要原因)

同步雙方的初始序列号

避免資源浪費

原因1:防止失效的連接配接請求封包段被服務端接收,進而産生錯誤

client a發出去的第一個連接配接請求封包并沒有丢失,而是因為某些未知的原因在某個網絡節點上發生滞留,導緻延遲到連接配接釋放以後的某個時間才到達另一端(server)b。本來這是一個早已失效的封包段,但是b收到此失效的封包之後,會誤認為是a再次發出的一個新的連接配接請求,于是b端就向a又發出确認封包,表示同意建立連接配接。如果不采用“三次握手”,那麼隻要b端發出确認封包就會認為新的連接配接已經建立了,但是a端并沒有發出建立連接配接的請求,是以不會去向b端發送資料,b端沒有收到資料就會一直等待,這樣b端就會白白浪費掉很多資源。

原因3:避免資源浪費

如果用戶端的 syn 阻塞了,重複發送多次 syn 封包,那麼伺服器在收到請求後就會建立多個備援的無效連結,造成不必要的資源浪費。

2. tcp四次揮手

當通信完成後,a和b都可以主動斷開連接配接。

a,b都處于estab-lished建立連接配接狀态。當a發送完資料後,想要斷開連接配接,向b發送fin=1(1代表請求斷開連接配接)seq=u,發送後,a進入fin-wait-1 終止等待1狀态。

當b收到a的請求後,回複ack=1(确認收到)seq=v,ack=u+1(請求下一個發送的包為u+1),當b發送後,進入close-wait關閉等待狀态

a收到b的回複後,進入fin-wait-2終止等待2狀态,因為b僅僅是回複了,我收到你的斷開請求了,但是b沒說是否同意斷開,是以a繼續等待。

伺服器b再次發送fin=1(發送中斷請求,即同意中斷),ack=1(确認收到)seq=w,ack=u+1,當b發送後進入list-ack最後确認狀态。

當a收到b的中斷請求後,發送回複,ack=1(确認收到)seq=u+1,ack=w+,,發送完後a進入time-wait時間等待狀态,因為網絡中可能還有資料在傳輸,是以a要等待一段時間,确認這些資料發送成功。

當b收到a的确認後,進入closed關閉狀态,斷開與a連接配接,然後會迅速進入listen收聽狀态,繼續接受下一個用戶端的請求連接配接。當a等待2msl(tcp封包段在網絡中的最大生存時間,rfc 1122标準的建議值是2min),進入closed關閉狀态,斷開與伺服器b連接配接。

為什麼a要先進入time-wait狀态,等待時間後才進入closed狀态?

為了保證b能收到a的确認應答。若a發完确認應答後直接進入closed狀态,那麼如果該應答丢失,b等待逾時後就會重新發送連接配接釋放請求,但此時a已經關閉了,不會作出任何響應,是以b永遠無法正常關閉。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:tcp四次揮手

擁塞(congestion)非正式定義:“太多發送主機發送了太多資料或者發送速度太快

,以至于網絡無法處理”。表現為分組丢失(路由器緩存溢出)和分組延遲過大(在路由器緩存中排隊)

擁塞的成因和代價:場景1

兩個senders,兩個receivers,一個路由器,無限緩存,沒有重傳

計算機網絡(自頂向下方法)讀書筆記----吐血整理
計算機網絡(自頂向下方法)讀書筆記----吐血整理

擁塞時分組延遲太大,達到最大throughput

擁塞的成因和代價:場景2

一個路由器, 有限buffers,sender重傳分組

計算機網絡(自頂向下方法)讀書筆記----吐血整理

情況a: sender能夠通過某種機制獲知路由器buffer資訊,有空閑才發λin == λout(goodput)

情況b: 丢失後才重發:λin’ > λout

情況c:分組丢失和定時器逾時後都重發, λin’ 變得更大

計算機網絡(自頂向下方法)讀書筆記----吐血整理

擁塞的代價:對給定的”goodput”,要做更多的工作 (重傳),造成資源的浪費

擁塞的成因和代價:場景3

四個發送方,多跳,逾時/重傳

計算機網絡(自頂向下方法)讀書筆記----吐血整理
計算機網絡(自頂向下方法)讀書筆記----吐血整理

擁塞的另一個代價:當分組被drop時,任何用于該分組的“上遊”傳輸能力全都被浪費掉

擁塞控制:擁塞控制是作用于網絡的,它是防止過多的資料注入到網絡中,避免出現網絡負載過大的情況;

流量控制:流量控制是作用于接收者的,它是控制發送者的發送速度進而使接收者來得及接收。

端到端擁塞控制:網絡層不需要顯式的提供支援,端系統通過觀察loss,delay等網絡行為判斷是否發生擁塞,tcp采取這種方法

網絡輔助的擁塞控制:路由器向發送方顯式地回報網絡擁塞資訊,簡單的擁塞訓示(1bit):sna,decbit,tcp/ip ecn,atm,訓示發送方應該采取何種速率

我們将tcp發送方的丢包事件定義為:要麼逾時,要麼收到接收方的3個備援ack;

tcp擁塞控制算法包含三個主要部分:慢啟動、擁塞避免、快速恢複;慢啟動和擁塞控制是tcp的強制部分;兩者的差異在于對收到的ack做出反應時增加擁塞視窗(cwnd)長度的方式;快速恢複是推薦部分,對于tcp發送方并非是必須的

1.慢啟動

tcp連接配接在開始的時候,其cwnd常設定為一個mss,然後在慢啟動狀态每收到一個ack,cwnd就增加一個mss;這樣的話,在慢啟動階段,發送速率是指數增加的(1,2,4,8…)

何時結束這種指數增長?有三種情況:發送了逾時、發生了備援ack以及cwnd達到ssthresh(慢啟動門檻值的速記)。在慢啟動階段,如果發生了逾時事件,那麼ssthresh就被設定為目前cwnd的一半,然後将cwnd置為1;當cwnd逐漸增加到ssthresh時,tcp結束慢啟動,進入擁塞避免模式。在擁塞避免模式裡,tcp将更謹慎地增加cwnd;如果收到備援ack,那麼tcp會做一次快速重傳,然後進入快速恢複階段;

2.擁塞避免

一旦進入擁塞避免狀态,cwnd的值大約是上次遇到擁塞時的一半,是以tcp在每個rtt中,隻将cwnd增加一個1個mss大小;也就是說在擁塞避免階段,cwnd是線性增加的;

當出現逾時時,tcp将cwnd設定為1,然後将ssthresh更新為cwnd的一半;當收到備援ack時,tcp将cwnd減半,然後将ssthresh置為cwnd值的一半,并且進入快速恢複狀态;

3.快速恢複

3個重複acks:cwnd切到一半,然後線性增長,

timeout事件:cwnd直接設為1個mss,然後指數增長,達到ssthresh後, 再線性增長

3個重複acks表示網絡,還能夠傳輸一些 segments,timeout事件表明擁塞更為嚴重

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:tcp擁塞視窗的變化

如果n個純粹的tcp服務共享瓶頸連結,則每個最終獲得c / n,這是公平的

如果tcp + udp共享鍊路,udp将占用更多帶寬,這是不公平的!

如果使用者使用多個并行連接配接(如web浏覽器),即使在純服務中,也是不公平的!

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:tcp連接配接1和連接配接2實作的吞吐量

網絡層的作用:将分組從一台發送主機移動到一台接收主機。需要兩種功能:

轉發(forwarding):将分組從路由器的輸入端口轉移到合适的輸出端口

路由(routing):确定分組從源到目的經過的路徑

每台路由都有一張轉發表。路由器檢查分組首部字段值(可能是目的位址或所屬連接配接,看網絡層協定)來轉發分組,使用該值在轉發表索引查詢。該值指出了該分組将被轉發的路由器輸對外連結路接口

路由選擇算法決定了插入路由器轉發表中的值。路由器接收路由選擇協定封包,來配置轉發表。有兩種算法:集中式和分布式

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:轉發和路由

分組交換機:指一台通用分組交換裝置,根據分組首部字段值從輸傳入連結路接口轉移分組到輸對外連結路接口。

鍊路層交換機:基于鍊路層幀中的字段值做出轉發決定,是鍊路層(第2層)裝置。

路由器:基于網絡層資料報中的首部字段值做岀轉發決定,是網絡層(第3層)裝置。

網絡層連接配接與傳輸層連接配接的對比:

網絡層連接配接:兩個主機之間 (路徑上的路由器等網絡裝置參與其中)

傳輸層連接配接:兩個應用程序之間(對中間網絡裝置透明)

網際網路的網絡層ip協定提供單一服務,稱為盡力而為服務,無帶寬保證,無丢包保證,無順序保證,不定時,無擁塞訓示。

網絡層服務模型:

無連接配接服務(connection-less service):不事先為系列分組的傳輸确定傳輸路徑,每個分組獨立确定傳輸路徑,不同分組可能傳輸路徑不同,例如資料報網絡(datagram network )

連接配接服務(connection service):首先為系列分組的傳輸确定從源到目的經過的路徑(建立連接配接),然後沿該路徑(連接配接)傳輸系列分組,系列分組傳輸路徑相同,傳輸結束後拆除連接配接,例如虛電路網絡(virtual-circuit network )

虛電路:一條從源主機到目的主機,類似于電路的路徑(邏輯連接配接),采用分組交換,每個分組的傳輸利用鍊路的全部帶寬,源到目的路徑經過的網絡層裝置共同完成虛電路功能

通信過程:呼叫建立(call setup)→資料傳輸→拆除呼叫

每條虛電路包括:

從源主機到目的主機的一條路徑

虛電路号(vc id),該路徑每段鍊路一個号碼,屬于一條虛電路的分組首部有vc号

沿路每個網絡層裝置(如路由器),利用轉發表記錄經過的每條虛電路

一條虛電路每條鍊路上可能有不同vc号,每台路由器必須用一個新的vc号更新每個分組的vc号,就是一個分組經過一台路由器,首部vc号可能就變了,原因:

逐鍊路代替該号碼減少了分組首部vc字段長度

大大簡化虛電路建立。如果要求一個vc号,建立虛電路時路由器需要交換處理大

虛電路網絡中的路由器必須為進行中的連接配接維護連接配接狀态資訊。建立一個連接配接,轉發表加一項,釋放一個連接配接,轉發表删一項。該資訊将vc号與輸出接口号聯系起來。即使沒有vc号轉換,仍有必要維持狀态資訊,該資訊将vc号和輸出接口号聯系起來。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:虛電路網絡

網絡層無連接配接,每個分組攜帶目的位址,路由器根據分組的目的位址轉發分組,基于路由協定/算法建構轉發表,檢索轉發表,每個分組獨立選路。

每個路由器有轉發表,将目的位址映射到輸對外連結路接口。ip位址太多,不可能每個ip位址有一個表項,是以,目的位址可使用位址範圍比對。當有多個比對時,使用最長字首比對規則。

資料包網絡中路由器不維持連接配接狀态資訊,但是維護了轉發狀态資訊。實際上每1-5分鐘,路由選擇算法更新一次轉發表。

因為在資料包網絡中的轉發表能在任何時刻修改,從一個端系統到另一個端系統發送一系列分組可能在通過網絡時走不同的路徑,并可能無序到達。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:資料報網絡

虛電路網絡由電話網絡演化而來,核心業務是實時對話,由嚴格的時間、可靠性需

求,需要有保障的服務,一般用于電話機、傳真機。虛電路網絡簡化“邊緣”,複雜網絡

資料報網絡用于計算機之間的資料交換,是“彈性”服務,沒有嚴格時間需求;鍊路類型衆多,特點、性能各異;統一服務困難;一般用于“智能”端系統 (計算機),可以自适應、性能控制、差錯恢複。資料報網絡簡化網絡,複雜“邊緣”

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖: 路由器體系結構

路由器的組成部分

輸入端口: (1)執行将一條輸入的實體鍊路與路由器相連接配接的實體層功能 (2)執行與位于傳入連結路遠端的資料鍊路層互動的資料鍊路層功能 (3)查找功能,查詢轉發表決定路由器的輸出端口 交換結構 (1)将路由器的輸入端口與輸出端口相連 (2)分組通過交換結構轉發到輸出端口 輸出端口 (1)存儲從交換結構接收的分組,執行必要的鍊路層和實體層功能在輸傳入連結路上傳輸這些分組。 (2)當鍊路是雙向的時,輸出端口與輸入端口在同一線路卡成對出現 路由選擇處理器 (1)執行路由選擇協定 (2)維護路由選擇表、連接配接的鍊路狀态資訊,為路由器計算轉發表

路由轉發平面:一台路由器的輸入端口、輸出端口和交換結構共同實作了轉發功能,并且用硬體實作(軟體太慢,需以納秒時間尺度運作)

路由控制平面:路由器的控制功能(執行路由選擇協定、對上線或者下線鍊路進行響應、管理功能),在毫秒時間尺度上運作,用軟體實作并在選擇處理器上執行(一種cpu)

查找:通過使用轉發表來查找輸出端口。

影子副本:轉發表從路由選擇處理器經過獨立總線複制到線路卡,稱為影子副本。使用在每個輸入端口的影子副本,轉發決策能在每個輸入端口本地做出,無須基于每個分組調用集中式路由選擇處理器,是以避免了集中式處理的瓶頸

排隊:查找确定了某分組輸出端口,分組就能發送進入交換結構。一個被阻塞的分組必須在輸入端口處排隊。

盡管查找在輸入端口可以說是最為重要的,但必須采取許多其它動作:(1)必須出現實體層和資料鍊路層處理;(2)必須檢驗分組的版本号、檢驗和和壽命字段。後兩個字段必須重寫;(3)必須更新用于網絡管理的計數器

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖: 輸入端口處理

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖: 三種交換技術

三種交換方式:

經記憶體交換

一個分組到達輸入端口時,該端口會先通過中斷方式向路由選擇處理器發出信号。于是,該分組從輸入端口處被複制到處理器記憶體中,路由選擇處理器則從其首部中提取目的位址,在轉發表中找出适當的輸出端口,并将該分組複制到輸出端口的緩存中。

經總線交換

輸入端口經一根共享總線将分組直接傳送到輸出端口,不需要路由選擇處理器的幹預

經網際網路絡交換

縱橫式交換機,2n條總線組成網絡,連接配接n各輸入端口和n個輸出端口;每條垂直的總線與每條水準的總線交叉,交叉點通過交換結構控制器開啟閉合;某分組到達端口a,需要轉發到y,交換機控制器閉合總線a和y的交叉點,a在其總線上發送分組,僅由y接收;同時b也能發分組到x,因為沒有公用總線。縱橫式網絡能并行轉發多個分組。但是如果兩個不同輸入端口的兩個分組的目标是同一個輸出端口。則一個分組必須在輸入端等待。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:輸出端口處理

輸入端口和輸出端口都會形成分組隊列,也就是排隊現象。排隊的位置和程度将取決于流量負載、交換結構的相對速率、線路速率。如果排隊隊列過長,以至于路由器存儲空間消耗殆盡,這時将會出現丢包。

1. 輸入排隊

到達的分組需要加入到輸入端口隊列中,以等待通過交換結構傳輸到輸出端口。如果位于 2 個輸入隊列前端的 2 個分組時發往相同輸出隊列的,則其中一個将發生阻塞,就要在輸入隊列中等待。這種現象稱之為輸入排隊交換機中的線路前部(head-of-the-line, hol)阻塞,即在一個輸入隊列中排隊的分組必須等待通過交換結構發送 ( 即使輸出端口是空閑的),因為它被位于線路前部的另一個分組所阻塞。當這個隊列中,分組數持續增加到上限時,将會出現大量丢包。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:在一個輸入排隊交換機中的 hol 阻塞

2. 輸出排隊

當多個分組的目的地是相同的輸出端口,則分組就會在輸出端口造成堆積,此時也會出現排隊現象。由于存儲空間是有限的,是以就會造成丢包,此時可以采用棄尾政策,丢棄新到達的分組,或者删除一個或多個已經在隊列中的分組來騰出空間。比較好的做法是在存儲空間耗盡前對其一個分組,或添加标記,表示即将出現擁塞詳細,這就是主動隊列管理算法。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:輸出端口排隊

當輸出端口出現排隊時,我們就要為分組隊列進行分組排程,此時将選擇一個分組進行傳輸。選擇的方式有很多,下面着重讨論 3 種。

1. 先進先出

fifo,也就是先來先服務,該排程規則就是按照分組到達輸對外連結路隊列的相同次序,來選擇分組來鍊路上傳輸。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:fifo排隊模型

2. 優先權排隊

該規則将分組分類放入輸出隊列中的優先權類,每個優先權類通常有自己的隊列。當選擇一個分組傳輸時,将從隊列非空的最高優先權類中選擇傳輸一個分組。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:優先權排隊模型

3. 循環權重公平排隊

首先分組也先分類放入輸出隊列中的優先權類,然而類與類之間不存在嚴格的優先服務權,而是循環排程器在這些類之間輪流提供服務。此時将遵循保持工作排隊規則,即在有分組等待傳輸時,不允許鍊路保持空閑,在發現一個空的類時,就馬上去服務下一個類。運用在路由器中的是權重公平排隊(wfq) 規則,就是按照這個原理實作的。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:權重公平排隊模型

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:ipv4 資料報格式

版本号:4位,ip協定的版本号。eg:4→ipv4,6→ipv6

首部長度:4位,ip分組首部長度,以4位元組為機關。eg:5→ip首部長度為20(5×4)位元組

服務類型(tos):8位,訓示期望獲得哪種類型的服務,1998 年這個字段改名為區分服務,隻有在網絡提供區分服務(diffserv)時使用,一般情況下不使用,通常ip分組的該字段(第2位元組)的值為00h

總長度:16位:ip分組的總位元組數(首部+資料),最大ip分組的總長度為65535b,最小的ip分組首部為20b,是以ip分組可以封裝的最大資料為65535-20=65515b

生存時間(ttl):8位,ip分組在網絡中可以通過的路由器數(或跳步數),路由器轉發一次分組,ttl減1,如果ttl=0,路由器則丢棄該ip分組

協定:8位,訓示ip分組封裝的是哪個協定的資料包,6為tcp,17為udp

首部校驗和:16位,實作對ip分組首部的差錯檢測,在每台路由器上必須重新計算檢驗和并再次存放到原處,因為ttl字段以及可能的選項字段會改變。

源ip位址、目的ip位址:各占32位,分别辨別發送分組的源主機/路由器(網絡接口)和接收分組的目的主機/路由器(網絡接口)的ip位址

選項:長度可變,範圍在1~40b之間,攜帶安全、源選路徑、時間戳和路由記錄等内容,實際上很少被使用

填充:長度可變,範圍在0~3b之間,目的是補齊整個首部,保證首部長度是4位元組的倍數

一個鍊路層幀能承載的最大資料量叫作最大傳輸單元(maximum transmission unit,mtu)。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

過大的ip分組向較小mtu鍊路轉發時,可以被“分片”(fragmented),1個ip分組分為多片ip分組,ip分片到達目的主機後進行“重組”(reassembled)。注意,ipv4将資料報的重新組裝放在端系統中,而不是路由器中。

ip首部的辨別、标志位和片偏移字段用于辨別分片以及确定分片的相對順序

辨別字段:16位,辨別一個ip分組,ip協定利用一個計數器,每産生ip分組計數器加1,作為該ip分組的辨別

标志位字段占3位:

df =1:禁止分片

df =0:允許分片

mf =1:非最後一片

mf =0:最後一片(或未分片)

計算機網絡(自頂向下方法)讀書筆記----吐血整理

片偏移:13位,一個ip分組分片封裝原ip分組資料的相對偏移量,片偏移字段以8位元組為機關

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:ip 分片與重新組裝

資料報的有效載荷僅當在ip層已完全重構為初始ip資料報時,才會傳遞給目的地傳輸層。如果一個或多個片沒有到達目的地,則該不完整的資料報被丢失。

主機與實體鍊路的邊界叫接口(interface),一台路由器有多個接口, 一個 ip位址與一個接口相關聯,而不是與包括該接口的主機或路由器相關聯。通常用點分十進制記法書寫。

ip位址包括兩部分,網絡号(netid) 和主機号(hostid),具有相同網絡号的裝置接口組成子網,可以彼此實體聯通,不跨越路由器(第三及以上層網絡裝置)ip編址為這個子網配置設定一個位址:223.1.1.0/24,/24記法稱為子網路遮罩。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:接口位址和子網

有類ip位址

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:有類ip位址

netid

hostud

作為ip分組源位址

作為ip分組目的位址

用途

全0

可以

不可以

在本網範圍内表示本機;在路由表中用于表示預設路由(相當于表示整internet 網絡)

特定值

表示本網内某個特定主機

全1

本網廣播位址(路由器不轉發)

網絡位址,表示一個網絡

直接廣播位址,對特定網絡上的所有主機進行廣播

127

非全0或非全1的任何數

用于本地軟體環回測試,稱為環回位址

私有(private )ip位址

class

netids

blocks

10

1

b

172.16 to 172.31

16

c

192.168.0 to 192.168.255

256

網際網路位址配置設定政策:無類别域間路由選擇 (classless interdomain routing,cidr) ,a.b.c.d/x的位址的x最高比特構成ip位址的網絡部分,稱為該位址的字首,一個組織通常被配置設定一塊連續的位址,即具有相同字首的一段位址。

位址聚合(路由聚合):使用單個網絡字首通告多個網絡的能力

1. 擷取一塊位址

子網擷取ip位址:由isp從它大塊位址中配置設定

isp擷取ip位址:ip位址由網際網路名字和編号配置設定機構icann管理(也管理dns根伺服器、as辨別号)。icann向區域性網際網路注冊機構配置設定位址,處理本地域内的位址配置設定/管理。

2. 擷取主機位址:動态主機配置協定

動态主機配置協定(dynamic host configuration,dhcp)允許主機自動擷取(被配置設定)一個 ip 位址。網絡管理者能夠配置 dhcp,以使某給定主機每次與網絡連接配接時能得到一個相同的 ip 位址,或者某主機将被配置設定一個臨時的 ip 位址(tempomry ip address ),每次與網絡連接配接時該位址也許是不同的。 除了主機 ip 位址配置設定外,dhcp 還允許一台主機得知其他資訊,例如它的子網路遮罩、它的第一跳路由器位址(常稱為預設網關)與它的本地dns 伺服器的位址。

dhcp是插即用協定,dhcp是一個客戶-伺服器協定。

新主機到來時,dhcp協定的四個步驟

dhcp伺服器發現

新到的客戶通過廣播dhcp發現封包,發現一個要與其互動的dhcp伺服器。客戶在udp分組中向端口67發送該發現封包,此時必須用廣播位址255.255.255.255,源位址是0.0.0.0

dhcp伺服器提供

dhcp收到dhcp發現封包後,響應一個dhcp提供封包,仍然使用廣播位址,因為此時新客戶并沒有ip位址。

可能有多台dhcp伺服器,每台伺服器提供的封包中,有向客戶主機推薦的ip位址、網絡掩碼以及ip位址租用期(一般幾天或幾小時)

dhcp請求

客戶從提供中選一個,向選中的伺服器提供一個dhcp請求封包進行響應,回顯配置參數

dhcp ack

收到dhcp請求封包後,用dhcpack封包對其記性響應,證明所傳參數

客戶收到ack後,互動完成,在租期内使用dhcp配置設定的ip位址。因為客戶可能在該租用期逾時後還希望使用這個位址,是以dhcp還提供了一種機制以允許客戶更新它對一個ip位址的租用。

網絡位址轉換(network address translation,nat)屬接入廣域網(wan)技術,是一種将私有(保留)位址轉化為合法ip位址的轉換技術。

它被廣泛應用于各種類型internet接入方式和各種類型的網絡中。原因很簡單,nat不僅完美地解決了lp位址不足的問題,而且還能夠有效地避免來自網絡外部的攻擊,隐藏并保護網絡内部的計算機。nat路由器對外界來看像一個具有單一ip位址的單一裝置。

替換

利用(nat ip位址,新端口号)替換每個外出ip資料報的(源ip位址,源端口号)

記錄

将每對(nat ip位址,新端口号)與(源ip位址,源端口号)的替換資訊存儲到nat轉換表中

根據nat轉換表,利用(源ip位址,源端口号)替換每個進入内網ip資料報的(目的ip位址,目的端口号),即(natip位址,新端口号)

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:網絡位址轉換

nat主要争議:

路由器應該隻處理第3層功能

違背端到端通信原則,應用開發者必須考慮到nat的存在,e.g:p2p應用

位址短缺問題應該由ipv6來解決

1. ipv6 資料報格式

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:ipv6 資料報格式

ipv4位址耗盡,也可更新強化ipv4某些方面

ipv6字段

版本号(version):ipv6 将該字段值設為 6

流量類型:占8位,與ipv4的服務類型類似,區分不同的資料報

流标簽:占20位,用來辨別一段資料報的流,能夠對一個流中的某些資料報給出優先權。

有效載荷長度(payloadlength):占16位,給出了ipv6資料報出基本首部以外的位元組數

下一個首部:占8位,當ipv6資料報沒有拓展首部時,指明資料應當傳遞給哪一個上層協定;當出現拓展首部時,辨別後面第一個拓展首部的類型

跳數限制:占8位,該字段類似于ipv4中的ttl,每次轉發跳數減1,該字段達到0時包将會被丢棄

源位址、目的位址(address) 各占128位,辨別該封包的來源和目的地

ipv6引入的重要變化

擴大的位址容量,32bit—>128bit,

簡化高效的40位元組首部,這也就說明了 ipv4 的很多首部統統被舍棄了,這樣路由器就能更快地處理 ip 資料報。

流标簽與優先級。如音頻流、視訊流、高優先級使用者承載的流量

相比于ipv4已經删除的字段

分片/重新組裝,ipv6 資料報不允許在路由器上分片,這個操作隻能在源和目的執行。如果中間遇到鍊路的 mtu 較小怎麼辦?這個時候路由器就直接丢包,然後向發送發發一個“分組太大”的 icmp 封包,然後源就根據這個封包,把資料報分成更小的幾個再重傳。這種設計是合理的,因為路由器的分片是耗時的操作,這樣可以是 ip 資料報轉發的速度提高。

首部校驗和:因為在傳輸層、資料鍊路層協定中,有很多協定都有具備錯誤檢測的功能,而首部校驗和因為有 ttl 等參數變化,計算的開銷很大。是以把這個字段去除之後,也可以提升 ip 資料報轉發的速度。

選項,它的功能被歸并到下一個首部字段中了。這種改動可以使得 ip 資料報的首部長度為定長,也就是 40 位元組。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:ipv6基本位址類型

2. 從 ipv4 到 ipv6 的遷移

隧道(tunneling):ipv6資料報作為ipv4資料報的載荷進行封裝,穿越ipv4網絡

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:建隧道

路由選擇算法目的是從發送方到接收方的過程中确定一條通過路由器網絡的好的路徑

主機通常直接與一台路由器相連,該路由器即為該主機的預設路由器或第一跳路由器源主機預設路由器稱為源路由器,目的主機預設路由器稱為目的路由器。

路由選擇算法第一種分類方法:

集中式路由選擇算法:用完整、全局性的網絡資訊計算出最短路徑(最低費用路徑) 具有全局狀态資訊的算法常被稱作鍊路狀态(link state,ls)算法

分散式路由選擇算法:疊代、分布式的方式計算最短路徑沒有結點擁有關于網絡鍊路的完整資訊,每個結點僅有與其直接相連鍊路的資訊即可工作,通過疊代計算并與相鄰結點交換資訊,逐漸計算出最低費用路徑,例如距離向量(distance-vector,dv)算法

第二種分類方法:

靜态路由選擇算法:變化緩慢,通常人工幹預

動态路由選擇算法:路由更新快,定期更新,及時響應鍊路費用或網絡拓撲變化

第三種分類方法:

負載敏感算法:鍊路費用動态變化來反映鍊路擁塞水準

負載遲鈍算法:鍊路費用與擁塞無關,當今網際網路路由選擇算法基本都是遲鈍的

采用dijkstra算法,通過“鍊路狀态廣播”,所有結點(路由器)掌握網絡拓撲和鍊路費用,所有結點擁有相同資訊。dijkstra算法計算從一個結點(“源”)到達所有其他結點的最短路徑獲得該結點的轉發表,k次疊代後,得到到達k個目的結點的最短路徑。

算法複雜性:o(n2) n為結點數量

問題:存在震蕩的可能

避免震蕩的方法:讓每台路由器發送鍊路通告的時間随機化

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:擁塞敏感的路由選擇的振蕩

距離向量(distance-vector,dv)算法是一種疊代的、異步的和分布式的算法

分布式:每個結點要從一個或多個直接相連鄰居接收某些資訊,計算,将計算結果發給鄰居

疊代:過程持續到鄰居之間無更多資訊交換

異步:不要求所有節點互相步伐一緻操作

bellman-ford方程(動态規劃)

dx(y) = min {c(x,v) + dv(y) }

dx(y):從x到y最短路徑的費用(距離)

c(x,v):x到鄰居v的費用

dv(y):從鄰居v到達目的y的費用(距離)

min:在x的所有鄰居v中取最小值

bellman-ford 舉例

計算機網絡(自頂向下方法)讀書筆記----吐血整理

已知:dv(z)=5,dx(z)=3,dw(z)=3

du(z) = min{c(u,v)+dv(z),c(u,x)+dx(z),c(u,w)+dw(z)}

=min{2+5,1+3,5+3}=4

dx(y) = 從結點x到結點y的最小費用估計,結點x已知到達每個鄰居的費用c(x,v),維護其所有鄰居的距離向量 dv=[dv(y):yєn]

核心思想:每個結點不定時地将其自身的dv估計發送給其鄰居,當x接收到鄰居的新的dv估計時,即依據b-f更新其自身的距離向量估計,dx(y)将最終收斂于實際的最小費用dx(y)

dx(y)←minv{c(x,v)+dv(y)} for each node y∊n

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:距離向量(dv)算法

1. 距離向量算法:鍊路開銷改變與鍊路故障

計算機網絡(自頂向下方法)讀書筆記----吐血整理

這裡隻關注了y與z到目的地x的距離

圖示了從y到x的鍊路開銷從4變為1的情況。

t0:y檢測到鍊路費用改變,更新dv,通告其鄰居

t1:z收到y的的dv更新,更新其距離向量表,計算到達x的最新最小費用,更新其dv,并發送給其所有鄰居

t2:y收到z的dv更新,更新其距離向量表,重新計算y的的dv,未發生改變,不再向z發送dv

結論:好消息傳播快!

圖示了從y到x的鍊路開銷從4變為60的情況。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

t0:y檢測到鍊路費用改變,更新dv,此時z到x距離為5,y誤以為先到z再到x,距離為6

t1:z收到y的的dv更新,更新其距離向量表,先到y再到z,距離為7

t2:y收到z的dv更新,再次更新,先到z再到x,距離為8

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:無窮計數問題

結論:壞消息傳播慢!存在“無窮計數”問題!

2. 距離向量算法:增加毒性逆轉

如果 z 通過 y 路由選擇到目的地 x,則 z 将通告 y,它到 x 的距離是無窮大,也就是 z 将向 y 通告dz(x) = ∞

t0 時刻(x,y)開銷從4變為60,y更新其表dy(x)=60

t1時刻,z 收到更新後,切換到(z,x)。

t2時刻,因為這是一條新的到x的最低開銷路徑,且不經過y,z通知y,dz(x) = 5,y收到來自z的更新後,更新dy(x) = 51

毒性逆轉解決兩個直接相連無窮計數問題,更多結點環路無法解決。

3. ls 與 dv 路由選擇算法的比較

封包複雜性:顯然ls複雜得多,每條鍊路費用改變都要通知所有結點

收斂速度:dv算法收斂較慢,且會遇到路由選擇環路和無窮計數問題

健壯性:路由器發生故障,ls結點僅計算自己的轉發表,提供了一定健壯性,dv算法一個不正确的結點會擴散到整個網絡

将任意規模網絡抽象為一個圖計算路由-過于理想化,在實際網絡(尤其是大規模網絡)中不可行,原因如下:

規模。當路由器數目變得很大,算法開銷高的不可實作,如ls更新鍊路費用

管理自治。一個組織應該當按自己願望運作管理其網絡

解決方法:将路由器組織進自治系統(autonomoussystem,as)

同一as内的路由器運作相同的路由協定,叫做自治系統内部路由協定,不同自治系統内的路由器可以運作不同的as内部路由協定。

網關路由器(gateway router)位于as“邊緣”,通過鍊路連接配接其他as的網關路由器

轉發表由as内部路由算法與as間路由算法共同配置,as内部路由算法設定as内部目的網絡路由入口,as内部路由算法與as間路由算法共同設定as外部目的網絡路由入口

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:互連的as

自治系統間路由任務!

例:路由器1d 的轉發表設定

假設as1學習到(通過as間路由協定):子網x可以通過as3 (網關 1c)到達,但不能通過as2到達,as間路由協定向所有内部路由器傳播該可達性資訊,路由器1d 利用as内部路由資訊,确定其到達1c的最小費用路徑接口i,在轉發表中增加入口(x, i)

例子:在多as間選擇

假設as1通過as間路由協定學習到,子網x通過as3和as2均可到達,為了配置轉發表,路由器1d必須确定應該将去往子網x的資料報轉發給哪個網關?這個任務也是由as間路由協定完成!

使用熱洋芋路由:将分組發送給最近的網關路由器。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

使用熱洋芋路由選擇(從所有可能的路由中)選擇的路由到開始該路由的next-hop 路由器具有最小開銷。

熱洋芋路由選擇依據的思想是:對于路由器lb,盡可能快地将分組送出其as(更明确地說,用可能的最低開銷),而不擔心其as外部到目的地的餘下部分的開銷。就“熱洋芋路由選擇”名稱而言,分組被類比為燙手的熱洋芋。因為它燙手,你要盡可能快地将它傳給另一個人(另一個as)。

as内部路由協定也稱為内部網絡協定(interior gateway protocols,igp)

最常見的as内部路由協定:

路由資訊協定:rip(routing information protocol)

開放最短路徑優先:ospf(open shortest path first)

内部網關路由協定:igrp(interior gateway routing protocol)

cisco私有協定

rip協定是最先得到廣泛使用的一種路由協定,配置簡單。是一種基于距離矢量算法的協定,它使用跳數作為度量來衡量到達目的網絡的距離。rip通過udp封包進行路由資訊的交換,使用的端口号為520。

rip協定要求網絡中每一台路由器都要維護從自身到每一個網絡的路由資訊。rip協定使用跳數來衡量網絡間的“距離”:從一台路由器到其直連網絡的跳數定義為1;從一台路由器到其非直連網絡的距離定義為:每經過一個路由器則距離加1。“距離”也稱為跳數,rip允許的最大跳數為15,當延伸到16時,即視為不可達。是以rip一般隻适用于小型網絡。

1. rip的工作原理

rip協定啟動時的初始路由表僅包含本裝置的一些直連接配接口路由。通過相鄰裝置互相學習路由表項,才能實作各網段路由互通。當路由器發現直連網絡發生更改時,會馬上将路由表更新的資訊以1跳的距離轉發給所有相鄰路由節點。其他路由器接收到更新資訊後,以加1跳的距離繼續向其他路由器轉發。每個路由器收到更新資訊,都會更新一遍自身的路由表資訊。每個路由器平均每隔30s就從每個啟動的rip協定的接口發送路由更新資訊。

rip協定完全依靠跳數來作為标準,在以下情況,r1通往r3的時候,就算2跳路徑的傳輸速度遠遠大于1跳路徑,rip協定依然會選擇這條10kbps的路徑來進行傳輸。如果有特殊路徑傳輸需要,可以手動幹涉rip的路徑選擇,增加路徑的路徑成本來讓其選擇其他路徑。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

rip協定之是以将路由器之間的最大跳數設定15以上不可到達,是為了解決rip路由環路問題,也就是我們前面說的壞消息傳播慢的問題,由兩個解決方法:

水準分割法:rip從某個接口學到的路由,不會從該接口再發回給鄰居路由器。這樣不但減少了帶寬消耗,還可以防止路由環路。

毒性反轉法:rip從某個接口學到路由後,從原接口發回鄰居路由器,并将該路由的開銷設定為16(即指明該路由不可達)。利用這種方式,可以清除對方路由表中的無用路由。

ospf和其兄弟is-is通常設定在上層isp中,rip在下層isp和企業網中。

ospf是一種鍊路狀态協定,它使用洪泛鍊路狀态資訊和dijkstra最低開銷路徑算法。使用ospf,—台路由器建構了一幅關于整個自治系統的完整拓撲圖

使用ospf時,路由器向自治系統内所有其他路由器廣播路由選擇資訊,每當一條鍊路的狀态發生變化時(如開銷的變化或連接配接/中斷狀态的變化),路由器就會廣播鍊路狀态資訊。即使鍊路狀态未發生變化,它也要周期性地(至少每隔30min-次)廣播鍊路狀态。

ospf 優點(rip)

安全:所有ospf封包可以被認證(預防惡意入侵)

允許使用多條相同費用的路徑 (rip隻能選一條)

對單點傳播與多點傳播路由選擇的綜合支援

支援在單個 as 中的層次結構:一個ospf as可以配置成多個區域,每個區域運作自己的ospf ls算法,鍊路狀态通告隻限于區内,每個路由器掌握所在區的詳細拓撲。區域邊界路由器負責為流向該區域以外的分組提供路由選擇,as内隻有一個ospf區域配置成主幹區域,為其他區域之間的流量提供路由選擇。該主幹包含as内所有區域邊界路由器,也可能包含一些非邊界路由器。as 邊界路由器連接配接其他as。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:分層的ospf

bgp協定是用于自治系統as之間的動态路由協定。bgp是一種外部網關協定,與ospf、rip等内部網關協定不同,其着眼點不在于發現和計算路由,而是着眼于在as之間控制路由的轉播和選擇最佳路由。bgp将internet “粘合”為一個整體。

跨越兩個as的bgp連接配接稱為外部bgp(ebgp)連接配接,而在相同as中的兩台路由器之間的bgp會話稱為内部bgp(ibgp)連接配接。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:ebgp 和 ibgp 連接配接

bgp會話(session):兩個bgp路由器交換bgp封包,通告去往不同目的字首(prefix)的路徑(“路徑向量(path vector)”協定),封包交換基于半永久的tcp連接配接

bgp封包:

open:與peer建立tcp連接配接,并認證發送方

update:通告新路徑(或撤銷原路徑)

keepalive:在無update時,保活連接配接;也用于對open請求的确認

notification:報告先前封包的差錯;也被用于關閉連接配接

如上圖所示,當as3通告一個字首給as1時,在3a與1c之間,as3利用ebgp會話向as1發送字首可達性資訊.

1c則可以利用ibgp向as1内的所有路由器分發新的字首可達性資訊

1b可以(也可能不)進一步通過1b-到-2a的ebgp會話,向as2通告新的可達性資訊

當路由器獲得新的字首可達性時,即在其轉發表中增加關于該字首的入口(路由項).

路由=字首+屬性

兩個重要屬性:

as-path(as路徑):包含字首通告所經過的as序列。e.g:as67,as17

next-hop(下一跳):這一跳指的是下一個as的ip,不是指路由

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:路徑屬性與bgp路由

路由器可能獲知到達某目的as的多條路由,基于以下準則選擇:

本地偏好(preference)值屬性: 政策決策(policy decision)

最短as-path

最近next-hop路由器: 熱洋芋路由(hot potato routing)

附加準則

bgp路由選擇政策

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:一個簡單的bgp政策場景

a,b,c是提供商網絡

x,w,y是客戶網絡

w,y是樁網絡:隻與一個其他as相連

x是雙宿網絡:連接配接兩個其他as

a向b通告一條路徑:aw

b向x通告路徑:baw

b是絕不應該向c通告路徑baw,因為w和c均不是b的客戶,b路由cbaw的流量沒有任何“收益”,b期望強制c通過a向w路由流量,b期望隻路由去往/來自其客戶的流量!

法則: 任何穿越某 isp 主幹網的流量必須是其源或目的( 或兩者 ) 位于該 isp 的某個客戶網絡中

運作鍊路層協定的任何裝置均稱為結點,沿着通信路徑連接配接相鄰結點的通信信道稱為鍊路。通過特定鍊路時,傳輸結點将資料報封裝在鍊路層幀中,将該幀傳傳入連結路。

組幀

封裝資料報構成資料幀,加首部和尾部,幀的結構由鍊路層協定規定。

鍊路接入

媒體通路控制mac協定,規定幀在鍊路上傳輸的規則,協調多個結點的幀傳輸。幀首部中的“mac”位址,用于辨別幀的源和目的,但不同于ip位址!

可靠傳遞

保證無差錯經鍊路層移動每個網絡層資料報,機制包括确認和重傳,類似tcp

通常用于高差錯率鍊路,如無線鍊路;在低誤碼率的有線鍊路上很少采用 (如光纖,某些雙絞線等)

鍊路層可靠傳遞可能會被認為是一種不必要的開銷。由于這個原因,許多有線的鍊路層協定不提供可靠傳遞服務。

差錯檢測和糾正(硬體)

奇偶校驗,檢驗和,循環備援檢測

鍊路層的主體部分是在網絡擴充卡(networkadapter)中實作的,網絡擴充卡有時也稱為網絡接口卡(network interface card,nic)。

鍊路層是硬體和軟體的結合體,是協定棧中軟體與硬體交接的地方。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:網絡擴充卡:它與其他主機元件及協定棧功能的關系

網卡間通信

發送端:将資料報封裝成幀,增加差錯檢測比特,實作可靠資料傳輸和流量控制等.

接收端:檢測差錯,實作可靠資料傳輸和流量控制等,提取資料報,傳遞上層協定實體

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:網卡間通信

差錯編碼基本原理:d→dr ,其中r為差錯檢測與糾正比特(備援比特)

差錯編碼不能保證100%可靠。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:差錯檢測與糾正的場景

差錯編碼的檢錯能力

差錯編碼可分為檢錯碼與糾錯碼

漢明距離:對于二進制串a和b來說,漢明距離等于axorb中1的數目

對于檢錯碼,如果編碼集的漢明距離 ds=r+1,則該差錯編碼可以檢測 r 位的差錯

例如,編碼集 {0000,0101,1010,1111} 的漢明距離ds=2,可以100%檢測1比特差錯,大于1比特就無法檢測了。

對于糾錯碼,如果編碼集的漢明距離ds=2r+1,則該差錯編碼可以糾正 r 位的差錯

例如,編碼集 {000000,010101,101010,111111} 的漢明距離ds=3,可以糾正1比特差錯,大于1比特就無法糾錯了,如100010糾正為101010。發現錯誤後會糾正到漢明距離最近的字元串。

在偶校驗方案中,發送方增加一個比特,使得這d+1比特中1的總數是偶數。

對于奇校驗方案,發送方增加一個比特,使得這d+1比特中1的總數是奇數。

1 比特校驗位

檢測奇數位差錯

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:1 比特偶校驗

二維奇偶校驗:

檢測奇數位差錯、部分偶數位差錯

糾正同一行/列的奇數位錯

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:維偶校驗

在校驗和方法中,資料被切成k比特的序列,這些序列全部相加之後取反碼就是校驗和。接收方收到資料之後,把所有資料加起來(包括校驗和)。用結果是否全為1來作為判斷資料是否出錯的标準。

和crc相比,校驗和提供較弱的保護,為什麼傳輸層使用校驗和而鍊路層使用crc呢?

傳輸層使用軟體實作,采用簡單快速的方案是必須的(校驗和)

鍊路層的crc用硬體實作,能夠快速執行crc操作.

循環備援檢測(cyclicredundancy check,crc)編碼也稱為多項式編碼。crc編碼的關鍵思想如圖所示。對于一個給定的資料段d,發送方要選擇 r 個附加比特r,并将它們附加到 d 上,使得得到的 d+r 比特模式(被解釋為一個二進制數)用模2算術恰好能被g整除(即沒有餘數)。

用crc進行差錯檢測的過程是以很簡單:接收方用g去除接收到的 d+r 比特。如果餘數為非零,接收方知道出現了差錯;否則認為資料正确而被接收。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:crc

拼接後的d+r比特相當于d比特左移r位再和r做異或,結果為g的倍數。

d・2r xor r = ng

兩邊都用 r 異或。得到

d・2r = ng xor r

兩邊除以g, 餘數值剛好是r,這樣就可以得到r。

r= remainder(d・2r /g)

兩類鍊路

點對點鍊路:由鍊路一端的單個發送方和鍊路另一端的單個接收方組成。如點對點協定ppp,進階資料鍊路控制協定hdlc

廣播鍊路(共享媒體):多個發送和接收節點都連接配接到相同的、單一的、共享的廣播信道上,如以太網和無線區域網路

多路通路問題

(1)如何協調多個發送和接收結點對一個共享廣播信道的通路

(2)兩個或者兩個以上結點同時傳輸産生幹擾,結點同時接收到兩個或者多個信号會導緻接收失敗!

mac 協定分類

信道劃分mac協定:采用多路複用技術,如tdma、fdma、cdma、wdma等

随機通路mac協定:信道不劃分,允許沖突,采用沖突“恢複”機制

輪轉mac協定:結點輪流使用信道

時分多路複用(time division multiple access,tdm)

tdm把時間劃分為時間幀,并進一步把時間幀劃分為n個時隙(slot)。然後把每個時隙分給n個節點中的一個。無論何時某個節點在有分組想要發送的時候,他在循環的tdm幀中指派給它的時隙内傳輸分組比特。時隙長度一般應是一個時隙内能傳輸一個分組。

tdm的缺點

最高速率隻能達到r/n bps ,即使隻有一個人使用信道

節點總是總是要等待它的時隙,可能會對緩存等造成壓力

消除了碰撞且十分公平

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:時分多路複用

頻分多路複用(frequency division multiple access,fdma)

fdm将rbps的信道劃分為不同的頻段(每個頻段具有r/n帶寬),并把每個頻段分給n個結點中的一個。是以fdm在n個較大的信道中建立了n個較小的r/n信道。

fdm的缺點和tdm相同,限制了每個結點隻能使用r/n帶寬。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:頻分多路複用

碼分多址(code division multiple access,cdma)

tdm和fdm分别為結點配置設定時隙和頻率,cdma對每個結點配置設定不同的編碼

每個結點用其唯一編碼對發送資料進行編碼,使得不同結點能同時傳輸,接收方仍能正确而接收。抗幹擾,用于軍用系統,民用蜂窩電話。

傳輸結點總是以信道全部速率r bps進行發送。兩個或多個結點同時傳輸,有碰撞時,涉及碰撞的每個節點反複重發它的幀(等待一個随機時延),直到該幀無碰撞的通過。常用随機接入協定:時隙(sloted)aloha,aloha,csma、csma/cd、csma/ca

1. 時隙aloha協定

所有幀大小相同,時間被劃分為等長的時隙(每個時隙可以傳輸1個幀),結點隻能在時隙開始時刻發送幀,結點間時鐘同步,如果2個或2個以上結點在

同一時隙發送幀,結點即檢測到沖突。

當結點有新的幀時,在下一個時隙(slot)發送,如果無沖突,該結點可以在下一個時隙繼續發送新的幀,如果沖突,該結點在下一個時隙以機率p重傳該幀,直至成功。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

效率:一個給定的結點成功傳送的機率是p(1-p){n-1}, 因為有n個結點,任意一個結點成功傳送的機率是np(1-p){n-1}。當活躍結點數量趨向無窮大時,最大效率1/e,即37%。

2. aloha 協定

非時隙(純)aloha更加簡單,無需同步,當有新的幀生成時立即發送,沖突可能性增大。

在t0時刻發送幀,會與在[t0-1,t0+1]期間其他結點發送的幀沖突

計算機網絡(自頂向下方法)讀書筆記----吐血整理

p(給定結點成功發送幀) = p(該結點發送) * p(無其他結點在[t0-1,t0]期間發送幀) * p(無其他結點在[t0,t0+1]期間發送幀)

= p * (1-p)n-1 * (1-p)n-1

= p * (1-p)2(n-1)

= 1/(2e) = 0.18(選取最優的p,并令n)

3. 載波偵聽多路通路csma

載波監聽多路通路協定carrier sense multiple access,csma)

在時隙和純aloha中,一個結點傳輸的決定獨立于其他結點,不關心自己傳輸時别人是不是在傳輸。csma發送幀之前,監聽信道(載波):

信道空閑:發送完整幀

信道忙:推遲發送,1-堅持csma,非堅持csma,p-堅持csma

由于信号傳播延遲沖突可能仍然發生,繼續發送沖突幀導緻浪費信道資源,如下圖所示。在時刻t0,節點b偵聽到信道是空閑的,節點b開始傳輸,沿着廣播媒體在兩個方向上傳播。在時刻t1,節點d有一個幀要發送,由于b傳輸的比特還沒有到達d,是以d在w偵聽到信道空閑,進而d開始傳輸它的幀。信道傳播時延引起沖突。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:發生碰撞傳輸的兩個csma節點的時空圖

4.具有碰撞檢測的載波偵聽多路通路csma/cd

短時間内可以檢測到沖突,沖突後傳輸中止,減少信道浪費。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:具有碰撞檢測的csma

輪詢協定

指定一個主結點,以循環的方式輪詢每個結點;主結點首先向結點a發送一個封包,告知a能傳輸幀的最大數量,a傳完後主結點告訴b能傳幀的最多數量,如此循環

缺點:有輪詢時延;主結點故障,整個信道就gg

令牌傳遞協定

沒有主結點,一個叫令牌token的特殊幀在結點之間以固定次序交換,如1發給2,2發給3,n發給1,就像網絡拓撲結構中的環狀網絡令牌,當一個結點收到令牌時,有幀發送,則發送最大數量的幀,然後轉發令牌;沒幀發送,直接把令牌轉發。

缺點:單點故障。

docisis

用于電纜網際網路接入的鍊路層協定

1. mac位址

并不是主機或路由器具有鍊路層位址,而是它們的擴充卡(網絡接口)具有鍊路層位址。具有多個網絡接口的主機或路由器也有多個鍊路層位址,就像它也有多個ip位址一樣。

mac位址(或稱lan位址,實體位址,以太網位址) 用于區域網路内辨別一個幀從哪個接口發出,到達哪個實體相連的其他接口。

mac位址48位,通常用十六進制表示法,如1a-2f-bb-76-09-ad。mac位址固化在網卡的rom中,有時也可以軟體設定。

沒有兩塊擴充卡有相同的mac位址,mac位址空間由ieee管理,ieee給公司固定前24個比特,後面24個比特讓公司自己去生成。

mac位址具有扁平接口。比如具有802.11接口的手機總是有相同mac位址,而當主機移動時,ip位址會改變(ip位址是層次結構)。mac位址像身份證号,不會因為位置改變法生改變;ip位址像郵政位址,會改變

2. 位址解析協定arp(即插即用的)

作用:實作ip位址和mac位址的轉換

dns為網際網路中任何地方的主機解析主機名,而arp隻為在同一個子網上的主機和路由器接口解析ip位址。每台主機和路由器在記憶體中有一個arp表,

存儲某些lan結點的ip/mac位址映射關系:< ip位址; mac位址; ttl>

ttl為過期時間(典型值為20分鐘)

a廣播arp查詢分組,其中包含b的ip位址,

目的mac位址 = ff-ff-ff-ff-ff-ff,lan中所有結點都會接收arp查詢

b接收arp查詢分組,ip位址比對成功,利用單點傳播幀向a應答b的mac位址

a在其arp表中,緩存b的ip-mac位址對,直至逾時

arp是“即插即用”協定,結點自主建立arp表,無需幹預

3. 發送資料報到子網以外

子網中的某主機要向子網之外(也就是跨越路由器的另一個子網)的主機發送網絡層資料報。

通信過程:a通過路由器r向b發送資料報

步驟1:

a構造ip資料報,其中源ip位址是a的ip位址,目的ip位址是b的ip位址

a構造鍊路層幀,其中源mac位址是是a的mac位址,目的mac是r(左)接口的mac位址裝,封裝a到b的ip資料報。

步驟2

幀從a發送至r,r接收幀,提取ip資料報,傳遞給上層ip

步驟3

r轉發ip資料報(源和目的ip位址不變!)

r建立鍊路層幀,其中源mac位址是r(右)接口的mac位址,目的mac位址是b的mac位址,封裝a到b的ip資料報。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:由一台路由器互聯的兩個子網

以太網占領了現有的有線區域網路市場,就像網際網路之于全球聯網的地位

以太網實體拓撲:

總線(bus):所有結點在同一沖突域,可能彼此沖突

星型(star):目前主流網絡拓撲,使用中心交換機,每個結點一個單獨沖突域,結點間彼此不沖突

計算機網絡(自頂向下方法)讀書筆記----吐血整理

1. 以太網幀結構

計算機網絡(自頂向下方法)讀書筆記----吐血整理

前導碼(8位元組):用于發送端與接收端的時鐘同步

目的mac位址、源mac位址(各6位元組):如果網卡的mac位址與收到的幀的目的mac位址比對,或者幀的目的mac位址為廣播位址(ff-ff-ff-ff-ff-ff),則網卡接收該幀,并将其封裝的網絡層分組交給相應的網絡層協定。否則,網卡丢棄該幀。

類型(2位元組):訓示幀中封裝的是哪種高層協定的分組(如ip資料報)

資料(46-1500位元組):指上層協定載荷。

crc(位元組):循環備援校驗碼,丢棄差錯幀

以太網技術向網絡層提供不可靠、無連接配接服務。發送幀的網卡與接收幀的網卡間沒有“握手”過程;沒有通過crc校驗隻是丢棄,可靠性需要依賴上層tcp協定。

交換機的任務:接收傳入連結路層幀,轉發到對外連結路

交換機自身對子網中的主機和路由器是透明的,主機感覺不到交換機的存在

交換機輸出接口設有緩存

交換機是即插即用裝置,管理者無需配置

交換機是雙工的,任何交換機接口能同時發送和接收

計算機網絡(自頂向下方法)讀書筆記----吐血整理

主機利用獨享鍊路直接連接配接交換機

交換機緩存幀

交換機在每段鍊路上利用csma/cd收發幀,但無沖突,且可以全雙工

每段鍊路一個獨立的沖突域

交換:a-a’與b-b’的傳輸可以同時進行,沒有沖突

1. 交換機轉發和過濾

假定目的位址為dd-dd-dd-dd-dd-dd的幀從交換機接口x到達,交換機用該mac位址索引交換機表,有三種可能:

表中沒有該位址,交換機廣播該幀

表中有表項将該位址與接口x聯系起來,直接丢棄。因為該幀已經在包含目的地的區域網路網段廣播過了

表中目的有表象将該位址與接口y≠x聯系起來,該幀需要被轉發到與接口y相連的區域網路段,放到接口y前的輸出緩存,完成轉發功能

2. 自學習

交換機通過自學習,獲知到達主機的接口資訊

當收到幀時,交換機“學習”到發送幀的主機(通過幀的源mac位址),位于收到該幀的接口所連接配接的lan網段

将發送主機mac位址/接口資訊記錄到交換表中

交換機在其表中存儲:該幀源mac位址,幀到達的接口,目前時間

計算機網絡(自頂向下方法)讀書筆記----吐血整理

3. 鍊路層交換機的性質

消除碰撞

交換機緩存幀并且不會在網段上同時傳輸多于一個幀,交換機提供了比廣播鍊路區域網路高的多的性能改善

異質的鍊路

交換機将鍊路彼此隔離,是以區域網路中的不同鍊路能夠以不同速率運作,在不同媒介上運作

主動斷開異常擴充卡

收集帶寬使用的統計資料、碰撞率和流量類型,這些資訊用來調試解決問題

4. 交換機和路由器比較

兩者均為存儲-轉發裝置:

路由器:網絡層裝置 (檢測網絡層分組首部)

交換機:鍊路層裝置 (檢測鍊路層幀的首部)

二者均使用轉發表:

路由器: 利用路由算法(路由協定)計算(設定),依據ip位址

交換機: 利用自學習、泛洪建構轉發表,依據mac位址

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:在交換機、路由器和主機中分組的處理

虛拟區域網路(virtual local area network):支援vlan 劃分的交換機,可以在一個實體lan 架構上配置 、定義多個vlan。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:配置了兩個 vlan 的單台交換機

基于端口的vlan

流量隔離(traffic isolation):去往/來自端口1-8的幀隻到達端口1-8

也可以基于mac位址定義vlan,而不是交換端口

動态成員:端口可以動态配置設定給不同vlan

在vlan間轉發:通過路由(就像在獨立的交換機之間),實踐中,廠家會将交換機與路由器內建起在一起

計算機網絡(自頂向下方法)讀書筆記----吐血整理

跨越多交換機的vlan,兩次不同vlan交換機上的端口想位于一個vlan中,因該怎麼處理呢?

一種更具擴充性互聯vlan交換機的方法稱為vlan幹線連接配接。每台交換機上的一個特殊端口(左側交換機上的端口16,右側交換機上的端口1)被配置為幹線端口,以互聯這兩台vlan交換機。該幹線端口屬于所有vlan,發送到任何vlan的幀經過幹線鍊路轉發到其他交換機。

計算機網絡(自頂向下方法)讀書筆記----吐血整理

圖:連接配接具有兩個 vlan 的兩台 vlan 交換機

參考:

1、計算機網絡(自頂向下方法)學習筆記,作者:頭秃的女程式員

2、計算機網絡(自頂向下方法)

3、計算機網絡(哈爾濱工業大學)

繼續閱讀