計算機基礎-網路基礎

濤姐濤哥發表於2021-07-26

計算機基礎-網路基礎

 

     世事一場大夢,人生幾度秋涼。

 

簡介:計算機基礎-網路基礎

一、綜述

網路的網路

網路把主機連線起來,而互連網(internet)是把多種不同的網路連線起來,因此互連網是網路的網路。而網際網路(Internet)是全球範圍的互連網。

ISP

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

目前的網際網路是一種多層次 ISP 結構,ISP 根據覆蓋面積的大小分為第一層 ISP、區域 ISP 和接入 ISP。網際網路交換點 IXP 允許兩個 ISP 直接相連而不用經過第三個 ISP。

主機之間的通訊方式

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

 

  • 對等(P2P):不區分客戶和伺服器。

電路交換與分組交換

1. 電路交換

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

2. 分組交換

每個分組都有首部和尾部,包含了源地址和目的地址等控制資訊,在同一個傳輸線路上同時傳輸多個分組互相不會影響,因此在同一條傳輸線路上允許同時傳輸多個分組,也就是說分組交換不需要佔用傳輸線路。

在一個郵局通訊系統中,郵局收到一份郵件之後,先儲存下來,然後把相同目的地的郵件一起轉發到下一個目的地,這個過程就是儲存轉發過程,分組交換也使用了儲存轉發過程。

時延

總時延 = 排隊時延 + 處理時延 + 傳輸時延 + 傳播時延

1. 排隊時延

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

2. 處理時延

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

3. 傳輸時延

主機或路由器傳輸資料幀所需要的時間。

 

其中 l 表示資料幀的長度,v 表示傳輸速率。

4. 傳播時延

電磁波在通道中傳播所需要花費的時間,電磁波傳播的速度接近光速。

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

計算機網路體系結構

1. 五層協議

  • 應用層 :為特定應用程式提供資料傳輸服務,例如 HTTP、DNS 等協議。資料單位為報文。

  • 傳輸層 :為程式提供通用資料傳輸服務。由於應用層協議很多,定義通用的傳輸層協議就可以支援不斷增多的應用層協議。運輸層包括兩種協議:傳輸控制協議 TCP,提供面向連線、可靠的資料傳輸服務,資料單位為報文段;使用者資料包協議 UDP,提供無連線、盡最大努力的資料傳輸服務,資料單位為使用者資料包。TCP 主要提供完整性服務,UDP 主要提供及時性服務。

  • 網路層 :為主機提供資料傳輸服務。而傳輸層協議是為主機中的程式提供資料傳輸服務。網路層把傳輸層傳遞下來的報文段或者使用者資料包封裝成分組。

  • 資料鏈路層 :網路層針對的還是主機之間的資料傳輸服務,而主機之間可以有很多鏈路,鏈路層協議就是為同一鏈路的主機提供資料傳輸服務。資料鏈路層把網路層傳下來的分組封裝成幀。

  • 物理層 :考慮的是怎樣在傳輸媒體上傳輸資料位元流,而不是指具體的傳輸媒體。物理層的作用是儘可能遮蔽傳輸媒體和通訊手段的差異,使資料鏈路層感覺不到這些差異。

2. OSI

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

  • 表示層 :資料壓縮、加密以及資料描述,這使得應用程式不必關心在各臺主機中資料內部格式不同的問題。

  • 會話層 :建立及管理會話。

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

3. TCP/IP

它只有四層,相當於五層協議中資料鏈路層和物理層合併為網路介面層。

TCP/IP 體系結構不嚴格遵循 OSI 分層概念,應用層可能會直接使用 IP 層或者網路介面層。

4. 資料在各層之間的傳遞過程

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

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

二、物理層

通訊方式

根據資訊在傳輸線上的傳送方向,分為以下三種通訊方式:

  • 單工通訊:單向傳輸
  • 半雙工通訊:雙向交替傳輸
  • 全雙工通訊:雙向同時傳輸

帶通調製

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

三、鏈路層

基本問題

1. 封裝成幀

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

2. 透明傳輸

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

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

3. 差錯檢測

目前資料鏈路層廣泛使用了迴圈冗餘檢驗(CRC)來檢查位元差錯。

通道分類

1. 廣播通道

一對多通訊,一個節點傳送的資料能夠被廣播通道上所有的節點接收到。

