計算機網絡整理

一、概述

網絡的網絡

網絡把主機連接起來,而互聯網是把多種不同的網絡連接起來,因此互聯網是網絡的網絡。

ISP

互聯網服務提供商 ISP 可以從互聯網管理機構獲得許多 IP 地址,同時擁有通信線路以及路由器等聯網設備,個人或機構向 ISP 繳納一定的費用就可以接入互聯網。

目前的互聯網是一種多層次 ISP 結構,ISP 根據覆蓋面積的大小分爲第一層 ISP、區域 ISP 和接入 ISP。

互聯網交換點 IXP 允許兩個 ISP 直接相連而不用經過第三個 ISP。

主機之間的通信方式

  1. 客戶-服務器(C/S):客戶是服務的請求方,服務器是服務的提供方。

  2. 對等(P2P):不區分客戶和服務器。

電路交換與分組交換

(以上分別爲:電路交換、報文交換以及分組交換)

1. 電路交換

電路交換用於電話通信系統,兩個用戶要通信之前需要建立一條專用的物理鏈路,並且在整個通信過程中始終佔用該鏈路。由於通信的過程中不可能一直在使用傳輸線路,因此電路交換對線路的利用率很低,往往不到 10%。

2. 報文交換

報文交換用於郵局通信系統,郵局接收到一份報文之後,先存儲下來,然後把相同目的地的報文一起轉發到下一個目的地,這個過程就是存儲轉發過程。

3. 分組交換

分組交換也使用了存儲轉發,但是轉發的是分組而不是報文。把整塊數據稱爲一個報文,由於一個報文可能很長,需要先進行切分,來滿足分組能處理的大小。在每個切分的數據前面加上首部之後就成爲了分組,首部包含了目的地址和源地址等控制信息。

存儲轉發允許在一條傳輸線路上傳送多個主機的分組,也就是說兩個用戶之間的通信不需要佔用端到端的線路資源。

相比於報文交換,由於分組比報文更小,因此分組交換的存儲轉發速度更加快速。

時延

總時延 = 發送時延 + 傳播時延 + 處理時延 + 排隊時延

1. 發送時延

主機或路由器發送數據幀所需要的時間。

其中 l 表示數據幀的長度,v 表示發送速率。

2. 傳播時延

電磁波在信道中傳播一定的距離需要花費的時間,電磁波傳播速度接近光速。

其中 l 表示信道長度,v 表示電磁波在信道上的傳播速率。

3. 處理時延

主機或路由器收到分組時進行處理所需要的時間,例如分析首部、從分組中提取數據部、進行差錯檢驗或查找適當的路由等。

4. 排隊時延

分組在路由器的輸入隊列和輸出隊列中排隊等待的時間,取決於網絡當前的通信量。

計算機網絡體系結構*

1. 五層協議

  1. 應用層:爲特定應用程序提供數據傳輸服務,例如 HTTP、DNS 等。數據單位爲報文。

  2. 運輸層:提供的是進程間的通用數據傳輸服務。由於應用層協議很多,定義通用的運輸層協議就可以支持不斷增多的應用層協議。運輸層包括兩種協議:傳輸控制協議 TCP,提供面向連接、可靠的數據傳輸服務,數據單位爲報文段;用戶數據報協議 UDP,提供無連接、盡最大努力的數據傳輸服務,數據單位爲用戶數據報。TCP 主要提供完整性服務,UDP 主要提供及時性服務。

  3. 網絡層:爲主機之間提供數據傳輸服務,而運輸層協議是爲主機中的進程提供服務。網絡層把運輸層傳遞下來的報文段或者用戶數據報封裝成分組。

  4. 數據鏈路層:網絡層針對的還是主機之間的數據傳輸服務,而主機之間可以有很多鏈路,鏈路層協議就是爲同一鏈路的結點提供服務。數據鏈路層把網絡層傳來的分組封裝成幀。

  5. 物理層:考慮的是怎樣在傳輸媒體上傳輸數據比特流,而不是指具體的傳輸媒體。物理層的作用是儘可能屏蔽傳輸媒體和通信手段的差異,使數據鏈路層感覺不到這些差異。

2. 七層協議

其中表示層和會話層用途如下:

  1. 表示層:數據壓縮、加密以及數據描述。這使得應用程序不必擔心在各臺主機中表示/存儲的內部格式不同的問題。
  2. 會話層:建立及管理會話。

五層協議沒有表示層和會話層,而是將這些功能留給應用程序開發者處理。

3. 數據在各層之間的傳遞過程

在向下的過程中,需要添加下層協議所需要的首部或者尾部,而在向上的過程中不斷拆開首部和尾部。

路由器只有下面三層協議,因爲路由器位於網絡核心中,不需要爲進程或者應用程序提供服務,因此也就不需要運輸層和應用層。

4. TCP/IP 體系結構

它只有四層,相當於五層協議中數據鏈路層和物理層合併爲網絡接口層。

現在的 TCP/IP 體系結構不嚴格遵循 OSI 分層概念,應用層可能會直接使用 IP 層或者網絡接口層。

TCP/IP 協議族是一種沙漏形狀,中間小兩邊大,IP 協議在其中佔用舉足輕重的地位。

二、物理層

通信方式

  1. 單向通信,又稱爲單工通信;
  2. 雙向交替通信,又稱爲半雙工通信;
  3. 雙向同時通信,又稱爲全雙工通信。

帶通調製

模擬信號是連續的信號,數字信號是離散的信號。帶通調製把數字信號轉換爲模擬信號。

信道複用技術

