計算機網絡(自頂向下方法)學習筆記

目錄

 

第一章 計算機網絡和因特網

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.1 應用層協議原理

2.2.1 網絡應用程序體系結構

2.1.2 進程通信

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

2.1.4 因特網提供的傳輸層服務

2.1.5 ssl與tcp與http

2.1.6 應用層協議

2.1.7 本博客涉及的應用層應用

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 文件傳輸協議FTP

2.4 因特網中的電子郵件

2.4.1 SMTP

2.4.2 與HTTP對比

2.4.3 郵件報文格式和MIME

2.4.4 郵件訪問協議

2.5 DNS:因特網的目錄服務

2.5.1 DNS提供的服務

2.5.2 DNS工作機理概述

2.5.3 DNS記錄和報文

2.6 P2P應用

2.6.1 P2P文件分發(BitTorrent)

2.6.2 分佈式散列表(DHT)

2.7 套接字編程

第三章、傳輸層

3.1 概述和運輸層服務

3.1.1 傳輸層和網絡層的關係

3.1.2 因特網傳輸概述

3.2 多路複用和多路分解

3.3 無連接運輸:UDP

3.3.1 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.3.6 TCP連接管理

​3.6 擁塞控制原理

3.6.1 擁塞原因與代價

3.6.2 擁塞控制方法

3.6.3 網絡輔助的擁塞控制例子:ATM ABR擁塞控制 異步傳輸方式  可用比特率

3.7 TCP擁塞控制原理

第四章、網絡層

4.1 概述

4.1.1 轉發和路由選擇

4.1.2 網絡服務模型

4.2虛電路和數據報網絡

4.2.1 虛電路網絡

4.2.2 數據報網絡

4.2.3 虛電路和數據報網絡的由來

4.3 路由器工作原理

4.3.1 輸入端口:

4.3.2 交換結構

4.3.3 輸出端口

4.3.4 何處出現排隊

4.3.5 路由選擇控制平面

4.4 網際協議(IP):因特網中的轉發和編址

4.4.1 數據報格式

4.4.2 IPV4編址

4.4.3 因特網控制報文協議ICMP

4.4.4 IPv6

4.4.5 涉足IP安全性

4.5 路由選擇算法

4.5.1 鏈路狀態路由選擇算法LS

4.5.2 距離向量路由算法DV

4.5.3 層次路由選擇

4.6 因特網中的路由選擇

4.6.1 AS(自治系統)內部的路由選擇:RIP(DV思想)

4.6.2 AS內部的路由選擇:OSPF(LS思想)

4.6.3 AS間的路由選擇:BGP

4.7 廣播和多播路由選擇

4.7.1 廣播路由選擇算法

4.7.2 多播

第五章、鏈路層

5.1 鏈路層概述

5.1.1鏈路層提供的服務

5.2 差錯檢測和糾正技術

5.3 多路訪問鏈路和協議

5.3.1信道劃分協議

5.3.2隨機接入協議

        5.3.3 輪流協議

5.4 交換局域網

    5.4.1 鏈路層尋址和ARP

   5.4.2 以太網

    5.4.3 鏈路層交換機


第一章 計算機網絡和因特網

1.1 什麼是因特網

我們可以從兩個角度來回答這個問題:一種是描述組成它的軟硬件;另一種是將其視爲爲分佈式應用提供基礎服務的聯網設施來描述。其實,第一種角度,是從它的組成來描述,第二種角度是從它的功能來描述

1.1.1 組成描述

因特網是一個世界範圍的計算機網絡,這意味着它互聯了數以億計的計算設備(不僅僅是計算機哦);這些設備包括但不限於傳統PC、工作站以及所謂的服務器。現在有更多的設備加入到因特網中,比如便攜式計算機、電視機、汽車、傳感器等。

用因特網的術語來說,所有連入因特網的設備都叫做主機或者端系統

以下是重點的一些概念:

端系統通過通信鏈路分組交換機連接到一起。

 端系統之間發送數據時,發送端系統將其數據分成一段一段,然後加上必要的信息後形成一個個的數據包,這個數據包用術語來說叫做分組。於是分組==用戶數據+必要信息。鏈路系統就是用來傳輸分組的。分組到達接收端系統後,接收端系統將根據必要信息來抽取用戶數據;

分組交換機從它的一條入鏈路接收分組,並且選擇一條出鏈路將分組轉發出去;分組交換機也有很多種類,最爲有名的是路由器和鏈路層交換機;兩者的的不同之處在於,鏈路層交換機主要用在接入網中,路由器主要用在網絡核心.

端系統通過因特網服務提供商(Internet Service Provider,簡稱ISP)接入因特網;

很有名的協議有:TCP(Transport Control Protocol,傳輸控制協議)和IP(Internet Protocol,網際協議);因爲協議控制了信息的傳遞,所以對協議達成一致就很重要,所以需要一個標準來規範協議,以便創造可以協同工作的系統和產品

 

1.1.2 服務描述

應用程序編程接口(API)

1.1.3 協議

前面提到了分組這一概念,分組==用戶數據+必要數據;這些必要數據爲分組接收者理解用戶數據提供保障,而協議就是如何使用必要數據理解用戶數據的方法或者規則;分組接收者接收到分組並按照協議獲得了用戶數據後,還應該對此消息做出反應,而如何做出反應也是協議規範的一部分(不反應也是一種反應哦)

協議:定義了兩個或多個通信實體(不一定是端系統,還有可能是分組交換機等)之間交換信息的格式和次序以及對該信息所採取的動作

凡是通信實體的所有活動都要受到協議的約束。比如,硬件實現的控制協議控制了兩塊網卡之間的比特流;在端系統中,擁塞控制協議控制了發送方和接收方之間傳輸數據的速率等

1.2 網絡的邊緣

端系統:與因特網相連的計算機和其它設備,往往處於網絡的邊緣

端系統分類:客戶和服務器

1.2.1 接入網

接入網:是指將端系統連入到邊緣路由器的物理鏈路

邊緣路由器:是指端系統到任何其他遠程端系統路徑上的第一臺路由器

 

  • DSL(Digital Subscribe Line)數字用戶線

這是一種寬帶住宅接入的方法,它的ISP是本地電話公司。其使用的通信鏈路的物理材質爲電話線,是一種雙絞線。

用戶使用DSL調制解調器通過電話線與ISP中的數字用戶線接入複用器(DSLAM)來交換數據;家庭DSL調制解調器將數字數據轉換爲高頻音後通過電話線傳輸到ISP中心,並且通過DSL解調器將DSLAM發送過來的模擬信號轉爲數字信號;

  • CIC(Cable Internet Access)電纜因特網接入

這是另一種寬帶住宅接入方法,它的ISP是有線電視公司。其使用的通信鏈路的物理材質有光纖和同軸電纜,也被稱爲混合光纖同軸(Hybrid Fiber Coax HFC);

用戶使用電纜調制解調器通過同軸電纜與光纖結點相連,光纖結點通過光纜與電纜頭端相連,而電纜頭端接入了因特網。在電纜頭端,電纜調制解調器端接系統(Cable Modem Termination System)起到DSLAM的作用,即實現模擬信號和數字信號的轉換;

  • FTTH(Fiber TO The Home)光纖到戶

這裏主要是指使用光纖作爲通信鏈路的材質,有兩種競爭性的光纖分佈方案,一種是主動光纖網絡(Active Optical Network),另一種是被動光纖網絡(Passive Optical Network).其主要區別在於,是否在傳輸數據時共享光纖。

  • 以太網和WIFI

以太網接入是一種在公司、大學、家庭裏很流行的接入方式;用戶使用雙絞線與以太網交換機相連,從而接入因特網;接入以太網交換機的速度可達100Mbps;

在無線局域網中,無線用戶從一個接入點發送和接收數據,而該接入點與企業網相連,企業網最終接入因特網;在無線LAN中,用戶需要在一個接入點的幾十米範圍之內;

  • 廣域無線接入

在移動設備中,通過蜂窩網提供商運營的基站來發送和接收分組,與WIFI不同的是,用戶僅需要位於基站的數萬米範圍之內即可;

1.2.2 物理媒體

傳輸媒體是構成通信鏈路的主要部分,物理媒體通常可以分爲導引性媒體和非導引性媒體;其中導引性媒體,信號沿着固體前行;而非導引性媒體中,信號沿着固體媒體前行

值得注意的是,架設傳輸媒體的人歷成本要遠遠高於物理材料的成本

  • 雙絞線

最便宜的引導性傳輸媒體,由兩條相互螺旋纏繞的銅線組成。目前局域網中的雙絞線數據傳輸速率在10Mbps到10Gbps之間,所能達到的數據傳輸速率取決於線的粗細以及傳輸距離;雙絞線實際上已經成爲高速局域網聯網的主要方式;因爲現代的雙絞線技術速率和傳輸距離都是很不錯的;

  • 同軸電纜

也由兩個銅導體構成,但是它們是同心的,而非並行的;藉助特殊的結構和絕緣層,同軸電纜可得到較高的數據傳輸速率;在電視系統中應用廣泛;同軸電纜可被用作引導性的共享媒體;

  • 光纖

一種可以引導光脈衝的媒體

  • 陸地無線電信道

無線電信道承載電磁頻譜中的信號,不需要物理線路,提供與移動用戶的連接以及長距離承載信號的方式;是一種有吸引力的媒體;

  • 衛星無線電信道

通過衛星連接兩個或多個在地球上的微波發射方(也被稱爲地面站),該衛星在一個頻段上接收信號,在另一個頻段上發送信號;種類有同步衛星和近地軌道衛星;

1.3 網絡核心

網絡核心即爲由互聯端系統的分組交換機和鏈路構成的網狀網絡

通過網絡鏈路和交換機移動數據有兩種基本方法:電路交換和分組交換

1.3.1 分組交換

分組在通信鏈路上以等於該鏈路的最大傳輸速率傳輸通過通信鏈路。因此如果某條鏈路的最大傳輸速率爲R,分組長度爲L,則該鏈路傳輸該分組的時間爲L/R;這個時間也被稱爲傳輸時延(值得注意的是,這裏說的時間很有可能是傳播時延而不是傳輸時延,這兩者的區別在關於延遲時間的計算中將詳細解釋,雖然這裏書上寫的是傳輸,但是根據後文,我認爲是傳播);分組交換的常見方式是存儲轉發機制;

  • 存儲轉發

大多數分組交換機採用存儲轉發機制來轉發分組;所謂存儲轉發是指交換機在收到一個完成的分組,纔會向鏈路輸出轉發分組,否則就將收到的部分分組緩存起來;因爲緩存等待一個分組的全部數據而導致的時間開銷被稱爲存儲轉發時延

因爲需要緩存分組,所以此時分組交換機需要一個緩衝隊列;緩衝隊列的空間有限性就有可能導致分組交換機無法繼續緩存分組(因爲鏈路被佔用或者分組還沒全部到位)而使到達分組交換機的數據包被迫丟棄;這就導致了分組不但承擔了傳輸時延,還承擔了隊列時延。

  • 排隊時延與分組丟失

因爲需要緩存分組,所以此時分組交換機需要一個輸出緩存和輸出隊列;緩衝隊列的空間有限性就有可能導致分組交換機無法繼續緩存分組(因爲鏈路被佔用或者分組還沒全部到位)而使到達分組交換機的數據包被迫丟棄;這就導致了分組不但承擔了傳輸時延,還承擔了隊列時延。

  • 轉發表與路由選擇協議

實際上,分組交換機之所以能夠知道往哪去是因爲其內部有一個轉發表,這個表維護了一個IP地址和鏈路的對應關係,所以處理流程爲:

  1. 通過分組的必要信息,獲得目的端系統的IP地址
  2. 通過IP地址索引轉發表,從而確定輸出鏈路

1.3.2 電路交換

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

  • 電路交換網絡中的複用

時分複用(Time-Division Multiplexing TDM):是指將時間劃分爲固定區間的,每個幀則又被劃分爲固定數量的時間空隙;當網絡需要建立一條連接時,網絡將在每個幀中爲該連接指定一個時隙;在該時隙內,鏈路用來傳輸該鏈接的數據;

頻分複用(Frequency-Division Multiplexing):將頻率域劃分爲頻段,然後將頻段分配給連接;此頻段被用來專門傳輸鏈接的數據。該頻段的寬度成爲帶寬。

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

分組交換的優點

    它提供了比電路交換更好的帶寬共享;
    它比電路交換更簡單、更有效、實現成本更低;

分組交換的缺點

    分組交換不適合實時服務,因爲端到端的時延是可變、不可預測的,這和整個網絡的情況相關;

電路交換的優點

    提供了端對端傳輸數據的速率保證;

電路交換的缺點:

    電路交換存在靜默期,這是指專用電路空閒時,其佔用的資源並沒有得到充分的利用;
    建立連接的過程比較複雜;

總體上來說,分組交換的性能要好於電路交換的性能,但是不同類型的分組交換方式有不同的應用場景;比如一些對最低速率有着嚴格要求的應用,比如實時服務等,爲了獲得速率保證,犧牲網絡的效率也是可以接受的。趨勢向着分組交換髮展
網絡的網絡

1.3.4 網絡的網絡

不得不說,因特網是一個龐大而複雜的系統,但是我們仍然有辦法描述它(我們不是已經這麼做過了嗎?),但是我們需要一個模型來刻畫因特網的結構;該用什麼樣的結構來刻畫因特網呢?我想,最普遍的說法就是:因特網是網絡的網絡。但是這一說法足夠精煉的同時也不夠明確。更重要的是,我們可以選擇更明確的方法來刻畫因特網;書中通過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互聯


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

因特網能夠看成是一種運行在端系統上的分佈式應用提供服務的基礎設施

計算機網絡必定要要限制在端系統之間的吞吐量,故在端系統之間存在時延、丟包;


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

一個分組在沿途每個節點承受不同類型的時延,這些時延中最爲重要的是:結點處理時延、排隊時延、傳輸時延和傳播時延.這些時延總體累加起來是結點總時延

時延的類型

  • 處理時延

處理時延是因爲節點需要解析分組的必要信息然後決定其出鏈路(索引轉發表等操作)而產生的,通常在微秒或者更低數量級;

  • 排隊時延

排隊時延是因爲分組所對應的出鏈路前面有其他分組正在傳輸,所以分組需要該鏈路的緩衝隊列裏等待其他分組傳輸完畢而產生的;一般來說,排隊時延是到達該隊列的流量強度和性質的函數,通常可以達到毫秒級到微秒級;

  • 傳輸時延

傳輸時延是將所有分組的比特推向鏈路所有需要的時間,實際的傳輸時延通常在毫秒到微秒數量級。用L表示分組的長度,用Rbps表示從路由器A到B的鏈路傳輸速率。傳輸時延是L/R。

  • 傳播時延

傳播時延是指比特進入鏈路後,從該鏈路的起點到下一個結點所用的時間;一旦分組中的最後一個比特到達路由器就意味着該分組的所有比特都已到達路由器;廣域網中,傳播時延一般是毫秒級的。傳播時延是d/s。d是路由器A到B的距離。s是鏈路的傳播速率。

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

如果打個比方的話,傳輸時延就是大卡車經過收費站的時間而傳播時間就是車在高速公路上行駛的時間。傳輸時延是分組長度和鏈路傳輸速率的函數。傳播時延是兩臺路由器間距離的函數


1.4.2 排隊時延和丟包

丟包:到達的分組發現一個滿的隊列。由於沒有地方存儲這個分組,路由器將丟棄該分組,該分組將會丟失

排隊時延和丟包與網絡的狀況和結點的緩衝空間大小、處理速度相關;如果分組到達的速度高於結點的處理速度,那麼分組就會在緩衝隊列裏排隊等待。當緩衝空間用完後,如果還有到的分組,那麼該分組將被迫丟棄

爲了描述網絡狀體,我們引入了流量強度這一概念:流量強度=分組到達的速度/結點的處理速度;流量工程裏一個金科玉律就是:設計系統時流量強度不能大於1;

流量強度持續大於1時,就將出現丟包現象

1.4.3 端到端時延

d_{end-end}=N(d_{proc}+d_{trans}+d_{prop})

1.4.4 計算機網絡的吞吐量

計算機網絡的吞吐量實際上是一個速度指標,它描述了比特經過某個節點的速度。對於某條路徑上的結點來說,和該結點有關的速度有兩個:接收數據的速度和發送數據的速度而該結點的吞吐量是這兩個速度中較小的一個;對於某條路徑來說,該路徑的吞吐量則是所有節點的吞吐量的最小值;網絡的吞吐量可以衡量網絡的性能.

任何時間的瞬時吞吐量是主機B接受到該文件的速率

如果該文件由F比特組成,主機B接受到所有比特用去Ts,則文件的平均吞吐量爲F/Tbps

吞吐量可以近似爲源和目的地之間路徑的最小傳輸速率。最小傳輸速率的鏈路爲瓶頸鍊路

在今天,因特網對吞吐率的限制因素通常是接入網。

1.5 協議層次及其服務模型

因特網是一個極爲複雜的系統,該系統裏存在着大量的應用程序和協議、各種類型的端系統、分組交換機和各種類型的鏈路級媒體。但是它同時也是有着清晰結構的,就像我們前面在網絡核心 一節介紹的,我們仍能構建它的結構模型

1.5.1 分層體系結構

計算機網絡採用分層的體系結構,分層的體系結構因爲提供模塊化而具有很高的價值,同時也易於服務實現的多樣性:某一層對其上一層提供服務,同時它可以利用下一層提供的服務。只要對上提供的服務和對下利用的服務沒有變化,其層內部的實現並不會對系統結構產生影響;對於大而複雜且需要不斷更新的系統來說,改變服務的實現而不影響系統其他組件是分層模式的另一個重要優點

爲了給網絡協議的設計提供一個結構,網絡設計者以分層的方式組織協議以及實現這些協議的軟硬件

一個協議層可以使用軟硬件實現,同時某個協議層的不同部分常常位於網絡組件的各部分。協議分層具有概念化和結構化的優點。模塊化使得更新系統組件更爲容易。但是分層也有其缺點,就是功能上的冗餘,比如許多協議棧針對鏈路和端到端兩種情況都提供了差錯恢復功能。第二種潛在的缺點就是某層的功能可能需要僅在其它層纔出現的信息

總體來說,將各層的所有協議組合起來,稱爲協議棧。因特網的協議棧有5個層次組成:物理層、鏈路層、網絡成、傳輸層、應用層

    應用層:應用層協議分佈在多個端系統,端系統中的應用程序使用該協議與另一個端系統中的應用程序通信。處於應用層的分組稱爲報文
    傳輸層:傳輸層在應用程序端點之間傳輸應用層報文,因特網中有兩個傳輸層協議:TCP和UDP。處於傳輸層的分組稱爲報文段。TCP提供確保傳遞、流量控制、擁塞控制機制。UDP提供無連接服務,即不提供不必要服務的服務。沒有可靠性、沒有流量和擁塞控制。
    網絡層:網絡層將稱爲數據報的網絡層分組從一臺主機移動到另一臺主機。網絡層協議包含著名的IP協議以及其他一些路由選擇協議。數據報
    鏈路層:鏈路層將稱爲幀的鏈路層分組從一個結點移動到路徑上的另一個端點。一個幀可能被沿途不同鏈路上的不同鏈路層協議處理。
    物理層:物理層的任務是將幀中的比特從一個結點移動到下一個節點,它提供了傳輸信息的實際物理通道;

  • OSI模型

在因特網協議棧出現以前,OSI模型是ISO組織研發的計算機網絡結構模型。OSI的模型一共有7層,從下到上依次爲:物理層,鏈路層,網絡層,傳輸層,會話層,表示層,應用層。相比因特網體系結構,OSI多了兩層。

因特網將兩層的功能留給了開發者自行實現。

1.5.2 封裝

一個分組,在不同的層次有不同的稱謂,是因爲它們經過每一層的時候就被該層封裝上了屬於該層的相關信息,也就是前面提到的必要信息;於是,每一分層的分組有兩種類型的字段:首部字段和有效負載;其中有效負載即爲來自上一層的分組數據,而首部字段就是該層加上的必要信息;分組不斷被封裝以實現各層協議規定的相關功能