所有的節點都在同一個廣播通道上傳送資料,因此需要有專門的控制方法進行協調,避免發生衝突(衝突也叫碰撞)。

主要有兩種控制方法進行協調,一個是使用通道複用技術,一是使用 CSMA/CD 協議。

2. 點對點通道

一對一通訊。

因為不會發生碰撞,因此也比較簡單,使用 PPP 協議進行控制。

通道複用技術

1. 分頻多工

分頻多工的所有主機在相同的時間佔用不同的頻率頻寬資源。

2. 分時多工

分時多工的所有主機在不同的時間佔用相同的頻率頻寬資源。

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

3. 統計分時多工

是對分時多工的一種改進,不固定每個使用者在分時多工幀中的位置,只要有資料就集中起來組成統計分時多工幀然後傳送。

4. 波長分波多工

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

5. 碼分複用

為每個使用者分配 m bit 的碼片,並且所有的碼片正交,對於任意兩個碼片 計算機基礎-網路基礎 和 計算機基礎-網路基礎 有

為了討論方便,取 m=8,設碼片 計算機基礎-網路基礎 為 00011011。在擁有該碼片的使用者傳送位元 1 時就傳送該碼片,傳送位元 0 時就傳送該碼片的反碼 11100100。

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

 

其中 計算機基礎-網路基礎 為 計算機基礎-網路基礎 的反碼。

利用上面的式子我們知道,當接收端使用碼片 計算機基礎-網路基礎 對接收到的資料進行內積運算時,結果為 0 的是其它使用者傳送的資料,結果為 1 的是使用者傳送的位元 1,結果為 -1 的是使用者傳送的位元 0。

碼分複用需要傳送的資料量為原先的 m 倍。

CSMA/CD 協議

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

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

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

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

 

PPP 協議

網際網路使用者通常需要連線到某個 ISP 之後才能接入到網際網路,PPP 協議是使用者計算機和 ISP 進行通訊時所使用的資料鏈路層協議。

PPP 的幀格式:

  • F 欄位為幀的定界符
  • A 和 C 欄位暫時沒有意義
  • FCS 欄位是使用 CRC 的檢驗序列
  • 資訊部分的長度不超過 1500

MAC 地址

MAC 地址是鏈路層地址,長度為 6 位元組(48 位),用於唯一標識網路介面卡(網路卡)。

一臺主機擁有多少個網路介面卡就有多少個 MAC 地址。例如膝上型電腦普遍存在無線網路介面卡和有線網路介面卡,因此就有兩個 MAC 地址。

區域網

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

主要有乙太網、令牌環網、FDDI 和 ATM 等區域網技術,目前乙太網佔領著有線區域網市場。

可以按照網路拓撲結構對區域網進行分類:

 乙太網

乙太網是一種星型拓撲結構區域網。

早期使用集線器進行連線,集線器是一種物理層裝置, 作用於位元而不是幀,當一個位元到達介面時,集線器重新生成這個位元,並將其能量強度放大,從而擴大網路的傳輸距離,之後再將這個位元傳送到其它所有介面。如果集線器同時收到兩個不同介面的幀,那麼就發生了碰撞。

目前乙太網使用交換機替代了集線器,交換機是一種鏈路層裝置,它不會發生碰撞,能根據 MAC 地址進行儲存轉發。

乙太網幀格式:

  • 型別 :標記上層使用的協議;
  • 資料 :長度在 46-1500 之間,如果太小則需要填充;
  • FCS :幀檢驗序列,使用的是 CRC 檢驗方法;

交換機

交換機具有自學習能力,學習的是交換表的內容,交換表中儲存著 MAC 地址到介面的對映。

正是由於這種自學習能力,因此交換機是一種即插即用裝置,不需要網路管理員手動配置交換表內容。

下圖中,交換機有 4 個介面,主機 A 向主機 B 傳送資料幀時,交換機把主機 A 到介面 1 的對映寫入交換表中。為了傳送資料幀到 B,先查交換表,此時沒有主機 B 的表項,那麼主機 A 就傳送廣播幀,主機 C 和主機 D 會丟棄該幀,主機 B 回應該幀向主機 A 傳送資料包時,交換機查詢交換表得到主機 A 對映的介面為 1,就傳送資料幀到介面 1,同時交換機新增主機 B 到介面 2 的對映。