1. 頻分複用、時分複用

頻分複用的所有用戶在相同的時間佔用不同的頻率帶寬資源;時分複用的所有用戶在不同的時間佔用相同的頻率帶寬資源。

使用這兩種方式進行通信,在通信的過程中用戶會一直佔用一部分信道資源。但是由於計算機數據的突發性質,通信過程沒必要一直佔用信道資源而不讓出給其它用戶使用,因此這兩種方式對信道的利用率都不高。

2. 統計時分複用

是對時分複用的一種改進,不固定每個用戶在時分複用幀中的位置,只要有數據就集中起來組成統計時分複用幀然後發送。

3. 波分複用

光的頻分複用。由於光的頻率很高,因此習慣上用波長而不是頻率來表示所使用的光載波。

4. 碼分複用

爲每個用戶分配 m bit 的碼片,並且所有的碼片正交,對於任意兩個碼片 和 有

爲了討論方便,取 m=8,設碼片 爲 00011011。在擁有該碼片的用戶發送比特 1 時就發送該碼片,發送比特 0 時就發送該碼片的反碼 11100100。

在計算時將 00011011 記作 (-1 -1 -1 +1 +1 -1 +1 +1),可以得到

其中 爲 的反碼。

利用上面的式子我們知道,當接收端使用碼片 對接收到的數據進行內積運算時,結果爲 0 的是其它用戶發送的數據,結果爲 1 的是用戶發送的比特 1,結果爲 -1 的是用戶發送的比特 0。

碼分複用需要發送的數據量爲原先的 m 倍。

三、數據鏈路層

信道分類

  1. 點對點信道:一對一通信方式;
  2. 廣播信道:一對多通信方式。

三個基本問題

1. 封裝成幀

將網絡層傳下來的分組添加首部和尾部,用於標記幀的開始和結束。

2. 透明傳輸

透明表示一個實際存在的事物看起來好像不存在一樣。

幀使用首部和尾部進行定界,如果幀的數據部分含有和首部尾部相同的內容,那麼幀的開始和結束位置就會被錯誤的判定。需要在數據部分出現首部尾部相同的內容前面插入轉義字符,如果出現轉義字符,那麼就在轉義字符前面再加個轉義字符,在接收端進行處理之後可以還原出原始數據。這個過程透明傳輸的內容是轉義字符,用戶察覺不到轉義字符的存在。

3. 差錯檢測

目前數據鏈路層廣泛使用了循環冗餘檢驗(CRC)來檢查比特差錯。

局域網

局域網是典型的一種廣播信道,主要特點是網絡爲一個單位所擁有,且地理範圍和站點數目均有限。

可以按照網絡拓撲對局域網進行分類:

PPP 協議

用於點對點信道中。互聯網用戶通常需要連接到某個 ISP 之後才能接入到互聯網,PPP 協議是用戶計算機和 ISP 進行通信時所使用的數據鏈路層協議。

在 PPP 的幀中:

  • F 字段爲幀的定界符
  • A 和 C 字段暫時沒有意義
  • FCS 字段是使用 CRC 的檢驗序列
  • 信息部分的長度不超過 1500

CSMA/CD 協議*

用於廣播信道中。在廣播信道上,同一時間只能允許一臺計算機發送數據。

CSMA/CD 表示載波監聽多點接入 / 碰撞檢測。

  • 多點接入 :說明這是總線型網絡,許多計算機以多點的方式連接到總線上。
  • 載波監聽 :每個站都必須不停地監聽信道。在發送前,如果監聽到信道正在使用,就必須等待。
  • 碰撞檢測 :在發送中,如果監聽到信道已有其它站正在發送數據,就表示發生了碰撞。雖然每一個站在發送數據之前都已經監聽到信道爲空閒,但是由於電磁波的傳播時延的存在,還是有可能會發生碰撞。

記端到端的傳播時延爲 τ,最先發送的站點最多經過 2τ 就可以知道是否發生了碰撞,稱 2τ 爲 爭用期 。只有經過爭用期之後還沒有檢測到碰撞,才能肯定這次發送不會發生碰撞。

當發生碰撞時,站點要停止發送,等待一段時間再發送。這個時間採用 截斷二進制指數退避算法 來確定,從離散的整數集合 {0, 1, .., (2k-1)} 中隨機取出一個數,記作 r,然後取 r 倍的爭用期作爲重傳等待時間。

擴展局域網*

1. 在物理層進行擴展

使用集線器進行擴展。

集線器的主要功能是對接收到的信號進行放大,以擴大網絡的傳輸距離。

集線器不能根據 MAC 地址進行轉發,而是以廣播的方式發送數據幀。

集線器是一種共享式的傳輸設備,意味着同一時刻只能傳輸一組數據幀。

2. 在鏈路層進行擴展

最開始使用的是網橋,它收到一個幀時,根據幀的 MAC 地址,查找網橋中的地址表,確定幀轉發的接口。

網橋不是共享式設備,因此性能比集線器這種共享式設備更高。

交換機的問世很快就淘汰了網橋,它實質上是一個多接口網橋,而網橋是兩接口。交換機的每個接口都能直接與一個主機或者另一個交換機相連,並且一般都工作在全雙工方式。

交換機具有自學習能力,學習的是交換表的內容。交換表中存儲着 MAC 地址到接口的映射。下圖中,交換機有 4 個接口,主機 A 向主機 B 發送數據幀時,交換機把主機 A 到接口 1 的映射寫入交換表中。爲了發送數據幀到 B,先查交換表,此時沒有主機 B 的表項,那麼主機 A 就發送廣播幀,主機 C 和主機 D 會丟棄該幀。主機 B 收下之後,查找交換表得到主機 A 映射的接口爲 1,就發送數據幀到接口 1,同時交換機添加主機 B 到接口 3 的映射。

