1. 程式人生 > >計算機網路:傳輸層和網路層(3)

計算機網路:傳輸層和網路層(3)

傳輸層介紹

傳輸層是客戶程式和伺服器程式之間的聯絡人,是一個程序之間的連線。

傳輸層服務

首先了解一下傳輸層所提供的服務。

程序到程序通訊

TCP/IP協議簇的5層模型:
這裡寫圖片描述

其中,網路層負責計算機層次的通訊(主機到主機通訊),網路層協議只把報文傳遞到目的計算機。然而,報文仍然需要遞交給正確的程序,傳輸層協議即負責程序到程序的通訊。
這裡寫圖片描述

定址:埠號

在客戶-伺服器模式中,客戶程序和伺服器程序有相同的名字,例如,如果要從遠端機器上獲得日期和時間,我們需要在本地主機上執行Daytime客戶程序並在遠端機器上執行Daytime服務程序。
作業系統都支援多使用者和多程式執行,所以對通訊來說,我們必須定義本地主機、本地程序、遠端主機以及遠端程序。我們使用IP地址來定義本地主機和遠端主機,而使用埠號來定義程序。
在TCP/IP協議簇中,埠號是在0到65535之間的16位整數。
由於客戶程序的生命週期通常很短,所以一般使用臨時埠號

,推薦值為大於1023。伺服器程序必須使用一個熟知埠號
ICANN將埠分為3類:
熟知埠:埠號範圍:0~1023,由ICANN分配和控制;
註冊埠:埠號範圍:1024~49151,可在ICANN註冊以防重複;
動態埠:埠號範圍:49152~65535,即不受控制也不需要註冊,可以由任何程序使用,是臨時或私有埠號。

在TCP協議簇中的傳輸層協議需要IP地址和埠號,一個IP地址和一個埠號結合起來稱為套接字地址。套接字地址唯一定義了一個程序

封裝與解封裝

為了將報文從一個程序傳送到另一程序,傳輸層協議負責封裝與解封裝報文,傳輸層的有效載荷稱為分組

流量控制

從資料的角度,如果當傳送方生產資料項時,無需事先獲得消費者的請求就會發送它們,這種傳遞稱為

,如果生產者在消費者請求這些資料項之後進行傳送,稱為

差錯控制

網路層(IP)是不可靠的,如果應用層需要可靠性,我們需要使傳輸層變得可靠,要加入差錯控制服務。傳輸層的差錯控制負責以下幾個方面:
1. 發現並丟棄被破壞的分組。
2. 記錄丟失和丟棄的分組並重傳它們。
3. 識別重複分組並丟棄它們。
4. 緩衝失序分組直到丟失的分組到達。

為了實現以上功能,需要對分組新增序號

無連線和麵向連線服務

傳輸層不關心分組的物理路徑是否相同,傳輸層的無連線服務意味著分組之間的獨立,面向連線服務意味著依賴。

傳輸層協議

簡單協議

最簡單的無連線協議既沒有流量控制也沒有差錯控制。
傳送方的傳輸層從傳送方的應用層接收到報文,從中建立一個分組併發送它;接收方的傳輸層從網路層接收到這個分組,從分組中提取報文並傳遞到應用層。傳送方一個接一個傳送分組,甚至不考慮接收方能否承受。
UDP是這個最簡單協議的輕微改動版。

停止-等待協議

停止-等待協議使用流量和差錯控制。如果通道又粗又長,那麼使用停止-等待協議將非常低效,因為它沒有流水線。

回退N幀協議

為了提高傳輸效率(充滿管道),當傳送端等待接收端的確認訊號時,必須傳輸多個分組。第一個實現這個目標的協議是回退N幀協議。該協議的關鍵是在於傳送端可以傳送多個分組,而接收端只能緩衝一個分組。儲存被髮送分組的副本,直到確認到達。

事實上,停止-等待協議就是一種特殊的回退N幀協議,只不過傳送視窗大小為1。

選擇性重複協議

回退N幀協議簡化了接收方的程序,接收方只記錄一個變數,失序的分組被簡單地丟棄了。然而實際的下層網路層如果丟失了很多分組,那麼這個協議是低效的。因為每當一個分組丟失或被破壞,傳送方要重新發送所有未完成分組,即使有些失序分組已經被安全完整地接收了。
選擇性重複協議只是選擇性重發分組,即那些確實丟失的分組。

雙向協議:捎帶