虛擬區域網

虛擬區域網可以建立與物理位置無關的邏輯組,只有在同一個虛擬區域網中的成員才會收到鏈路層廣播資訊。

例如下圖中 (A1, A2, A3, A4) 屬於一個虛擬區域網,A1 傳送的廣播會被 A2、A3、A4 收到,而其它站點收不到。

使用 VLAN 幹線連線來建立虛擬區域網,每臺交換機上的一個特殊介面被設定為幹線介面,以互連 VLAN 交換機。IEEE 定義了一種擴充套件的乙太網幀格式 802.1Q,它在標準乙太網幀上加進了 4 位元組首部 VLAN 標籤,用於表示該幀屬於哪一個虛擬區域網。

四、網路層

簡介

因為網路層是整個網際網路的核心,因此應當讓網路層儘可能簡單。網路層向上只提供簡單靈活的、無連線的、盡最大努力互動的資料包服務。

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

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

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

IP 資料包格式

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

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

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

  • 總長度 : 包括首部長度和資料部分長度。

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

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

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

  • 標識 : 在資料包長度過長從而發生分片的情況下,相同資料包的不同分片具有相同的識別符號。

  • 片偏移 : 和識別符號一起,用於發生分片的情況。片偏移的單位為 8 位元組。

IP 地址編址方式

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

  • 分類
  • 子網劃分
  • 無分類

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 表示的網路就可以表示原來的很多個網路,並且在路由表中只需要一個路由就可以代替原來的多個路由,減少了路由表項的數量。把這種通過使用網路字首來減少路由表項的方式稱為路由聚合,也稱為 構成超網 

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

地址解析協議 ARP

網路層實現主機之間的通訊,而鏈路層實現具體每段鏈路之間的通訊。因此在通訊過程中,IP 資料包的源地址和目的地址始終不變,而 MAC 地址隨著鏈路的改變而改變。

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

每個主機都有一個 ARP 快取記憶體,裡面有本區域網上的各主機和路由器的 IP 地址到 MAC 地址的對映表。

如果主機 A 知道主機 B 的 IP 地址,但是 ARP 快取記憶體中沒有該 IP 地址到 MAC 地址的對映,此時主機 A 通過廣播的方式傳送 ARP 請求分組,主機 B 收到該請求後會傳送 ARP 響應分組給主機 A 告知其 MAC 地址,隨後主機 A 向其快取記憶體中寫入主機 B 的 IP 地址到 MAC 地址的對映。

網際控制報文協議 ICMP

ICMP 是為了更有效地轉發 IP 資料包和提高交付成功的機率。它封裝在 IP 資料包中,但是不屬於高層協議。

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

1. Ping

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

Ping 的原理是通過向目的主機傳送 ICMP Echo 請求報文,目的主機收到之後會傳送 Echo 回答報文。Ping 會根據時間和成功響應的次數估算出資料包往返時間以及丟包率。

2. Traceroute

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

Traceroute 傳送的 IP 資料包封裝的是無法交付的 UDP 使用者資料包,並由目的主機傳送終點不可達差錯報告報文。

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

虛擬專用網 VPN

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

有三個專用地址塊:

  • 10.0.0.0 ~ 10.255.255.255
  • 172.16.0.0 ~ 172.31.255.255
  • 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。

路由器的結構

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

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

路由器分組轉發流程

  • 從資料包的首部提取目的主機的 IP 地址 D,得到目的網路地址 N。
  • 若 N 就是與此路由器直接相連的某個網路地址,則進行直接交付;
  • 若路由表中有目的地址為 D 的特定主機路由,則把資料包傳送給表中所指明的下一跳路由器;
  • 若路由表中有到達網路 N 的路由,則把資料包傳送給路由表中所指明的下一跳路由器;
  • 若路由表中有一個預設路由,則把資料包傳送給路由表中所指明的預設路由器;
  • 報告轉發分組出錯。

路由選擇協議

路由選擇協議都是自適應的,能隨著網路通訊量和拓撲結構的變化而自適應地進行調整。

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

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

  • 自治系統內部的路由選擇:RIP 和 OSPF
  • 自治系統間的路由選擇:BGP

1. 內部閘道器協議 RIP

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

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

距離向量演算法:

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

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

2. 內部閘道器協議 OSPF

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

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