3. 虛擬局域網

虛擬局域網可以建立與物理位置無關的邏輯組,只有在同一個虛擬局域網中的成員纔會收到鏈路層廣播信息,例如下圖中 (A1, A2, A3, A4) 屬於一個虛擬局域網,A1 發送的廣播會被 A2、A3、A4 收到,而其它站點收不到。

MAC 層*

MAC 地址是 6 字節(48 位)的地址,用於唯一標識網絡適配器(網卡),一臺主機擁有多少個適配器就有多少個 MAC 地址,例如筆記本電腦普遍存在無線網絡適配器和有線網絡適配器。

在 MAC 幀中:

  • 類型 :標記上層使用的協議;
  • 數據 :長度在 46-1500 之間,如果太小則需要填充;
  • FCS :幀檢驗序列,使用的是 CRC 檢驗方法;
  • 前同步碼 :只是爲了計算 FCS 臨時加入的,計算結束之後會丟棄。

四、網絡層*

網際協議 IP 概述

因爲網絡層是整個互聯網的核心,因此應當讓網絡層儘可能簡單。網絡層向上只提供簡單靈活的、無連接的、盡最大努力交互的數據報服務。

使用 IP 協議,可以把異構的物理網絡連接起來,使得在網絡層看起來好像是一個統一的網絡。

與 IP 協議配套使用的還有三個協議:

  1. 地址解析協議 ARP(Address Resolution Protocol)
  2. 網際控制報文協議 ICMP(Internet Control Message Protocol)
  3. 網際組管理協議 IGMP(Internet Group Management Protocol)

IP 數據報格式

  • 版本 : 有 4(IPv4)和 6(IPv6)兩個值;

  • 首部長度 : 佔 4 位,因此最大值爲 15。值爲 1 表示的是 1 個 32 位字的長度,也就是 4 字節。因爲首部固定長度爲 20 字節,因此該值最小爲 5。如果可選字段的長度不是 4 字節的整數倍,就用尾部的填充部分來填充。

  • 區分服務 : 用來獲得更好的服務,一般情況下不使用。

  • 總長度 : 包括首部長度和數據部分長度。

  • 標識 : 在數據報長度過長從而發生分片的情況下,相同數據報的不同分片具有相同的標識符。

  • 片偏移 : 和標識符一起,用於發生分片的情況。片偏移的單位爲 8 字節。

  • 生存時間 :TTL,它的存在是爲了防止無法交付的數據報在互聯網中不斷兜圈子。以路由器跳數爲單位,當 TTL 爲 0 時就丟棄數據報。

  • 協議 :指出攜帶的數據應該上交給哪個協議進行處理,例如 ICMP、TCP、UDP 等。

  • 首部檢驗和 :因爲數據報每經過一個路由器,都要重新計算檢驗和,因此檢驗和不包含數據部分可以減少計算的工作量。

IP 地址編址方式

IP 地址的編址方式經歷了三個歷史階段:

  1. 分類
  2. 子網劃分
  3. 無分類

1. 分類

由兩部分組成,網絡號和主機號,其中不同分類具有不同的網絡號長度,並且是固定的。

IP 地址 ::= {< 網絡號 >, < 主機號 >}

2. 子網劃分

通過在主機號字段中拿一部分作爲子網號,把兩級 IP 地址劃分爲三級 IP 地址。注意,外部網絡看不到子網的存在。

IP 地址 ::= {< 網絡號 >, < 子網號 >, < 主機號 >}

要使用子網,必須配置子網掩碼。一個 B 類地址的默認子網掩碼爲 255.255.0.0,如果 B 類地址的子網佔兩個比特,那麼子網掩碼爲 11111111 11111111 11000000 00000000,也就是 255.255.192.0。

3. 無分類

無分類編址 CIDR 消除了傳統 A 類、B 類和 C 類地址以及劃分子網的概念,使用網絡前綴和主機號來對 IP 地址進行編碼,網絡前綴的長度可以根據需要變化。

IP 地址 ::= {< 網絡前綴號 >, < 主機號 >}

CIDR 的記法上採用在 IP 地址後面加上網絡前綴長度的方法,例如 128.14.35.7/20 表示前 20 位爲網絡前綴。

CIDR 的地址掩碼可以繼續稱爲子網掩碼,子網掩碼首 1 長度爲網絡前綴的長度。

一個 CIDR 地址塊中有很多地址,一個 CIDR 表示的網絡就可以表示原來的很多個網絡,並且在路由表中只需要一個路由就可以代替原來的多個路由,減少了路由表項的數量。把這種通過使用網絡前綴來減少路由表項的方式稱爲路由聚合,也稱爲 構成超網

在路由表中的項目由“網絡前綴”和“下一跳地址”組成,在查找時可能會得到不止一個匹配結果,應當採用最長前綴匹配來確定應該匹配哪一個。

IP 地址和 MAC 地址

網絡層實現主機之間的通信,而鏈路層實現具體每段鏈路之間的通信。因此在通信過程中,IP 數據報的源地址和目的地址始終不變,而 MAC 地址隨着鏈路的改變而改變。

地址解析協議 ARP

實現由 IP 地址得到 MAC 地址。

每個主機都有一個 ARP 高速緩存,裏面有本局域網上的各主機和路由器的 IP 地址到硬件地址的映射表。

