1. 程式人生 > >計算機網路的核心概念

計算機網路的核心概念

這是《計算機網路》系列文章的第二篇文章

我們第一篇文章講述了計算機網路的基本概念,網際網路的基本名詞,什麼是協議以及幾種接入網以及網路傳輸的物理媒體,那麼本篇文章我們來探討一下網路核心、交換網路、時延、丟包、吞吐量以及計算機網路的協議層次和網路攻擊。

網路核心

網路的核心是由因特網端系統和鏈路構成的網狀網路,下面這幅圖正確的表達了這一點

那麼在不同的 ISP 和本地以及家庭網路是如何交換資訊的呢?資訊交換主要分為兩種方式 分組交換電路互動,下面我們就來一起認識一下。

分組交換

在網際網路應用中,每個終端系統都可以彼此交換資訊,這種資訊也被稱為 報文(Message),報文是一個集大成者,它可以包括你想要的任何東西,比如文字、資料、電子郵件、音訊、視訊等。為了從源目的地向端系統傳送報文,需要把長報文切分為一個個小的資料塊,這種資料塊稱為分組(Packets)

,也就是說,報文是由一個個小塊的分組組成。在端系統和目的地之間,每個分組都要經過通訊鏈路(communication links)分組交換機(switch packets) ,通訊鏈路可以分為雙絞銅線、同軸電纜和光纖。分組交換機又分為路由器和鏈路層交換機。(這塊如果你不明白的話,還需要翻看我上一篇文章 你說你懂網際網路,那這些你知道麼?)分組要在端系統之間互動需要經過一定的時間,如果兩個端系統之間需要互動的分組為 L 位元,鏈路的傳輸速率問 R 位元/秒,那麼傳輸時間就是 L / R秒。

現在我們來模擬一下這個分組交換的過程,一個端系統需要經過交換機給其他端系統傳送分組,當分組到達交換機時,交換機就能夠直接進行轉發嗎?不是的,交換機可沒有這麼無私,你想讓我幫你轉發分組?好,首先你需要先把整個分組資料都給我,我再考慮給你傳送的問題,這就是儲存轉發傳輸

儲存轉發傳輸

儲存轉發傳輸指的就是交換機再轉發分組的第一個位元前,必須要接受到整個分組,下面是一個儲存轉發傳輸的示意圖,可以從圖中窺出端倪

由圖可以看出,分組 1、2、3 在以 R bps 的速率向交換器進行分組傳輸,並且交換機已經收到了分組1 傳送的位元,此時交換機會直接進行轉發嗎?答案是不會的,交換機會把你的分組先快取在本地。這就和考試作弊一樣,一個學霸要經過學渣 A 給學渣 B 傳答案,學渣 A 說,學渣 A 在收到答案後,它可能直接把卷子傳過去嗎?學渣A 說,等我先把答案抄完(儲存功能)後再把卷子給你。

排隊時延和分組丟失

什麼?你認為交換機只能和一條通訊鏈路進行相連?那你就大錯特錯了,這可是交換機啊,怎麼可能只有一條通訊鏈路呢?

所以我相信你一定能想到這個問題,多個端系統同時給交換器傳送分組,一定存在順序到達排隊的問題。事實上,對於每條相連的鏈路,該分組交換機會有一個輸出快取(output buffer)輸出佇列(output queue) 與之對應,它用於儲存路由器準備發往每條鏈路的分組。如果到達的分組發現路由器正在接收其他分組,那麼新到達的分組就會在輸出佇列中進行排隊,這種等待分組轉發所耗費的時間也被稱為 排隊時延,上面提到分組交換器在轉發分組時會進行等待,這種等待被稱為 儲存轉發時延,所以我們現在瞭解到的有兩種時延,但是其實是有四種時延。這些時延不是一成不變的,其變化程式取決於網路的擁塞程度。

因為佇列是有容量限制的,當多條鏈路同時傳送分組導致輸出快取無法接受超額的分組後,這些分組會丟失,這種情況被稱為 丟包(packet loss),到達的分組或者已排隊的分組將會被丟棄。

下圖說明了一個簡單的分組交換網路