OSPF 具有以下特點:

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

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

3. 外部閘道器協議 BGP

BGP(Border Gateway Protocol,邊界閘道器協議)

AS 之間的路由選擇很困難,主要是由於:

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

BGP 只能尋找一條比較好的路由,而不是最佳路由。

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

五、傳輸層

網路層只把分組傳送到目的主機,但是真正通訊的並不是主機而是主機中的程式。傳輸層提供了程式間的邏輯通訊,傳輸層向高層使用者遮蔽了下面網路層的核心細節,使應用程式看起來像是在兩個傳輸層實體之間有一條端到端的邏輯通訊通道。

UDP 和 TCP 的特點

  • 使用者資料包協議 UDP(User Datagram Protocol)是無連線的,盡最大可能交付,沒有擁塞控制,面向報文(對於應用程式傳下來的報文不合並也不拆分,只是新增 UDP 首部),支援一對一、一對多、多對一和多對多的互動通訊。

  • 傳輸控制協議 TCP(Transmission Control Protocol)是面向連線的,提供可靠交付,有流量控制,擁塞控制,提供全雙工通訊,面向位元組流(把應用層傳下來的報文看成位元組流,把位元組流組織成大小不等的資料塊),每一條 TCP 連線只能是點對點的(一對一)。

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 為伺服器端。

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

  • A 向 B 傳送連線請求報文,SYN=1,ACK=0,選擇一個初始的序號 x。

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

  • A 收到 B 的連線確認報文後,還要向 B 發出確認,確認號為 y+1,序號為 x+1。

  • B 收到 A 的確認後,連線建立。

三次握手的原因

第三次握手是為了防止失效的連線請求到達伺服器,讓伺服器錯誤開啟連線。

客戶端傳送的連線請求如果在網路中滯留,那麼就會隔很長一段時間才能收到伺服器端發回的連線確認。客戶端等待一個超時重傳時間之後,就會重新請求連線。但是這個滯留的連線請求最後還是會到達伺服器,如果不進行三次握手,那麼伺服器就會開啟兩個連線。如果有第三次握手,客戶端會忽略伺服器之後傳送的對滯留連線請求的連線確認,不進行第三次握手,因此就不會再次開啟連線。

TCP 的四次揮手

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

  • A 傳送連線釋放報文,FIN=1。

  • B 收到之後發出確認,此時 TCP 屬於半關閉狀態,B 能向 A 傳送資料但是 A 不能向 B 傳送資料。

  • 當 B 不再需要連線時,傳送連線釋放報文,FIN=1。

  • A 收到後發出確認,進入 TIME-WAIT 狀態,等待 2 MSL(Maximum Segment Lifetime 最大報文存活時間,兩倍MSL 約四分鐘;RFC 793中規定MSL 為2分鐘,實際應用中常用的是30秒,1分鐘和2分鐘等)後釋放連線。

  • B 收到 A 的確認後釋放連線。

四次揮手的原因

客戶端傳送了 FIN 連線釋放報文之後,伺服器收到了這個報文,就進入了 CLOSE-WAIT 狀態。這個狀態是為了讓伺服器端傳送還未傳送完畢的資料,傳送完畢之後,伺服器會傳送 FIN 連線釋放報文。

TIME_WAIT

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

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

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

TCP 可靠傳輸

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

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

其中,0 ≤ a < 1,RTTs 隨著 a 的增加更容易受到 RTT 的影響。

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

 

其中 RTTd 為偏差的加權平均值。

TCP 滑動視窗

視窗是快取的一部分,用來暫時存放位元組流。傳送方和接收方各有一個視窗,接收方通過 TCP 報文段中的視窗欄位告訴傳送方自己的視窗大小,傳送方根據這個值和其它資訊設定自己的視窗大小。

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

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

TCP 流量控制

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

接收方傳送的確認報文中的視窗欄位可以用來控制傳送方視窗大小,從而影響傳送方的傳送速率。將視窗欄位設定為 0,則傳送方不能傳送資料。

TCP 擁塞控制

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

TCP 主要通過四個演算法來進行擁塞控制:慢開始、擁塞避免、快重傳、快恢復。