如果主機 A 知道主機 B 的 IP 地址,但是 ARP 高速緩存中沒有該 IP 地址到 MAC 地址的映射,此時主機 A 通過廣播的方式發送 ARP 請求分組,主機 B 收到該請求後會發送 ARP 響應分組給主機 A 告知其 MAC 地址,隨後主機 A 向其高速緩存中寫入主機 B 的 IP 地址到硬件地址的映射。

路由器的結構

路由器從功能上可以劃分爲:路由選擇和分組轉發。

分組轉發結構由三個部分組成:交換結構、一組輸入端口和一組輸出端口。

路由器分組轉發流程

  1. 從數據報的首部提取目的主機的 IP 地址 D,得到目的網絡地址 N。
  2. 若 N 就是與此路由器直接相連的某個網絡地址,則進行直接交付;
  3. 若路由表中有目的地址爲 D 的特定主機路由,則把數據報傳送給表中所指明的下一跳路由器;
  4. 若路由表中有到達網絡 N 的路由,則把數據報傳送給路由表中所指明的下一跳路由器;
  5. 若路由表中有一個默認路由,則把數據報傳送給路由表中所指明的默認路由器;
  6. 報告轉發分組出錯。

路由選擇協議

互聯網使用的路由選擇協議都是自適應的,能隨着網絡通信量和拓撲結構的變化而自適應地進行調整。

互聯網可以劃分爲許多較小的自治系統 AS,一個 AS 可以使用一種和別的 AS 不同的路由選擇協議。

可以把路由選擇協議劃分爲兩大類:

  1. 內部網關協議 IGP(Interior Gateway Protocol):在 AS 內部使用,如 RIP 和 OSPF。
  2. 外部網關協議 EGP(External Gateway Protocol):在 AS 之間使用,如 BGP。

1. 內部網關協議 RIP

RIP 是一種分佈式的基於距離向量的路由選擇協議。距離是指跳數,直接相連的路由器跳數爲 1,跳數最多爲 15,超過 15 表示不可達。

RIP 按固定的時間間隔僅和相鄰路由器交換自己的路由表,經過若干次交換之後,所有路由器最終會知道到達本自治系統中任何一個網絡的最短距離和下一跳路由器地址。

距離向量算法:

  1. 對地址爲 X 的相鄰路由器發來的 RIP 報文,先修改報文中的所有項目,把下一跳字段中的地址改爲 X,並把所有的距離字段加 1;
  2. 對修改後的 RIP 報文中的每一個項目,進行以下步驟:
  • 若原來的路由表中沒有目的網絡 N,則把該項目添加到路由表中;
  • 否則:若下一跳路由器地址是 X,則把收到的項目替換原來路由表中的項目;否則:若收到的項目中的距離 d 小於路由表中的距離,則進行更新(例如原始路由表項爲 Net2, 5, P,新表項爲 Net2, 4, X,則更新);否則什麼也不做。
  1. 若 3 分鐘還沒有收到相鄰路由器的更新路由表,則把該相鄰路由器標爲不可達,即把距離置爲 16。

RIP 協議實現簡單,開銷小,但是 RIP 能使用的最大距離爲 15,限制了網絡的規模。並且當網絡出現故障時,要經過比較長的時間才能將此消息傳送到所有路由器。

2. 內部網關協議 OSPF

開放最短路徑優先 OSPF,是爲了克服 RIP 的缺點而開發出來的。

開放表示 OSPF 不受某一家廠商控制,而是公開發表的;最短路徑優先表示使用了 Dijkstra 提出的最短路徑算法 SPF。

OSPF 具有以下特點:

  • 向本自治系統中的所有路由器發送信息,這種方法是洪泛法。
  • 發送的信息就是與相鄰路由器的鏈路狀態,鏈路狀態包括與哪些路由器相連以及鏈路的度量,度量用費用、距離、時延、帶寬等來表示。
  • 只有當鏈路狀態發生變化時,路由器纔會發送信息。

所有路由器都具有全網的拓撲結構圖,並且是一致的。相比於 RIP,OSPF 的更新過程收斂的很快。

3. 外部網關協議 BGP

AS 之間的路由選擇很困難,主要是互聯網規模很大。並且各個 AS 內部使用不同的路由選擇協議,就無法準確定義路徑的度量。並且 AS 之間的路由選擇必須考慮有關的策略,比如有些 AS 不願意讓其它 AS 經過。

BGP 只能尋找一條比較好的路由,而不是最佳路由。它採用路徑向量路由選擇協議。

每個 AS 都必須配置 BGP 發言人,通過在兩個相鄰 BGP 發言人之間建立 TCP 連接來交換路由信息。

網際控制報文協議 ICMP

ICMP 是爲了更有效地轉發 IP 數據報和提高交付成功的機會。它封裝在 IP 數據報中,但是不屬於高層協議。

ICMP 報文分爲差錯報告報文和詢問報文。

分組網間探測 PING

PING 是 ICMP 的一個重要應用,主要用來測試兩臺主機之間的連通性。

Ping 發送的 IP 數據報封裝的是無法交付的 UDP 用戶數據報。

Traceroute

