這是《計算機網絡》系列文章的第二篇文章web
咱們第一篇文章講述了計算機網絡的基本概念,互聯網的基本名詞,什麼是協議以及幾種接入網以及網絡傳輸的物理媒體,那麼本篇文章咱們來探討一下網絡核心、交換網絡、時延、丟包、吞吐量以及計算機網絡的協議層次和網絡攻擊。緩存
網絡的核心是由因特網端系統和鏈路構成的網狀網絡,下面這幅圖正確的表達了這一點服務器
那麼在不一樣的 ISP 和本地以及家庭網絡是如何交換信息的呢?信息交換主要分爲兩種方式 分組交換
和 電路交互
,下面咱們就來一塊兒認識一下。微信
在互聯網應用中,每一個終端系統均可以彼此交換信息,這種信息也被稱爲 報文(Message)
,報文是一個集大成者,它能夠包括你想要的任何東西,好比文字、數據、電子郵件、音頻、視頻等。爲了從源目的地向端系統發送報文,須要把長報文切分爲一個個小的數據塊,這種數據塊稱爲分組(Packets)
,也就是說,報文是由一個個小塊的分組組成。在端系統和目的地之間,每一個分組都要通過通訊鏈路(communication links)
和分組交換機(switch packets)
,通訊鏈路能夠分爲雙絞銅線、同軸電纜和光纖。分組交換機又分爲路由器和鏈路層交換機。(這塊若是你不明白的話,還須要翻看我上一篇文章 你說你懂互聯網,那這些你知道麼?)分組要在端系統之間交互須要通過必定的時間,若是兩個端系統之間須要交互的分組爲 L 比特,鏈路的傳輸速率問 R 比特/秒,那麼傳輸時間就是 L / R秒。網絡
如今咱們來模擬一下這個分組交換的過程,一個端系統須要通過交換機給其餘端系統發送分組,當分組到達交換機時,交換機就可以直接進行轉發嗎?不是的,交換機可沒有這麼無私,你想讓我幫你轉發分組?好,首先你須要先把整個分組數據都給我,我再考慮給你發送的問題,這就是存儲轉發傳輸
數據結構
存儲轉發傳輸指的就是交換機再轉發分組的第一個比特前,必需要接受到整個分組,下面是一個存儲轉發傳輸的示意圖,能夠從圖中窺出端倪分佈式
由圖能夠看出,分組 一、二、3 在以 R bps 的速率向交換器進行分組傳輸,而且交換機已經收到了分組1 發送的比特,此時交換機會直接進行轉發嗎?答案是不會的,交換機會把你的分組先緩存在本地。這就和考試做弊同樣,一個學霸要通過學渣 A 給學渣 B 傳答案,學渣 A 說,學渣 A 在收到答案後,它可能直接把卷子傳過去嗎?學渣A 說,等我先把答案抄完(保存功能)後再把卷子給你。函數
什麼?你認爲交換機只能和一條通訊鏈路進行相連?那你就大錯特錯了,這但是交換機啊,怎麼可能只有一條通訊鏈路呢?性能
因此我相信你必定能想到這個問題,多個端系統同時給交換器發送分組,必定存在順序到達
和排隊
的問題。事實上,對於每條相連的鏈路,該分組交換機會有一個輸出緩存(output buffer)
和 輸出隊列(output queue)
與之對應,它用於存儲路由器準備發往每條鏈路的分組。若是到達的分組發現路由器正在接收其餘分組,那麼新到達的分組就會在輸出隊列中進行排隊,這種等待分組轉發所耗費的時間也被稱爲 排隊時延
,上面提到分組交換器在轉發分組時會進行等待,這種等待被稱爲 存儲轉發時延
,因此咱們如今瞭解到的有兩種時延,可是實際上是有四種時延。這些時延不是一成不變的,其變化程序取決於網絡的擁塞程度。ui
由於隊列是有容量限制的,當多條鏈路同時發送分組致使輸出緩存沒法接受超額的分組後,這些分組會丟失,這種狀況被稱爲 丟包(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)
。
因特網的運輸層在應用程序斷點之間傳送應用程序報文,在這一層主要有兩種傳輸協議 TCP
和 UDP
,利用這二者中的任何一個都可以傳輸報文,不過這兩種協議有巨大的不一樣。
TCP 向它的應用程序提供了面向鏈接的服務,它可以控制並確認報文是否到達,並提供了擁塞機制來控制網絡傳輸,所以當網絡擁塞時,會抑制其傳輸速率。
UDP 協議向它的應用程序提供了無鏈接服務。它不具有可靠性的特徵,沒有流量控制,也沒有擁塞控制。咱們把運輸層的分組稱爲 報文段(segment)
因特網的網絡層負責將稱爲 數據報(datagram)
的網絡分層從一臺主機移動到另外一臺主機。網絡層一個很是重要的協議是 IP
協議,全部具備網絡層的因特網組件都必須運行 IP 協議,IP 協議是一種網際協議,除了 IP 協議外,網絡層還包括一些其餘網際協議和路由選擇協議,通常把網絡層就稱爲 IP 層,由此可知 IP 協議的重要性。
如今咱們有應用程序通訊的協議,有了給應用程序提供運輸的協議,還有了用於約定發送位置的 IP 協議,那麼如何才能真正的發送數據呢?爲了將分組從一個節點(主機或路由器)運輸到另外一個節點,網絡層必須依靠鏈路層提供服務。鏈路層的例子包括以太網、WiFi 和電纜接入的 DOCSIS
協議,由於數據從源目的地傳送一般須要通過幾條鏈路,一個數據包可能被沿途不一樣的鏈路層協議處理,咱們把鏈路層的分組稱爲 幀(frame)
雖然鏈路層的做用是將幀從一個端系統運輸到另外一個端系統,而物理層的做用是將幀中的一個個 比特
從一個節點運輸到另外一個節點,物理層的協議仍然使用鏈路層協議,這些協議與實際的物理傳輸介質有關,例如,以太網有不少物理層協議:關於雙絞銅線、關於同軸電纜、關於光纖等等。
五層網絡協議的示意圖以下
咱們上面討論的計算網絡協議模型不是惟一的 協議棧
,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 spoofing)
。爲了解決這個問題,咱們須要採用 端點鑑別
,它是一種使咱們可以確信真正源目的地的機制。咱們後面會再探討這些機制。
文章參考:
《計算機網絡:自頂向下方法》
http://zahid-stanikzai.com/types-of-delay/
若是你們承認我,請幫我點個贊,謝謝各位了。咱們下篇技術文章見。