使用捎帶協議來提高雙向協議的效率。當一個分組攜帶資料從A到B時,它也攜帶了確認反饋,這些資訊確認了來自B的分組已到達;反之也一樣。

因特網傳輸層協議

這裡只討論UDP和TCP協議。
UDP是不可靠的無連線傳輸層協議,由於在應用中簡單高效而被使用,在那些應用中差錯控制由應用層程序提供。
TCP是可靠的面向連線協議。
當然也有其他協議,如SCTP。

UDP:使用者資料報協議

UDP只負責提供程序到程序之間的通訊,此外沒有給IP服務增加任何東西。

使用者資料報

UDP的分組稱為使用者資料報,有8位元組的固定頭部,由4個欄位組成,每個欄位2位元組。
頭兩個欄位定義了源和目的埠號,第三個欄位定義了使用者資料報的總長,即頭部加資料的長度。16位可以定義的總長度範圍是0到65535。最後一個欄位可以攜帶可選校驗和。

UDP適用於這樣的應用:他要求簡單的請求-響應通訊,而無需考慮流量控制和差錯控制。對於需要傳送成塊資料的程序(如FTP),則通常不適用UDP。

傳輸控制協議:TCP

TCP顯式定義了連線建立、資料傳輸以及連線拆除階段來提供面向連線服務。

TCP提供的服務

流傳遞服務

與UDP不同,TCP是面向流的協議。TCP建立一種環境,在其中,兩個程序好像由一個假想的“管道”連線。

傳送和接收緩衝區

傳送和接收的速度可能不同,所以TCP需要用於儲存的緩衝區。實現緩衝區的一種方法是使用以一位元組為儲存單元的迴圈陣列。

全雙工通訊

TCP提供全雙工通訊,每個方向TCP都有傳送和接收緩衝區,它們能在雙向傳送和接收段。

TCP連線

TCP使用IP服務向接收方傳遞獨立的段,但它控制連線本身。如果一個段丟失了或損壞了,則重新發送它。與TCP不同,IP不知道這個重新發送的過程。
TCP需要3個過程:連線建立、資料傳輸和連線終止。

建立連線(三次握手)

假設客戶端程序想要和伺服器程序建立連線,首先,伺服器告訴它的TCP,他已準備好接收一個連線。這就稱為被動開啟
客戶程式發出請求進行主動開啟,於是正式開始三次握手。
這裡寫圖片描述

  1. 客戶傳送的第一個段是SYN段,其中只有SYN標誌被置位,佔用一個序號。它是一個控制段,但它不攜帶資料。
  2. 伺服器傳送第二個段,兩個標誌位SYN和ACK置位的段。
  3. 客戶傳送第三個段,使用ACK標誌和確認序號欄位來確認收到了第二個段。

連線終止

交換資料雙方的任一方都可關閉連線,對連線終止的實現有兩個方法:三次握手和帶有半關閉選項的第四次握手。

三次握手

  1. 當客戶程序接收到一個關閉命令後,客戶的TCP傳送第一個段:FIN段,其中的FIN位置位。
  2. 伺服器TCP傳送第二個段:FIN+ACK段。
  3. 客戶端傳送最後一段:ACK段。

半關閉

在TCP中,一端可以停止傳送資料後,再繼續接收資料。這就是所謂的半關閉

網路層介紹

網路層提供主機到主機的通訊。

網路層服務

分組

網路層的首要責任一定是分組:在源端將負載封裝進網路層分組並且在目的端從網路層分組中解封負載。

路由

網路層負責將分組從源端路由到目的端。一個物理網路(多個LAN和多個WAN)是網路和連線它們的路由器的組合,從源端到目的端有多個路由器。網路層負責尋找最佳的路由。這就需要一些特點策略來定義最好的路由。
網路層通過使用一些路由協議來幫助路由器建立當分組到達時的一致性表格。

轉發

轉發可以定義為當分組到達路由器的一個埠時,路由器所採用的行為。決策表又稱轉發表,有時稱為路由表。當路由器從它所連線的網路接收到一個分組時,它需要將分組轉發到另一個所連線的網路上。

分組交換

路由器是一個建立了輸入埠和輸出埠連線的交換機,就像將輸入連線到輸出讓電流流動的開關。
在網路層, 來自上層的報文被分割成可管理的分組,每個分組被從網路中傳送。目的端在將報文傳遞到上層之前,等待所有屬於同一個報文的分組到達。分組交換網路可以使用兩個不同的方法來路由分組:資料報方法和虛電路方法。