Traceroute 是 ICMP 的另一個應用,用來跟蹤一個分組從源點到終點的路徑。

  1. 源主機向目的主機發送一連串的 IP 數據報。第一個數據報 P1 的生存時間 TTL 設置爲 1,但 P1 到達路徑上的第一個路由器 R1 時,R1 收下它並把 TTL 減 1,此時 TTL 等於 0,R1 就把 P1 丟棄,並向源主機發送一個 ICMP 時間超過差錯報告報文;
  2. 源主機接着發送第二個數據報 P2,並把 TTL 設置爲 2。P2 先到達 R1,R1 收下後把 TTL 減 1 再轉發給 R2,R2 收下後也把 TTL 減 1,由於此時 TTL 等於 0,R2 就丟棄 P2,並向源主機發送一個 ICMP 時間超過差錯報文。
  3. 不斷執行這樣的步驟,直到最後一個數據報剛剛到達目的主機,主機不轉發數據報,也不把 TTL 值減 1。但是因爲數據報封裝的是無法交付的 UDP,因此目的主機要向源主機發送 ICMP 終點不可達差錯報告報文。
  4. 之後源主機知道了到達目的主機所經過的路由器 IP 地址以及到達每個路由器的往返時間。

虛擬專用網 VPN

由於 IP 地址的緊缺,一個機構能申請到的 IP 地址數往往遠小於本機構所擁有的主機數。並且一個機構並不需要把所有的主機接入到外部的互聯網中,機構內的計算機可以使用僅在本機構有效的 IP 地址(專用地址)。

有三個專用地址塊:

  1. 10.0.0.0 ~ 10.255.255.255
  2. 172.16.0.0 ~ 172.31.255.255
  3. 192.168.0.0 ~ 192.168.255.255

VPN 使用公用的互聯網作爲本機構各專用網之間的通信載體。專用指機構內的主機只與本機構內的其它主機通信;虛擬指“好像是”,而實際上並不是,它有經過公用的互聯網。

下圖中,場所 A 和 B 的通信經過互聯網,如果場所 A 的主機 X 要和另一個場所 B 的主機 Y 通信,IP 數據報的源地址是 10.1.0.1,目的地址是 10.2.0.3。數據報先發送到與互聯網相連的路由器 R1,R1 對內部數據進行加密,然後重新加上數據報的首部,源地址是路由器 R1 的全球地址 125.1.2.3,目的地址是路由器 R2 的全球地址 194.4.5.6。路由器 R2 收到數據報後將數據部分進行解密,恢復原來的數據報,此時目的地址爲 10.2.0.3,就交付給 Y。

網絡地址轉換 NAT

專用網內部的主機使用本地 IP 地址又想和互聯網上的主機通信時,可以使用 NAT 來將本地 IP 轉換爲全球 IP。

在以前,NAT 將本地 IP 和全球 IP 一一對應,這種方式下擁有 n 個全球 IP 地址的專用網內最多只可以同時有 n 臺主機接入互聯網。爲了更有效地利用全球 IP 地址,現在常用的 NAT 轉換表把運輸層的端口號也用上了,使得多個專用網內部的主機共用一個全球 IP 地址。使用端口號的 NAT 也叫做網絡地址與端口轉換 NAPT。

五、運輸層*

網絡層只把分組發送到目的主機,但是真正通信的並不是主機而是主機中的進程。運輸層提供了進程間的邏輯通信,運輸層向高層用戶屏蔽了下面網絡層的核心細節,使應用程序看見的好像在兩個運輸層實體之間有一條端到端的邏輯通信信道。

UDP 和 TCP 的特點

  • 用戶數據報協議 UDP(User Datagram Protocol)是無連接的,盡最大可能交付,沒有擁塞控制,面向報文(對於應用程序傳下來的報文不合並也不拆分,只是添加 UDP 首部)。

  • 傳輸控制協議 TCP(Transmission Control Protocol)是面向連接的,提供可靠交付,有流量控制,擁塞控制,提供全雙工通信,面向字節流(把應用層傳下來的報文看成字節流,把字節流組織成大小不等的數據塊)。

UDP 首部格式

首部字段只有 8 個字節,包括源端口、目的端口、長度、檢驗和。12 字節的僞首部是爲了計算檢驗和臨時添加的。

TCP 首部格式

  • 序號 :用於對字節流進行編號,例如序號爲 301,表示第一個字節的編號爲 301,如果攜帶的數據長度爲 100 字節,那麼下一個報文段的序號應爲 401。

  • 確認號 :期望收到的下一個報文段的序號。例如 B 正確收到 A 發送來的一個報文段,序號爲 501,攜帶的數據長度爲 200 字節,因此 B 期望下一個報文段的序號爲 701,B 發送給 A 的確認報文段中確認號就爲 701。

  • 數據偏移 :指的是數據部分距離報文段起始處的偏移量,實際上指的是首部的長度。

  • 確認 ACK :當 ACK=1 時確認號字段有效,否則無效。TCP 規定,在連接建立後所有傳送的報文段都必須把 ACK 置 1。

  • 同步 SYN :在連接建立時用來同步序號。當 SYN=1,ACK=0 時表示這是一個連接請求報文段。若對方同意建立連接,則響應報文中 SYN=1,ACK=1。

  • 終止 FIN :用來釋放一個連接,當 FIN=1 時,表示此報文段的發送方的數據已發送完畢,並要求釋放運輸連接。

  • 窗口 :窗口值作爲接收方讓發送方設置其發送窗口的依據。之所以要有這個限制,是因爲接收方的數據緩存空間是有限的。

TCP 的三次握手

假設 A 爲客戶端,B 爲服務器端。

  1. 首先 B 處於 LISTEN(監聽)狀態,等待客戶的連接請求。

  2. A 向 B 發送連接請求報文段,SYN=1,ACK=0,選擇一個初始的序號 x。

  3. B 收到連接請求報文段,如果同意建立連接,則向 A 發送連接確認報文段,SYN=1,ACK=1,確認號爲 x+1,同時也選擇一個初始的序號 y。

  4. A 收到 B 的連接確認報文段後,還要向 B 發出確認,確認號爲 y+1,序號爲 x+1。

  5. B 收到 A 的確認後,連接建立。

