建议看 | 计算机网络核心概念
戳藍字“CSDN云計算”關注我們哦!
作者 |?cxuan
責編 | 阿禿
本篇文章我們來探討一下網絡核心、交換網絡、時延、丟包、吞吐量以及計算機網絡的協議層次和網絡攻擊。
網絡核心
網絡的核心是由因特網端系統(tǒng)和鏈路構成的網狀網絡,下面這幅圖正確的表達了這一點。
那么在不同的 ISP 和本地以及家庭網絡是如何交換信息的呢?信息交換主要分為兩種方式 分組交換 和 電路交互,下面我們就來一起認識一下。
分組交換
在互聯網應用中,每個終端系統(tǒng)都可以彼此交換信息,這種信息也被稱為 報文(Message),報文是一個集大成者,它可以包括你想要的任何東西,比如文字、數據、電子郵件、音頻、視頻等。為了從源目的地向端系統(tǒng)發(fā)送報文,需要把長報文切分為一個個小的數據塊,這種數據塊稱為分組(Packets),也就是說,報文是由一個個小塊的分組組成。在端系統(tǒng)和目的地之間,每個分組都要經過通信鏈路(communication links) 和分組交換機(switch packets) ,通信鏈路可以分為雙絞銅線、同軸電纜和光纖。分組交換機又分為路由器和鏈路層交換機。(這塊如果你不明白的話,還需要翻看我上一篇文章 你說你懂互聯網,那這些你知道么?)分組要在端系統(tǒng)之間交互需要經過一定的時間,如果兩個端系統(tǒng)之間需要交互的分組為 L 比特,鏈路的傳輸速率為 R 比特/秒,那么傳輸時間就是 L / R秒。
現在我們來模擬一下這個分組交換的過程,一個端系統(tǒng)需要經過交換機給其他端系統(tǒng)發(fā)送分組,當分組到達交換機時,交換機就能夠直接進行轉發(fā)嗎?不是的,交換機可沒有這么無私,你想讓我?guī)湍戕D發(fā)分組?好,首先你需要先把整個分組數據都給我,我再考慮給你發(fā)送的問題,這就是存儲轉發(fā)傳輸
存儲轉發(fā)傳輸
存儲轉發(fā)傳輸指的就是交換機在轉發(fā)分組的第一個比特前,必須要接受到整個分組,下面是一個存儲轉發(fā)傳輸的示意圖,可以從圖中窺出端倪。
由圖可以看出,分組 1、2、3 在以 R bps 的速率向交換器進行分組傳輸,并且交換機已經收到了分組1 發(fā)送的比特,此時交換機會直接進行轉發(fā)嗎?答案是不會的,交換機會把你的分組先緩存在本地。這就和考試作弊一樣,一個學霸要經過學渣 A 給學渣 B 傳答案,學渣 A 說,學渣 A 在收到答案后,他可能直接把卷子傳過去嗎?學渣A 說,等我先把答案抄完(保存功能)后再把卷子給你。
排隊時延和分組丟失
什么?你認為交換機只能和一條通信鏈路進行相連?那你就大錯特錯了,這可是交換機啊,怎么可能只有一條通信鏈路呢?
所以我相信你一定能想到這個問題,多個端系統(tǒng)同時給交換器發(fā)送分組,一定存在順序到達和排隊的問題。事實上,對于每條相連的鏈路,該分組交換機會有一個輸出緩存(output buffer) 和 輸出隊列(output queue) 與之對應,它用于存儲路由器準備發(fā)往每條鏈路的分組。如果到達的分組發(fā)現路由器正在接收其他分組,那么新到達的分組就會在輸出隊列中進行排隊,這種等待分組轉發(fā)所耗費的時間也被稱為 排隊時延,上面提到分組交換器在轉發(fā)分組時會進行等待,這種等待被稱為 存儲轉發(fā)時延,所以我們現在了解到的有兩種時延,但是其實是有四種時延。這些時延不是一成不變的,其變化程序取決于網絡的擁塞程度。
因為隊列是有容量限制的,當多條鏈路同時發(fā)送分組導致輸出緩存無法接受超額的分組后,這些分組會丟失,這種情況被稱為 丟包(packet loss),到達的分組或者已排隊的分組將會被丟棄。
下圖說明了一個簡單的分組交換網絡:
在上圖中,分組由三位數據平板展示,平板的寬度表示著分組數據的大小。所有的分組都有相同的寬度,因此也就有相同的數據包大小。下面來一個情景模擬: 假定主機 A 和 主機 B 要向主機 E 發(fā)送分組,主機 A 和 B 首先通過100 Mbps以太網鏈路將其數據包發(fā)送到第一臺路由器,然后路由器將這些數據包定向到15 Mbps的鏈路。如果在較短的時間間隔內,數據包到達路由器的速率(轉換為每秒比特數)超過15 Mbps,則在數據包在鏈路輸出緩沖區(qū)中排隊之前,路由器上會發(fā)生擁塞,然后再傳輸到鏈路上。例如,如果主機 A 和主機 B 背靠背同時發(fā)了5包數據,那么這些數據包中的大多數將花費一些時間在隊列中等待。實際上,這種情況與許多普通情況完全相似,例如,當我們排隊等候銀行出納員或在收費站前等候時。
轉發(fā)表和路由器選擇協議
我們剛剛講過,路由器和多個通信線路進行相連,如果每條通信鏈路同時發(fā)送分組的話,可能會造成排隊和丟包的情況,然后分組在隊列中等待發(fā)送,現在我就有一個問題問你,隊列中的分組發(fā)向哪里?這是由什么機制決定的?
換個角度想問題,路由的作用是什么?把不同端系統(tǒng)中的數據包進行存儲和轉發(fā) 。在因特網中,每個端系統(tǒng)都會有一個 IP 地址,當原主機發(fā)送一個分組時,在分組的首部都會加上原主機的 IP 地址。每一臺路由器都會有一個 轉發(fā)表(forwarding table),當一個分組到達路由器后,路由器會檢查分組的目的地址的一部分,并用目的地址搜索轉發(fā)表,以找出適當的傳送鏈路,然后映射成為輸出鏈路進行轉發(fā)。
那么問題來了,路由器內部是怎樣設置轉發(fā)表的呢?詳細的我們后面會講到,這里只是說個大概,路由器內部也是具有路由選擇協議的,用于自動設置轉發(fā)表。
電路交換
在計算機網絡中,另一種通過網絡鏈路和路由進行數據傳輸的另外一種方式就是 電路交換(circuit switching)。電路交換在資源預留上與分組交換不同,什么意思呢?就是分組交換不會預留每次端系統(tǒng)之間交互分組的緩存和鏈路傳輸速率,所以每次都會進行排隊傳輸;而電路交換會預留這些信息。一個簡單的例子幫助你理解:這就好比有兩家餐館,餐館 A 需要預定而餐館 B 不需要預定,對于可以預定的餐館 A,我們必須先提前與其進行聯系,但是當我們到達目的地時,我們能夠立刻入座并選菜。而對于不需要預定的那家餐館來說,你可能不需要提前聯系,但是你必須承受到達目的地后需要排隊的風險。
下面顯示了一個電路交換網絡:
在這個網絡中,4條鏈路用于4臺電路交換機。這些鏈路中的每一條都有4條電路,因此每條鏈路能支持4條并行的鏈接。每臺主機都與一臺交換機直接相連,當兩臺主機需要通信時,該網絡在兩臺主機之間創(chuàng)建一條專用的 端到端的鏈接(end-to-end connection)。
分組交換和電路交換的對比
分組交換的支持者經常說分組交換不適合實時服務,因為它的端到端時延時不可預測的。而分組交換的支持者卻認為分組交換提供了比電路交換更好的帶寬共享;它比電路交換更加簡單、更有效,實現成本更低。但是現在的趨勢更多的是朝著分組交換的方向發(fā)展。
分組交換網的時延、丟包和吞吐量
因特網可以看成是一種基礎設施,該基礎設施為運行在端系統(tǒng)上的分布式應用提供服務。我們希望在計算機網絡中任意兩個端系統(tǒng)之間傳遞數據都不會造成數據丟失,然而這是一個極高的目標,實踐中難以達到。所以,在實踐中必須要限制端系統(tǒng)之間的 吞吐量 用來控制數據丟失。如果在端系統(tǒng)之間引入時延,也不能保證不會丟失分組問題。所以我們從時延、丟包和吞吐量三個層面來看一下計算機網絡。
分組交換中的時延
計算機網絡中的分組從一臺主機(源)出發(fā),經過一系列路由器傳輸,在另一個端系統(tǒng)中結束它的歷程。在這整個傳輸歷程中,分組會涉及到四種最主要的時延:節(jié)點處理時延(nodal processing delay)、排隊時延(queuing delay)、傳輸時延(total nodal delay)和傳播時延(propagation delay)。這四種時延加起來就是 節(jié)點總時延(total nodal delay)。
如果用 dproc dqueue dtrans dpop 分別表示處理時延、排隊時延、傳輸時延和傳播時延,則節(jié)點的總時延由以下公式決定: ?dnodal = dproc + dqueue + dtrans + dpop。
時延的類型
下面是一副典型的時延分布圖,讓我們從圖中進行分析一下不同的時延類型。
分組由端系統(tǒng)經過通信鏈路傳輸到路由器 A,路由器A 檢查分組頭部以映射出適當的傳輸鏈路,并將分組送入該鏈路。僅當該鏈路沒有其他分組正在傳輸并且沒有其他分組排在該該分組前面時,才能在這條鏈路上自由的傳輸該分組。如果該鏈路當前繁忙或者已經有其他分組排在該分組前面時,新到達的分組將會加入排隊。下面我們分開討論一下這四種時延。
節(jié)點處理時延
節(jié)點處理時延分為兩部分,第一部分是路由器會檢查分組的首部信息;第二部分是決定將分組傳輸到哪條通信鏈路所需要的時間。一般高速網絡的節(jié)點處理時延都在微妙級和更低的數量級。在這種處理時延完成后,分組會發(fā)往路由器的轉發(fā)隊列中。
排隊時延
在隊列排隊轉發(fā)過程中,分組需要在隊列中等待發(fā)送,分組在等待發(fā)送過程中消耗的時間被稱為排隊時延。排隊時延的長短取決于先于該分組到達正在隊列中排隊的分組數量。如果該隊列是空的,并且當前沒有正在傳輸的分組,那么該分組的排隊時延就是 0。如果處于網絡高發(fā)時段,那么鏈路中傳輸的分組比較多,那么分組的排隊時延將延長。實際的排隊時延也可以到達微秒級。
傳輸時延
隊列 是路由器所用的主要的數據結構。隊列的特征就是先進先出,先到達食堂的先打飯。傳輸時延是理論情況下單位時間內的傳輸比特所消耗的時間。比如分組的長度是 L 比特,R 表示從路由器 A 到路由器 B 的傳輸速率。那么傳輸時延就是 L / R 。這是將所有分組推向該鏈路所需要的時間。這種情況下傳輸時延通常也在毫秒到微妙級。
傳播時延
從鏈路的起點到路由器 B 傳播所需要的時間就是 傳播時延。該比特以該鏈路的傳播速率傳播。該傳播速率取決于鏈路的物理介質(雙絞線、同軸電纜、光纖)。如果用公式來計算一下的話,該傳播時延等于兩臺路由器之間的距離 / 傳播速率。即傳播速率是 d/s ,其中 d 是路由器 A 和 路由器 B 之間的距離,s 是該鏈路的傳播速率。
傳輸時延和傳播時延的比較
計算機網絡中的傳輸時延和傳播時延有時候難以區(qū)分,在這里解釋一下,傳輸時延是路由器推出分組所需要的時間,它是分組長度和鏈路傳輸速率的函數,而與兩臺路由器之間的距離無關。而傳播時延是一個比特從一臺路由器傳播到另一臺路由器所需要的時間,它是兩臺路由器之間距離的倒數,而與分組長度和鏈路傳輸速率無關。從公式也可以看出來,傳輸時延是 L/R,也就是分組的長度 / 路由器之間傳輸速率。傳播時延的公式是 d/s,也就是路由器之間的距離 / 傳播速率。
排隊時延
在這四種時延中,人們最感興趣的時延或許就是排隊時延了 dqueue。與其他三種時延(dproc、dtrans、dpop)不同的是,排隊時延對不同的分組可能是不同的。例如,如果10個分組同時到達某個隊列,第一個到達隊列的分組沒有排隊時延,而最后到達的分組卻要經受最大的排隊時延(需要等待其他九個時延被傳輸)。
那么如何表征排隊時延呢?或許可以從三個方面來考慮:流量到達隊列的速率、鏈路的傳輸速率和到達流量的性質。即流量是周期性到達還是突發(fā)性到達,如果用 a 表示分組到達隊列的平均速率( a 的單位是分組/秒,即 pkt/s)前面說過 R 表示的是傳輸速率,所以能夠從隊列中推出比特的速率(以 bps 即 b/s 為單位)。假設所有的分組都是由 L 比特組成的,那么比特到達隊列的平均速率是 La bps。那么比率 La/R 被稱為流量強度(traffic intensity),如果 La/R > 1,則比特到達隊列的平均速率超過從隊列傳輸出去的速率,這種情況下隊列趨向于無限增加。所以,設計系統(tǒng)時流量強度不能大于1。
現在考慮 La / R <= 1 時的情況。流量到達的性質將影響排隊時延。如果流量是周期性到達的,即每 L / R 秒到達一個分組,則每個分組將到達一個空隊列中,不會有排隊時延。如果流量是 突發(fā)性 到達的,則可能會有很大的平均排隊時延。一般可以用下面這幅圖表示平均排隊時延與流量強度的關系
橫軸是 La/R 流量強度,縱軸是平均排隊時延。
丟包
我們在上述的討論過程中描繪了一個公式那就是 La/R 不能大于1,如果 La/R 大于1,那么到達的排隊將會無窮大,而且路由器中的排隊隊列所容納的分組是有限的,所以等到路由器隊列堆滿后,新到達的分組就無法被容納,導致路由器 丟棄(drop) 該分組,即分組會 丟失(lost)。
計算機網絡中的吞吐量
除了丟包和時延外,衡量計算機另一個至關重要的性能測度是端到端的吞吐量。假如從主機 A 向主機 B 傳送一個大文件,那么在任何時刻主機 B 接收到該文件的速率就是 瞬時吞吐量(instantaneous throughput)。如果該文件由 F 比特組成,主機 B 接收到所有 F 比特用去 T 秒,則文件的傳送平均吞吐量(average throughput) 是 F / T bps。
協議層次以及服務模型
因特網是一個復雜的系統(tǒng),不僅包括大量的應用程序、端系統(tǒng)、通信鏈路、分組交換機等,還有各種各樣的協議組成,那么現在我們就來聊一下因特網中的協議層次。
協議分層
為了給網絡協議的設計提供一個結構,網絡設計者以分層(layer)的方式組織協議,每個協議屬于層次模型之一。每一層都是向它的上一層提供服務(service),即所謂的服務模型(service model)。每個分層中所有的協議稱為 協議棧(protocol stack)。因特網的協議棧由五個部分組成:物理層、鏈路層、網絡層、運輸層和應用層。我們采用自上而下的方法研究其原理,也就是應用層 -> 物理層的方式。
應用層
應用層是網絡應用程序和網絡協議存放的分層,因特網的應用層包括許多協議,例如我們學 web 離不開的 HTTP,電子郵件傳送協議 SMTP、端系統(tǒng)文件上傳協議 FTP、還有為我們進行域名解析的 DNS 協議。應用層協議分布在多個端系統(tǒng)上,一個端系統(tǒng)應用程序與另外一個端系統(tǒng)應用程序交換信息分組,我們把位于應用層的信息分組稱為 報文(message)。
運輸層
因特網的運輸層在應用程序斷點之間傳送應用程序報文,在這一層主要有兩種傳輸協議 TCP和 UDP,利用這兩者中的任何一個都能夠傳輸報文,不過這兩種協議有巨大的不同。
TCP 向它的應用程序提供了面向連接的服務,它能夠控制并確認報文是否到達,并提供了擁塞機制來控制網絡傳輸,因此當網絡擁塞時,會抑制其傳輸速率。
UDP 協議向它的應用程序提供了無連接服務。它不具備可靠性的特征,沒有流量控制,也沒有擁塞控制。我們把運輸層的分組稱為 報文段(segment)。
網絡層
因特網的網絡層負責將稱為 數據報(datagram) 的網絡分層從一臺主機移動到另一臺主機。網絡層一個非常重要的協議是 IP 協議,所有具有網絡層的因特網組件都必須運行 IP 協議,IP 協議是一種網際協議,除了 IP 協議外,網絡層還包括一些其他網際協議和路由選擇協議,一般把網絡層就稱為 IP 層,由此可知 IP 協議的重要性。
鏈路層
現在我們有應用程序通信的協議,有了給應用程序提供運輸的協議,還有了用于約定發(fā)送位置的 IP 協議,那么如何才能真正的發(fā)送數據呢?為了將分組從一個節(jié)點(主機或路由器)運輸到另一個節(jié)點,網絡層必須依靠鏈路層提供服務。鏈路層的例子包括以太網、WiFi 和電纜接入的 DOCSIS 協議,因為數據從源目的地傳送通常需要經過幾條鏈路,一個數據包可能被沿途不同的鏈路層協議處理,我們把鏈路層的分組稱為 幀(frame)。
物理層
雖然鏈路層的作用是將幀從一個端系統(tǒng)運輸到另一個端系統(tǒng),而物理層的作用是將幀中的一個個 比特 從一個節(jié)點運輸到另一個節(jié)點,物理層的協議仍然使用鏈路層協議,這些協議與實際的物理傳輸介質有關,例如,以太網有很多物理層協議:關于雙絞銅線、關于同軸電纜、關于光纖等等。
五層網絡協議的示意圖如下:
OSI 模型
我們上面討論的計算網絡協議模型不是唯一的 協議棧,ISO(國際標準化組織)提出來計算機網絡應該按照7層來組織,那么7層網絡協議棧與5層的區(qū)別在哪里?
從圖中可以一眼看出,OSI 要比上面的網絡模型多了 表示層 和 會話層,其他層基本一致。表示層主要包括數據壓縮和數據加密以及數據描述,數據描述使得應用程序不必擔心計算機內部存儲格式的問題,而會話層提供了數據交換的定界和同步功能,包括建立檢查點和恢復方案。
網絡攻擊
在計算機高速發(fā)展的 21世紀,我們已經越來越離不開計算機網絡,計算機網絡在為我們帶來諸多便利的同時,我們也會遭受一些網絡攻擊,下面我們就一起來認識一下網絡中的攻擊有哪些。
植入有害程序
因為我們要從因特網接收/發(fā)送 數據,所以我們將設備與因特網相連,我們可以使用各種互聯網應用例如微信、微博、上網瀏覽網頁、流式音樂、多媒體會議等,網絡攻擊很可能在這時不知不覺的發(fā)生,通過在這些軟件中植入有害程序來入侵我們的計算機,包括刪除我們的文件,進行活動監(jiān)視,侵犯隱私等。我們的受害主機也可能成為眾多類似受害設備網絡中的一員,它們被統(tǒng)稱為 僵尸網絡(botnet),這些攻擊者會利用僵尸網絡控制并有效的對目標主機開展垃圾郵件分發(fā)和分布式拒絕服務攻擊。
大多數有害程序都具有自我復制(self-replicating)的功能,傳播性非常強,一旦它感染了一臺主機,就會從這臺感染的主機上尋找進入因特網的其他主機,從而感染新的主機。有害應用程序主要分為兩種:病毒(virus) 和 蠕蟲(worm),病毒是一種需要某種形式的用戶交互來感染用戶的計算機,比如包含了病毒的電子郵件附件。如果用戶接收并打開感染病毒的電子郵件的話,就會以某種方式破壞你的計算機;而蠕蟲是一種不需要用戶交互就能進入計算機的惡意軟件,比如你運行了一個攻擊者想要攻擊的應用程序,某些情況下不需要用戶干預,應用程序就可能通過互聯網接收惡意軟件并運行,從而生成蠕蟲,然后再進行擴散。
攻擊服務器和網絡基礎設施
另一種影響較大的網絡攻擊稱為拒絕服務攻擊(Denial-of-Service Dos),這種網絡攻擊使得網絡、主機、服務器、基礎網絡設施不能常規(guī)使用。Web 服務器、電子郵件服務器、DNS 服務器都能成為 Dos 的攻擊目標。大多數因特網 Dos 攻擊分為以下三類:
弱點攻擊。這涉及向一臺目標主機上運行的易受攻擊的應用程序或操作系統(tǒng)發(fā)送制作精細的報文,如果適當順序的多個分組發(fā)送給一個易受攻擊的應用程序或操作系統(tǒng),該服務器可能停止運行。
帶寬洪泛。攻擊者通過網絡向主機或服務器發(fā)送大量的分組,分組數量太多使得目標接入鏈路變得擁塞,使得合法分組無法到達服務器。
連接洪泛。和上面的帶寬洪范攻擊性質相似,只不過這次換成了通過創(chuàng)建大量的 TCP 連接進行攻擊。因為 TCP 連接數量太多導致有效的 TCP 連接無法到達服務器。
互聯網中攻擊最多的就屬于帶寬洪泛攻擊了,可以回顧一下我們上面討論的時延和丟包問題,如果某服務器的接入速率為 R bps,那么攻擊者則需要向服務器發(fā)送大于 R bps 的速率來產生危害。如果 R 非常大的話,單一攻擊源可能無法產生足夠大的流量來傷害服務器,所以還需要產生多個數據源,這就是屢見不鮮的 分布式Dos(Distributed Dos,DDos) 。攻擊者通過控制多個數據源并讓每個數據源發(fā)送大量的分組來致使服務器癱瘓。如下圖所示:
嗅探分組
今天許多用戶通過無線設備接入因特網。例如 WiFi 連接的計算機或者使用蜂窩因特網連接的手持設備。在帶來便利的同時也會成為易受攻擊的目標。在無線傳輸設備的附近放置一臺被動的接收機,該接收機就能夠得到傳輸的每個分組的副本!這些分組中包含了各種敏感信息,例如口令、密碼等,記錄每個流經分組副本的接收機被稱為分組嗅探器(packet sniffer)。分組嗅探也能夠應用于有線環(huán)境中,可以用 Wireshark 實驗來進行模擬。
IP 偽裝
生成具有任意源地址、分組內容和目的地址的分組,然后將這個分組傳輸到互聯網中。這種將虛假源地址的分組注入因特網的能力被稱為 IP 哄騙(IP spoofing)。為了解決這個問題,我們需要采用 端點鑒別,它是一種使我們能夠確信真正源目的地的機制。我們后面會再探討這些機制。
福利掃描添加小編微信,備注“姓名+公司職位”,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習! 推薦閱讀:微服務架構的四大殺手锏
谷歌因Android警告美國最高法院;亞馬遜云計算部門將與威瑞森合作推出5G邊緣云計算;阿里聯合ODCC新年放大招……
鯤鵬之大,何止幾千里?
門限簽名技術火了,它的硬核之處絕不僅僅是秘密共享……
解密Elasticsearch技術,騰訊開源的萬億級分布式搜索分析引擎
TIOBE 1 月編程語言排行榜:C 語言再度「C 位」出道!
真香,朕在看了!
總結
以上是生活随笔為你收集整理的建议看 | 计算机网络核心概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kubernetes 是如何调度的?
- 下一篇: 两亿人在家开会!钉钉紧急扩容1万台云服务