傳送方需要維護一個叫做擁塞視窗(cwnd)的狀態變數,注意擁塞視窗與傳送方視窗的區別:擁塞視窗只是一個狀態變數,實際決定傳送方能傳送多少資料的是傳送方視窗。

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

  • 接收方有足夠大的接收快取,因此不會發生流量控制;
  • 雖然 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 丟失,立即重傳 M3

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

慢開始和快恢復的快慢指的是 cwnd 的設定值,而不是 cwnd 的增長速率。慢開始 cwnd 設定為 1,而快恢復 cwnd 設定為 ssthresh。

六、應用層 

域名系統

DNS 是一個分散式資料庫,提供了主機名和 IP 地址之間相互轉換的服務。這裡的分散式資料庫是指,每個站點只保留它自己的那部分資料。

域名具有層次結構,從上到下依次為:根域名、頂級域名、二級域名。

DNS 可以使用 UDP 或者 TCP 進行傳輸,使用的埠號都為 53。大多數情況下 DNS 使用 UDP 進行傳輸,這就要求域名解析器和域名伺服器都必須自己處理超時和重傳從而保證可靠性。在兩種情況下會使用 TCP 進行傳輸:

  • 如果返回的響應超過的 512 位元組(UDP 最大隻支援 512 位元組的資料)。
  • 區域傳送(區域傳送是主域名伺服器向輔助域名伺服器傳送變化的那部分資料)。

檔案傳送協議

FTP 使用 TCP 進行連線,它需要兩個連線來傳送一個檔案:

  • 控制連線:伺服器開啟埠號 21 等待客戶端的連線,客戶端主動建立連線後,使用這個連線將客戶端的命令傳送給伺服器,並傳回伺服器的應答。
  • 資料連線:用來傳送一個檔案資料。

根據資料連線是否是伺服器端主動建立,FTP 有主動和被動兩種模式:

  • 主動模式:伺服器端主動建立資料連線,其中伺服器端的埠號為 20,客戶端的埠號隨機,但是必須大於 1024,因為 0~1023 是熟知埠號。

 

  • 被動模式:客戶端主動建立資料連線,其中客戶端的埠號由客戶端自己指定,伺服器端的埠號隨機。

主動模式要求客戶端開放埠號給伺服器端,需要去配置客戶端的防火牆。被動模式只需要伺服器端開放埠號即可,無需客戶端配置防火牆。但是被動模式會導致伺服器端的安全性減弱,因為開放了過多的埠號。

動態主機配置協議

DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的連網方式,使用者不再需要手動配置 IP 地址等資訊。

DHCP 配置的內容不僅是 IP 地址,還包括子網掩碼、閘道器 IP 地址。

DHCP 工作過程如下:

  1. 客戶端傳送 Discover 報文,該報文的目的地址為 255.255.255.255:67,源地址為 0.0.0.0:68,被放入 UDP 中,該報文被廣播到同一個子網的所有主機上。如果客戶端和 DHCP 伺服器不在同一個子網,就需要使用中繼代理。
  2. DHCP 伺服器收到 Discover 報文之後,傳送 Offer 報文給客戶端,該報文包含了客戶端所需要的資訊。因為客戶端可能收到多個 DHCP 伺服器提供的資訊,因此客戶端需要進行選擇。
  3. 如果客戶端選擇了某個 DHCP 伺服器提供的資訊,那麼就傳送 Request 報文給該 DHCP 伺服器。
  4. DHCP 伺服器傳送 Ack 報文,表示客戶端此時可以使用提供給它的資訊。

遠端登入協議

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

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

電子郵件協議

一個電子郵件系統由三部分組成:使用者代理、郵件伺服器以及郵件協議。

郵件協議包含傳送協議和讀取協議,傳送協議常用 SMTP,讀取協議常用 POP3 和 IMAP。

1. SMTP

SMTP 只能傳送 ASCII 碼,而網際網路郵件擴充 MIME 可以傳送二進位制檔案。MIME 並沒有改動或者取代 SMTP,而是增加郵件主體的結構,定義了非 ASCII 碼的編碼規則。

2. POP3

POP3 的特點是隻要使用者從伺服器上讀取了郵件,就把該郵件刪除。但最新版本的 POP3 可以不刪除郵件。

3. IMAP

IMAP 協議中客戶端和伺服器上的郵件保持同步,如果不手動刪除郵件,那麼伺服器上的郵件也不會被刪除。IMAP 這種做法可以讓使用者隨時隨地去訪問伺服器上的郵件。