三次握手的原因

第三次握手是爲了防止失效的連接請求到達服務器,讓服務器錯誤打開連接。

失效的連接請求是指,客戶端發送的連接請求在網絡中滯留,客戶端因爲沒及時收到服務器端發送的連接確認,因此就重新發送了連接請求。滯留的連接請求並不是丟失,之後還是會到達服務器。如果不進行第三次握手,那麼服務器會誤認爲客戶端重新請求連接,然後打開了連接。但是並不是客戶端真正打開這個連接,因此客戶端不會給服務器發送數據,這個連接就白白浪費了。

TCP 的四次揮手

以下描述不討論序號和確認號,因爲序號和確認號的規則比較簡單。並且不討論 ACK,因爲 ACK 在連接建立之後都爲 1。

  1. A 發送連接釋放報文段,FIN=1。

  2. B 收到之後發出確認,此時 TCP 屬於半關閉狀態,B 能向 A 發送數據但是 A 不能向 B 發送數據。

  3. 當 B 要不再需要連接時,發送連接釋放請求報文段,FIN=1。

  4. A 收到後發出確認,進入 TIME-WAIT 狀態,等待 2MSL 時間後釋放連接。

  5. B 收到 A 的確認後釋放連接。

四次揮手的原因

客戶端發送了 FIN 連接釋放報文之後,服務器收到了這個報文,就進入了 CLOSE-WAIT 狀態。這個狀態是爲了讓服務器端發送還未傳送完畢的數據,傳送完畢之後,服務器會發送 FIN 連接釋放報文。

TIME_WAIT

客戶端接收到服務器端的 FIN 報文後進入此狀態,此時並不是直接進入 CLOSED 狀態,還需要等待一個時間計時器設置的時間 2MSL。這麼做有兩個理由:

  1. 確保最後一個確認報文段能夠到達。如果 B 沒收到 A 發送來的確認報文段,那麼就會重新發送連接釋放請求報文段,A 等待一段時間就是爲了處理這種情況的發生。

  2. 等待一段時間是爲了讓本連接持續時間內所產生的所有報文段都從網絡中消失,使得下一個新的連接不會出現舊的連接請求報文段。

TCP 滑動窗口

窗口是緩存的一部分,用來暫時存放字節流。發送方和接收方各有一個窗口,接收方通過 TCP 報文段中的窗口字段告訴發送方自己的窗口大小,發送方根據這個值和其它信息設置自己的窗口大小。

發送窗口內的字節都允許被髮送,接收窗口內的字節都允許被接收。如果發送窗口左部的字節已經發送並且收到了確認,那麼就將發送窗口向右滑動一定距離,直到左部第一個字節不是已發送並且已確認的狀態;接收窗口的滑動類似,接收窗口左部字節已經發送確認並交付主機,就向右滑動接收窗口。

接收窗口只會對窗口內最後一個按序到達的字節進行確認,例如接收窗口已經收到的字節爲 {31, 32, 34, 35},其中 {31, 32} 按序到達,而 {34, 35} 就不是,因此只對字節 32 進行確認。發送方得到一個字節的確認之後,就知道這個字節之前的所有字節都已經被接收。

TCP 可靠傳輸

TCP 使用超時重傳來實現可靠傳輸:如果一個已經發送的報文段在超時時間內沒有收到確認,那麼就重傳這個報文段。

一個報文段從發送再到接收到確認所經過的時間稱爲往返時間 RTT,加權平均往返時間 RTTs 計算如下:

超時時間 RTO 應該略大於 RTTs,TCP 使用的超時時間計算如下:

其中 RTTd 爲偏差。

TCP 流量控制

流量控制是爲了控制發送方發送速率,保證接收方來得及接收。

接收方發送的確認報文中的窗口字段可以用來控制發送方窗口大小,從而影響發送方的發送速率。將窗口字段設置爲 0,則發送方不能發送數據。

TCP 擁塞控制

如果網絡出現擁塞,分組將會丟失,此時發送方會繼續重傳,從而導致網絡擁塞程度更高。因此當出現擁塞時,應當控制發送方的速率。這一點和流量控制很像,但是出發點不同。流量控制是爲了讓接收方能來得及接受,而擁塞控制是爲了降低整個網絡的擁塞程度。

TCP 主要通過四種算法來進行擁塞控制:慢開始、擁塞避免、快重傳、快恢復。發送方需要維護一個叫做擁塞窗口(cwnd)的狀態變量。注意擁塞窗口與發送方窗口的區別,擁塞窗口只是一個狀態變量,實際決定發送方能發送多少數據的是發送方窗口。

爲了便於討論,做如下假設:

  1. 接收方有足夠大的接收緩存,因此不會發生流量控制;
  2. 雖然 TCP 的窗口基於字節,但是這裏設窗口的大小單位爲報文段。

1. 慢開始與擁塞避免

發送的最初執行慢開始,令 cwnd=1,發送方只能發送 1 個報文段;當收到確認後,將 cwnd 加倍,因此之後發送方能夠發送的報文段數量爲:2、4、8 ...

注意到慢開始每個輪次都將 cwnd 加倍,這樣會讓 cwnd 增長速度非常快,從而使得發送方發送的速度增長速度過快,網絡擁塞的可能也就更高。設置一個慢開始門限 ssthresh,當 cwnd >= ssthresh 時,進入擁塞避免,每個輪次只將 cwnd 加 1。