資料報方法:無連線服務

簡單來說,一份報文中的分組可能會也可能不會通過同一條通向目的端的路徑。

虛電路方法:面向連線服務

屬於同一報文的所有分組之間存在聯絡,在報文中的所有資料報被髮送之前,應該建立虛連線從而定義資料報的路徑。在建立連線之後,資料報可以沿著相同的路徑傳送。
分組不僅包含源和目的地址,而且包含流標號,它定義了分組應該經過的路徑。

網路層效能

網路的效能可以通過延遲、吞吐量、分組丟失來度量。

延遲

網路中的延遲可以分為四類:傳送延遲、傳播延遲、處理延遲和排隊延遲。
傳送延遲是指將分組的所有位都發送完需要的時間,分組越長,巖鬆延遲越長。
傳播延遲是指在傳播介質中一個位從A點到B點所消耗的時間,取決於介質的傳輸速度。
處理延遲是指路由器從它的輸入端接收分組、去除頭部、執行差錯檢測並將分組傳遞到輸出埠所需要的時間。
排隊延遲是指分組在輸入和輸出佇列中的等待時間。

吞吐量

網路中任意點的吞吐量被定義為一秒內通過這個點的位的數量,即資料傳送速率。吞吐量遵循資料鏈路中的木桶效應,即由最小吞吐量決定。

路由器的結構

元件

我們可以說路由器有4個元件:輸入埠、輸出埠、路由處理器以及交換結構。
這裡寫圖片描述

輸入埠發揮物理層和鏈路層功能,也包括緩衝佇列,用來在分組被髮送到交換網路層之前儲存它們。

輸出埠發揮和輸入埠相反的功能。

路由處理器發揮網路層功能,目的地址用來找到下一條地址以及輸出埠號,同時分組從這個輸出埠號傳送出去。這個行為稱為表格查詢

交換結構負責將分組從輸入佇列移動到輸出佇列。

網路層協議

當前版本的網路層協議可以被看做是一個主要協議和三個輔助協議。主要協議即因特網協議第四版(IPv4),負責網路層的分組、轉發和傳遞。
因特網控制報文協議第四版(ICMPv4)幫助IPv4處理一些網路層傳遞中可能發生的錯誤;因特網組管理協議(IGMP)用於幫助IPv4多播;在網路層地址對映到鏈路層地址時,地址解析協議(ARP)用來將網路和資料鏈路層聯合起來。
IPv4是一個不可靠且無連線的資料報協議——一個盡力而為的傳遞服務。IPv4是使用資料報的分組交換網的無連線網路。

IPv4資料報格式

IP使用的分組稱為資料報,它是可變長分組,由兩部分組成:頭部和資料。頭部長度可有20到60個位元組組成,包含有與路由選擇和傳輸相關的重要資訊。

版本號

這4位版本號(VER)欄位定義協議的版本,顯然是4。

頭部長度

這4位(HLEN)欄位以4位元組定義資料報頭部的總長度。

差分服務

總長

這個16位欄位定義了一個以位元組計算的IP資料報總長度,它幫助接收裝置知道什麼時候分組完全到達。

標識、標記以及分段偏移

生存時間

由於路由協議的某些故障,資料報可能在因特網中迴圈,一遍又一遍地訪問某些網路而沒有到達目的端。生存時間欄位(TTL)用於控制資料報訪問的最大路由器數,超過則丟棄。

協議

在TCP/IP中,分組的資料段稱為負載,它是另一個協議中的整個分組。例如,IP的資料報可以攜帶屬於任意傳輸層協議如UDP或TCP的分組。

頭部校驗和

源和目的地址

選項

負載

IPv4資料報安全

IP協議易受三個安全問題的影響:分組嗅探、分組修改、IP欺騙。

分組嗅探

入侵者可能劫持一個IP分組並製作一份拷貝。這類攻擊非常難以發現,但可以通過分組加密使得攻擊者的企圖無效。

分組修改

攻擊者攔截分組,改變其內容,並將新的分組傳送到接收方。可以使用資料完整性機制來發現這類攻擊。

IP欺騙

一個攻擊者可以偽裝成其他人並建立一個IP分組,它攜帶另一個電腦的源地址。

總的說來,現在可以使用稱為IPSec的協議避免以上攻擊。

IPv4地址