第二章、應用層

2.1 應用層協議原理

研發網絡應用的核心是寫出能夠運行在不同端系統和通過網絡彼此通信的程序;值得注意的是,我們不需要寫在網絡核心設備如路由器或者鏈路層交換機上運行的軟件,這種設計方式即將應用程序限制在端系統的方法,促進了大量網絡應用程序的迅速研發和部署

2.2.1 網絡應用程序體系結構

應用程序的體系結構不同於網絡的體系結構。從應用程序研發者的角度來看,網絡體系結構是固定的,併爲應用程序提供特定的服務集合;換言之,應用程序體系結構使用應用程序開發設計的,它規定了在端系統上如何組織應用程序。兩種常見的現代網絡應用程序所採用的體系結構爲:客戶-服務器體系結果和對等體系結構

  • 客戶-服務器體系結構

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

客戶-服務器體系結構的著名應用有:Web、FTP、Telnet和電子郵件。

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

  • P2P體系結構

在P2P體系結構中,對位於數據中心的專用服務器有着最小(或者沒有)依賴。應用程序在間斷連接的主機對之間使用直接通信,這些主機被稱爲對等方。對等方並不爲服務提供商所擁有,因爲這種對等方通信不需要通過專門的服務器,所以該體系結構也被稱爲對等方到對等方結構

目前,流量密集型應用都是P2P體系結構的。這些應用包括文件共享(例如BitTorrent)、協助下載(例如迅雷)、因特網電話(例如Skype)和IPTV(例如迅雷看看)。

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

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

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

  1.     ISP友好。大多數住宅ISP受制於非對稱帶寬應用,也就是下載比上傳要多得多。但是P2P視頻和文件分發應用改變了從服務器到住宅ISP的上載流量,因而給ISP帶來壓力;
  2.     安全性。因爲其高度的分佈和開放式,P2P應用也可能給安全帶來挑戰;
  3.     激勵。如何說服用戶資源嚮應用提供帶寬、存儲和計算資源?這是一個問題;

2.1.2 進程通信

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

  • 客戶進程和服務器進程

對於沒對通信進程,我們通常將這兩個進程之一標識爲客戶,而另一個進程標識爲服務器。

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

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

多數應用程序是由通信進程對組成的,運行在不同端系統上的進程對之間通過計算機網絡來實現通信。所以,在應用程序進程和計算機網絡之間存在一個接口,該接口被稱爲套接字。更爲準確的說,套接字是同一臺主機內應用層和運輸層之間的接口。由於該套接字是建立網絡應用程序的可編程接口,因此套接字也被稱爲應用程序和網絡之間的應用編程接口(Application Programming Interface).

應用程序開發者可以控制套接字在應用層的一切內容,但是對於運輸層的相關部分,幾乎沒有控制權,可以做的有:

  • 選擇傳輸層協議和設定幾個傳輸層參數,比如最大緩存和最長傳輸層報文長度
  • 進程尋址

爲了向特定目的進程發送報文,發送機進程需要知道接收進程(更爲準確的說是,接收進程對應的套接字)的標記。該標記由兩部分組成:接收進程所在的主機地址和接收進程在該主機中的標記;在因特網中,主機由IP地址標記,其中IP地址是一個32位(IPV4)標記;而接收進程(或者說是其對應的套接字)使用端口號標記;一些常用的應用程序有着固定的端口號,比如Web服務器使用80端口、郵件服務器(運行SMTP協議)使用25端口等


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

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

  • 可靠數據傳輸

如同在第一章中介紹的,分組在傳輸過程中可能會丟失。比如,分組因爲路由器中的緩存溢出而被丟棄或者分組在傳輸的過程中發生了損壞等情況;有些應用是不允許數據發生丟失的,比如電子郵件、文件傳輸、遠程主機訪問、Web文檔傳輸以及金融應用等。爲了支持這些應用,必須做一些工作以確保應用程序一段發送的數據正確、完全地交付給接收數據的進程。如果一個協議提供了這樣得確保數據交付的服務,就認爲該協提供了可靠數據傳輸。當應用程序使用可靠數據傳輸的傳輸層協議時,只要將要發送的數據傳輸進套接字就可以完全相信該數據可以完整無差錯地到達接收方;

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

  • 吞吐量

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

對吞吐量有明確要求的應用程序被稱爲帶寬敏感的應用。許多多媒體應用是帶寬敏感的(儘管某些多媒體應用程序可能採用自適應編碼技術對數字視頻和音頻以與當前可用帶寬相匹配的速度加解碼。),比如因特網電話。而彈性應用則對吞吐量沒有嚴格的要求。這類應用包括:電子郵件、文件傳輸以及web傳送等。值得注意的是,吞吐量當然是越多越好了。

  • 定時

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

  • 安全性

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

2.1.4 因特網提供的傳輸層服務

因特網(更一般的是TCP/IP網絡)爲應用程序提供連個運輸層協議,即UDP和TCP。每個協議對應用程序提供了不同服務的組合。以下爲常見的因特網應用的特點:

  • TCP服務

TCP服務模型包括了面向連接的服務和可靠數據傳輸服務。

    面向連接的服務:在應用層數據報文開始流動之前,TCP會在客戶端和服務器端相互交換傳輸層控制信息。這個握手過程將提示客戶端和服務器端,讓它們爲即將到來的大量分組做好準備;握手階段接收後將建立一個TCP連接。這條鏈接是全雙工的,即連接雙方使用該條鏈接可以同時進行報文的收發。這條連接將在通訊結束後拆除;
    可靠的數據傳輸:應用程序使用TCP協議可實現無差錯、按適當順序交付所有發送的數據,沒有字節的丟失和冗餘;

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

  • UDP服務

UDP服務是一種不提供不必要服務的輕量級運輸協議。它僅提供最小服務。UDP是無連接的也就是說通信之前沒有握手;UDP不提供數據的可靠傳輸;UDP也沒有擁塞控制機制。有些應用場景下,UDP協議將帶來更多的便利和效率,比如DNS和一些因特網電話服務(爲了避免擁塞控制協議的控制而使用UDP)

  • 傳輸層無法提供的服務

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

2.1.5 ssl與tcp與http

http和https和ssl和tcp/ip之間的關係和區別

2.1.6 應用層協議

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

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

2.1.7 本博客涉及的應用層應用

即將介紹的應用包括:Web、文件傳輸、電子郵件、目錄服務和P2P。Web部分將介紹HTTP協議,它比較簡單和易於理解;FTP則和HTTP形成了對照;電子郵件是比Web更爲複雜的應用,因爲它使用了多個應用層協議;大多數用戶不會直接和DNS接觸,但是DNS很好地說明了一種核心的網絡功能是如何在應用層實現的。最後便是P2P應用的簡單介紹了。

2.2 WEB和HTTP

2.2.1 HTTP概述

HTTP(HyperText Transfer Protocol)是WEB的應用層協議,它是Web的核心;HTTP有兩部分實現,一個客戶端程序一個服務器程序;HTTP定義了客戶和服務器進行報文交換的方法;

Web頁面是由對象組成的,一個對象是一個文件,它們通過一個URL地址進行尋址。客戶和服務器交互的核心思想是客戶通過HTTP請求對服務器發出對Web頁面的請求報文,服務器收到該報文後將返回包含該對象的HTTP響應報文。URL地址由兩部分組成:存放對象的服務器主機名和對象的路徑名

HTTP使用TCP作爲它的傳輸層協議;HTTP客戶首先發起一個與服務器的TCP連接,需要注意的是,服務器根據請求作出響應,但是不存儲任何關於該客戶的狀態信息;也正因爲這樣,HTTP被稱爲無狀態協議。同時,Web使用了客戶端-服務器的應用體系結構;其中web服務器總是開着的

2.2.2 持續連接和非持續連接

在因特網應用程序中,客戶端和服務器將在很長的時間範圍裏通信;應用程序將根據自身的特點,選擇以規則的間隔週期性性發出請求也可以間斷性一個個發出請求。當通信是使用TCP協議時,服務器端需要做出一個決定:這些請求是使用一個TCP連接完成還是通過獨立的TCP連接完成。如果採取前一個方法,則稱應用程序使用持續連接,如果使用後一種方式,則稱爲非持續連接

HTTP既可使用持續連接也可以使用非持續連接。儘管HTTP在靜默情況下使用持續連接

  • 採用非持續連接的HTTP

使用非持續連接時,每個TCP連接在服務器發送一個對象後就會關閉,也就是每個TCP只傳送一個請求報文和響應報文;

爲了描述持續連接和非持續連接的特點,我們引入RTT(Round-Trip Time)。RTT指的是,一個短分組從客戶端到服務器,然後再返回客戶端所用的時間。RTT包括分組的傳播時延、排隊時延、處理時延(因爲是短分組,所以其傳輸時延可不計);因爲客戶端和服務器建立TCP連接的時候,會通過一個三次握手的過程來交換傳輸控制信息。三次握手的前兩次佔用了一個RTT,客戶結合第三次握手通行會通過該連接發送一個HTTP請求報文,一旦該分組到達服務器,服務器便開始使用TCP傳輸HTML對象。因此,粗略地說,響應時間是兩個RTT加上傳輸HTML的時間(不是傳播)。

  • 採用持續連接的HTTP

從上面可以看出,非持續連接必須爲每個請求新建一個TCP連接,而每個TCP連接將佔用系統資源,包括緩衝區和變量等,這樣服務器的負擔就很重了。第二,一個對象將通過兩個RTT的時延才能交付。

如果使用持續連接,那麼服務器在發送響應報文後將保持該TCP打開,後續客戶端可以使用該連接來向服務器發出請求。不但一個完整的頁面可以通過同一個連接傳送,同一臺服務器上的多個頁面也可以通過同一個連接發送。這就提高了效率;

一般來說,如果一條連接在一定的時間間隔後沒被使用的話,就會被關閉。HTTP默認使用的是帶流水線的持續連接。

2.2.3 HTTP報文格式:請求報文和響應報文

  • 請求報文

一個請求報文具有至少一行的內容。請求報文的第一行稱爲請求行,其後繼的各行被稱爲首部行。請求行包含三個內容:方法字段、URL字段、HTTP版本;其中方法字段可爲:GET、POST、PUT、DELETE、HEAD等。URL字段裏可以傳遞請求對象的標誌;

首部行包含是否在發送完響應報文後關閉TCP連接的Connection;請求的主機地址(該頭部信息被Web高速緩存所要求);瀏覽器版本;可接受的語言等頭部信息;

在首部行之後一個空行,之後便是請求的“實體體”。該實體體可以在POST方法裏傳遞Form表單內容或者傳遞其它一些二進制流數據等。值得注意的是,表單也不一定必須使用POST方法。如果使用get,實體體爲空,會顯示在url中。

Head類似於get方法,將會用一個http報文進行響應,但是不返回請求對象,經常用作調試跟蹤。put方法允許用戶上傳對象到指定的Web服務器上指定的路徑。Delete方法允許用戶或應用程序刪除Web服務器上的對象。

  • HTTP響應報文格式

響應報文總體上也分三個部分,第一部分是狀態行,包含HTTP版本、狀態以及狀態信息等內容;第二部分是首部行,包含發送日期、服務器類型、上一次修改請求資源的時間、內容的類型等內容。第三部分是實體體實體體包含請求對象本身

這裏的Date是從文件系統中檢索到該對象,插入到響應報文,併發送該響應報文的時間。

  • 常見狀態碼

200:請求成功 處理方式:獲得響應的內容,進行處理

301:請求到的資源都會分配一個永久的URL,這樣就可以在將來通過該URL來訪問此資源 處理方式:重定向到分配的URL

400:非法請求 處理方式:丟棄

404:沒有找到 處理方式:丟棄

505:服務器不支持請求報文使用的http版本。

2.2.4 用戶與服務器的交互:Cookie

前面提到,HTTP是無狀態協議,但是Web站點爲了識別用戶身份或者限制用戶訪問的時間或者將用戶訪問的內容同用戶身份相關聯,Web站點可以使用Cookie技術;

  • Cookie技術包含4個組件
  •     HTTP響應報文裏增加一個關於Cookie的首部行;
  •     HTTP請求報文裏增加一個關於Cookie的首部行;
  •     用戶端系統保留一個Cookie文件,由瀏覽器保存維護;
  •     Web站點建立Cookie和用戶身份的關聯;

雖然,Cookie的使用方便了用戶也方便了服務端,但是它的使用存在爭議,因爲使用Cookie被認爲是對用戶隱私的一種侵犯,因爲Web站點可以通過Cookie得到很多用戶的信息,並有可能將這部分信息賣給第三方等

2.2.5 Web緩存

Web緩存器也被稱爲代理服務器,它代表初始web服務器來滿足HTTP請求。它有自己的存儲空間,並在存儲空間裏保持有最近請求過的對象的副本;可以通過配置瀏覽器,將所有指向初始服務器的請求首先指向代理服務器。

當代理服務器收到一個HTTP請求後,它將檢查本地是否緩存過該對象,如果緩存過該對象,將檢查是否過期,如果沒有過期,則直接將該對象返回給瀏覽器;如果本地不存在或者存在已過期,則代理服務器將根據請求報文裏的Host首部行以及請求行裏的URL字段向初始服務器發出請求,然後將響應對象返回給瀏覽器並緩存在本地。

通常,代理服務器與客戶端的通信速度要快於初始服務器與客戶端的連接速度;Web代理服務器可以大起大減少對客戶請求的響應時間;而且,緩存器能從整體上大大降低因特網上的web流量,從而有助於提高所有應用程序的性能;

通過使用內容分發網絡(Content Distribution Network),Web緩存器正在因特網中發揮越來越重要的作用

Web緩存即是客戶又是服務器

2.2.6 條件GET方法

高速緩存器的使用,帶來很多好處,但是有一個問題就是代理服務器對緩存對象的管理:如何確保所請求的對象是最新的?其實HTTP提供了一種機制,允許緩存器證實其使用的對象是最新的,這種機制就是條件GET方法。使用條件GET方法只需在使用GET方法的時候,增加一個If-Modified-Since首部行,其對應的內容是一個時間,如果所請求的資源在指定日期後被修改了,那麼服務器將返回新的對象,否則服務器將返回一個包含空實體體的報文。這樣代理服務器就可以確認緩存是否過期了。

2.3 文件傳輸協議FTP

在一個典型的FTP應用中,用戶通過FTP代理和FTP交互。用戶首先提供遠程主機的主機名,使得FTP用戶代理建立一個到遠程主機的TCP連接,之後需要用戶提供用戶名和密碼,它們作爲FTP命令的一部分在TCP連接上傳輸;一旦服務器授權,用戶便可以和服務器進行文件傳輸了。

HTTP和FTP都是應用層協議,它們都運行在TCP協議之上,但是它們之間也有一些重要區別,其中一個就是FTP使用連個並行的TCP連接來傳輸數據,一個TCP被稱爲控制連接,用來傳輸FTP命令;一個TCP連接被稱爲數據連接,用於傳輸文件數據;因爲FTP協議內,控制信息是通過一個獨立的TCP連接傳輸,所以我們稱FTP的控制信息是帶外傳送的;如果控制信息和數據信息通過同一個TCP傳輸,則稱爲帶內傳送。TCP控制連接端口21,數據連接端口20

需要注意的是,FTP中控制連接貫穿整個會話,但是數據連接會在一個文件開始傳輸的時候建立,在傳輸結束後關閉;所以每次傳輸一個新的文件時,都會新建一個數據連接;

同時,FTP需要在整個會話期間,保留用戶的狀態,也就是將控制連接同用戶賬戶關聯起來,同時記錄用戶在遠程目錄樹上的操作,這就限制了FTP可以同時維持的會話總數.

  • FTP命令和回答

從客戶到服務器的命令和從服務器到客戶的回答,都是以7比特ASCII格式在控制連接上傳遞的

常見的命令如下:

RETR <filename> 從服務器上找回(複製)文件
STOR <filename> 儲存(複製)文件到服務器上
USER <username>> 系統登錄的用戶名
PASS <password> 系統登錄密碼

常見的回答如下:

 

125 打開數據連接,開始傳輸

 

331 要求密碼
452 磁盤空間不足,寫錯誤
425 無法打開數據連接

2.4 因特網中的電子郵件

 

因特網電子郵件系統有三個核心組件:用戶代理郵件服務器SMTP(簡單郵件傳輸協議,Simple Mail Transfer Protocol)。

郵件服務器構成了電子郵件系統的核心。每個收發方在郵件服務器上擁有一個郵箱;一個典型的電子郵件發送過成爲:發送方通過用戶代理將郵件傳送到發送方的郵件服務器,然後再傳輸到接收方的郵件服務器,然後郵件被分發到接收方的郵箱裏;接收方從郵件服務器裏獲取自己的郵件時需要通過郵件服務器的驗證

SMTP是因特網中電子郵件的主要應用層協議,它使用TCP可靠數據傳輸從發送方的郵件服務器向接收方的郵件服務器發送郵件;在每臺郵件服務器上同時運行SMTP服務器和SMTP客戶端。當郵件服務器接收其他郵件服務器的郵件時,它表現爲SMTP服務器,當郵件服務器向其他郵件服務器發送郵件時,表現爲SMTP客戶端。

如果發送端不能將郵件發送個接受端的服務器,發送端的郵件服務器會在一個報文隊列中保持該報文並在以後嘗試再次發送。

2.4.1 SMTP

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

SMTP25號端口。SMTP是持續連接的。對每一報文,客戶使用一個新的MAIL FROM:crepes.fr開始。當所有報文發送完後才發送QUIT,斷開連接。SMTP出現在因特網之前,儘管它有着很不錯的特性,但是它具有的某種陳舊的特徵表明它仍然是一種繼承的技術,比如,它限制郵件報文的所有部分只能使用7比特的ASCII表示,這就導致二進制多媒體文件需要編碼爲ASCII,而且在發送方需要編碼,接收方則需要解碼。

值得注意的是,SMTP報文一般不使用中間郵件服務器發送報文,也就是郵件不會在中間某個郵件服務器保留;在SMTP握手階段,SMTP客戶端將介紹發送方和接收方的郵箱地址;一旦介紹完畢後,SMTP客戶端將開始發送報文

2.4.2 與HTTP對比

HTTP和SMTP都是用TCP協議;持續的HTTP和SMTP都是用持續連接;但是兩者也有區別。

  • 首先HTTP被設計爲一個Pull協議而SMTP被設計爲一個Push協議。即用戶通過HTTP主動向服務器請求內容,而SMTP則是客戶將內容推向服務器端;
  • 第二個區別就是HTTP傳輸的數據不一定是用ASCII字符,但是SMTP則只能使用ASCII字符;
  • 第三個重要區別就是,HTTP將每個對象封裝在自己的響應報文裏,而SMTP則將所有的報文對象放到一個報文之中;

2.4.3 郵件報文格式和MIME

報文由兩部分組成:一個包含環境信息的首部和一個包含郵件內容的報文體;首部和報文體之間使用空行分開;首部行的格式爲關鍵字:及其值;每個首部必須包含一個From和To首部行。首部也可以包含其它信息,比如Subject等。這與2.4.1中接觸的SMTP命令不同,那節中的命令是握手協議的一部分;本節中研究的內容是郵件報文自身的一部分

2.4.4 郵件訪問協議

需要注意的是,SMTP是郵件服務器之間發送郵件報文的協議,並不是用戶通過代理和郵件服務器之間通信的協議;用戶代理使用郵件訪問協議來從郵件服務器上獲取郵件信息;目前常用的郵件訪問協議有POP3(Post Office Protocol-Version 3)、因特網郵件訪問協議IMAP,Internet Mail Access protocol)和HTTP

  • POP3

POP3是一個非常簡單的協議,因爲簡單,所以功能有限;POP3使用端口110來建立TCP連接(SMTP使用端口25);POP3按照三個階段進行工作:特許、事務處理和更新;在特許階段,用戶代理髮送密碼和用戶名,進行身份鑑別;第二階段,用戶代理取回報文,同時還可以做刪除、取消刪除等標記或者統計郵件信息;第三個階段是在用戶退出後,POP3結束會話,刪除被標記的郵件;