如果出現了超時,則令 ssthresh = cwnd/2,然後重新執行慢開始。

2. 快重傳與快恢復

在接收方,要求每次接收到報文段都應該發送對已收到有序報文段的確認,例如已經接收到 M1 和 M2,此時收到 M4,應當發送對 M2 的確認。

在發送方,如果收到三個重複確認,那麼可以確認下一個報文段丟失,例如收到三個 M2 ,則 M3 丟失。此時執行快重傳,立即重傳下一個報文段。

在這種情況下,只是丟失個別報文段,而不是網絡擁塞,因此執行快恢復,令 ssthresh = cwnd/2 ,cwnd = ssthresh,注意到此時直接進入擁塞避免。

六、應用層*

域名系統 DNS

把主機名解析爲 IP 地址。

被設計成分佈式系統。

1. 層次結構

一個域名由多個層次構成,從上層到下層分別爲頂級域名、二級域名、三級域名以及四級域名。所有域名可以畫成一顆域名樹。

域名服務器可以分爲以下四類:

  1. 根域名服務器:解析頂級域名;
  2. 頂級域名服務器:解析二級域名;
  3. 權限域名服務器:解析區內的域名;
  4. 本地域名服務器:也稱爲默認域名服務器。可以在其中配置高速緩存。

區和域的概念不同,可以在一個域中劃分多個區。圖 b 在域 abc.com 中劃分了兩個區:abc.com 和 y.abc.com

因此就需要兩個權限域名服務器:

2. 解析過程

主機向本地域名服務器解析的過程採用遞歸,而本地域名服務器向其它域名服務器解析可以使用遞歸和迭代兩種方式。

迭代的方式下,本地域名服務器向一個域名服務器解析請求解析之後,結果返回到本地域名服務器,然後本地域名服務器繼續向其它域名服務器請求解析;而遞歸的方式下,結果不是直接返回的,而是繼續向前請求解析,最後的結果纔會返回。

3. 使用的運輸層協議

DNS 在解析的過程使用 UDP 進行傳輸,因爲 UDP 最大隻支持 512 字節的數據,如果超過的話就需要使用 TCP 傳輸。

文件傳輸協議 FTP

FTP 在運輸層使用 TCP,並且需要建立兩個並行的 TCP 連接:控制連接和數據連接。控制連接在整個會話期間一直保持打開,而數據連接在數據傳送完畢之後就關閉。控制連接使用端口號 21,數據連接使用端口號 20。

遠程終端協議 TELNET

TELNET 用於登錄到遠程主機上,並且遠程主機上的輸出也會返回。

TELNET 可以適應許多計算機和操作系統的差異,例如不同操作系統系統的換行符定義。

電子郵件協議

一個電子郵件系統由三部分組成:用戶代理、郵件服務器以及郵件發送協議和讀取協議。其中發送協議常用 SMTP,讀取協議常用 POP3 和 IMAP。

1. POP3

POP3 的特點是隻要用戶從服務器上讀取了郵件,就把該郵件刪除。

2. IMAP

IMAP 協議中客戶端和服務器上的郵件保持同步,如果不去手動刪除郵件,那麼服務器上的郵件也不會被刪除。IMAP 這種做法可以讓用戶隨時隨地去訪問服務器上的郵件。IMAP 協議也支持創建自定義的文件夾。

3. SMTP

SMTP 只能發送 ASCII 碼,而互聯網郵件擴充 MIME 可以發送二進制文件。MIME 並沒有改動或者取代 SMTP,而是增加郵件主題的結構,定義了非 ASCII 碼的編碼規則。

動態主機配置協議 DHCP

DHCP 提供了即插即用的連網方式,用戶不再需要去手動配置 IP 地址等信息。

DHCP 配置的內容不僅是 IP 地址,還包括子網掩碼、默認路由器 IP 地址、域名服務器的 IP 地址。

工作方式如下:需要 IP 地址的主機廣播發送 DHCP 發現報文(將目的地址置爲全 1,即 255.255.255.255:67,源地址設置爲全 0,即 0.0.0.0:68),DHCP 服務器收到發現報文之後,則在 IP 地址池中取一個地址,發送 DHCP 提供報文給該主機。

點對點傳輸 P2P

把某個文件分發的所有對等集合稱爲一個洪流。文件的數據單元稱爲文件塊,它的大小是固定的。一個新的對等方加入某個洪流,一開始並沒有文件塊,但是能夠從其它對等方中逐漸地下載到一些文件塊,與此同時,它也爲別的對等方上傳一些文件塊。

每個洪流都有一個基礎設施,稱爲追蹤器。當一個對等方加入洪流時,必須向追蹤器登記,並週期性地通知追蹤器它仍在洪流中。可以在任何時間加入和退出某個洪流。

一個新的對等方加入洪流時,追蹤器會隨機從洪流中選擇若干個對等方,並讓新對等方與這些對等方建立連接,把這些對等方稱爲相鄰對等方。接收和發送文件塊都是在相鄰對等方中進行。

當一個對等方需要很多文件塊時,通過使用最稀有優先的策略來取得文件塊,也就是一個文件塊在相鄰對等方中副本最少,那麼就優先請求這個文件塊。

當很多對等方向同一個對等方請求文件塊時,該對等方優先選擇以最高速率向其發送文件塊的對等方。

P2P 是一個分佈式系統,任何時候都有對等方加入或者退出。使用分佈式散列表 DHT,可以查找洪流中的資源和 IP 地址映射。