在上圖中,分組由三位資料平板展示,平板的寬度表示著分組資料的大小。所有的分組都有相同的寬度,因此也就有相同的資料包大小。下面來一個情景模擬: 假定主機 A 和 主機 B 要向主機 E 傳送分組,主機 A 和 B 首先通過100 Mbps乙太網鏈路將其資料包傳送到第一臺路由器,然後路由器將這些資料包定向到15 Mbps的鏈路。如果在較短的時間間隔內,資料包到達路由器的速率(轉換為每秒位元數)超過15 Mbps,則在資料包在鏈路輸出緩衝區中排隊之前,路由器上會發生擁塞,然後再傳輸到鏈路上。例如,如果主機 A 和主機 B 背靠背同時發了5包資料,那麼這些資料包中的大多數將花費一些時間在佇列中等待。實際上,這種情況與許多普通情況完全相似,例如,當我們排隊等候銀行出納員或在收費站前等候時。

轉發表和路由器選擇協議

我們剛剛講過,路由器和多個通訊線路進行相連,如果每條通訊鏈路同時傳送分組的話,可能會造成排隊和丟包的情況,然後分組在佇列中等待發送,現在我就有一個問題問你,佇列中的分組發向哪裡?這是由什麼機制決定的?

換個角度想問題,路由的作用是什麼?把不同端系統中的資料包進行儲存和轉發 。在因特網中,每個端系統都會有一個 IP 地址,當原主機發送一個分組時,在分組的首部都會加上原主機的 IP 地址。每一臺路由器都會有一個 轉發表(forwarding table),當一個分組到達路由器後,路由器會檢查分組的目的地址的一部分,並用目的地址搜尋轉發表,以找出適當的傳送鏈路,然後對映成為輸出鏈路進行轉發。

那麼問題來了,路由器內部是怎樣設定轉發表的呢?詳細的我們後面會講到,這裡只是說個大概,路由器內部也是具有路由選擇協議的,用於自動設定轉發表。

電路交換

在計算機網路中,另一種通過網路鏈路和路由進行資料傳輸的另外一種方式就是 電路交換(circuit switching)。電路交換在資源預留上與分組交換不同,什麼意思呢?就是分組交換不會預留每次端系統之間互動分組的快取和鏈路傳輸速率,所以每次都會進行排隊傳輸;而電路交換會預留這些資訊。一個簡單的例子幫助你理解:這就好比有兩家餐館,餐館 A 需要預定而餐館 B 不需要預定,對於可以預定的餐館 A,我們必須先提前與其進行聯絡,但是當我們到達目的地時,我們能夠立刻入座並選菜。而對於不需要預定的那家餐館來說,你可能不需要提前聯絡,但是你必須承受到達目的地後需要排隊的風險。

下面顯示了一個電路交換網路

在這個網路中,4條鏈路用於4臺電路交換機。這些鏈路中的每一條都有4條電路,因此每條鏈路能支援4條並行的連結。每臺主機都與一臺交換機直接相連,當兩臺主機需要通訊時,該網路在兩臺主機之間建立一條專用的 端到端的連結(end-to-end connection)

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

分組交換的支持者經常說分組交換不適合實時服務,因為它的端到端時延時不可預測的。而分組交換的支持者卻認為分組交換提供了比電路交換更好的頻寬共享;它比電路交換更加簡單、更有效,實現成本更低。但是現在的趨勢更多的是朝著分組交換的方向發展。

分組交換網的時延、丟包和吞吐量

因特網可以看成是一種基礎設施,該基礎設施為執行在端系統上的分散式應用提供服務。我們希望在計算機網路中任意兩個端系統之間傳遞資料都不會造成資料丟失,然而這是一個極高的目標,實踐中難以達到。所以,在實踐中必須要限制端系統之間的 吞吐量 用來控制資料丟失。如果在端系統之間引入時延,也不能保證不會丟失分組問題。所以我們從時延、丟包和吞吐量三個層面來看一下計算機網路

分組交換中的時延

計算機網路中的分組從一臺主機(源)出發,經過一系列路由器傳輸,在另一個端系統中結束它的歷程。在這整個傳輸歷程中,分組會涉及到四種最主要的時延:節點處理時延(nodal processing delay)、排隊時延(queuing delay)、傳輸時延(total nodal delay)和傳播時延(propagation delay)。這四種時延加起來就是 節點總時延(total nodal delay)

如果用 dproc dqueue dtrans dpop 分別表示處理時延、排隊時延、傳輸時延和傳播時延,則節點的總時延由以下公式決定: dnodal = dproc + dqueue + dtrans + dpop。

時延的型別

下面是一副典型的時延分佈圖,讓我們從圖中進行分析一下不同的時延型別