一個需要注意的是,POP3用戶代理可以使用兩種事務處理模式:一種是下載並刪除,另一種是下載保留;POP3代理髮出的命令和其工作模式相關;下載並刪除的方法存在的問題是,如果用戶在一臺設備上查看了郵件(下載了郵件)後,郵件將被刪除,那麼在其他設備上將無法查看郵件;這給用戶帶來一定的不便。使用下載保存方式,則用戶下載郵件後,郵件還在服務器上。

在用戶代理與郵箱服務器之間的POP3會話期間,該POP3服務器保留了一些狀態信息,特別是標記了哪些用戶報文被標記爲刪除了。但是POP3服務器並不在POP3繪畫過程中攜帶狀態信息,大大簡化了POP3的服務。

  • IMAP

POP3協議無法爲用戶提供郵件分類管理的功能,雖然用戶可以通過將郵件下載到本地,然後由用戶代理程序做分類管理,但是處理的結果是無法同步到其他查看設備上的。爲了解決這一問題,IMAP誕生了。IMAP是一個郵件訪問協議,比POP3要複雜的多,當然也就有更多的特色了。

(遠程)IMAP將每一份郵件和一個一個文件夾聯繫起來,當報文第一次到達服務器時,它與收件人的INBOX相關聯。收件人可以將郵件移到新創建的文件夾,閱讀郵件,刪除郵件等。IMAP允許用戶在不同文件夾裏移動郵件並且查詢郵件。值得注意的是,IMAP服務器維護了IMAP會話的用戶狀態信息,但是POP3並不;IMAP協議還允許用戶代理獲取報文組件而不是報文整體。

  • 基於Web的電子郵件

這種方式主要是指,用戶使用HTTP協議和郵件服務器通信。用戶代理就是普通的瀏覽器,但是,郵件服務器之間還是使用SMTP協議的

2.5 DNS:因特網的目錄服務

2.5.1 DNS提供的服務

首先,需要注意的是,在計算機網絡裏,我們通過IP地址來標記某一時刻網絡中唯一的主機。IP地址(IPV4)由4個字節組成,有着嚴格的層次結果,每個字節使用點號分隔。同時,爲了方便記憶,我們也通過爲主機提供一個便於記憶的主機名來標誌主機,這樣主機之間的通信就變得方便了。但是,同時也就引入一個問題:主機名和IP地址的轉換問題;因爲在信息的發送者一端,通常使用主機名來標識主機,但是在計算機網絡裏是使用IP地址來標機主機。

計算機網絡裏有一種應用專門提供這樣的服務,它就是DNS(Domain Name System)域名系統DNS是一個由分層的DNS服務器組成的分佈式數據庫和一個使得主機可以查詢分佈式數據庫的應用層協議組成;

用戶主機上應該運行着DNS客戶端。DNS通常被其他應用層協議使用,比如:HTTP、SMTP和FTP等。這些協議在正式工作以前,首先利用DNS提供的服務,將主機名轉換爲IP地址,可以發現的是,DNS爲用戶帶來方便的同時,也爲網絡應用帶來額外的時延——查詢DNS服務器的時延。需要注意的是,緩存作爲一種提高性能,特別是查詢性能的手段,在DNS中同樣適用。

DNS運行在UDP之上,使用53號端口

  • 除了提供主機名到IP地址的轉換外,DNS還提供以下重要服務:

    主機別名:雖然,主機名比起IP地址好記多了,但是有時候我們的主機名仍然很長,很不好記憶,所以我們需要爲主機名再起一個名字,這就是主機別名,DNS不但提供主機名到IP地址的轉換服務,還提供主機名與主機別名的轉換;此時主機名被稱爲規範主機名;
    郵件服務器別名:DNS同樣也提供郵件服務器主機名和別名的轉換服務,實際上,公司的郵件服務器和Web服務器可以使用相同的主機別名;MX記錄允許一個公司的郵件服務器和Web服務器使用相同的主機名。
    負載分配:DNS也被用在冗餘的服務器之間分配負載。每個服務器有着不同的IP地址,但是它們都和同一個主機名相關聯,也就是一個IP地址集合同一個規範主機名相聯繫;當某個DNS服務器收到DNS請求時,該服務器獎使用IP地址的整個集合作爲相應,但是在每個應答中,循環這些地址的次序。因爲客戶端通常都是使用IP地址集合的首個元素,所以DNS就在冗餘的Web服務器之間分配了負載。同理,多個郵件服務器可以具有相同的別名。

2.5.2 DNS工作機理概述

首先,DNS使用UDP作爲其傳輸層協議;DNS服務使用53端口;當主機上的DNS客戶端收到一個轉換請求時,客戶端將向網絡發送一個DNS查詢報文,然後客戶端將收到一個包含相關信息的DNS回答報文,這個報文裏有客戶端想要的內容,之後DNS客戶端將IP地址返回給請求的提出者即可。從使用DNS服務的請求者來看,DNS就像一個簡單的提供直接轉換服務的黑盒子,實際上這個黑盒子非常複雜,由分佈在全球的大量DNS服務器以及定義DNS服務器和查詢主機之間如何通信的應用層協議組成;

DNS採用分佈式的設計方案,實際上,DNS是一個在因特網實現分佈式數據庫的精彩範例!而之所以這樣做,是因爲,單一的DNS服務器無法解決單點故障、無法保證通信容量以及無法臨近所有的查詢主機和維護困難等問題

  • 分佈式層次的數據庫

爲了處理擴展性問題,DNS服務器採用層次式組織,並且分佈在全世界範圍內;大致來說,存在三種DNS服務器:DNS服務器、頂級域DNS服務器和權威DNS服務器;舉例說明,其工作的普遍流程:一個DNS客戶端,希望獲得www.baidu.com的IP地址,粗略的說,DNS客戶端首先和根DNS服務器取得聯繫,它將返回負責解析頂級域名com的服務器的IP地址(或者其集合),客戶將同這些服務器之一取得聯繫,然後頂級域DNS服務器建返回baidu.com的權威服務器的IP集合,客戶端通過與這些服務器之一取得聯繫,獲得www.baidu.com的IP地址。

    根DNS服務器:因特網上有13個根DNS服務器,大部分分佈在北美洲,儘管我們可以將這13個根DNS服務器視爲單個的服務器,但是每臺服務器實際上是一個冗餘的計算機網絡以提供安全性和可靠性;
    頂級域DNS服務器:負責頂級域名,如com,org,net,edu,gov以及各個國家的頂級域名的轉換。
    權威DNS服務器:因特網上,具有公共可訪問主機的每個組織機構必須公共可訪問的DNS記錄,這些記錄將主機名映射爲IP地址。一個組織的權威DNS服務器收藏了這些DNS記錄,多數大學和大公司實現和維護它們自己的基本和輔助(備份)權威DNS服務器;當然,也可以通過付費的方式,將相關的信息插入到其它權威服務器中;

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

DNS查詢有兩種,一種是遞歸查詢一種是迭代查詢;實踐中,查詢通常滿足這樣的模式:從請求主機到本地DNS服務器的查詢是遞歸的,其餘查詢是迭代的。所謂迭代就是,如果請求的接收者不知道所請求的內容,那麼接收者將扮演請求者,發出有關請求,直到獲得所需要的內容,然後將內容返回給最初的請求者。也就是說,在遞歸查詢中,一定要給請求者想要的答案;迭代查詢則是指,如果接收者沒有請求者所需要的準確內容,接收者將告訴請求者,如何去獲得,但是自己並不去發出請求。

  • DNS緩存

DNS緩存實際上是爲了蓋上時延性能並且減少在因特網上傳輸的DNS報文數量而引入的。DNS緩存原理十分簡單,每當DNS服務器發出請求後收到回答時,就將回答的內容緩存在它自己的主機空間上。這樣,如果有相同的請求到達時,就不需要再去發出請求,直接使用緩存即可;因爲有了緩存,本地DNS就可以直接提供一些經常被訪問的主機名所對應的IP地址,而不需要詢問根DNS服務器了。需要注意的是,緩存不可避免的一個問題:有效時間。如果緩存過時而未得到更新,那麼就會導致一些請求失敗。

個人認爲,緩存技術就是一種典型的使用空間換時間的策略

2.5.3 DNS記錄和報文

共同實現分佈式數據庫的所有DNS服務器存儲了資源記錄(Resource Record)。而RR提供了主機名到IP地址的映射信息;一條RR是具有一下字段的4元組:(name, value, type, TTL);其中TTL是指該記錄的生存時間,它決定了該條記錄何時被刪除。

首先看看type,type有4種取值,包括:A、NS、CNAME、MX等:

  •     type=A:則name爲主機名,value爲對應的IP地址;
  •     type=NS:則name爲域,value爲如何獲得該域下主機IP地址的權威DNS服務器的主機名;
  •     type=CNAME:則value爲name(本身爲主機別名)所對應的主機的規範主機名;
  •     type=MX:則value爲那麼所對應的郵件服務器的規範主機名;

如果爲了獲得郵件服務器的規範主機名,請求一條MX記錄;爲了獲得其它服務器的規範主機名,請求一條CNAME記錄

所以如果一條記錄爲type=A,則它直接包含了需要的信息;如果是NS,需要進一步得到權威DNS服務器的IP地址(同時返回一條NS記錄,並返回一條以該NS記錄的value值爲name的A記錄)希望得到一條A記錄;而type=CNAME和MX的記錄則實現了主機別名到主機規範名的轉換,可以通過該規範名繼續構建查詢鏈條,直到獲得希望的IP地址;

  • DNS報文

DNS報文有兩種,即查詢報文回答報文,並且兩種報文有着相同的結構:
DNS報文結構:

    前12字節爲首部區域。標識符是一個用來標記該查詢的16比特數。該標誌符會被複制到相應的回答報文裏,以便匹配請求和回答;
    標誌字段有若干標誌,用來指出報文的類型(請求還是響應)、查詢類型(遞歸還是迭代)、是否是所請求名字的權威DNS服務器、以及4個有關數量的字段,用來指示4類數據區域出現的數量;
    問題區域包含了正在進行的查詢信息,包括名字字段、查詢類型;
    回答區域包含了對最初請求的名字的資源記錄,回答報文的回答區域可以包含多條RR,因此一個主機名能有多個IP地址;
    權威區域包含了其他權威服務器的信息;
    附加區域包含了其它有幫助的記錄,比如在對於一個MX類型的請求回答報文裏,回答區域裏指出了郵件服務器的規範主機名,而附加區域裏就有可能包含一個類型爲A的關於該規範主機名的的IP地址;

  • 向DNS數據庫中插入數據

需要在註冊登記機構完成這一任務,當你註冊一個域名時,需要向該機構提供你的基本和輔助DNS服務器的名字和IP地址;該註冊機構將確保一個類型爲NS和類型爲A的記錄輸入對應的頂級域名服務器;這樣就完成了插入數據

2.6 P2P應用

對總是打開的基礎設施服務器沒有依賴,成對間歇連接的主機之間相互通信。

有兩種典型因特網應用十分適合P2P體系結構,一種是文件分發(BitTorrent),另一種是大型對等方社區中的數據庫;我們將探討分佈式散列表的概念。P2P體系結構有着良好的自擴展性。這種擴展性的直接成因是:對等方除了比特的消費者之外還是他們的重新分發者

2.6.1 P2P文件分發(BitTorrent)

BitTorrent 是一種用於文件分發的流行P2P協議;用BitTorrent的術語來說,參與一個特定文件分發的所有對等方的集合被稱爲一個洪流;在一個洪流中的對等方彼此下載等長度的文件塊;當一個對等方下載文件塊的時候,也向其他對等方發送了多個塊;一旦某對等方獲得了完整文件,就可以自私地離開洪流或者大公無私地留下來繼續向其他對等方發送文件.

    P2P文件共享協議,參與一個特定文件分發的所有對等方結合被稱爲一個洪流(torrent),在一個洪流的對等方彼此下載等長度的文件塊,可以隨時離開洪流,也可繼續向其他對等方上載。每個洪流都有一個追蹤器。
    Alice加入某洪流時,會在追蹤器裏進行註冊,週期性通知追蹤器它仍在洪流中。我們稱所有與ALICE成功的創建了一個TCP鏈接的對等方成爲鄰近對等方。
    洪流隨機從參與對等方的結合中選擇一個子集,將他們的IP地址發給Alice,Alice維護這張對等方列表,試圖與所有對等方建立並行的TCP連接。
    Alice週期詢問每個鄰近對等方(連上的)他們有的文件塊列表,她隨時知道鄰居有哪些文件塊
    Alice使用最稀缺優先技術,首先請求那些鄰居們副本數量最少的塊,使該文件塊迅速分發,以均衡每個塊在洪流中的副本數量
    BitTorrent使用一種算法,Alice優先從像她傳時速度最快的鄰居(4個,每10s修改一次)那裏獲取文件塊。
    每過30s,Alice也要隨機選擇另外一個對等方Bob,向他發送塊。若Alice是Bob最快的前四快,Bob也是Alice的前4快,則Bob和Alice互相發送數據。
    每過30s換一個新的對象,互相交換數據(一報還一報),爲了使對等方能夠找到彼此協調的速率上傳