Web 頁面請求過程

1. DHCP 配置主機信息

  1. 假設主機最開始沒有 IP 地址以及其它信息,那麼就需要先使用 DHCP 來獲取。

  2. 主機生成一個 DHCP 請求報文,並將這個報文放入具有目的端口 67 和源端口 68 的 UDP 報文段中。

  3. 該報文段則被放入在一個具有廣播 IP 目的地址(255.255.255.255) 和源 IP 地址(0.0.0.0)的 IP 數據報中。

  4. 該數據報則被放置在 MAC 幀中,該幀具有目的地址 FF:FF:FF:FF:FF:FF,將廣播到與交換機連接的所有設備。

  5. 連接在交換機的 DHCP 服務器收到廣播幀之後,不斷地向上分解得到 IP 數據報、UDP 報文段、DHCP 請求報文,之後生成 DHCP ACK 報文,該報文包含以下信息:IP 地址、DNS 服務器的 IP 地址、默認網關路由器的 IP 地址和子網掩碼。該報文被放入 UDP 報文段中,UDP 報文段有被放入 IP 數據報中,最後放入 MAC 幀中。

  6. 該幀的目的地址是請求主機的 MAC 地址,因爲交換機具有自學習能力,之前主機發送了廣播幀之後就記錄了 MAC 地址到其轉發接口的交換表項,因此現在交換機就可以直接知道應該向哪個接口發送該幀。

  7. 主機收到該幀後,不斷分解得到 DHCP 報文。之後就配置它的 IP 地址、子網掩碼和 DNS 服務器的 IP 地址,並在其 IP 轉發表中安裝默認網關。

2. ARP 解析 MAC 地址

  1. 主機通過瀏覽器生成一個 TCP 套接字,套接字向 HTTP 服務器發送 HTTP 請求。爲了生成該套接字,主機需要知道網站的域名對應的 IP 地址。

  2. 主機生成一個 DNS 查詢報文,該報文具有 53 號端口,因爲 DNS 服務器的端口號是 53。

  3. 該 DNS 查詢報文被放入目的地址爲 DNS 服務器 IP 地址的 IP 數據報中。

  4. 該 IP 數據報被放入一個以太網幀中,該幀將發送到網關路由器。

  5. DHCP 過程只知道網關路由器的 IP 地址,爲了獲取網關路由器的 MAC 地址,需要使用 ARP 協議。

  6. 主機生成一個包含目的地址爲網關路由器 IP 地址的 ARP 查詢報文,將該 ARP 查詢報文放入一個具有廣播目的地址(FF:FF:FF:FF:FF:FF)的以太網幀中,並向交換機發送該以太網幀,交換機將該幀轉發給所有的連接設備,包括網關路由器。

  7. 網關路由器接收到該幀後,不斷向上分解得到 ARP 報文,發現其中的 IP 地址與其接口的 IP 地址匹配,因此就發送一個 ARP 回答報文,包含了它的 MAC 地址,發回給主機。

3. DNS 解析域名

  1. 知道了網關路由器的 MAC 地址之後,就可以繼續 DNS 的解析過程了。

  2. 網關路由器接收到包含 DNS 查詢報文的以太網幀後,抽取出 IP 數據報,並根據轉發表決定該 IP 數據報應該轉發的路由器。

  3. 因爲路由器具有內部網關協議(RIP、OSPF)和外部網關協議(BGP)這兩種路由選擇協議,因此路由表中已經配置了網關路由器到達 DNS 服務器的路由表項。

  4. 到達 DNS 服務器之後,DNS 服務器抽取出 DNS 查詢報文,並在 DNS 數據庫中查找待解析的域名。

  5. 找到 DNS 記錄之後,發送 DNS 回答報文,將該回答報文放入 UDP 報文段中,然後放入 IP 數據報中,通過路由器反向轉發回網關路由器,並經過以太網交換機到達主機。

4. HTTP 請求頁面

  1. 有了 HTTP 服務器的 IP 地址之後,主機就能夠生成 TCP 套接字,該套接字將用於向 Web 服務器發送 HTTP GET 報文。

  2. 在生成 TCP 套接字之前,必須先與 HTTP 服務器進行三次握手來建立連接。生成一個具有目的端口 80 的 TCP SYN 報文段,並向 HTTP 服務器發送該報文段。

  3. HTTP 服務器收到該報文段之後,生成 TCP SYNACK 報文段,發回給主機。

  4. 連接建立之後,瀏覽器生成 HTTP GET 報文,並交付給 HTTP 服務器。

  5. HTTP 服務器從 TCP 套接字讀取 HTTP GET 報文,生成一個 HTTP 響應報文,將 Web 頁面內容放入報文主體中,發回給主機。

  6. 瀏覽器收到 HTTP 響應報文後,抽取出 Web 頁面內容,之後進行渲染,顯示 Web 頁面。

常用端口

應用應用層協議端口號運輸層協議備註
域名解析DNS53UDP/TCP長度超過 512 字節時使用 TCP
動態主機配置協議DHCP67/68UDP 
簡單網絡管理協議SNMP161/162UDP 
文件傳送協議FTP20/21TCP控制連接 21,數據連接 20
遠程終端協議TELNET23TCP 
超文本傳送協議HTTP80TCP 
簡單郵件傳送協議SMTP25TCP 
郵件讀取協議POP3110TCP 
網際報文存取協議IMAP143TCP 

參考資料

發佈了49 篇原創文章 · 獲贊 16 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章