分組由端系統經過通訊鏈路傳輸到路由器 A,路由器A 檢查分組頭部以映射出適當的傳輸鏈路,並將分組送入該鏈路。僅當該鏈路沒有其他分組正在傳輸並且沒有其他分組排在該該分組前面時,才能在這條鏈路上自由的傳輸該分組。如果該鏈路當前繁忙或者已經有其他分組排在該分組前面時,新到達的分組將會加入排隊。下面我們分開討論一下這四種時延

節點處理時延

節點處理時延分為兩部分,第一部分是路由器會檢查分組的首部資訊;第二部分是決定將分組傳輸到哪條通訊鏈路所需要的時間。一般高速網路的節點處理時延都在微妙級和更低的數量級。在這種處理時延完成後,分組會發往路由器的轉發佇列中

排隊時延

在佇列排隊轉發過程中,分組需要在佇列中等待發送,分組在等待發送過程中消耗的時間被稱為排隊時延。排隊時延的長短取決於先於該分組到達正在佇列中排隊的分組數量。如果該佇列是空的,並且當前沒有正在傳輸的分組,那麼該分組的排隊時延就是 0。如果處於網路高發時段,那麼鏈路中傳輸的分組比較多,那麼分組的排隊時延將延長。實際的排隊時延也可以到達微秒級。

傳輸時延

佇列 是路由器所用的主要的資料結構。佇列的特徵就是先進先出,先到達食堂的先打飯。傳輸時延是理論情況下單位時間內的傳輸位元所消耗的時間。比如分組的長度是 L 位元,R 表示從路由器 A 到路由器 B 的傳輸速率。那麼傳輸時延就是 L / R 。這是將所有分組推向該鏈路所需要的時間。正是情況下傳輸時延通常也在毫秒到微妙級

傳播時延

從鏈路的起點到路由器 B 傳播所需要的時間就是 傳播時延。該位元以該鏈路的傳播速率傳播。該傳播速率取決於鏈路的物理介質(雙絞線、同軸電纜、光纖)。如果用公式來計算一下的話,該傳播時延等於兩臺路由器之間的距離 / 傳播速率。即傳播速率是 d/s ,其中 d 是路由器 A 和 路由器 B 之間的距離,s 是該鏈路的傳播速率。

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

計算機網路中的傳輸時延和傳播時延有時候難以區分,在這裡解釋一下,傳輸時延是路由器推出分組所需要的時間,它是分組長度和鏈路傳輸速率的函式,而與兩臺路由器之間的距離無關。而傳播時延是一個位元從一臺路由器傳播到另一臺路由器所需要的時間,它是兩臺路由器之間距離的倒數,而與分組長度和鏈路傳輸速率無關。從公式也可以看出來,傳輸時延是 L/R,也就是分組的長度 / 路由器之間傳輸速率。傳播時延的公式是 d/s,也就是路由器之間的距離 / 傳播速率。

排隊時延

在這四種時延中,人們最感興趣的時延或許就是排隊時延了 dqueue。與其他三種時延(dproc、dtrans、dpop)不同的是,排隊時延對不同的分組可能是不同的。例如,如果10個分組同時到達某個佇列,第一個到達佇列的分組沒有排隊時延,而最後到達的分組卻要經受最大的排隊時延(需要等待其他九個時延被傳輸)。

那麼如何表徵排隊時延呢?或許可以從三個方面來考慮:流量到達佇列的速率、鏈路的傳輸速率和到達流量的性質。即流量是週期性到達還是突發性到達,如果用 a 表示分組到達佇列的平均速率( a 的單位是分組/秒,即 pkt/s)前面說過 R 表示的是傳輸速率,所以能夠從佇列中推出位元的速率(以 bps 即 b/s 位單位)。假設所有的分組都是由 L 位元組成的,那麼位元到達佇列的平均速率是 La bps。那麼比率 La/R 被稱為流量強度(traffic intensity),如果 La/R > 1,則位元到達佇列的平均速率超過從佇列傳輸出去的速率,這種情況下佇列趨向於無限增加。所以,設計系統時流量強度不能大於1。

現在考慮 La / R <= 1 時的情況。流量到達的性質將影響排隊時延。如果流量是週期性到達的,即每 L / R 秒到達一個分組,則每個分組將到達一個空佇列中,不會有排隊時延。如果流量是 突發性 到達的,則可能會有很大的平均排隊時延。一般可以用下面這幅圖表示平均排隊時延與流量強度的關係

橫軸是 La/R 流量強度,縱軸是平均排隊時延。

丟包