一個IPv4地址是32位地址,它唯一併通用地定義了一個連線在因特網上的主機或路由器。注意,IP地址是連線的地址,如果裝置移動到另一個網路,IP地址可能會改變
IP地址是唯一的,而如果某個裝置有兩個到因特網的連線,那麼它就有兩個IP地址,

地址空間

地址空間是一個系統能夠使用地址的總個數。IPv4使用32位地址,因此地址空間有2的32次方,大於40億。

標記法

IPv4有三種常用的標記法:二進位制標記法(基數2)、點分十進位制標記法(基數256)以及十六進位制標記法(基數16)。
例如:

二進位制:10000000  00001011  00000011  00011111
點分十進位制標記法:128.11.3.31
十六進位制標記法:800B031F
  • 1
  • 2
  • 3

地址層次結構

IPv4地址和郵箱地址一樣,是有層次結構的,但是它被分為了兩部分:字首和字尾。字首定義了網路,字尾定義了程式碼(裝置到因特網的連線)。
字首可以是固定長度的,也可以是變長的。定長的字首稱為分類定址,現在已被廢棄;變長的字首叫作無類定址。

分類定址

分類定址是定長字首的,但還是有3種長度的字首。(n=8,n=16以及n=24),整個地址空間分為五類(A,B,C,D,E類)。
但這種設計造成了地址耗盡,大多數地址被浪費了。
儘管分類定址被廢止了,但它的優勢是字首長度是固有的,不必提供額外資訊來提取字首和字尾。

無類定址

為了補償地址耗盡,類特權被從分配中消除。
不像分類定址,無類定址中字首長度是可變的,字首的長度可以在0到32之間變化。網路的大小與字首的長度成反比。一個小的字首意味著較大的網路;一個大的字首意味著較小的網路。

字首長度:斜槓標記法

如果給出地址,如何找出其字首的長度呢?由於地址中的字首長度不是固定的,我們將字首的長度n新增到地址中,用斜槓來分隔。如:

12.24.76.8/8
23.14.67.92/12
220.8.24.255/25
  • 1
  • 2
  • 3

其中的8、12、25就是字首長度。

從地址中抽取資訊

給定任一地址,通常想要知道:地址的數目、塊中首地址和末地址。由於字首長度n已給出,於是有:

  1. 塊中地址的數量通過N=2^(32-n)得出。
  2. 首地址:保持最左n位不變,並將最後側的(32-n)位全設為0。
  3. 末地址:保持最左n位不變,並將最後側的(32-n)位全設為1。

例如:

//一個無類地址為 167.199.170.82/27

//網路中地址數量是2^(32-27)=2^5=32個地址
  • 1
  • 2
  • 3
首地址:網路地址

首地址即網路地址,它用於將分組路由到目的端。網路地址就是網路的識別符號。

塊分配

塊地址的分配責任交給一個全球性機構:因特網名稱和編號分配組織(ICANN)。然而ICANN通常不向因特網個人使用者分配地址,它給ISP分配一大塊地址。

單播路由選擇

在網際網路中,如果資料報只發向一個目的端(一對一傳遞),我們使用單播路由選擇,如果資料報發向多個目的端,我們使用多播路由選擇,如果資料報應該傳遞到網際網路中的所有主機,我們使用廣播路由選擇

一般思想

在單播路由中,在轉發表的幫助下,分組被一跳一跳地從源端路由到目的端。源端和目的端不需要轉發表,只有將網際網路中網路連線到一起的路由器才需要轉發表。
從源端到目的端有很多條路由,分組必須決定採取哪條路由。
在下面的討論中,網際網路以帶權圖的形式表示。圖由結點和邊的集合表示。

最小代價路由

當使用帶權圖模型表示網際網路時,從源路由器到目的路由器的最佳路由就是找到兩者之間的最小代價。換言之,源路由器在所有可能的路由中找到代價最小的那條作為到目的路由器的路由。

最小代價樹

最小代價樹以源路由器為根,跨越了整個圖,訪問了所有其餘結點。

路由選擇演算法

距離向量路由選擇

距離向量(鄰接表)