常用埠

應用應用層協議埠號傳輸層協議備註
域名解析 DNS 53 UDP/TCP 長度超過 512 位元組時使用 TCP
動態主機配置協議 DHCP 67/68 UDP  
簡單網路管理協議 SNMP 161/162 UDP  
檔案傳送協議 FTP 20/21 TCP 控制連線 21,資料連線 20
遠端終端協議 TELNET 23 TCP  
超文字傳送協議 HTTP 80 TCP  
簡單郵件傳送協議 SMTP 25 TCP  
郵件讀取協議 POP3 110 TCP  
網際報文存取協議 IMAP 143 TCP  

Web 頁面請求過程

1. DHCP 配置主機資訊

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

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

  • 該報文段則被放入在一個具有廣播 IP 目的地址(255.255.255.255) 和源 IP 地址(0.0.0.0)的 IP 資料包中。

  • 該資料包則被放置在 MAC 幀中,該幀具有目的地址 FF:<zero-width space>FF:<zero-width space>FF:<zero-width space>FF:<zero-width space>FF:FF,將廣播到與交換機連線的所有裝置。

  • 連線在交換機的 DHCP 伺服器收到廣播幀之後,不斷地向上分解得到 IP 資料包、UDP 報文段、DHCP 請求報文,之後生成 DHCP ACK 報文,該報文包含以下資訊:IP 地址、DNS 伺服器的 IP 地址、預設閘道器路由器的 IP 地址和子網掩碼。該報文被放入 UDP 報文段中,UDP 報文段有被放入 IP 資料包中,最後放入 MAC 幀中。

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

  • 主機收到該幀後,不斷分解得到 DHCP 報文。之後就配置它的 IP 地址、子網掩碼和 DNS 伺服器的 IP 地址,並在其 IP 轉發表中安裝預設閘道器。

2. ARP 解析 MAC 地址

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

  • 主機生成一個 DNS 查詢報文,該報文具有 53 號埠,因為 DNS 伺服器的埠號是 53。

  • 該 DNS 查詢報文被放入目的地址為 DNS 伺服器 IP 地址的 IP 資料包中。

  • 該 IP 資料包被放入一個乙太網幀中,該幀將傳送到閘道器路由器。

  • DHCP 過程只知道閘道器路由器的 IP 地址,為了獲取閘道器路由器的 MAC 地址,需要使用 ARP 協議。

  • 主機生成一個包含目的地址為閘道器路由器 IP 地址的 ARP 查詢報文,將該 ARP 查詢報文放入一個具有廣播目的地址(FF:<zero-width space>FF:<zero-width space>FF:<zero-width space>FF:<zero-width space>FF:FF)的乙太網幀中,並向交換機傳送該乙太網幀,交換機將該幀轉發給所有的連線裝置,包括閘道器路由器。

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

3. DNS 解析域名

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

  • 閘道器路由器接收到包含 DNS 查詢報文的乙太網幀後,抽取出 IP 資料包,並根據轉發表決定該 IP 資料包應該轉發的路由器。

  • 因為路由器具有內部閘道器協議(RIP、OSPF)和外部閘道器協議(BGP)這兩種路由選擇協議,因此路由表中已經配置了閘道器路由器到達 DNS 伺服器的路由表項。

  • 到達 DNS 伺服器之後,DNS 伺服器抽取出 DNS 查詢報文,並在 DNS 資料庫中查詢待解析的域名。

  • 找到 DNS 記錄之後,傳送 DNS 回答報文,將該回答報文放入 UDP 報文段中,然後放入 IP 資料包中,通過路由器反向轉發回閘道器路由器,並經過乙太網交換機到達主機。

4. HTTP 請求頁面

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

  • 在生成 TCP 套接字之前,必須先與 HTTP 伺服器進行三次握手來建立連線。生成一個具有目的埠 80 的 TCP SYN 報文段,並向 HTTP 伺服器傳送該報文段。

  • HTTP 伺服器收到該報文段之後,生成 TCP SYN ACK 報文段,發回給主機。

  • 連線建立之後,瀏覽器生成 HTTP GET 報文,並交付給 HTTP 伺服器。

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

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

 

 

 

 

 

世事一場大夢

人生幾度秋涼

 

 

 

 

 

相關文章