2.6.2 分佈式散列表(DHT)

  • 分佈式、P2P版本的key-value數據庫,在大量對等方上存儲key-value值(鍵值對)
  • 分佈式數據庫用來定位擁有某key-value的對等方,然後向查詢方返回該鍵值對
  • 使用散列函數把每個鍵映射爲[0,2^{n}-1]之間的一個整數。
  • 把(鍵,值)對存儲在最鄰近對等方那裏。比如有8個對等方,標識符爲1,3,4,5,8,10,12和15。因此將(11,“wangwenxuan")存儲在12上。
  • 環形DHT。(就是環形)。爲了防止放鬆的報文太多了,還可以可以增加捷徑,使每個對等方不僅僅聯繫直接前驅和直接後繼。
  • 對等方擾動。對等方可能忽然離開或到來。爲了處理對等方擾動。我們要求每個對等方聯繫第一個和第二個後繼。週期性的證實他們倆是活着的。

2.7 套接字編程

當發送進程能夠將數據分組退出套接字之門之前,當使用UDP時,必須將目的地址(IP+端口號)附着在分組上。在分組傳給發送方的套接字後,因特網將使用目的地址通過因特網爲該分組選路到接受進程的套接字。發送方的源地址也是由IP和端口號組成。然而,將源地址附着在分組上通常是由底層操作系統自動完成的。

第三章、傳輸層

輸層位於應用層和網絡層之間,是分層的網絡體系結構中重要的部分,該層爲運行在不同主機上的應用進程提供直接的通信服務起着至關重要的作用。在這裏我們將討論兩個大的問題:將網絡層在不同端系統之間的通信服務擴充到運行在兩個端系統上不同的應用層進程之間的通信服務(如何實現進城之間通信的可靠傳輸)和控制傳輸層實體的傳輸速度以避免網絡擁塞或者從網絡擁塞中恢復過來,這裏需要考慮的有擁塞的後果和原因以及常見的擁塞控制手段,特別的,我們將瞭解TCP協議中的擁塞控制。

3.1 概述和運輸層服務

傳輸層協議爲運行在不同端系統上的應用進程之間提供邏輯通信功能;應用層進程使用傳輸層提供的邏輯通信功能而無需考慮實現通信的物理基礎設施的細節;

值得注意的是,傳輸層協議是在端系統中實現的而不是在路由器中實現的。傳輸層接收來自應用層的報文並通過添加傳輸層首部以生成傳輸層報文段。在生成過程中可能會對來自應用層的報文加以分割;然後在發送端系統中,運輸層會將這些報文段交給網絡層;網絡層將其封裝成網絡層分組,也被稱爲數據報,然後向目的地發送。路由器不會檢查封裝在數據報中的傳輸層報文段的字段;在接收端,網絡層從數據報中抽取傳輸層報文段,並將其交給傳輸層,傳輸層接收到報文段後,使該報文段中的數據被接收進程所使用。

網絡應用可以使用多種傳輸層協議,因特網有兩種傳輸層協議,即TCP和UDP,不同的傳輸層協議提供不同的運輸層服務

應用     應用層協議     運輸層協議
電子郵件     SMTP     TCP
遠程終端訪問     Telnet     TCP
Web     HTTP     TCP
文件傳輸     FTP     TCP
遠程文件服務器     NFS     UDP
流式多媒體     通常專用     UDP或TCP
因特網電話     通常專用     UDP或TCP
網絡管理     SNMP     UDP
路由選擇協議     RIP     UDP
名字轉換     DNS     UDP
 

3.1.1 傳輸層和網絡層的關係

值得注意的是,網絡層提供主機之間的邏輯通信而傳輸層爲運行在不同主機上的應用進程提供邏輯通信;運輸層協議只工作在端系統中。在端系統中,傳輸層協議將來自應用進程的報文移動到網絡邊緣即網絡層,反過來也從網絡層接收這些報文段;傳輸層對報文段如何在網絡核心傳輸並不做干涉;事實上中間路由器既不處理也不識別傳輸層加載應用層報文上的任何信息

運輸層協議能提供的服務常常受制於底層網絡層協議的服務類型,如果網絡層協議無法爲主機之間的通信提供時延和帶寬保證的話,運輸層協議也就無法爲進程之間發送的應用程序報文提供時延或者帶寬保證.

然而即使底層網絡協議不能在網絡層提供響應的服務,運輸層協議也能提供某些服務。例如,即使底層網絡協議是不可靠的,運輸協議也能爲應用程序提供可抗的數據傳輸服務。

3.1.2 因特網傳輸概述

因特網爲應用層提供了截然不同的兩種傳輸層協議:UDP(用戶數據報協議)它提供一種不可靠、無連接的服務;另一種是TCP,它提供可靠的,面向連接的服務;運輸層分組也被稱爲報文段;

簡單瞭解一下因特網的網絡層,網絡層協議有一個名字即IP,即網際協議。IP爲主機間提供邏輯通信,IP的服務模型爲盡力而爲交付服務(best-effort delivery service)這意味着IP盡最大的努力在主機間交付報文段,但是不做任何保證。它不保證報文段的交付、不保證報文段按序交付、不保證報文段中數據的完整性;即IP提供一種不可靠的服務;每臺主機都需要有一個網絡層地址,即IP地址。

UDP和TCP最基本的責任就是將IP提供的主機間交付服務擴展到不同端系統上兩個個進程之間的服務。這也被稱爲傳輸層的多路分解和多路複用;UDP和TCP通過在傳輸層首部添加差錯檢查字段來提供完整性檢查。進程到進程之間的數據交付和差錯檢查是最低限度的兩種傳輸層服務,也是UDP可以提供的僅有的兩種服務。UDP和IP一樣,也是不可靠服務;

TCP提供額外的服務,首先它是一種可靠數據服務,這意味着TCP協議保證數據的按序、完整地從發送端應用進程發送到接收端應用進程;TCP通過序號、確認、定時器以及流量控制來將IP的不可靠數據傳輸轉換爲可靠數據傳輸;其次,TCP提供擁塞控制,擁塞控制與其說是一種提供給應用程序的服務,不如說是一種提供給整個網絡的服務,因爲整個網絡都將因爲擁塞控制而受益;不太嚴格地說,擁塞控制力求爲每一個經過一條擁塞網絡的連接提供平等的共享網絡鏈路帶寬,從而避免一條TCP連接用過多的流量來淹沒通信主機之間的鏈路和設備;擁塞控制是通過調節發送進網絡的的流量速率來做得到;UDP不提供擁塞控制,使用UDP傳輸的應用程序可以根據需要以任意的速率發送數據。

3.2 多路複用和多路分解

有前面的介紹,我們可以知道,傳輸層將網絡層提供的面向主機的邏輯通信擴充爲面向不同應用進程的邏輯通信,並且這一過程稱爲多路複用和多路分解;值得注意的是,多路複用和多路分解是每個計算機網絡都需要的

實際上,傳輸層和應用程序進程之間通過Socket(套接字)關聯,這樣通過Socket就可以區別同一主機上的不同應用進程,從而傳輸層提供服務變爲可能;傳輸層從同一臺主機上的不同Socket接收數據的過程稱爲多路複用傳輸層向同一臺主機上的不同Socket傳輸數據的過程稱爲多路分解;爲了實現多路複用和多路分解,我們需要標誌套接字,並將相關信息添加到報文段中。

實際上,每個套接字都有一個唯一的ID,被稱爲端口號;而在傳輸層接收到來自應用程序的分組並通過添加傳輸層首部而形成報文段的過程中,該端口號被寫入;端口號大小在0-65535之間,其中0-1023屬於周知端口號,它們爲特定的Socket而擁有。

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

需要注意的是,在創建Socket的時候,是由傳輸層爲之分配端口號;一個UDP套接字是由一個目的IP地址和目的端口號即二元組來標誌的;如果兩個UDP報文段有不同的源IP地址或者源端口號,但是有相同的目的IP和目的端口號的話,它們將通過同一個Socket到達同一個應用程序

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

TCP協議中的Socket是通過一個四元組來標記的:(源IP地址,源端口號,目的IP地址,目的端口號);兩個具有不同源IP地址或者源端口號,但有相同的目的IP地址和目的端口號的TCP報文段將通過兩個不同的Socket進入同一應用進程;這也表示,一個應用進程可以關聯多個Socket,而一個Socket將只關聯一個應用進程;常常,這樣的對應關係是通過線程來實現的:一個進程有多個線程,而每個線程關聯了一個Socket;這樣做可以提高服務器性能嘛

實際上,傳輸層就是根據這些信息來實現多路分解的;而這些信息是在多路複用的時候被放置在報文段中的

3.3 無連接運輸:UDP

一個不提供不必要服務的傳輸層協議是什麼樣的呢?什麼都不做?那是不行的,我們必須做一些什麼!前面提到過,差錯檢查和進程到進程的數據交付是傳輸層協議必須提供的功能,事實上,UDP的確做到了這些,並且。。只做了這些。它幾乎沒有對IP增強別的東西;因爲在發送報文段之前,發送方和接收方的傳輸層實體之間沒有握手,所以UDP也被稱爲無連接的;

DNS是一個使用UDP的應用層協議例子;UDP在接收到來自Socket的數據時,UDP爲該報文添加首部字段(源和目的端口號,以及其他兩個小字段),然後將報文段交給網絡層,網絡層通過IP協議盡力地將該報文段交付,至於結果,盡力就好;當DNS客戶端等待不到對該查詢的響應時(有可能網絡層將其丟失了)則會向其他Name Server發送查詢請求,要麼就通知應用程序,做不到

既然TCP提供了可靠數據傳輸,並且提供了擁塞控制,爲什麼人們還需UDP呢?事實上,有些應用很適合UDP(因爲沒有連接過程啊,因爲不會受擁塞控制的調節啊,更自由);UDP有以下好處:

  •     關於何時、發送什麼數據的應用層控制更爲精細:這是因爲一旦應用程序將數據交給UDP,UDP就會打包將其發送給網絡層,不會受到傳輸層的調節,這在一些實時應用中比較實用;當然,應用程序還可以通過UDP+自主開發一些功能的模式來擴展UDP。
  •     無需建立連接:所以就不會引入額外的時延。這也可能是DNS使用UDP而不是TCP的主要原因,如果使用TCP的話,DNS服務將會慢很多;HTTP使用TCP的主要原因是對TCP的可靠性的依賴超過對速度的要求;
  •     無需維護連接狀態:TCP爲了實現可靠數據傳輸和擁塞控制需要在端系統中維護一些參數,這些參數包括:接收和發送的緩存、擁塞控制參數、確認號和序號;這些參數信息都是必須的;而UDP因爲不建立連接,所以自然也就不需要維護這些狀態,這就減少了時空開銷;
  •     分組首部更小:TCP有20字節的首部開銷,而UDP只有8字節;

這些應用程序使用了TCP作爲其傳輸層協議:電子郵件、遠程終端訪問、Web、文件傳輸;這些應用通常使用UDP作爲其傳輸層協議:遠程文件服務器、網絡管理(因爲這裏應用即便在網絡處於擁塞的情況下仍要工作,所以UDP更爲合適)、路由選擇協議名稱轉換(DNS);這些應用兩個都有使用:流式多媒體、因特網電話等多媒體應用;這些應用對實時性的要求較高同時對可靠性的要求又不是很高,所以既可以使用UDP也可以使用TCP協議。

不過在UDP之上運行多媒體應用是有爭議的,因爲UDP沒有擁塞控制協議,所以其對網絡有很大的威脅性:大量的UDP流量將使網絡過度擁塞而造成TCP連接幾乎無法傳輸數據,並且因爲網絡擁塞,所以應用又有着較高的丟包率,而因爲丟包率UDP很有可能繼續發送數據,由此使得網絡效率低下。也有研究人員提出一些新的機制,使得所有數據源,包括UDP源執行自適應的擁塞控制來解決這一問題;

需要注意的是,使用UDP仍然可以實現可靠數據傳輸,只不過這一部分功能需要在應用程序中自主開發;將可靠性直接構建於應用程序中,將使其既可以可靠地傳輸數據又可以避免受制於TCP的擁塞控制(傳輸速率的控制)

3.3.1 UDP報文結構

UDP首部只有4個字段,每個字段佔用兩個字節,分別是:源端口號、目的端口號、長度和校驗和;其中,長度表示包含首部在內的UDP報文段長度,以字節爲單位;校驗和字段用來計算報文段在傳輸的過程中是否出現了差錯;一種常見的校驗和的計算方法是:發送方將前三個字段做按位加運算,然後將其取反作爲校驗和;然後接收方對所有四個字段(每個字段16位)進行求和,如果沒有出現差錯,則最後的結果全是1,否則就表明出現了錯誤;出現錯誤的原因可能有:傳輸鏈路上數據受到干擾、數據存儲在中間路由器的時候,出現了錯誤

UDP作爲傳輸層協議,提供的差錯檢測功能很有可能和底層協議提供的相似功能產生冗餘;但是,這是必須的,因爲由於不能保證源和目的地之間所有鏈路都提供差錯檢測功能,即便數據在鏈路上正確傳輸,也無法保證其在中間路由器的內存中不發生錯誤;所以要實現端到端的差錯檢測,就必須在傳輸層協議中實現該功能;這一原則在系統設計中被稱爲端到端原則:“因爲某一功能必須在端到端實現,與在較高層次提供這些功能的代價相比,在較低層次上設置的功能可能是冗餘的,或者根本是沒有用的”

IP作爲網絡層協議,可以運行在任何第二層協議上,所以運輸層提供差錯檢測也是必須的;UDP可以檢測差錯,但是無法恢復差錯,能做的除了將其丟棄外,便是將其交給應用程序然後給出警告.

3.4 可靠數據傳輸原理

可靠數據傳輸的問題,不僅在傳輸層需要考慮,在鏈路層以及應用層都需要考慮這個問題,所以瞭解一些其基本原理是必要的,特別是在詳細瞭解TCP中爲實現可靠數據傳輸而採取的。許多原理

可靠數據傳輸爲上層實體提供的服務抽象是:數據可以通過一套可靠的信道進行傳輸,藉助於可靠信道,傳輸數據就不會受到損壞或者丟失;並且所有數據都可以按照其發送順序進行交付。而這正是TCP向調用它的應用所提供的服務模型

實現這種抽象服務是可靠數據傳輸的責任,但是因爲可靠數據傳輸的底層協議可能是不可靠的,所以這項任務有一點困難;

單方向的可靠數據傳輸流程大概是這樣的:可靠數據傳輸->不可靠數據傳輸->不可靠的傳輸信道->可靠數據接收->上傳Data

3.4.1 構造可靠信道的可靠數據傳輸

一個可靠數據傳輸協議,將要面對以下問題:分組丟失分組損壞到達分組亂序到達

總結可靠傳輸需要的技術:檢驗和、序號、定時器、肯定和否定確認分組。

  • (1)經完全可靠信道的可靠數據傳輸:rdt 1.0

最簡答的情況,底層信號完全可靠,然而這在實際中不能實現

  • (2)經具有比特差錯信道的可靠數據傳輸:rdt 2.0

假設所有發送的分組都可以按其發送順序被接收。基於重傳機制的可靠數據傳輸協議稱爲自動重傳請求協議(ARQ)。增加了ACK和NCK

ARQ協議中還需要另外三種協議功能來處理存在比特差錯的情況:差錯檢測,接收方反饋,重傳

rdt2.0的發送端每發送一個分組需要等待接收端的確認信號,這種協議被稱爲停等協議

  •    (3) rdt 2.1

 

rdt 2.0 中有一個致命的缺陷,就是沒有考慮到 ACK 和 NAK 分組受損的可能性。

考慮ACK和NAK受損的個兩可能性:

  • 增加足夠的校驗和比特
  • 當接受到模糊不清的ACK和NAK分組時,只需要重傳當前數據分組。這引入了冗餘分組

冗餘分組的根本困難在於接收方不知道它上次所發送的ACK和NAK是否被髮送方正確接收到。因此它無法事先知道接收到的分組是新的還是一次重傳。

解決這個新問題的一個簡單的方法就是在數據分組中添加一個字段,讓發送方對其數據分組編號,即將發送數據分組的 序號 放在該字段。於是,接收方只需要檢查序號即可確定收到的分組是否一次重傳。對於停等協議這種簡單的情況,1 比特的序號就足夠了。

  •    (4) rdt 2.2


如果不發送NAK,而是對上次正確接收的分組發送一個ACK,我們也能實現同樣的效果。

發送方接收到對一個分組的兩個ACK(冗餘ACK)後,就知道接收方沒有正確接收到跟在確認兩次的分組後面的分組。

rdt 2.2 是在有比特差錯信道上實現的一個無NAK的可靠數據傳輸協議。

rdt 2.1和rdt 2.2的區別在於,接收方此時必須包括由一個ACK報文所確認的分組序號

 

  • (5)經具有比特差錯的丟包信道的可靠數據傳輸:rdt3.0

在 rdt 3.0 中,丟包的問題讓發送方解決。不管是發送的分組丟失,還是接收方返回的確認分組丟失,只要在經過一定的時延後,讓發送方重發該分組即可。

由此產生的 冗餘數據分組 則由接收方通過序號處理。爲了實現基於時間的重傳機制,需要一個倒計時定時器

因爲分組序號在 0 和 1 之間交替,因此 rdt 3.0 有時被稱爲 比特交替協議

2.4.2 流水線可靠數據傳輸協議

    rdt 3.0的核心問題在於他是一個停等協議

  • 流水線協議

rdt 3.0 是一個功能正確的協議,但是由於它是一個停等協議,大部分的時間都浪費在等待確認上面,所以性能不好。
解決這種特殊性能問題的一個簡單的方法是:不使用停等方式運行,允許發送方發送多個分組而無需等待確認。這種技術被稱爲 流水線。


要使用流水線技術,則須:

  •     增加序號範圍。因爲要傳送多個分組,而每個傳輸中的分組必須有一個單獨的序號。
  •     協議的發送方和接收方兩端必須能緩存多個分組。發送方至少得能緩存那些已發送但未確認的分組,而接收方或許也需要緩存那些已經正確接收的分組。
  •     所需序號的範圍和對緩衝的要求取決於數據傳輸協議如何處理丟失、損壞及延時過大的分組。

 流水線的差錯恢復有兩種基本方法

  •         回退 N 步
  •         選擇重傳
     

 

3.4.3 回退N步(GBN)

在回退N步中,發送方維護一個N——窗口大小和一個base——發送方期待收到的最小待確認分組序號,同樣也是窗口的起點,還有一個next Sequence變量,表示上層需要發送分組時,可以使用的序號。這樣全部序號就被劃分爲0-base-1,這一部分的分組是已發送且收到接收方確認的分組,base~next Sequence-1這一部分的分組是已發送但是尚未收到確認的,其中base是尚未收到確認的最小序號;next-1~base+N-1表示當前發送方可以使用的序號,表示一種發送能力;當發送方收到確認號爲base的確認分組後就會向前移動窗口,所以回退N步也被稱爲滑動窗口協議

這是發送方需要維護的數據,同時發送方需要響應的事件有:上層調用、收到ACK、超時事件

  •     上層調用:檢查next Sequence是否在窗口之內,如果在,這說明發送方還有發送能力,發送之;
  •     收到ACK:回退N步策略對序號爲n的分組採取累積確認的方式,即當收到序號爲n的ACK時,表明序號小於等於n的分組全部到位;發送方收到的ACK畢竟來自接收方,收到ACK的情況還得看接收方如何發送;
  •     超時事件:如果發生超時事件,那麼發送方會重發所有已發送但是未確認的分組,即分組號在base和next sequence-1之間的所有分組;這也是爲什麼叫“回退N步”,如果收到一個ACK,則定時器會重行啓動;如果沒有待確認的分組,定時器將被終止;

在接收方,如果到達分組的序號爲n且該分組是按序到達,那麼發送ACK,這就導致發送方移動窗口;如果不是按序到達,那麼接收方丟棄所有失序分組;丟棄一個正確接收的失序分組可能會導致更多的重傳

3.4.4 選擇重傳(SR)

回退N步協議存在一個問題就是當窗口和帶寬的時延都較大時,單個分組的差錯可能會引起GBN重傳大量的分組,然後許多本來不用重傳的分組會充斥在信道中,造成資源浪費;選擇重傳就是讓發送方僅重傳那些丟失和受損的分組而避免不必要的重傳

SR 發送方的事件和動作:

  •     從上層接收數據: 檢查下一個可用於該分組的序號,若在發送方的窗口內,則將數據打包發送。
  •     超時: 定時器再次用來防止丟失分組。但是現在每個分組必須得有單獨的定時器。
  •     收到 ACK:倘若該分組序號在窗口內,則 SR 發送方將那個被確認的分組標記爲已接收。如果該分組的序號等於send_base,則窗口基序號向前移動到具有最小序號的未確認分組處。如果窗口移動了並且該序號落在窗口內的未發送分組,則發送這些分組。

SR 接收方的事件於動作:

  •     序號在 [rcv_base, rcv_base + N -1] 內的分組被正確接收:在此情況下,收到的分組落在接收方的窗口內,一個選擇 ACK 被回送給發送方。如果該分組以前沒收到過,則緩存該分組。如果該分組的序號等於接收窗口的基序號,則該分組及以前緩存的序號連續的分組交付給上層。
  •     序號在 [rcv_base - N, rcv_base - 1] 內的分組被正確接收: 產生一個 ACK,即使該分組是接收方以前已確認過的分組。因爲視圖不一致
  •     其他情況:忽略該分組。

接收方將確認一個正確接收的分組而不管其是否按序;失序的分組被緩存,直到形成連續數據後將其提交給上層;值得注意的是,如果接收方收到了已經確認的分組,則說明確認ACK丟失,或者時延太長,接收方和發送方溝通不及時;這也表明了關於那些分組到位了,那些分組還沒到位,接收方和發送方有着不一樣的視圖。

另外還需要注意的是,序號的重用問題,如果在分組中序號字段的位數爲k,那麼最大的序號爲2^k-1,所以有可能不同分組同時佔用一個序號,爲了避免這種情況,需要做的是控制分組的生命週期。窗口長度必須小於或等於序號空間大小的一半。

可靠數據傳輸機制和用途總結:

3.5 面向連接的TCP

nmap:如果目的主機該端口正在ing ,返回一個特殊報文段。RST置位

 

3.5.1 TCP連接

TCP協議之所以被稱爲是面向連接的協議,是因爲在一個應用進程可以向另一個應用進程發送數據前,這兩個進程將首先“握手”,即它們必須交換一些預報文段,已建立對關於數據傳輸的參數的共識;作爲TCP連接建立的一部分,通信雙方都將初始化與TCP連接的許多相關變量

TCP的連接,並不是一條像電路交換網絡中端到端的TDM、FDM電路,也不是一條虛電路;其連接狀態被端系統所維護而中間路由器完全忽略了該協議,中間路由器看到的只是數據,也就是說,TCP只運行在端系統之上;所以,TCP連接更像一種狀態而不是物理的、實際的連接

TCP提供全雙工服務,並且是點對點的,數據從A到B的同時,也能從B到A;TCP協議無法提供“多播”服務,一條TCP連接只關聯一個發送方和接收方(當然,發送方也是接收方);

對於TCP建立過程中的“握手”階段,需要明白的是,手一共握了三次,前兩次報文段不承載“有效負載”,第三次握手的時候,報文段是可以裝載“有效負載”的;這個過程是這樣的:通信的發起方首先發送一個特殊的TCP報文段給接收方,這是第一次握手;接收方收到該報文段後,對該報文段進行響應,此爲第二次握手;發送方接收到響應報文段後,發送第三個報文段,其中包含了有效負載;因爲TCP建立的過程,一共發生了三次握手,所以該過程也被稱爲“三次握手

當TCP連接建立後,兩個應用進程就可以發送數據了。應用程序將要發送的數據通過Socket傳遞給TCP,TCP將數據引導到該連接的發送緩存,發送緩存大小是在三次握手的過程中確定的;之後TCP將時不時從該緩存中拿出數據進行發送,一個有趣的事情是,TCP規範中沒有規定TCP應該在何時發送緩存裏的數據,描述爲“TCP應該在它方便的時候以報文段的形式發送數據”;TCP每次可以從緩存中發送的最大數據長度稱爲MSS(Maximum Segment Size)。一般來說,MSS+TCP/IP首部的長度要小於等於鏈路的MTU(即鏈路層最大幀長度Maximum Transport Unit)而以太網和PPP的MTU都等於1500字節,TCP/IP的首部通常爲40字節,所以MSS一般來說爲1460字節。

注意:MSS指的是報文段中應用層數據最大長度,而不是包括TCP首部的報文段長度。

TCP爲每塊客戶數據加上TCP首部後就形成了一個個TCP報文段;這些TCP報文段被交給網絡層,然後被髮送到網絡中;當TCP報文段到達接收端時,便進入了接收端的緩存,等待被應用程序讀取。

TCP連接的每一端都有發送和接收緩存

3.5.2 TCP報文段結構

TCP報文段結構,從整體上來說由首部+數據字段組成;其中數據字段來自應用層,其長度不能大於MSS;首部的常規長度爲20字節,但是值得注意的是,TCP首部是可變長的;TCP首部是以32比特爲單位組織的,其結構組成如下圖:

  •     源端口號和目的端口號

    這兩個數據用於TCP的多路複用和多路分解;分別爲16位;

  •     序號

    該數據被用於實現可靠數據傳輸之按序到達,在一個TCP連接中,算是一個報文段的id,同時該id還指示了其所承載的數據的位置信息;佔32位;

  •     確認號

    該數據表示接收方已經正確接收的報文段的序號,在流水線的差錯恢復方案裏,不同的恢復策略有不同的意義:回退N步裏,當發送方接收到對K的確認號時,表示所有序號小於K的報文段均已到達;而在選擇重傳裏,則僅表示序號爲K的報文段被正確接收;

  •     首部長度

    TCP的首部是可變長的,所以該字段表示報文段的首部長度,也揭示了應用數據的開始位置;該字段以32比特爲單位,佔4比特

  •     選項字段

    該字段用於在發送方和接收方之間協商MSS的大小,在高速網絡環境下,也可用於調節窗口大小;

  •     標記字段

    ACK位表示確認號字段的裏的值是否有效,如果ACK被置位,那麼該報文段就對確認號所指示的報文段進行了確認;

    RST、SYN和FIN位用於TCP的連接和拆除;

    PSH被置位時,指示接收方應該立即將數據交給上層;

    URG被置位時表示報文段裏存在着發送端的上層實體置爲緊急的數據;緊急數據的最後一個字節由16位緊急指針指出。當緊急數據存在並且給出了指向緊急數據尾指針時,TCP必須通知接收端的上層實體;

    然而,實際上,PSH、URG和緊急數據指針在實踐中並沒有被使用;標記字段一共6比特;

1. 序號和確認號

TCP報文段中兩個重要的字段是確認號和序號;這兩個字段是TCP實現可靠數據傳輸的重要部分;TCP將數據看作是一個無結構、有序的字節流;值得注意的是,TCP的序號是基於傳輸的字節流之上,而不是報文段的序列之上;也就是說,來自應用層的數據被TCP包裝在多個報文段中,其中第2個報文段的序列號不是2,而是1001,如果MSS爲1000。關於確認號,如果採取回退N步策略,那麼TCP採用一種累計確認的方法,前面已經提到過,這裏就不贅述;一條TCP連接可以採取任意數字作爲初始序號,這樣可以減少將那些殘存在網絡中的報文段誤認爲是新建連接的報文段(新舊連接恰巧採用了相同端口)

總體來說,一個報文段的序號就是該報文段數據字段首字節的序號;確認號就是接受主機正在等待接收的數據的下一個字節序號;值得注意的是,服務端對接收端發來的報文段的確認被裝載到一個從服務端發往到接收端的報文段中,這種確認被稱爲“捎帶”

TCP被稱爲提供累計確認

Telnet:應用層協議。

即使報文段沒有護具仍有序號。這是因爲TCP存在序號字段,報文段必須填入某個序號。


3.5.3 往返時間的估計與超時

TCP使用超時重傳機制來處理報文段的問題;雖然這在概念上很簡單,但是一個問題是,如何設置超時時間?如何設置超時時間,取決於網絡的狀態,所以需要做的是估計網絡的狀態。TCP使用一種Sample RTT的方法來估計RTT。Sample RTT就是從某報文段發出到收到對該報文段的確認之間的時間量。大多數TCP的實現是在某個時刻做一個Sample RTT測試。TCP並不爲已經重發的報文段做Sample RTT測試,它只爲傳輸一次的報文段測量Sample RTT。

TCP一般來說通過Estimated RTT=(1-a)Estimated RTT+a*Sample RTT來計算因路由器的擁塞和端系統負載變化所導致變化的RTT。a一般取1/8;因爲Estimated RTT表示最近的網絡狀況,所以其理應得到較大的權值;這種方法也被稱爲指數加權移動平均

除了估計RTT外,計算RTT的變化也是ok的,DevRTT =(1-b)DevRTT+b*|Sample RTT-Estimated RTT|;其中b的推薦值爲0.25;當Sample RTT變化較大的時候,DevRTT的值較大,當Sample RTT變化較小的時候,DevRTT就較小;

TCP是如何考慮超時時間的呢?該時間因略大於測量的RTT,不易過小——容易引起不必要的重傳,也不易過大——網絡對於報文段丟失情況的反應就會變慢;最後TCP採用瞭如下計算方式:Timeout Interval=Estimated RTT+4*Dev RTT;

當出現超時後,TimeOutInteval值將加倍。不管怎麼樣,一旦報文段收到並更新Estimated RTT後,TimeInteval就又用上值計算了

3.5.4 可靠數據傳輸

IP協議提供的是盡力而爲的服務:不保證不丟失、不保證按序到達、不保證沒有損壞,TCP協議在IP協議之上,提供可靠數據傳輸,從而保證一個進程從其相關聯的緩存中讀取的數據和另一端進程發送的數據是一致的;TCP使用超時重傳和冗餘確認技術來處理超時、丟失等情況;使用確認、序號等技術來保證按序到達;使用校驗和來檢驗是否報文段在傳輸過程中是否發生了錯誤;

  • TCP 發送方有三個與發送和重傳有關的事件:

    • 從上層應用程序接收數據
    • 定時器
    • 收到 ACK

1.超時時間加倍

在大多數TCP實現中,當發生超時事件時,超時時間並不是從Estimated RTT和Dev RTT推算出來而是直接將超時時間設置爲原來的兩倍;然而,每當定時器在另兩個事件(收到ACK和接收到上層應用數據)發生時,新的超時時間將由上面提到的兩個值計算出來;實際上,這是一種形式受限的擁塞控制


2. 快速重傳

響應超時事件,然後重傳尚未收到確認的報文段,但是,當超時時間過長的時候,會顯著增加端到端的延遲;一種可行的方法是對冗餘ACK的的檢測;在理解冗餘ACK之前,需要先看一下接收方爲什麼會發送冗餘ACK。接收方接收到某個報文段時,會檢查該報文段是否是按序到達,如果不是,那麼接收端會發送對已經收到的最後一個連續報文段的確認,所以如果發送方收到冗餘ACK,說明有多個報文段到達了接收端,但不是接收端所期望的——這意味着,很有可能發生了丟失。所以發送方可以在定時器過時之前快速重傳所丟失的報文段

下表是 TCP 接收方的 ACK 接收策略:


3.是回退N步還是選擇重傳

首先,我們需要明白的是,TCP採用了累計確認的機制,也就說,如果接收方正確接收了某一失序到達的分組,那麼接收方發送的ACK將是對最後接收的按序到達的分組的確認,而不是對剛剛接收的分組的確認;當然,許多TCP實現都會緩存失序的分組;那麼問題來了,發生超時事件後,GBN將重傳所有待確認的分組,而不是丟失的分組;而選擇重傳會好很多

對TCP提出的一種修改意見是所謂的選擇確認——即接收方對失序到達的分組也會確認,當該機制和重傳機制相結合使得TCP更像選擇重傳,於是TCP的差錯恢復協議最好被分類爲GBN和SR協議的混合體.

3.5.5 流量控制

流量控制是一個速度匹配服務: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,那麼發送端該如何處理呢?一個需要注意的事實是,接收方在沒有ACK或者數據要向發送端發送的時候,是不會通知發送方其窗口大小已經改變,即如果應用程序讀取了緩存中的數據,發送方是不會知道的,除非它向接收方發送了數據,而發送方對其進行了確認;實際上,發送方也是這麼做的!當接收到窗口大小爲0的報文段後,發送方會向接收方間隔發送只有一個字節的數據。

3.3.6 TCP連接管理

1. TCP三次握手

PS:TCP協議中,主動發起請求的一端稱爲『客戶端』,被動連接的一端稱爲『服務端』。不管是客戶端還是服務端,TCP連接建立完後都能發送和接收數據。

起初,服務器和客戶端都爲CLOSED狀態。在通信開始前,雙方都得創建各自的傳輸控制塊(TCB)。
服務器創建完TCB後遍進入LISTEN狀態,此時準備接收客戶端發來的連接請求。

第一次握手

客戶端向服務端發送連接請求報文段。該報文段的頭部中SYN=1,ACK=0,seq=x。請求發送後,客戶端便進入SYN-SENT狀態。

    PS1:SYN=1,ACK=0表示該報文段爲連接請求報文。
    PS2:x爲本次TCP通信的字節流的初始序號。
    TCP規定:SYN=1的報文段不能有數據部分,但要消耗掉一個序號。

第二次握手

服務端收到連接請求報文段後,如果同意連接,則會發送一個應答:SYN=1,ACK=1,seq=y,ack=x+1。
該應答發送完成後便進入SYN-RCVD狀態。

    PS1:SYN=1,ACK=1表示該報文段爲連接同意的應答報文。
    PS2:seq=y表示服務端作爲發送者時,發送字節流的初始序號。
    PS3:ack=x+1表示服務端希望下一個數據報發送序號從x+1開始的字節。

第三次握手

當客戶端收到連接同意的應答後,還要向服務端發送一個確認報文段,表示:服務端發來的連接同意應答已經成功收到。
該報文段的頭部爲:ACK=1,seq=x+1,ack=y+1。
客戶端發完這個報文段後便進入ESTABLISHED狀態,服務端收到這個應答後也進入ESTABLISHED狀態,此時連接的建立完成!

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

防止失效的連接請求報文段被服務端接收,從而產生錯誤。

PS:失效的連接請求:若客戶端向服務端發送的連接請求丟失,客戶端等待應答超時後就會再次發送連接請求,此時,上一個連接請求就是『失效的』。

若建立連接只需兩次握手,客戶端並沒有太大的變化,仍然需要獲得服務端的應答後才進入ESTABLISHED狀態,而服務端在收到連接請求後就進入ESTABLISHED狀態。此時如果網絡擁塞,客戶端發送的連接請求遲遲到不了服務端,客戶端便超時重發請求,如果服務端正確接收並確認應答,雙方便開始通信,通信結束後釋放連接。此時,如果那個失效的連接請求抵達了服務端,由於只有兩次握手,服務端收到請求就會進入ESTABLISHED狀態,等待發送數據或主動發送數據。但此時的客戶端早已進入CLOSED狀態,服務端將會一直等待下去,這樣浪費服務端連接資源。

2. TCP連接的釋放一共需要四步,因此稱爲『四次揮手』:
我們知道,TCP連接是雙向的,因此在四次揮手中,前兩次揮手用於斷開一個方向的連接,後兩次揮手用於斷開另一方向的連接。
第一次揮手

若A認爲數據發送完成,則它需要向B發送連接釋放請求。該請求只有報文頭,頭中攜帶的主要參數爲:
FIN=1,seq=u。此時,A將進入FIN-WAIT-1狀態。

    PS1:FIN=1表示該報文段是一個連接釋放請求。
    PS2:seq=u,u-1是A向B發送的最後一個字節的序號。

第二次揮手

B收到連接釋放請求後,會通知相應的應用程序,告訴它A向B這個方向的連接已經釋放。此時B進入CLOSE-WAIT狀態,並向A發送連接釋放的應答,其報文頭包含:
ACK=1,seq=v,ack=u+1。

    PS1:ACK=1:除TCP連接請求報文段以外,TCP通信過程中所有數據報的ACK都爲1,表示應答。
    PS2:seq=v,v-1是B向A發送的最後一個字節的序號。
    PS3:ack=u+1表示希望收到從第u+1個字節開始的報文段,並且已經成功接收了前u個字節。
    A收到該應答,進入FIN-WAIT-2狀態,等待B發送連接釋放請求。

第二次揮手完成後,A到B方向的連接已經釋放,B不會再接收數據,A也不會再發送數據。但B到A方向的連接仍然存在,B可以繼續向A發送數據。
第三次揮手

當B向A發完所有數據後,向A發送連接釋放請求,請求頭:FIN=1,ACK=1,seq=w,ack=u+1。B便進入LAST-ACK狀態。
第四次揮手

A收到釋放請求後,向B發送確認應答,此時A進入TIME-WAIT狀態。該狀態會持續2MSL時間,若該時間段內沒有B的重發請求的話,就進入CLOSED狀態,撤銷TCB。當B收到確認應答後,也便進入CLOSED狀態,撤銷TCB。
爲什麼A要先進入TIME-WAIT狀態,等待時間後才進入CLOSED狀態?

爲了保證B能收到A的確認應答。
若A發完確認應答後直接進入CLOSED狀態,那麼如果該應答丟失,B等待超時後就會重新發送連接釋放請求,但此時A已經關閉了,不會作出任何響應,因此B永遠無法正常關閉。


3.6 擁塞控制原理

3.6.1 擁塞原因與代價

計算機網絡擁塞的原因是因爲網絡中的分組太多,而鏈路帶寬和路由器緩存容量都是有限的;

  •     當分組的到達速率接近鏈路容量時,分組將經歷巨大的排隊時延;
  •     發送方必須執行重傳已補償因爲緩存溢出而丟棄的分組
  •     發送方遇到大時延時所進行的不必要重傳會引起路由器利用其鏈路帶寬來轉發不必要的分組副本。
  •     當一個分組沿着一條路徑被丟棄時,每個上游路由器用於轉發該分組到丟棄該分組而使用的傳輸容量最終被浪費掉了;

3.6.2 擁塞控制方法

  1. 擁塞控制:擁塞控制是作用於網絡的,它是防止過多的數據注入到網絡中,避免出現網絡負載過大的情況;
  2. 流量控制:流量控制是作用於接收者的,它是控制發送者的發送速度從而使接收者來得及接收。

總體來說,我們可以更具網絡層是否爲傳輸層擁塞控制提供了顯式幫助來區分擁塞控制方法:端到端擁塞控制和網絡輔助擁塞控制

端到端擁塞控制方法中,網絡層並沒有向傳輸層擁塞控制提供顯式支持,即便網絡中存在擁塞,端系統也必須通過對網絡行爲的觀察(如分組丟失與時延)來判斷;TCP必須通過端到端的方法解決擁塞控制,因爲IP層不會像端系統提供有關網絡擁塞的反饋信息。TCP報文段的丟失(超時或者收到3次冗餘確認而得知)被認爲是網絡擁塞的一個跡象,TCP將相應地減小窗口長度;

網絡輔助的擁塞控制方法裏,網絡層會向發送方提供關於網絡中擁塞狀態的顯式反饋消息;比如使用一個比特位來指示網絡是否擁塞;擁塞信息從網絡反饋到發送方一般有兩種方式,其中直接反饋信息可以由網絡路由器發送給發送方,這種方式的通知通常採用一種擁塞分組的形式;第二種形式的通知是路由器標記或者更新從發送方到接收方的分組中的某個字段來指示擁塞的產生,然後由接收方向發送方通知該網絡發生了擁塞。

3.6.3 網絡輔助的擁塞控制例子:ATM ABR擁塞控制 異步傳輸方式  可用比特率

ATM基本上採用一種面向虛電路的方法來處理分組交換。

ABR已被設計成一種彈性數據傳輸服務。

對於ATM ABR服務,數據信元經過一系列交換機傳輸到目的地。在數據信元中夾雜着所謂的資源管理信元(RM信元)。這些RM信元可被用作在主機和交換機之間傳遞與堵塞相關的消息。當一個RM信源到達目的地時,它將掉頭並向發送端發送。交換機也可能自己產生一個RM信元,並將該信元直接發送給源。因此,RM信元可以用來提供直接網絡反饋和經由接收方的網絡反饋。

與擁塞相關的信令信息:

  1. EFCI比特。每個數據信元都包含一比特的顯式轉發擁塞指令(EFCI)。某擁塞的網絡交換機可把一個數據信元中的EFCI設爲1來向目的主機發送網絡已經堵塞的信令。當一個RM到達時,如果多數近來收到的數據信元的EFCI都是1.則目的地會將RM的堵塞指示比特(CI)設爲1,並將RM信元發送給發送方。
  2. CI和NI比特。RM信元的夾雜比率可調。每個RM信元包含一個擁塞指示比特(CI)和無增長比特(NI)。輕微堵塞NI設1,嚴重堵塞CI設1.
  3. ER的設置。每一個RM信元還包含一個兩個字節的顯式速率(ER)字段。一個擁塞的交換機也許會降低ER的值。ER字段被設置爲在源和目的路徑上所有交換機中的最小可支持速率。

3.7 TCP擁塞控制原理

TCP必須使用端到端的擁塞控制而不是網絡輔助的擁塞控制,因爲IP並不會向端系統提供顯式的網絡擁塞反饋;TCP所採用的方法是讓每一個發送方根據其所感知的網絡擁塞程度來限制其能向連接發送流量的速率;如果TCP判斷網絡通暢,那麼它會提高發送速率,如果TCP判斷網絡擁塞,那麼它會限制發送速率;需要解決三個問題:TCP如何限制發送速率?TCP如何感知網絡擁塞程度?TCP該以何種算法改變其發送速率?

我們知道,TCP連接的雙方都維護着兩個窗口,其中一個是作爲發送方的窗口,也被稱爲擁塞窗口cwnd,它對發送方能向網絡中發送流量的速率進行了限制,last sent-last acked<=min{cwnd,rwnd};另一個自然是作爲接收方的接收窗口。

我們假設,發送方可以在RTT時間範圍內連續發送cwnd個字節的數據,所以發送速率即爲cwnd/RTT;發送方通過調整窗口大小來對發送數據的速率加以控制

我們將TCP發送方的丟包事件定義爲:要麼超時,要麼收到接收方的3個冗餘ACK;如果網路擁塞,那麼網絡中的路由器就會發生緩存溢出,進而導致數據報被丟棄,然後就會引起發送方的丟包事件;此時,TCP發送方就可以認爲TCP連接出現了擁塞

另外,TCP將接收方發送的ACK視爲網絡通暢的標誌,如果ACK到達的速率較高,那麼TCP的擁塞窗口就會以較高的速率擴大,如果ACK到達的速率較慢,那麼TCP擁塞窗口的增加速度也會較慢;因爲TCP使用ACK對擁塞窗口做出調節,所以也別稱爲自計時的;

TCP發送速率過高,網絡就很容易擁塞;TCP發送方如果過於謹慎,那麼就無法充分利用網絡的帶寬;所以TCP如何設置自己的發送速率,才能使得網絡不會擁塞而且還充分利用帶寬呢?關於這個問題,TCP使用下列指導性原則回答這些問題:

    一個丟失的報文段意味着擁塞,因此當丟失報文段時應當降低TCP發送方的速率;
    一個確認報文段指示該網絡正在向接收方交付發送方的報文段,因此,當收到對先前報文段的確認時,可以增加發送方的速率;
    帶寬檢測;TCP調節器傳輸速率的策略是增加其速率以響應到達的ACK,除非出現丟包,此時才減少發送速率;以爲網絡中沒有明確的擁塞控制狀態信令,ACK和丟包事件充當了隱式信號.

以上爲TCP擁塞控制的概述,接下來就是廣受讚譽的TCP擁塞控制算法,該算法包含三個主要部分:慢啓動、擁塞避免、快速恢復;慢啓動和擁塞控制是TCP的強制部分;兩者的差異在於對收到的ACK做出反應時增加cwnd長度的方式;快速恢復是推薦部分,對於TCP發送方並非是必須的
1.慢啓動

TCP連接在開始的時候,其cwnd常設置爲一個MSS,然後在慢啓動狀態每收到一個ACK,cwnd就增加一個MSS;這樣的話,在慢啓動階段,發送速率是指數增加的(1,2,4,8…)

何時結束這種指數增長?有三種情況:發送了超時、發生了冗餘ACK以及cwnd達到ssthresh。ssthresh是慢啓動閾值的速記;在慢啓動階段,如果發生了超時事件,那麼ssthresh就被設置爲當前cwnd的一半,然後將cwnd置爲1;當cwnd逐步增加到ssthresh時,再翻倍增加cwnd就有一點魯莽了,所以此時TCP結束慢啓動,進入擁塞避免模式。在擁塞避免模式裏,TCP將更謹慎地增加cwnd;如果收到冗餘ACK,那麼TCP會做一次快速重傳,然後進入快速恢復階段;


2.擁塞避免

一旦進入擁塞避免狀態,cwnd的值大約是上次遇到擁塞時的一半,所以TCP在每個RTT中,只將cwnd增加一個1個MSS大小;也就是說在擁塞避免階段,cwnd是線性增加的;

當出現超時時,TCP將cwnd設置爲1,然後將ssthresh更新爲cwnd的一半;當收到冗餘ACK時,TCP將cwnd減半,然後將ssthresh置爲cwnd值的一半,並且進入快速恢復狀態;


3.快速恢復

在快速恢復階段,對於引起TCP進入該狀態的缺失報文段,每收到一個ACK,cwnd增加一個MSS;最終,當對丟失報文段的一個ACK到達時,TCP降低cwnd後進入擁塞避免狀態;如果出現超時事件,快速恢復在執行如同慢啓動和擁塞避免中相同動作後,進入慢啓動狀態.
 

當多條連接共享一條瓶頸鍊路時,那些具有較小RTT的連接能夠在鏈路空閒時更快的搶到可用帶寬(即較快的打開其擁塞窗口),因而將比那些具有較大RTT的連接享用更高的吞吐量。

第四章、網絡層

4.1 概述

4.1.1 轉發和路由選擇

    網絡層的作用:將分組從一臺發送主機移動到一臺接收主機。需要兩種功能:
        轉發:當一個分組到達路由器的一條輸入鏈路時,路由器必須將該分組移動到適當的輸出鏈路
        路由選擇:分組從發送方流向接收方時,網絡層必須決定這些分組採用的路由或路徑,路由選擇算法
        轉發是路由器本地動作,路由選擇是網絡範圍過程。比如開車從北京到上海,轉發相當於在某個路口選擇某一條岔路,路由選擇相當於規劃從北京到上海所有線路的過程
    每臺路由都有一張轉發表。路由器檢查分組首部字段值(可能是目的地址或所屬連接,看網絡層協議)來轉發分組,使用該值在轉發表索引查詢。該值指出了該分組將被轉發的路由器輸出鏈路接口
    路由選擇算法決定了插入路由器轉發表中的值。路由器接收路由選擇協議報文,來配置轉發表。有兩種算法:
        集中式
        分佈式

    分組交換機:指一臺通用分組交換設備,根據分組首部字段值從輸入鏈路接口轉移分組到輸出鏈路接口。
        鏈路層交換機:基於鏈路層字段中的值做轉發決定
        路由器:基於網絡層字段值做轉發決定
    連接建立:某些網絡結構(ATM、幀中繼、MPLS)除了轉發和路由選擇功能,還有連接建立功能。要求從源到目的地沿着所選擇路徑彼此握手,建立連接。

4.1.2 網絡服務模型

    定義了分組在發送與接收端系統之間的端到端運輸特性
    網絡層可以提供的服務(注意IP並沒有這些服務!):

  •             確保交付
  •             具有時延上界的確保交付
  •             有序分組交付
  •             確保最小帶寬:模仿發送方和接收方之間一條特定比特率傳輸鏈路的行爲。發送速率低於該速率,分組不會丟失,且會在預定時延內到達
  •             確保最大時延抖動:確保發送方兩個相繼分組之間的時間 = 目的地接收到它們之間的時間
  •             安全性服務:使用僅由源和目的地主機知曉的密鑰,加密數據報,源加密,目的主機解密。此外還有數據完整性和源鑑別服務

    因特網的網絡層IP協議提供單一服務,盡力而爲服務,無帶寬保證,無丟包保證,無順序保證,不定時,無擁塞指示。

   其他提供服務的服務模型:

  • 恆定比特率(CBR) ATM網絡服務

    就是使網絡連接看起來就像在發送和接收主機之間存在一條專用的、固定帶寬的傳輸鏈路,以使用性質相同的虛擬管道來提供分組(ATM術語稱爲信元)流。

  • 可用比特率(ABR)ATM網絡服務

比盡力而爲的服務稍好一點的服務。然而與IP不同的是,信元不能重排序。最小傳輸速率是可以保證的。

4.2虛電路和數據報網絡

僅在網絡層提供連接服務的計算機網絡成爲虛電路;僅在網絡層提供無連接服務的計算機網絡稱爲數據報網絡。

運輸層面向連接服務是在位於網絡邊緣的端系統中實現的;我們很快看到,網絡層連接服務除了在端系統中,也在位於網絡核心的路由器中實現

4.2.1 虛電路網絡

    包括ATM、幀中繼的體系結構是虛電路網絡,在網絡層使用連接。IP是數據報網絡

    虛電路組成:

  •         源和目的主機之間的路徑,一系列鏈路和路由器
  •         VC號,該路徑每段鏈路一個號碼,屬於一條虛電路的分組首部有VC號
  •         該路徑每臺路由器轉發表表項。當跨越一臺路由器創建一條虛電路時,轉發表增加一個新表項,終止將會刪除

    一條虛電路每條鏈路上可能有不同VC號,每臺路由器必須用一個新的VC號更新每個分組的VC號(which can get from the forwarding tables)也就是一個分組經過一臺路由器,首部VC號可能就變了,原因:

  •         逐鏈路代替該號碼減少了分組首部VC字段長度
  •         大大簡化虛電路建立。如果要求一個VC號,創建虛電路時路由器需要交換處理大量報文來約定VC號

    虛電路網絡中的路由器必須爲進行中的連接維護連接狀態信息。創建一個連接,轉發表加一項,釋放一個連接,轉發表刪一項。該信息將VC號與輸出接口號聯繫起來。即使沒有VC號轉換,仍有必要維持狀態信息,該信息將VC號和輸出接口號聯繫起來。
    虛電路3個階段:

  •         虛電路建立

            發送運輸層與網絡層聯繫,指定接收方地址,等待網絡建立虛電路
            網絡層決定發送方和接收方之間的路徑,即虛電路要通過一系列鏈路和路由器,爲每條鏈路設置vc號
            網絡層在路徑上每臺路由器的轉發表增加一個表項

            預留該虛電路路徑上的資源

  •         數據傳送

            發起呼叫—>入呼叫—>接收呼叫—>呼叫連接—>數據流開始—>接收數據

  •         虛電路拆除

            網絡層通知網絡另一側端系統結束呼叫,更新刪除路由器上轉發表項以表明虛電路不存在(說明路由器轉發表項是虛電路的物理體現)
    信令報文

        端系統向網絡發送指示 虛電路啓動與終止的報文
        路由器之間傳遞的用於建立虛電路(修改路由器表中的連接狀態)的報文。

用來交換這些報文的協議稱爲信令協議

4.2.2 數據報網絡

    每當端系統要發送分組,爲分組加上目的地地址,推進網絡。
    分組從源到目的地傳輸,通過一系列路由器傳遞,每臺都使用分組的目的地址轉發該分組
     每個路由器有轉發表,將目的地址映射到輸出鏈路接口,路由器將分組向該接口轉發
    目的地址(其實就是IP地址)32bit,轉發表不可能對每個目的地址有一個表項,因此,路由器用分組的目的地址的前綴與表項進行匹配。當有多個匹配時,使用最長前綴匹配規則。
    數據包網絡中路由器不維持連接狀態信息,但是維護了轉發狀態信息。實際上每1-5分鐘,路由選擇算法更新一次轉發表。

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

4.2.3 虛電路和數據報網絡的由來

    虛電路來源於電話界(真電路)
    端系統設備複雜,網絡層服務模型應儘可能簡單,複雜功能在更高級實現(按序、可靠數據傳輸、擁塞控制等)
        因爲簡單,所以互聯各種鏈路(衛星、以太網、光纖、無線)和丟包特性的網絡變得容易
        增加一個新服務器只需連接一臺主機到網絡,定義一個新的應用層協議即可,使得Web之類的新服務很快在因特網部署

4.3 路由器工作原理

    路由器的組成部分

  •         輸入端口:

            執行將一條輸入的物理鏈路與路由器相連接的物理層功能
            執行與位於入鏈路遠端的數據鏈路層交互的數據鏈路層功能
            查找功能,查詢轉發表決定路由器的輸出端口,將分組轉發到輸出端口

  •         交換結構

            將路由器的輸入端口與輸出端口相連
            分組通過交換結構轉發到輸出端口

  •         輸出端口

            存儲從交換結構接收的分組,執行必要的鏈路層和物理層功能在輸入鏈路上傳輸這些分組。
            當鏈路是雙向的時,輸出端口與輸入端口在同一線路卡成對出現

  •         路由選擇處理器

            執行路由選擇協議
            維護路由選擇表、連接的鏈路狀態信息,爲路由器計算轉發表
        路由轉發平面
            一臺路由器的輸入端口、輸出端口和交換結構共同實現了轉發功能,並且用硬件實現(軟件太慢,需以納秒時間尺度運行)
        路由控制平面
            路由器的控制功能(執行路由選擇協議、對上線或者下線鏈路進行響應、管理功能),在毫秒時間尺度上運行,用軟件實現並在選擇處理器上執行(一種cpu)

4.3.1 輸入端口:

查找:
        查找必須在納秒級別執行,不僅要用硬件執行查找,而且要對大型轉發表使用快速查找算法,而且需要更快的內存訪問速度(DRAM、SRAM)。

影子副本:
  轉發表由路由選擇處理器計算和更新,從路由選擇處理器經過獨立總線複製到(輸入)線路卡(影子副本
        有了轉發表副本,轉發決策能在每個輸入端口本地做出,無須調動路由選擇處理器,避免集中式處理

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

儘管查找在輸入端口可以說是最爲重要的,但必須採取許多其它動作:

必須出現物理層和數據鏈路層處理

必須檢驗分組的版本號、檢驗和和壽命字段。後兩個字段必須重寫

必須更新用於網絡管理的計數器

匹配加動作

4.3.2 交換結構

    通過交換結構,分組才能實際地從一個輸入端口交換(轉發)到一個輸出端口中
    三種交換方式:

  •         經內存交換

            一個分組到達輸入端口時,該端口會先通過中斷方式向路由選擇處理器發出信號
            分組從輸入端口複製到處理代路由器查找交換進內存,是器內存中(現由輸入線路卡處理的)
            早期路由選擇處理器從首部提取目的地址,在轉發表查找輸出端口,將分組複製到輸出端口

  •         經總線交換

            輸入端口經一根共享總線將分組直接傳送到輸出端口,無需路由選擇處理器的干預
            路由器的交換帶寬受總線速率限制

  •         經互聯網絡交換

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

4.3.3 輸出端口

4.3.4 何處出現排隊

    輸入、輸出端口都能形成分組隊列,取決於流量負載、交換結構
    隨着隊列增長,路由器緩存空間會耗盡,出現丟包
    需要路由器緩存吸收流量負載波動,需要多少緩存?
        少量TCP流:RTT * C(鏈路容量)
        大量TCP流:RTT* C/ (N^1/2)
    輸出端口排隊,需要分組調度程序選出一個分組發送。提供服務質量保證。

   輸出端口的一個分組調度程序必須在這些排隊的分組中選取一個發送。分組調度程序在提供服務質量保證上有很大的作用
    主動隊列管理(RQM):
        緩存填滿前丟棄(或首部加個標記)一個分組,向發送方提供一個擁塞信號
        隨機早期檢測算法(RED):平均隊列長度在某個範圍內時,以某種概率被丟棄/標記。
    線路前部阻塞(HOL)

      

深色陰影分組必須等待。但不僅該分組要等待,左下角隊列中排在該分組之後的淺色陰影分組也要等待,即使右側輸出端口中無競爭。這種現象叫做線路前部阻塞(HOL)

4.3.5 路由選擇控制平面

    網絡範圍的路由選擇控制平面是分佈式的,即不同部分(如路由選擇算法)執行在不同的路由器上,並且通過彼此發送控制報文進行交互

4.4 網際協議(IP):因特網中的轉發和編址

    網絡層三個組件

  •         IP協議
  •         路由選擇協議
  •         控制報文協議(ICMP):報告數據報中的差錯、對某些網絡層信息請求進行響應的設施

4.4.1 數據報格式

  •     版本號(IPv4、IPv6):不同版本對數據報不同解釋
  •     首部長度:數據報可包含可變數量的選項。不過大部分沒有,首部固定20字節
  •     服務類型:區分不同類型的IP數據報
  •     數據報長度:首部+數據的長度。該字段16bit,然而一般數據報很少超過1500字節
  •     標識、標誌、片偏移:IP分片相關。不過IPv6不允許在路由器上對分組分片
  •     壽命TTL:確保數據報不會永遠在網絡中循環。每被一個路由器處理時,值-1。若值減到0,丟棄數據報
  •     協議號:到達最終目的地纔有用,指示了IP數據報的數據部分應該交給哪個運輸層協議。如6交給TCP,如17交給UDP。協議號是將網絡層與運輸層綁定到一起的粘合劑;端口號是將運輸層和應用層綁定的粘合劑
  •     首部檢驗和:幫忙路由器檢測收到IP數據報中首部的比特錯誤,有錯一般丟棄。每臺路由器上必須重新計算檢驗和。IP層僅對IP首部計算檢驗和,而TCP/UDP檢驗和是對整個TCP/UDP報文段進行的。
  •     源和目的IP地址:源主機通過DNS查找目的地址
  •     選項:IPv6已拋棄選項字段
  •     數據(有效載荷):包含運輸層報文段(TCP或UDP),或ICMP報文段

    一個IP數據報有長爲20的首部,如果數據報承載一個TCP報文段,則每個無分片數據報承載總長40的首部(還有TCP的20)以及應用層報文
   1. IP數據報分片  more

網絡鏈路存在MTU (最大傳輸單元)—鏈路層數據幀可封裝數據的上限不同鏈路的MTU不同

IPv4的設計者決定把數據報的重新組裝工作放在端系統而不是路由器中。

大IP分組向較小MTU鏈路轉發時, 可以被“分片” (fragmented)

    1個IP分組分爲多片IP分組
    IP分片到達目的主機後進行“重組”(reassembled)

IP首部的相關字段用於標識分片以及確定分片的相對順序

    總長度、標識、標誌位和片偏移

假設原IP分組總長度爲L,待轉發鏈路的MTU爲M
若L>M,且DF=0,則可以/需要分片
分片時每個分片的標識複製原IP分組的標識
通常分片時,除最後一個分片,其他分片均分爲MTU允許的最大分片

最後一個片的標誌爲0,其餘的爲1.

例:

4000字節的數據報,在MTU1500字節的鏈路上

數據報的有效載荷僅當在IP層已完全重構爲初始IP數據報時,纔會傳遞給目的地傳輸層。如果一個或多個片沒有到達目的地,則該不完整的數據報被丟失。
並不是所有鏈路層協議都能承載相同長度的網絡層分組,如以太網幀能承載不超過1500字節的數據,某些廣域網鏈路幀不超過576字節
一個鏈路層幀承載的最大數據量:最大傳送單元MTU
限制了IP數據報的長度,且發送方與目的路徑上的每段鏈路可能使用不同的鏈路層協議,有不同的MTU。

1)如何將過大的IP分組壓縮進鏈路層幀的有效載荷字段?
            將IP數據報中的數據分片成多個較小的IP數據報,用單獨的鏈路層幀封裝這些小IP數據報,每個小數據報叫
            IPv4將數據報的重新組裝放在端系統中,而不是路由器中
    標識、標誌、片偏移字段,幫助主機執行重組任務
        一個4000字節的數據報(20+3980)到達一臺路由器,轉發到一條MTU爲1500子節的鏈路上。必須分配3個獨立的片,假設初始數據報的標識號是777,則前兩片字節都爲20+1480,第三層爲20+1020
        IPv6廢除了分片,簡化了IP分組的處理

4.4.2 IPV4編址

    主機與路由器連入網絡的方法

  •         一臺主機通常只有一條鏈路連接到網絡,主機IP發送數據報從該鏈路發送
  •         主機與物理鏈路的邊界叫接口,一臺路由器有多個接口
  •         IP要求每臺主機和路由器都有自己的IP地址,因此一個IP地址實際上是與每一個接口相關聯的
  •         每個IP地址長度32bit(4字節),總共2^32個可能的IP地址,約40億個
  •         點分十進制記法,如193.32.216.9
  •         一個接口的IP地址的一部分需要由其連接的子網決定.如互聯3個主機接口與1個路由器接口的網絡形成一個子網,IP編址爲這個子網分配一個地址:223.1.1.0/24,/24記法稱爲子網掩碼,指示了32bit中的最左側24bit定義了子網地址
  •         爲了確定子網,分開主機和路由器的每個接口,產生幾個隔離的網絡島,使用接口端接這些隔離的網絡的端點,這些隔離的網絡中每一個都叫做一個子網
  •        因特網地址分配策略:無類別域間路由選擇CDIR
  •         a.b.c.d/x的地址的x最高比特構成IP地址的網絡部分,稱爲該地址的前綴,一個組織通常被分配一塊連續的地址,即具有相同前綴的一段地址。BGP路由選擇協議中,該組織網絡外的路由器僅考慮x,減少了轉發表的長度,因爲形式爲a.b.c.d/x單一表項足以將數據報轉發到該組織內的任何目的地
  •     地址聚合(路由聚合):使用單個網絡前綴通告多個網絡的能力

        一個ISP將8個組織連接到因特網。該ISP向外界通告:向我發送以200.23.16.0/20開始的任何內容。外部無需知道在該地址塊內還有8個其他組織,每個組織有自己的子網

  •     一個地址的剩餘32-x比特可認爲是用於區分該組織內部設備的。組織內部路由器轉發分組時,纔會考慮這些比特
  •     在CDIR出現之前,採用分類編址A、B、C類網絡,分別具有8、16、24比特子網地址

           E類:240.0.0.0~255.255.255.255

            D類       224.0.0.0~239.255.255.255

           C類(/24)僅能容納2^8-2=254臺主機(其中兩個用於特殊用途)192.0.0.0~223.255.255.255

B類(/16)支持65534臺主機,一個組織分配一個B類地址卻只用2000個接口,造成巨大浪費  128.0.0.0~191.255.255.255

A類  (/8)0.0.0.0~127.255.255.255

    IP廣播地址
        當一臺主機發出目的地址爲255.255.255.255的數據報時,報文會交付給同一個網絡的所有主機,路由器也會有選擇的向鄰近的子網發送報文(通常不這樣做)。可用於DHCP發現報文的發送,廣播最小生成樹

如何獲取地址、分配地址?
       1. 獲取一塊地址
            子網獲取IP地址:由ISP從它大塊地址中分配
            ISP獲取IP地址:IP地址由因特網名字和編號分配機構ICANN管理(也管理DNS根服務器、AS標識號)。ICANN向區域性因特網註冊機構分配地址,處理本地域內的地址分配/管理
        2.獲取主機地址
            組織獲得一塊地址,就可爲組織內的主機、路由器接口逐個分配IP地址
            主機地址能手動配置,也能自動配置,即動態主機配置協議DHCP
        3.動態主機配置協議DHCP---UDP
            DHCP允許主機自動獲取一個IP地址
            DHCP可配置,可以使主機每次連網獲得相同IP地址,也可每次分配一個臨時IP地址。
            DHCP還允許主機查看子網掩碼、默認網關(第一跳路由器地址)、本地DNS服務器地址
            DHCP能將主機連接進一個網絡的自動能力,常被稱爲即插即用協議
            DHCP是一個客戶-服務器協議。新來的主機要獲得自使用的IP地址等網絡配置信息
            每個子網都有一臺DHCP服務器
             若子網沒有DHCP服務器,則由一個路由器做DHCP中繼代理,該代理知道該網絡的DHCP服務器地址


            新主機到來時,DHCP協議的四個步驟

                1.DHCP服務器發現

                    新到的客戶通過廣播DHCP發現報文,發現一個要與其交互的DHCP服務器
                    客戶在UDP分組中向端口67發送該發現報文,此時必須用廣播地址255.255.255.255,源地址是0.0.0.0
                2.DHCP服務器提供
                    DHCP收到DHCP發現報文後,響應一個DHCP提供報文,仍然使用廣播地址,因爲此時新客戶並沒有IP地址
                    可能有多臺DHCP服務器,每臺服務器提供的報文中,有向客戶主機推薦的IP地址、網絡掩碼以及IP地址租用期(一般幾天或幾小時)
                3.DHCP請求
                    客戶從提供中選一個,向選中的服務器提供一個DHCP請求報文進行響應,回顯配置參數
                4.DHCP ACK
                    收到DHCP請求報文後,用DHCP ACK報文對其記性響應,證實所傳參數
            客戶收到ACK後,交互完成,在租期內使用DHCP分配的IP地址。DHCP提供了機制允許客戶更新對一個IP地址的租用

 當一個移動結點在子網之間移動時,就不能維持與遠程應用的TCP連接。
    4.網絡地址轉換NAT

地址10.0.0.0/8是保留的3個IP地址空間之一,這些地址用於家庭網絡等專用網絡或具有專用地址的地域。具有專用地址的地域是指其地址僅對還網絡中的設備有意義的網絡。

  當ISP已經爲SOHO網絡當前地址範圍分配過一塊連續地址,而SOHO內主機越來也多時,需要用到NAT(比如電信給你家分配一個動態IP地址,家裏要好幾臺手機電腦聯網用一個IP地址,需要用NAT)。


        NAT使能路由器
            NAT路由器對外界來看像一個具有單一IP地址的單一設備。例如,家裏有一個NAT使能路由器,其IP地址138.76.29.7,且進入和離開家庭的報文都有同樣的該地址
            NAT路由器對外隱藏了家庭網絡的細節
            NAT路由器從ISP的DHCP服務器得到它的地址,並且路由器運行一個DHCP服務器,爲位於NAT-DHCP路由器控制的家庭網絡地址空間中的主機提供地址
            NAT轉換表


        
                端口號和IP地址用於路由器將分組轉發給特定的內部主機(比如家裏的某個手機)
        NAT重要問題
            違反各種原則,應該用IPv6來改進
            妨礙P2P應用程序,包括P2P共享和語音。一個對等方在NAT後面,不能充當服務器並接受TCP連接,其解決辦法是連接反轉
                連接反轉:A通過C與B聯繫,C不位於NAT之後並與B建立了TCP連接,已經被很多P2P應用用於NAT穿越
                若對等方A和B都在NAT之後,使用應用程序進行中繼處理,如Skype中繼
    5.UPnP
        NAT穿越由通用即插即用(UPnP)提供
        UPnP是一種允許主機發現並配置鄰接NAT的協議,要求主機和NAT都是UPnP兼容(運行在NAT使能路由器)。允許外部主機使用TCP和UDP向NAT化的主機發起通信會話。
        使用UPnP,在主機上運行的應用程序能爲某些請求的公共端口號請求一個NAT映射(專用IP地址,專用端口號 — 公共IP地址,公共端口號)。如果某NAT接收請求並生成映射,來自外部的結點能發起到(公共IP地址,公共端口號)的TCP連接。

4.4.3 因特網控制報文協議ICMP

    ICMP被主機和路由器用來溝通網絡層信息,如差錯報告
        如『目的網絡不可到達』這種錯誤是在ICMP產生的,IP路由器找不到路徑通往指定主機,該路由器就向發送主機發出ICMP報文指示錯誤
    ICMP通常被認爲是IP的一部分,但從體系結構上來講它是位於IP之上的,因爲ICMP報文是承載在IP分組中的。也就是說,ICMP報文是作爲IP有效載荷承載的。
    ping:發送一個ICMP類型8編碼0(回顯請求)的報文到指定主機,目的主機發回一個類型0編碼0(回顯回答)的報文
    源抑制報文:擁塞的路由器向主機發送,強制主機減小發送速率。TCP在運輸層有擁塞控制機制,不需要該報文的信息了
    Traceroute:如何跟蹤從一臺主機到世界上任意一臺主機之間的路由?
        原理:IP協議規定,路由器收到TTL爲0的數據報會將其丟棄,然後發送一個ICMP告警報文給源主機,which concludes the name and IP address of it
        方法:發送TTL爲1~n的一系列IP數據報。當到達目的主機時,返回一個端口不可達(數據報攜帶了不可達UDP端口號)的ICMP報文,則結束探測

4.4.4 IPv6

    IPv4地址耗盡,也可升級強化IPv4某些方面
    IPv6數據報格式(不一樣的地方)

  •         擴大的地址容量

            32bit —> 128bit
            除了單播多播地址,引入任播地址,使數據報交付給一組主機中的任意一個

  •         簡化高效的40字節首部
  •         流標籤與優先級。 如音頻流、視頻流、高優先級用戶承載的流量
  •         分片/重組。 只能在源與目的地進行
  •         選項 放到了『下一個首部』位置,使得IP首部定長40字節
  •         去除首部檢驗和

   IPv6字段

  • 版本號(version)

    不同的IP協議版本使用不同的數據報格式。

  • 通信量等級(Traffic Classes)

    使得源節點和路由器能夠識別IPv6信息包的優先級。與IPv4服務類型TOS字段含義類似。

  • 流標籤(Flow Label)

    標記那些需要IPv6路由器特殊處理(如一種非默認服務質量或實時服務)的信息包順序。

  • 有效負載長度(Payload Length)

    定長40字節數據報首部後面的字節數量,包括擴展報頭和負載數據,即數據報長度-40。

  • 下一個首部(Next Header)

    當IPv6沒有擴展報頭時,該字段的作用和IPv4的上層協議字段一樣。當含有擴展報頭時,該字段的值即爲第一個擴展報頭的類型。

  • 跳限制(Hop Limit)

    轉發數據報的每臺路由器對該字段的值減1,若減爲0則丟棄該數據報。

  • 源和目的IP地址(Source/Destination Address)
  • 數據(Data)

    當數據報到達目的地時,該有效載荷就從IP數據報移出,並交給下一個首部字段中指定的協議。

  • 源和目的IP地址(Source/Destination Address)

2. IPv4到IPv6的遷移
        雙棧:同時使用IPv4和IPv6,這種結點有兩種地址。DNS可解析兩種地址。如果發送方和接收方中任意一個僅爲IPV4使能的,則必須使用IPv4數據報。

        例:

結點B必鬚生成一個IPv4數據報發給C,IPv6數據報的數據字段可以複製到IPv4數據報的數據字段中,並且要做適當的映射。在IPv4中沒有對應的部分的數據,這些字段的信息會丟失

      建隧道:圖中B和E,要使用IPV6交互,但是它們經由中間IPv4路由器關聯的,我們將兩臺IPv6路由器之間的Ipv4路由器的集合成爲一個隧道,將整個IPv6數據報放在IPv4的有效載荷中。

4.4.5 涉足IP安全性

    新型網絡層協議:IPsec(如果你是Mac OS,網絡設置中添加VPN服務時你會看到)。與IPv4和IPv6向後兼容
        在VPN(虛擬專用網)中部署
        兩臺主機要通信,IPsec只需在兩臺主機中可用,其他主機和路由器繼續用普通的IPv4
        兩臺主機首先創建IPsec會話(面向連接的),在兩臺主機發送的TCP和UDP報文段都享受IPsec的安全性服務

  • 密碼技術約定
  • IP數據報有效載荷的加密
  • 數據完整性
  • 初始鑑別。主機確信在數據報中的源IP地址是該數據報的實際源。

4.5 路由選擇算法

    路由選擇:確定從發送方到接收方通過路由器網絡的好路徑
    主機通常直接與一臺路由器相連,該路由器即爲該主機的默認路由器第一跳路由器
        源主機默認路由器稱爲源路由器,目的主機默認路由器稱爲目的路由器
        一個分組從源主機到目的主機 == 從源路由器到目的路由器
    路由選擇算法:給定一組路由器和連接路由器的鏈路,路由選擇算法找到一條源路由器到目的路由器好的路徑(最低費用),如最短路徑算法(圖)
        第一種分類方法:

            全局式路由選擇算法

                用完整、全局性的網絡信息計算出最短路徑(最低費用路徑)
                practically具有全局狀態信息的算法稱作鏈路狀態算法(LS)
            分散式路由選擇算法
                迭代、分佈式的方式計算最短路徑
                沒有結點擁有關於網絡鏈路的完整信息,每個結點僅有與其直接相連鏈路的信息即可工作
                通過迭代計算並與相鄰結點交換信息,逐漸計算出最低費用路徑,距離向量算法(DV)
        第二種分類方法:
            靜態路由選擇算法
                變化緩慢,通常人工干預
            動態路由選擇算法
                網絡流量負載或拓撲發生變化時改變路由選擇路徑
                週期性運行或直接響應變化
                也容易受路由選擇循環、路由震盪等問題的影響
        第三種分類方法
            負載敏感算法
                鏈路費用動態變化來反映鏈路擁塞水平
            負載遲鈍算法
                鏈路費用與擁塞無關,當今因特網路由選擇算法基本都是遲鈍的

4.5.1 鏈路狀態路由選擇算法LS

    網絡拓撲和所有鏈路費用已知。實踐中是由每個節點向網絡其他所有節點廣播鏈路狀態分組完成的,例如OSPF路由選擇協議由鏈,路狀態廣播算法完成
    所有節點都具有該網絡的信息,每個節點運行LS算法
    Dijkstra算法
    會產生路由震盪,可以讓每臺路由器發送鏈路通告的時間隨機化

4.5.2 距離向量路由算法DV

    迭代、異步、分佈式
        分佈式:每個結點要從一個或多個直接相連鄰居接收某些信息,計算,將計算結果發給鄰居
        迭代:過程持續到鄰居之間無更多信息交換
        異步:不要求所有節點相互步伐一致操作
    DV算法
        Bellman-Ford方程
        無更新報文發送,不會出現進一步路由選擇表計算,算法進入靜止狀態。直到一條鏈路費用發生改變
    鏈路費用改變與鏈路故障
    路由選擇環路,無窮計數問題
    增加毒性逆轉
        欺騙費用無窮大。如果z通過y路由選擇到目的地x,則z通告y,它(z)到x的距離是無限大。
        解決兩個直接相連無窮計數問題,更多結點環路無法解決
    LS與DV路由選擇算法的比較
        報文複雜性
            顯然LS複雜得多,每條鏈路費用改變都要通知所有結點
        收斂速度
            DV算法收斂較慢,且會遇到路由選擇環路和無窮計數問題
        健壯性
            路由器發生故障,LS結點僅計算自己的轉發表,提供了一定健壯性
            DV算法一個 不正確的結點會擴散到整個網絡
    其他路由選擇算法
        LS、DV基本上是當前因特網實踐中使用的僅有的兩種路由選擇算法
        很多種新型算法,一種是基於將分組流量看做網絡中源和目的之間的流
        電路交換路由選擇算法也有參考價值

4.5.3 層次路由選擇

    問題
        規模。當路由器數目變得很大,算法開銷高的不可實現如LS更新鏈路費用
        管理自治。一個組織應該當按自己願望運行管理其網絡
    解決方法:將路由器組織進自治系統AS
        每個AS由一組處在相同管理控制下的路由器組成(如相同的ISP運營)
        相同AS中路由器全部運行同樣的路由選擇算法,叫做自治系統內部路由選擇協議
        一個AS內一臺或多臺路由器負責向本AS之外的目的地轉發分組,這些路由器稱爲網關路由器當有多臺網關路由器,需要用到自制系統間路由選擇協議來配置轉發表
            因特網中所有AS中都運行相同的AS間路由選擇協議BGP4

        每臺路由器接收來自一個AS內部路由選擇協議和一個AS間路由選擇協議的信息,並使用來自這兩個協議的信息配置它的轉發表。
    某AS非網關路由器對轉發表增加用於子網x(該AS外)的表項採取的動作:
        從AS間協議知道經多個網關可達子網x
        使用AS內部協議的路由選擇信息,決定到每個網關的最低費用路徑的費用
        熱土豆路由選擇:選擇具有最小的最低費用的網關
        從轉發表確定最低費用網關接口I,將(x,I)添加到轉發表中
    如果AS從一個相鄰AS處知道一個目的地,該AS能向它某些其他相鄰AS通告該路由選擇信息
    一個ISP可能分爲多個互聯的AS

4.6 因特網中的路由選擇

    AS內部路由選擇協議,又稱內部網關協議
        路由選擇信息協議RIP,通常設置在下層ISP中
        開放最短優先OSPF,通常設置在上層ISP中

4.6.1 AS(自治系統)內部的路由選擇:RIP(DV思想)

    AS內部路由選擇協議又成爲網關協議

    是一種距離向量協議,使用跳數作爲其費用測度
        :沿着源路由器到目的子網(包括)的最短路徑經過的子網數量
        一條路徑的最大費用限制爲15,因此RIP使用限制在網絡直徑不超過15跳的自治系統內
    路由選擇更新信息在鄰居之間通過使用RIP響應報文(RIP通告)來交換,大約每30s交換一次
        一臺路由器或主機發出的響應報文包含了該AS內多達25個目的子網的列表,以及發送方到每個子網的距離
        每臺路由器維護一張稱爲路由選擇表的RIP表,包括該路由器的距離向量和轉發表(目的子網,下一臺路由器,到目的地跳數)
        路由器收到通告後,將通告與路由選擇表合併,記下更短路徑(DV算法還在收斂,或者新的鏈路加入AS)
        一臺路由器超過180s沒有從鄰居聽到報文,該鄰居要麼死記要麼鏈路中斷
            RIP可以修改本地路由選擇表,向活着的鄰居發送RIP通告
            也可以使用RIP請求報文請求鄰居到目的地的費用
    RIP被當做一個應用進程來實現,能在一個標準socket上發送個接收報文,並且使用一個標準的運輸層協議
        路由器在UDP上用端口520相互發送RIP請求/響應報文。意思是RIP使用一個運輸層協議實現網絡層功能

4.6.2 AS內部的路由選擇:OSPF(LS思想)

    OSPF和其兄弟IS-IS通常設置在上層ISP中,RIP在下層ISP和企業網中
    OSPF核心:使用洪泛鏈路狀態信息的LS協議 + Dijkstra最低費用路徑算法各條鏈路費用(權值)是管理員配置的
    使用OSPF,一臺路由器構建了整個AS的拓撲圖,然後在本地運行Dijkstra算法
    使用OSPF,路由器向AS內所有其他路由器廣播路由選擇信息。即使鏈路未發生變化,也要週期性廣播鏈路狀態(at least 30 minutes at a time)

    OSPF報文由IP直接承載
    優點:
        安全:能夠鑑別OSPF路由器之間的交換,僅有受信任的路由器能參與AS內的OSPF協議。包括使用MD5加密
        多條相同費用路徑:無需僅選擇單一路徑承載所有流量
        支持單播多播路由選擇
        支持在單個路由選擇域內的層次結構:具有按層次結構構造一個自治系統的能力
    一個OSPF AS可以配置成多個區域,每個區域運行自己的OSPF LS算法,一個區域內每臺路由器可以向該區域其他路由器廣播鏈路狀態
        一個區域內,一臺或多臺區域邊界路由器負責爲流向該區域以外的分組提供路由選擇
        AS內只有一個OSPF區域配置成主幹區域,爲其他區域之間的流量提供路由選擇。該主幹包含AS內所有區域邊界路由器,也可能包含一些非邊界路由器
        某區域內分組—》區域邊界路由器—》主幹—》目的區域邊界路由器—》目的地

4.6.3 AS間的路由選擇:BGP

    BGP:邊界網關協議,跨越多個AS的源和目的對之間確定路徑,現在用的BGP4
    BGP爲AS提供:
        從相鄰AS獲得子網可達性信息
        向本AS內部所有路由器傳播這些可達性信息
        基於可達性信息和AS策略,決定到達子網的路由
    BGP使得每個子網向因特網其餘部分通告它的存在:一個子網高聲宣佈『在這!』,並且確保因特網中所有AS知道該子網以及如何到達
   1. BGP基礎
        是因特網中至關重要的協議,正是BGP將一切『粘合』起來
        BGP中,路由器通過使用179端口的半永久TCP連接來交換路由信息
            跨越兩個 AS的TCP連接稱爲外部BGP會話eBGP,AS內部每對路由器之間的TCP連接成爲內部BGP會話iBGP
            iBGP並不總與物理鏈路對應
            位於連接兩端的兩臺路由器成爲BGP對等方
    假設你開了公司,與ISP簽訂協議,獲得了一個IP地址範圍(子網),每臺路由器是通過BGP知道你公司地址的前綴進行轉發的,這樣別人才能成功將分組發到公司
    BGP使每個AS知道經過其相鄰AS可到達哪些目的地子網,目的地是CDIR化的前綴,子網或子網的集合
    BGP中,一個AS由其全局唯一的AS號ASN標識,which is allocated by ICANN
    當一臺路由器通過BGP會話通告一個前綴時,它在前綴中包括一些屬性。帶屬性的前綴稱爲一條路由,BGP對等方彼此通告路由
        AS-PATH:該屬性包含了前綴通告已經通過的AS,當一個前綴傳送到一個AS時,AS將其ASN增加到AS-PATH中
            路由器使用AS-PATH屬性檢測和防止循環通告
            路由器使用AS-PATH在多條路徑中選擇相同的前綴
        NEXT-HOP:是一個開始某AS-PATH的路由器接口
            路由器使用該屬性正確地配置它們的轉發表
            使用NEXT-HOP值和AS內部路由選擇算法,路由器能確定到每條對等鏈路的路徑的費用,用熱土豆路由選擇決定適當的接口
    BGP路由選擇
        BGP使用eBGP和iBGP向在AS中的所有路由器發佈路由,路由器可能知道到達任何一條前綴的多條路由。消除規則從上到下:

  •             選擇具有最高本地偏好值(管理員決定)的路由
  •             選擇具有最短AS-PATH的路由
  •             最靠近NEXT-HOP路由器的路由,最靠近指最低費用路徑最低,由AS內部算法決定(hot potato routing)
  •             使用BGP標識符選擇路由

    路由選擇策略
        反應ISP之間商業關係

4.7 廣播和多播路由選擇

廣播路由選擇(必須同一網段)中,網絡提供了一種源節點到網絡中事務所有其它結點的交付分組的服務;多播路由選擇使單個源節點能夠向其他網絡結點的一個子集發送分組的副本。(不必同一網段).


4.7.1 廣播路由選擇算法

    1.N次單播
        給定N個目的節點,源結點產生該分組的N份副本,對不同目的地每個副本編址,用單播路由選擇傳送
        效率低,多份獨立的副本會重複經過某段鏈路,讓網絡結點本身生成分組副本更有效

        N次單播的一個假設是廣播的接收方及其地址爲發送方所知曉。但是怎樣得到這些消息呢?最可能的是,可能還需要別的機制。浙江增加更多的開銷。
    2.無控制洪泛
        源節點向所有鄰居發送分組副本,結點複製該分組並向它鄰居轉發
        圖中有環,會無休止循環
        當一個結點與兩個以上結點連接時,它將生成並轉發廣播分組的多個副本,副本中的每個又產生多個副本,產生廣播風暴,使網絡變得毫無用處
    3.受控洪泛
        序號控制洪泛:源節點將其地址或其他唯一標識和廣播序號放入廣播分組,每個結點維護它已經收到的、複製的和轉發的源地址和序號列表。當結點接受到一個廣播分組時,它首先檢查該分組是否在列表中。如果在,丟棄該分組;如果不在,複製該分組並向該結點的所有鄰居轉發。
       反向路徑轉發RPF:僅當分組到達的鏈路正好位於它自己返回源的最短單薄路徑上,才傳輸報文,否則丟棄。RPF僅需要知道在它到發送方的單薄路徑上的下一個鄰居;它僅用這個鄰居的身份以決定是否洪泛一個接收到的廣播分組。
    4.生成樹廣播

        雖然序號控制洪泛RPF避免了廣播風暴,但它們不能完全避免冗餘廣播分組的傳輸。
        構造最小生成樹;結點只需知道哪些鄰居在生成樹中
        分佈式生成樹算法
            基於中心的方法:建立一棵生成樹時,定義一箇中心結點(匯合點、核),結點向中心結點單薄加入樹的報文。加入樹的報文使用單播路由選擇朝着中心結點進發,直到它到達一個生成樹中,經過的路徑再嫁接到現有生成樹中。

         在實踐中,廣播協議被用於應用層和網絡層

4.7.2 多播

    只有一部分路由器(那些具有加入該多播組的相連主機的路由器)實際需要接收多播流量。

    一些新興應用要求將分組從一個或多個發送方交付給一組接收方,比如各種直播、遊戲
    多播數據報使用間接地址來編址。每個分組難道攜帶所有接收方IP地址?這不科學
        用一個標識表示一組接收方(D類多播地址),接收方小組稱爲多播組
    因特網組管理協議IGMP
        IGMP + 多播路由選擇協議 組成網絡層多播
    確定多播路由選擇:

        使用一棵組共享樹的多播路由選擇(共享的):通過組共享樹進行多播路由選擇的基礎是構建一棵樹。

        使用一棵基於源的樹的多播路由選擇:而第二種方法爲多播組中的每個源構建一棵多播路由選擇樹。

    解決應用RPF時會收到不想要的多播分組這個問題成爲剪枝。一臺接收到該多播分組的多播路由器,如它無加入改組的相連主機,則它向其上游路由器發送一個剪枝報文,則它就能向上遊轉發一個剪枝報文。
 

第五章、鏈路層

5.1 鏈路層概述

    運行鏈路層協議的任何設備均稱爲結點,沿着通信路徑連接相鄰結點的通信信道稱爲鏈路。通過特定鏈路時,傳輸結點將數據報封裝在鏈路層幀中,將該傳入鏈路
    舉例:遊客想從蘇州到臨汾玩,旅行社安排的線路是:第一段線路是從蘇州乘火車到上海,第二段線路是在上海坐飛機到太原,第三段線路是太原坐大巴到臨汾
        遊客相當於數據報
        每個運輸段相當於一條鏈路
        每種運輸方式相當於一種鏈路層協議
        旅行社相當於一個路由選擇協議

5.1.1鏈路層提供的服務

    能夠提供的協議可能包括:(不同協議包括不同,細節不同)
        成幀
            網絡層數據報經鏈路傳送前,鏈路層協議要將其用鏈路層幀封裝起來
            幀的結構由鏈路層協議規定
        鏈路接入
            媒體訪問控制MAC協議,規定幀在鏈路上傳輸的規則,協調多個結點的幀傳輸
        可靠交付
            保證無差錯經鏈路層移動每個網絡層數據報
            確認和重傳,類似TCP
            通常用於高差錯率鏈路,如無線鏈路,同軸電纜、光纖、雙絞線等鏈路不需要
            目的是在差錯發生的鏈路上糾正差錯,而不是通過運輸層或應用層進行端到端數據重傳

            鏈路層可靠交付可能會被認爲是一種不必要的開銷。由於這個原因,許多有線的鏈路層協議不提供可靠交付服務。
        差錯檢測和糾正(硬件)
            奇偶校驗
            檢驗和
            循環冗餘檢測
    5.1.2 鏈路層在何處實現(較硬件)
        路由器中:在線路卡中實現
        端主機中:網絡適配器(網絡接口卡,網卡),位於其核心的是鏈路層控制器,一個實現了許多鏈路層服務(成幀、鏈路介入、差錯檢測)的專用芯片。之前是物理分離的卡,現在網卡直接焊在了主板上
        大部分鏈路層是在硬件中實現的,但部分鏈路層是在運行於主機CPU上的軟件中實現的,軟件實現了高級功能,如組裝鏈路層尋址信息和激活控制器硬件,響應控制器中斷
        鏈路層是協議棧中軟件和硬件交接的地方

5.2 差錯檢測和糾正技術

比特級差錯檢測與糾正,即對從一個結點發送到另一個物理上連接的鄰近結點的鏈路層幀中的比特損傷進行檢測與糾正,它們通常是鏈路層提供的兩種服務。

爲了保護比特免受差錯,使用差錯檢測和糾正比特(EDC)。通常,要保護的數據不僅包括從網絡層傳遞下來需要通過鏈路傳輸的數據報,而且包括鏈路幀首部中的鏈路級的尋址信息、序號和其它字段。

即使採用差錯檢驗比特,也還是可能有未檢出比特差錯。

  

  傳輸數據中檢測差錯的三種技術
        奇偶校驗(描述差錯檢測和糾正背後的思想)
        檢驗和方法(應用於運輸層)
        循環冗餘檢測(應用在適配器中的鏈路層)
    奇偶校驗

 
        單個奇偶校驗位

            單個比特的奇偶校驗是指在要發送的數據最後附加一個奇偶校驗位.奇校驗的意思就是整個編碼中的1的個數要是奇數.偶校驗就是1的個數是偶數.顯然如果有偶數個比特發生錯誤,那麼奇偶校驗就檢測不出來了.
        二維奇偶校驗


            D中的d個比特被劃分爲i行j列.對每行沒咧計算奇偶值.產生的i + j + 1奇偶比特就構成了鏈路層幀的差錯檢測比特.
           當出現單個比特差錯時,發生錯誤的行和列都會出現差錯.接收方不僅可以檢測差錯,還可以根據行列索引來糾正它.
           二維奇偶校驗也可以檢測(但不能糾正)兩個比特錯誤的任何組合.
           如果在同一行兩個比特錯誤,則那一行的奇偶校驗正確,但是會有兩列的奇偶校驗失敗.如果不同行,則會有四列出錯.這兩種情況都無法糾錯,只能檢測.但是還是有一些偶數個錯誤的情況是二維奇偶校驗無法檢測的.
            接收方檢測和糾錯的能力被稱爲前向糾錯(FEC).

    校驗和方法

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

和CRC相比,校驗和提供較弱的保護.
爲什麼傳輸層使用校驗和而鏈路層使用CRC呢?
1. 傳輸層使用軟件實現,採用簡單快速的方案是必須的(校驗和)
2. 鏈路層的CRC用硬件實現,能夠快速執行CRC操作.
   

    循環冗餘檢測(CRC)

編碼解碼步驟:

CRC編碼也稱爲多項式編碼,因爲該編碼能夠將要發送的比特串看成係數是0或1的一個比特串,對比特串的操作被解釋爲多項式算數.
這裏不過多討論多項式理論.
編碼步驟如下 :
1. 發送方和接收方實現協商一個r + 1的比特模式(比特串)G,叫做生成多項式.要求G的最高位是1
2. 對於一個給定的數據段D,發送方選擇r個附加比特R,並將它們附加到D上.
3. 使得得到的d + r比特模式用模2算數恰好能被G整除.(模2算數就是異或)

接收方的解碼步驟很簡單,用G去除收到的d + r比特.如果餘數非0,接收方知道出了差錯.否則認爲數據被正確接收.
怎麼計算R

要使得R對於n有: D * 2^{r}XOR R = nG.
兩邊同異或R得: D * 2^{r} = nG XOR
所以 R = remainder {D *2^{r} / G}

5.3 多路訪問鏈路和協議

    有兩種類型的網絡鏈路
        點對點鏈路
            點對點協議PPP
            高級數據鏈路控制協議HDLC
        廣播鏈路
            讓多個發送和接收結點都連接到相同的、單一的、共享的廣播信道上
            當任何一個結點傳輸一個幀時,信道廣播該幀,其他結點都收到一個副本
            如以太網和無線局域網
    多路訪問問題
        如何協調多個發送和接收結點對一個共享廣播信道的訪問
        所有結點都能傳輸幀,多個結點可能會同時傳輸幀,所有結點同時接到多個幀,傳輸的幀在所有接收方出碰撞了,發生碰撞時,所有幀丟失
        多路訪問協議:結點通過協議規範它們在共享的廣播信道上的傳輸行爲
            信道劃分協議
            隨機接入協議
            輪流協議

        協議希望有的特性,理想情況下對速率R bps的廣播信道
            僅有一個結點發送數據,結點具有R bps的吞吐量
            M個結點發送數據時,每個結點平均吞吐量R/M bps
            協議分散,不會因爲主結點故障似整個系統崩潰
            協議簡單不昂貴

5.3.1信道劃分協議

TDM(時分多路複用)

TDM把時間劃分爲時間幀,並進一步把時間幀劃分爲N個時隙(slot).(時間幀和鏈路層交換的單元幀不是一個意思)
然後把每個時隙分給N個節點中的一個.無論何時某個節點在有分組想要發送的時候,他在循環的TDM幀中指派給它的時隙內傳輸分組比特.時隙長度一般應是一個時隙內能傳輸一個分組

       TDM的缺點
          1. 最高速率只能達到R/N bps ,即使只有一個人使用信道
          2. 節點總是總是要等待它的時隙,可能會對緩存等造成壓力

          3.消除了碰撞且十分公平
FDM(頻分多路複用)

FDM將Rbps的信道劃分爲不同的頻段(每個頻段具有R/N帶寬),並把每個頻段分給N個結點中的一個.因此FDM在N個較大的信道中創建了N個較小的R/N信道.

FDM的缺點和TDM相同,限制了每個結點只能使用R/N帶寬..
 碼分多址CDMA
            TDM和FDM分別爲結點分配時隙和頻率,CDMA對每個結點分配不同的編碼
            每個結點用其唯一編碼對發送數據進行編碼,使得不同結點能同時傳輸,接收方仍能正確而接收
            抗干擾,軍用系統,民用蜂窩電話

5.3.2隨機接入協議

        傳輸結點總是以信道全部速率R bps進行發送

        有碰撞時,涉及碰撞的每個節點反覆重發它的幀(等待一個隨機時延),直到該幀無碰撞的通過

        常用隨機接入協議:
        1.時隙ALOHA
            當結點有新幀發送時,等到下一個時隙開始傳輸整個幀(設一個時隙傳一個幀)。時隙開始時傳輸。
            如果有碰撞,結點在時隙結束之前檢測到這次碰撞,以p的概率在後序的每個時隙重傳它的幀,直到無碰撞。

            時隙ALOHA的確需要在結點中對時隙同步。剛好有一個結點傳輸的時隙稱爲一個成功時隙。時隙多路訪問協議的效率定義爲:當有大量的活躍結點且每個結點總有大量的幀要發送時,長期運行中成功時隙的份額。
            效率:當活躍結點數量趨向無窮大時,最大效率1/e,即37%。一個給定的結點成功傳送的概率是p(1-p)^{n-1},因爲有N個結點,任意一個結點成功傳送的概率是Np(1-p)^{n-1}
        2.(純)ALOHA
            碰撞時,立即以概率p重傳該幀,否則等待一個幀傳輸時間
            效率:僅爲時隙ALOHA的一半:\frac{1}{2e}.一個給定結點成功傳輸一次的該概率是p(1-p)^{2(N-1)}

        3.載波偵聽多路訪問CSMA
            在時隙和純ALOHA種,一個結點傳輸的決定獨立於其他結點,不關心自己傳輸時別人是不是在傳輸
            舉例:有禮貌的人類談話有兩個重要規則
                說話之前先聽。如果在說話,等他們說完話再說,網絡中稱爲載波偵聽 ,結點等待直到一小段時間沒有傳輸,然後開始傳輸
                如果與他人同時開始說話,停止說話。稱爲碰撞檢測,當一個傳輸結點在傳輸時一直偵聽此信道,如果檢測到另一個結點正在傳輸,它就停止,等待一段隨機事件,重複『偵聽=當空閒時傳輸』動作
            這兩個規則包含在CSMA和具有碰撞檢測的CSMA/CD協議族中
            所有結點都載波偵聽了,爲何當初會發生碰撞?
                B的比特沿着廣播媒體傳播所實際需要的時間不是0(即使2*10^8),在還沒到D時,儘管B正在發,但D偵聽的信道空閒,D就開始傳輸,於是發生了碰撞
                廣播信道端到端信道傳播時延決定了性能,時延越大,不能偵聽到已傳輸結點的可能就越大,碰撞越多,性能越差

        4.具有碰撞檢測的載波偵聽多路訪問CSMA/CD
            與廣播信道相連的適配器:
                適配器從網絡層一條獲得一條數據報,準備鏈路層幀,並將其放入幀適配器緩存中
                如果適配器偵聽到信道空閒,開始傳輸幀;如果偵聽到信道在忙,等待,直到空閒
                傳輸過程中,適配器監視信道
                如果適配器傳輸整個幀而未檢測到其他信號,該適配器完成了該幀,否則停止傳輸幀
                中止傳輸後,適配器等待一個隨機時間量,繼續偵聽
            選擇隨機回退時間間隔太大,信道會空閒,太小會再次碰撞。當碰撞結點數量較少時時間應該間隔較短,否則較長。二進制指數後退算法解決這個問題
                幀經歷一連串n次碰撞,結點隨機從{0,1,2,…,2^n-1}選擇一個K值
                一個幀經歷碰撞越多,K選擇的間隔越大.該算法稱爲二進制指數倒退
                以太網中,一個結點等待的實際時間量是K*512bit的時間.
            效率
                信道在大多數時間都會有效地工作。\frac{1}{1+5d_{prop}/d_{trans}}

        5.3.3 輪流協議

            輪詢協議
                指定一個主結點,以循環的方式輪詢每個結點
                主結點首先向結點A發送一個報文,告知A能傳輸幀的最大數量,A傳完後主結點告訴B能傳幀的最多數量,如此循環
                缺點:有輪詢時延;主結點故障,整個信道就GG
            令牌傳遞協議
                沒有主結點,一個叫令牌token的特殊幀在結點之間以固定次序交換,如1發給2,2發給3,N發給1,就像網絡拓撲結構中的環狀網絡令牌
                當一個結點收到令牌時,有幀發送,則發送最大數量的幀,然後轉發令牌;沒幀發送,直接把令牌轉發.

                缺點:單點故障。
        DOCISIS:用於電纜因特網接入的鏈路層協議

5.4 交換局域網

    交換機運行在鏈路層,它們使用鏈路層地址而不是IP地址來轉發鏈路層幀通過交換機網絡

    5.4.1 鏈路層尋址和ARP

        1.MAC地址
            並不是主機或路由器具有鏈路層地址,而是它們的適配器(網絡接口)具有鏈路層地址。具有多個網絡接口的主機或路由器也有多個鏈路層地址,就像它也有多個IP地址一樣。
            鏈路層交換機並沒有鏈路層地址,交換機透明地執行在主機與路由器之間承載數據報的任務
            鏈路層地址也叫LAN地址、物理地址、MAC地址
            MAC地址長度6字節,2^48個可能的MAC地址,通常用十六進制表示法,如5C-66-AB-90-75-B1
            MAC地址一般是固定的(也有軟件改變適配器MAC地址的可能)
            沒有兩塊適配器有相同的MAC地址,MAC地址空間由IEEE管理,IEEE給公司固定前24個比特,後面24個比特讓公司自己去生成
            MAC地址具有扁平接口。比如具有802.11接口的手機總是有相同mac地址,而當主機移動時,IP地址會改變(IP地址是層次結構
            MAC地址像身份證號,IP地址像郵政地址,有層次,會改變
            當某適配器要向目的適配器發送一個幀時,發送適配器將目的適配器的MAC地址插入該幀,發送到局域網上,適配器可以接受一個並非向它尋址的幀,當適配器接受一個幀時,檢查幀中的目的MAC地址與自己的MAC地址是否匹配,若匹配則取出數據報,向上傳遞,否則丟棄
            適配器通過MAC廣播地址FF-FF-FF-FF-FF-FF來廣播
       2. 地址解析協議ARP(即插即用的)
            轉換網絡層地址和鏈路層地址,如IP地址和MAC地址的轉換
            DNS爲因特網中任何地方的主機解析主機名,而ARP只爲在同一個子網上的主機和路由器接口解析IP地址
            每臺主機和路由器在內存中有一個ARP表,包含IP地址到MAC地址的映射關係,過期時間20分鐘
            若發送方的ARP表沒有目的主機的表項,發送反公用ARP協議來解析這個地址
                首先發送方構造一個ARP分組,字段包括髮送和接受IP地址和MAC地址,ARP查詢分組和響應分組格式相同
                適配器用MAC廣播地址發送該ARP查詢分組,每個適配器都把ARP分組向上傳遞給ARP模塊,檢查自己的IP地址和分組中的目的IP地址是否一致
                匹配的主機發送回一個ARP響應分組,然後查詢主機更新它的ARP表,併發送它的IP數據報
            ARP協議是一個跨越鏈路層和網絡層的協議
       3. 發送數據報到子網以外
            路由器有幾個接口,就有幾個IP地址、ARP模塊和適配器,假設一個路由器連着兩個子網A、B
            子網A中的適配器要發往子網B中的適配器,先通過子網A的ARP把數據報發到子網A跟子網B相連的路由器(目的地址是路由器的MAC),路由器通過子網B的ARP將該數據報轉發給目的適配器(目的地址是最終目的地的MAC)。

   5.4.2 以太網

        以太網佔領了現有的有線局域網市場,就像因特網之於全球聯網的地位
        集線器是一種物理層設備,作用於比特而不是幀。當0或1的比特到達一個接口時,集線器只是重新生成這個比特,將其能量強度放大,並將該比特向其他所有接口傳輸出去
        早期基於集線器星形拓撲以太網,現在位於中心的集線器被交換機所取代。交換機是無碰撞的存儲轉發分組交換機,運行在鏈路層
    以太網幀結構

 
        數據字段(46~1500字節):承載了IP數據報(如),超過1500字節的數據報需要分片;若小於46字節,需要填充到46字節
        目的地址(6字節):目的適配器的MAC地址。當目的適配器收到一個以太網幀,若目的地址是自己的MAC地址或廣播地址,將數據字段傳給網絡層,其他則丟棄
        源地址
        類型字段:允許以太網複用多種網絡層協議
        CRC(4字節):差錯檢測
        前同步碼(8字節):以太網幀以前同步碼開始,前7個字節用於喚醒接收適配器,同步發送方接收方時鐘,第8個字節最後兩個比特(11)警告目的適配器,重要內容來了
        以太網技術向網絡層提供不可靠無連接服務。沒有通過CRC校驗只是丟棄。

        以太網有時候的確重傳了數據,但並不知道正在傳輸新數據還是舊數據。
    以太網技術
        早期10BASE-2和10BASE-5標準規定兩種類型的同軸電纜的10Mbps以太網,每種標準限制在500米,通過轉發器得到更長運行距離。

        BASE表示基帶以太網。前面的數字代表速率。T代表雙絞線。F代表光纖。  100BASE-FX
        今天的以太網,結點經點對點由雙絞銅線或光纖構成的線段與一臺交換機相連
        10Gbps以太網,5類UTP線纜
        線代交換機是全雙工的,一臺交換機和一個結點能同時向對方發送幀而沒有干擾。在基於交換機的以太局域網中,沒有必要使用MAC協議了!

    5.4.3 鏈路層交換機

        交換機的任務:接收入鏈路層幀,轉發到出鏈路
        交換機自身對子網中的主機和路由器是透明的,主機/路由器向另一個主機/路由器尋址一個幀,順利將幀發送進局域網,並不知道交換機幹嘛

        交換機輸出接口設有緩存
        交換機是即插即用設備,管理員無需配置
        交換機是雙工的,任何交換機接口能同時發送和接收
    轉發和過濾
        藉助於交換機表,包含局域網上某些主機和路由器的表項(MAC地址,通向該地址的交換機接口,表項放置的時間)
        假定目的地址爲DD-DD-DD-DD-DD-DD的幀從交換機接口x到達,交換機用該MAC地址索引交換機表,有三種可能:
            表中沒有該地址,交換機廣播該幀
            表中有表項將該地址與接口x聯繫起來,過濾掉,因爲該幀從x來,DD也通過x去,說明該幀跟DD適配器在同一個局域網段,該幀已經在包含目的地的局域網網段廣播過了
            表中有表象將該地址與接口y≠x聯繫起來,該幀需要被轉發到與接口y相連的局域網段,放到接口y前的輸出緩存,完成轉發功能
    自學習:表是自動、動態建立的
        交換機表初始爲空
        對於每個接口接收到的每個入幀,交換機在其表中存儲
            該幀源MAC地址
            幀到達的接口
            當前時間
        一段時間後,交換機沒有接受到以該地址作爲源地址的幀,在表中刪除該地址。如果一臺PC被另一臺PC代替,原來PC的MAC地址將被清除
    鏈路層交換機的性質
        消除碰撞
            交換機緩存幀並且不會在網段上同時傳輸多於一個幀,交換機提供了比廣播鏈路局域網高的多的性能改善
        異質的鏈路
            交換機將鏈路彼此隔離,因此局域網中的不同鏈路能夠以不同速率運行,在不同媒介上運行
        網絡管理
            主動斷開異常適配器
            收集帶寬使用的統計數據、碰撞率和流量類型,這些信息用來調試解決問題
    安全性
        交換機毒化:向交換機發送大量不同僞造源MAC地址的分組,用僞造表項填滿了交換機表,沒有爲合法主機留下空間,導致交換機廣播大多數幀,被嗅探器俘獲到
    交換機和路由器比較


        路由器是第三層的分組交換機,交換機是第二層的分組交換機
        交換機:
            交換機即插即用,相對高的分鐘過濾和轉發速率
            防止廣播幀循環,交換網絡的活躍拓撲限制爲一顆生成樹
            大型交換網絡要求在主機和路由器中有大的ARP表,生成大量ARP流量和處理量
            對廣播風暴不提供任何保護,使得以太網崩潰
        路由器:
            分組不會被限制到生成樹上,可以使用源到目的地的最佳路徑,拓撲結構更加豐富
            對第二層的廣播風暴提供了防火牆保護
            不是即插即用,需要人爲配置IP地址
            對分組處理時間較長,因爲必須處理第三層字段       

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章