我們在上述的討論過程中描繪了一個公式那就是 La/R 不能大於1,如果 La/R 大於1,那麼到達的排隊將會無窮大,而且路由器中的排隊佇列所容納的分組是有限的,所以等到路由器佇列堆滿後,新到達的分組就無法被容納,導致路由器 丟棄(drop) 該分組,即分組會 丟失(lost)

計算機網路中的吞吐量

除了丟包和時延外,衡量計算機另一個至關重要的效能測度是端到端的吞吐量。假如從主機 A 向主機 B 傳送一個大檔案,那麼在任何時刻主機 B 接收到該檔案的速率就是 瞬時吞吐量(instantaneous throughput)。如果該檔案由 F 位元組成,主機 B 接收到所有 F 位元用去 T 秒,則檔案的傳送平均吞吐量(average throughput) 是 F / T bps。

協議層次以及服務模型

因特網是一個複雜的系統,不僅包括大量的應用程式、端系統、通訊鏈路、分組交換機等,還有各種各樣的協議組成,那麼現在我們就來聊一下因特網中的協議層次

協議分層

為了給網路協議的設計提供一個結構,網路設計者以分層(layer)的方式組織協議,每個協議屬於層次模型之一。每一層都是向它的上一層提供服務(service),即所謂的服務模型(service model)。每個分層中所有的協議稱為 協議棧(protocol stack)。因特網的協議棧由五個部分組成:物理層、鏈路層、網路層、運輸層和應用層。我們採用自上而下的方法研究其原理,也就是應用層 -> 物理層的方式。

應用層

應用層是網路應用程式和網路協議存放的分層,因特網的應用層包括許多協議,例如我們學 web 離不開的 HTTP,電子郵件傳送協議 SMTP、端系統檔案上傳協議 FTP、還有為我們進行域名解析的 DNS 協議。應用層協議分佈在多個端系統上,一個端系統應用程式與另外一個端系統應用程式交換資訊分組,我們把位於應用層的資訊分組稱為 報文(message)

運輸層

因特網的運輸層在應用程式斷點之間傳送應用程式報文,在這一層主要有兩種傳輸協議 TCPUDP,利用這兩者中的任何一個都能夠傳輸報文,不過這兩種協議有巨大的不同。

TCP 向它的應用程式提供了面向連線的服務,它能夠控制並確認報文是否到達,並提供了擁塞機制來控制網路傳輸,因此當網路擁塞時,會抑制其傳輸速率。

UDP 協議向它的應用程式提供了無連線服務。它不具備可靠性的特徵,沒有流量控制,也沒有擁塞控制。我們把運輸層的分組稱為 報文段(segment)

網路層

因特網的網路層負責將稱為 資料報(datagram) 的網路分層從一臺主機移動到另一臺主機。網路層一個非常重要的協議是 IP 協議,所有具有網路層的因特網元件都必須執行 IP 協議,IP 協議是一種網際協議,除了 IP 協議外,網路層還包括一些其他網際協議和路由選擇協議,一般把網路層就稱為 IP 層,由此可知 IP 協議的重要性。

鏈路層

現在我們有應用程式通訊的協議,有了給應用程式提供運輸的協議,還有了用於約定傳送位置的 IP 協議,那麼如何才能真正的傳送資料呢?為了將分組從一個節點(主機或路由器)運輸到另一個節點,網路層必須依靠鏈路層提供服務。鏈路層的例子包括乙太網、WiFi 和電纜接入的 DOCSIS 協議,因為資料從源目的地傳送通常需要經過幾條鏈路,一個數據包可能被沿途不同的鏈路層協議處理,我們把鏈路層的分組稱為 幀(frame)

物理層

雖然鏈路層的作用是將幀從一個端系統運輸到另一個端系統,而物理層的作用是將幀中的一個個 位元 從一個節點運輸到另一個節點,物理層的協議仍然使用鏈路層協議,這些協議與實際的物理傳輸介質有關,例如,乙太網有很多物理層協議:關於雙絞銅線、關於同軸電纜、關於光纖等等。

五層網路協議的示意圖如下

OSI 模型

我們上面討論的計算網路協議模型不是唯一的 協議棧,ISO(國際標準化組織)提出來計算機網路應該按照7層來組織,那麼7層網路協議棧與5層的區別在哪裡?

從圖中可以一眼看出,OSI 要比上面的網路模型多了 表示層會話層,其他層基本一致。表示層主要包括資料壓縮和資料加密以及資料描述,資料描述使得應用程式不必擔心計算機內部儲存格式的問題,而會話層提供了資料交換的定界和同步功能,包括建立檢查點和恢復方案。

網路攻擊