最小代價路由樹是從根結點到所有目的結點的最小代價路徑的組合,這些路徑在圖上連線在一起形成樹。
距離向量的名稱定義了根節點,索引定義了目的結點,每個單元格的值定義了從根到目的結點的最小代價。
這裡寫圖片描述
和最小代價樹不同,距離向量沒有給出到目的結點的具體路徑,而是僅僅給出了到目的結點的最小代價。
問題在於網際網路中的每個結點最初如何建立相應的向量:結點從介面傳送一些問候報文並發現臨站的身份以及介面到臨站的距離,結點把獲得的距離插入相應的單元格,從而建立一個簡單的距離向量,並且將其他單元格的值設為無限。
下面,為了向外擴充改進向量,網際網路的結點需要通過交換資訊相互幫助:在每個結點建立它的向量後,它向臨站傳送向量的副本。在一個結點從臨站接收到一個距離向量後,它使用Bellman-Ford演算法來更新距離向量。

鏈路狀態路由選擇

鏈路狀態路由選擇使用鏈路狀態來定義鏈路(一條邊)的特徵,鏈路代表了網際網路中的網路。

鏈路狀態資料庫(鄰接矩陣)

每個結點都需要網路的完全圖,這意味著它需要直到每條鏈路的狀態,所有鏈路狀態的集合稱為鏈路狀態資料庫(LSDB),整個網際網路只有一個LSDB。LSDB可以使用二維陣列(矩陣)來表示,其中每個單元格的值定義了相應鏈路的代價。
問題在於如何建立這個LSDB,這可以通過稱為泛洪的過程完成。每個結點可以給所有臨站(與其直接相連的結點)傳送問候報文,來收集每個臨站的兩條資訊:節點的標識以及鏈路的代價。這兩個資訊的組合稱為LS分組。
根據LSDB建立最小代價樹的演算法是迪杰特斯拉演算法

路徑向量路由選擇

距離向量路由選擇和鏈路狀態路由選擇都是基於最小代價目標的,然而在一些例子這個目標不是優先考慮的事情,比如考慮到有些路由的安全性。
路徑向量路由選擇不基於最小代價路由,它採用的路由由源端控制決定。

單播路由選擇協議

這裡寫圖片描述

網際網路結構

有很多私人通訊公司運營的骨幹網,他們提供全球連線。骨幹網通過對等點連線在一起。
在較低層次有一些供應商網路使用骨幹網來進行全球連線。
最終是一些使用提供商網路所提供服務的使用者網路。
以上三種實體都可以稱為因特網服務提供商或ISP,但分別處於不同的層次。

分層路由選擇

當今的因特網中的路由選擇不能只使用一種協議,理由有兩點:擴充套件性問題和管理問題。
擴充套件性問題意味著轉發表會非常巨大,在其中尋找目的端會相當耗時。
管理問題意味著每個ISP需要能控制自己的子網和路由器。
分層路由意味著將每個ISP看做一個自治系統(AS)。每個AS可以執行滿足需要的路由協議,而全域性因特網只執行一個全域性協議來將所有AS連線到一起。

多播路由選擇

我們需要區分多播和多個單播。
多播從源地址開始時是單個分組,這個分組被路由器複製。任何兩個路由器之間只有分組的一份副本。
多個單播中,兩個路由器之間可能有多個副本在傳遞,如一個人給一組人傳送電子郵件。
多播比單薄效率更高,要求頻寬小。多播在訪問分散式資料庫、電話會議、遠端學習時得到應用。

下一代IP:IPv6

IPv6在增加了IPv4地址空間的同時重新設計了IP分組的格式並修改了一些輔助協議。以下給出了IPv6協議的主要變化:

  • 更大的地址空間。IPv6地址是128位長,而IPv4是32位的。
  • 更好的頭部地址。
  • 新的選項。
  • 允許擴充套件。
  • 支援資源分配。
  • 支援更多的安全性。

從IPv4到IPv6的過渡

有三種策略實現新舊協議的平緩過渡:雙協議棧、隧道以及頭部轉換。

雙協議棧

IETF推薦所有的主機在完全過渡到IPv6前,使用雙協議棧。換言之,一個站應該同時執行IPv4和IPv6,直到整個因特網使用IPv6。
當把分組傳送到目的端時,為了確定使用哪個版本,主機要向DNS進行查詢,如果DNS返回一個IPv4地址,那麼源主機就傳送一個IPv4分組;否則傳送一個IPv6分組。

隧道技術

當兩臺使用IPv6的計算機要進行通訊,但其分組要通過使用IPv4的區域時,就要使用隧道技術。當進入這種區域時,IPv6分組要封裝成IPv4分組,當分組離開該區域時,再去掉這個封裝。