在計算機高速發展的 21世紀,我們已經越來越離不開計算機網路,計算機網路在為我們帶來諸多便利的同時,我們也會遭受一些網路攻擊,下面我們就一起來認識一下網路中的攻擊有哪些

植入有害程式

因為我們要從因特網接收/傳送 資料,所以我們將裝置與因特網相連,我們可以使用各種網際網路應用例如微信、微博、上網瀏覽網頁、流式音樂、多媒體會議等,網路攻擊很可能在這時不知不覺的發生,通過在這些軟體中植入有害程式來入侵我們的計算機,包括刪除我們的檔案,進行活動監視,侵犯隱私等。我們的受害主機也可能成為眾多類似受害裝置網路中的一員,它們被統稱為 殭屍網路(botnet),這些攻擊者會利用殭屍網路控制並有效的對目標主機開展垃圾郵件分發分散式拒絕服務攻擊

大多數有害程式都具有自我複製(self-replicating)的功能,傳播性非常強,一旦它感染了一臺主機,就會從這臺感染的主機上尋找進入因特網的其他主機,從而感染新的主機。有害應用程式主要分為兩種:病毒(virus)蠕蟲(worm),病毒是一種需要某種形式的使用者互動來感染使用者的計算機,比如包含了病毒的電子郵件附件。如果使用者接收並開啟感染病毒的電子郵件的話,就會以某種方式破壞你的計算機;而蠕蟲是一種不需要使用者互動就能進入計算機的惡意軟體,比如你運行了一個攻擊者想要攻擊的應用程式,某些情況下不需要使用者干預,應用程式就可能通過網際網路接收惡意軟體並執行,從而生成蠕蟲,然後再進行擴散。

攻擊伺服器和網路基礎設施

另一種影響較大的網路攻擊稱為拒絕服務攻擊(Denial-of-Service Dos),這種網路攻擊使得網路、主機、伺服器、基礎網路設施不能常規使用。Web 伺服器、電子郵件伺服器、DNS 伺服器都能成為 Dos 的攻擊目標。大多數因特網 Dos 攻擊分為以下三類

  • 弱點攻擊。這涉及向一臺目標主機上執行的易受攻擊的應用程式或作業系統傳送製作精細的報文,如果適當順序的多個分組傳送給一個易受攻擊的應用程式或作業系統,該伺服器可能停止執行。
  • 頻寬洪泛。攻擊者通過網路向主機或伺服器傳送大量的分組,分組數量太多使得目標接入鏈路變得擁塞,使得合法分組無法到達伺服器。
  • 連線洪泛。和上面的頻寬洪範攻擊性質相似,只不過這次換成了通過建立大量的 TCP 連線進行攻擊。因為 TCP 連線數量太多導致有效的 TCP 連線無法到達伺服器。

網際網路中攻擊最多的就屬於頻寬洪泛攻擊了,可以回顧一下我們上面討論的時延和丟包問題,如果某伺服器的接入速率為 R bps,那麼攻擊者則需要向伺服器傳送大於 R bps 的速率來產生危害。如果 R 非常大的話,單一攻擊源可能無法產生足夠大的流量來傷害伺服器,所以還需要產生多個數據源,這就是屢見不鮮的 分散式Dos(Distributed Dos,DDos) 。攻擊者通過控制多個數據源並讓每個資料來源傳送大量的分組來致使伺服器癱瘓。如下圖所示

嗅探分組

今天許多使用者通過無線裝置接入因特網。例如 WiFi 連線的計算機或者使用蜂窩因特網連線的手持裝置。在帶來便利的同時也會成為易受攻擊的目標。在無線傳輸裝置的附近放置一臺被動的接收機,該接收機就能夠得到傳輸的每個分組的副本!這些分組中包含了各種敏感資訊,例如口令、密碼等,記錄每個流經分組副本的接收機被稱為分組嗅探器(packet sniffer)。分組嗅探也能夠應用於有線環境中,可以用 Wireshark 實驗來進行模擬

IP 偽裝

生成具有任意源地址、分組內容和目的地址的分組,然後將這個分組傳輸到網際網路中。這種將虛假源地址的分組注入因特網的能力被稱為 IP 哄騙(IP spoofing)。為了解決這個問題,我們需要採用 端點鑑別,它是一種使我們能夠確信真正源目的地的機制。我們後面會再探討這些機制。

文章參考:

《計算機網路:自頂向下方法》

http://zahid-stanikzai.com/types-of-delay/

如果大家認可我,請幫我點個贊,謝謝各位了。我們下篇技術文章見。