1. 計算機網路第三章(數據鏈路層)
3.1、數據鏈路層概述
概述
鏈路 是從一個結點到相鄰結點的一段物理線路, 數據鏈路 則是在鏈路的基礎上增加了一些必要的硬體(如網路適配器)和軟體(如協議的實現)
網路中的主機、路由器等都必須實現數據鏈路層
區域網中的主機、交換機等都必須實現數據鏈路層
從層次上來看數據的流動
僅從數據鏈路層觀察幀的流動
主機H1 到主機H2 所經過的網路可以是多種不同類型的
注意:不同的鏈路層可能採用不同的數據鏈路層協議
數據鏈路層使用的信道
數據鏈路層屬於計算機網路的低層。 數據鏈路層使用的信道主要有以下兩種類型:
點對點信道
廣播信道
區域網屬於數據鏈路層
區域網雖然是個網路。但我們並不把區域網放在網路層中討論。這是因為在網路層要討論的是多個網路互連的問題,是討論分組怎麼從一個網路,通過路由器,轉發到另一個網路。
而在同一個區域網中,分組怎麼從一台主機傳送到另一台主機,但並不經過路由器轉發。從整個互聯網來看, 區域網仍屬於數據鏈路層 的范圍
三個重要問題
數據鏈路層傳送的協議數據單元是 幀
封裝成幀
封裝成幀 (framing) 就是在一段數據的前後分別添加首部和尾部,然後就構成了一個幀。
首部和尾部的一個重要作用就是進行 幀定界 。
差錯控制
在傳輸過程中可能會產生 比特差錯 :1 可能會變成 0, 而 0 也可能變成 1。
可靠傳輸
接收方主機收到有誤碼的幀後,是不會接受該幀的,會將它丟棄
如果數據鏈路層向其上層提供的是不可靠服務,那麼丟棄就丟棄了,不會再有更多措施
如果數據鏈路層向其上層提供的是可靠服務,那就還需要其他措施,來確保接收方主機還可以重新收到被丟棄的這個幀的正確副本
以上三個問題都是使用 點對點信道的數據鏈路層 來舉例的
如果使用廣播信道的數據鏈路層除了包含上面三個問題外,還有一些問題要解決
如圖所示,主機A,B,C,D,E通過一根匯流排進行互連,主機A要給主機C發送數據,代表幀的信號會通過匯流排傳輸到匯流排上的其他各主機,那麼主機B,D,E如何知道所收到的幀不是發送給她們的,主機C如何知道發送的幀是發送給自己的
可以用編址(地址)的來解決
將幀的目的地址添加在幀中一起傳輸
還有數據碰撞問題
隨著技術的發展,交換技術的成熟,
在 有線(區域網)領域 使用 點對點鏈路 和 鏈路層交換機 的 交換式區域網 取代了 共享式區域網
在無線區域網中仍然使用的是共享信道技術
3.2、封裝成幀
介紹
封裝成幀是指數據鏈路層給上層交付的協議數據單元添加幀頭和幀尾使之成為幀
幀頭和幀尾中包含有重要的控制信息
發送方的數據鏈路層將上層交付下來的協議數據單元封裝成幀後,還要通過物理層,將構成幀的各比特,轉換成電信號交給傳輸媒體,那麼接收方的數據鏈路層如何從物理層交付的比特流中提取出一個個的幀?
答:需要幀頭和幀尾來做 幀定界
但比不是每一種數據鏈路層協議的幀都包含有幀定界標志,例如下面例子
前導碼
前同步碼:作用是使接收方的時鍾同步
幀開始定界符:表明其後面緊跟著的就是MAC幀
另外乙太網還規定了幀間間隔為96比特時間,因此,MAC幀不需要幀結束定界符
透明傳輸
透明
指某一個實際存在的事物看起來卻好像不存在一樣。
透明傳輸是指 數據鏈路層對上層交付的傳輸數據沒有任何限制 ,好像數據鏈路層不存在一樣
幀界定標志也就是個特定數據值,如果在上層交付的協議數據單元中, 恰好也包含這個特定數值,接收方就不能正確接收
所以數據鏈路層應該對上層交付的數據有限制,其內容不能包含幀定界符的值
解決透明傳輸問題
解決方法 :面向位元組的物理鏈路使用 位元組填充 (byte stuffing) 或 字元填充 (character stuffing),面向比特的物理鏈路使用比特填充的方法實現透明傳輸
發送端的數據鏈路層在數據中出現控制字元「SOH」或「EOT」的前面 插入一個轉義字元「ESC」 (其十六進制編碼是1B)。
接收端的數據鏈路層在將數據送往網路層之前刪除插入的轉義字元。
如果轉義字元也出現在數據當中,那麼應在轉義字元前面插入一個轉義字元 ESC。當接收端收到連續的兩個轉義字元時,就刪除其中前面的一個。
幀的數據部分長度
總結
3.3、差錯檢測
介紹
奇偶校驗
循環冗餘校驗CRC(Cyclic Rendancy Check)
例題
總結
循環冗餘校驗 CRC 是一種檢錯方法,而幀校驗序列 FCS 是添加在數據後面的冗餘碼
3.4、可靠傳輸
基本概念
下面是比特差錯
其他傳輸差錯
分組丟失
路由器輸入隊列快滿了,主動丟棄收到的分組
分組失序
數據並未按照發送順序依次到達接收端
分組重復
由於某些原因,有些分組在網路中滯留了,沒有及時到達接收端,這可能會造成發送端對該分組的重發,重發的分組到達接收端,但一段時間後,滯留在網路的分組也到達了接收端,這就造成 分組重復 的傳輸差錯
三種可靠協議
停止-等待協議SW
回退N幀協議GBN
選擇重傳協議SR
這三種可靠傳輸實現機制的基本原理並不僅限於數據鏈路層,可以應用到計算機網路體系結構的各層協議中
停止-等待協議
停止-等待協議可能遇到的四個問題
確認與否認
超時重傳
確認丟失
既然數據分組需要編號,確認分組是否需要編號?
要。如下圖所示
確認遲到
注意,圖中最下面那個數據分組與之前序號為0的那個數據分組不是同一個數據分組
注意事項
停止-等待協議的信道利用率
假設收發雙方之間是一條直通的信道
TD :是發送方發送數據分組所耗費的發送時延
RTT :是收發雙方之間的往返時間
TA :是接收方發送確認分組所耗費的發送時延
TA一般都遠小於TD,可以忽略,當RTT遠大於TD時,信道利用率會非常低
像停止-等待協議這樣通過確認和重傳機制實現的可靠傳輸協議,常稱為自動請求重傳協議ARQ( A utomatic R epeat re Q uest),意思是重傳的請求是自動進行,因為不需要接收方顯式地請求,發送方重傳某個發送的分組
回退N幀協議GBN
為什麼用回退N幀協議
在相同的時間內,使用停止-等待協議的發送方只能發送一個數據分組,而採用流水線傳輸的發送方,可以發送多個數據分組
回退N幀協議在流水線傳輸的基礎上,利用發送窗口來限制發送方可連續發送數據分組的個數
無差錯情況流程
發送方將序號落在發送窗口內的0~4號數據分組,依次連續發送出去
他們經過互聯網傳輸正確到達接收方,就是沒有亂序和誤碼,接收方按序接收它們,每接收一個,接收窗口就向前滑動一個位置,並給發送方發送針對所接收分組的確認分組,在通過互聯網的傳輸正確到達了發送方
發送方每接收一個、發送窗口就向前滑動一個位置,這樣就有新的序號落入發送窗口,發送方可以將收到確認的數據分組從緩存中刪除了,而接收方可以擇機將已接收的數據分組交付上層處理
累計確認
累計確認
優點:
即使確認分組丟失,發送方也可能不必重傳
減小接收方的開銷
減小對網路資源的佔用
缺點:
不能向發送方及時反映出接收方已經正確接收的數據分組信息
有差錯情況
例如
在傳輸數據分組時,5號數據分組出現誤碼,接收方通過數據分組中的檢錯碼發現了錯誤
於是丟棄該分組,而後續到達的這剩下四個分組與接收窗口的序號不匹配
接收同樣也不能接收它們,講它們丟棄,並對之前按序接收的最後一個數據分組進行確認,發送ACK4, 每丟棄一個數據分組,就發送一個ACK4
當收到重復的ACK4時,就知道之前所發送的數據分組出現了差錯,於是可以不等超時計時器超時就立刻開始重傳,具體收到幾個重復確認就立刻重傳,根據具體實現決定
如果收到這4個重復的確認並不會觸發發送立刻重傳,一段時間後。超時計時器超時,也會將發送窗口內以發送過的這些數據分組全部重傳
若WT超過取值范圍,例如WT=8,會出現什麼情況?
習題
總結
回退N幀協議在流水線傳輸的基礎上利用發送窗口來限制發送方連續發送數據分組的數量,是一種連續ARQ協議
在協議的工作過程中發送窗口和接收窗口不斷向前滑動,因此這類協議又稱為滑動窗口協議
由於回退N幀協議的特性,當通信線路質量不好時,其信道利用率並不比停止-等待協議高
選擇重傳協議SR
具體流程請看視頻
習題
總結
3.5、點對點協議PPP
點對點協議PPP(Point-to-Point Protocol)是目前使用最廣泛的點對點數據鏈路層協議
PPP協議是網際網路工程任務組IEIF在1992年制定的。經過1993年和1994年的修訂,現在的PPP協議已成為網際網路的正式標准[RFC1661,RFC1662]
數據鏈路層使用的一種協議,它的特點是:簡單;只檢測差錯,而不是糾正差錯;不使用序號,也不進行流量控制;可同時支持多種網路層協議
PPPoE 是為寬頻上網的主機使用的鏈路層協議
幀格式
必須規定特殊的字元作為幀定界符
透明傳輸
必須保證數據傳輸的透明性
實現透明傳輸的方法
面向位元組的非同步鏈路:位元組填充法(插入「轉義字元」)
面向比特的同步鏈路:比特填充法(插入「比特0」)
差錯檢測
能夠對接收端收到的幀進行檢測,並立即丟棄有差錯的幀。
工作狀態
當用戶撥號接入 ISP 時,路由器的數據機對撥號做出確認,並建立一條物理連接。
PC 機向路由器發送一系列的 LCP 分組(封裝成多個 PPP 幀)。
這些分組及其響應選擇一些 PPP 參數,並進行網路層配置,NCP 給新接入的 PC 機
分配一個臨時的 IP 地址,使 PC 機成為網際網路上的一個主機。
通信完畢時,NCP 釋放網路層連接,收回原來分配出去的 IP 地址。接著,LCP 釋放數據鏈路層連接。最後釋放的是物理層的連接。
可見,PPP 協議已不是純粹的數據鏈路層的協議,它還包含了物理層和網路層的內容。
3.6、媒體接入控制(介質訪問控制)——廣播信道
媒體接入控制(介質訪問控制)使用一對多的廣播通信方式
Medium Access Control 翻譯成媒體接入控制,有些翻譯成介質訪問控制
區域網的數據鏈路層
區域網最主要的 特點 是:
網路為一個單位所擁有;
地理范圍和站點數目均有限。
區域網具有如下 主要優點 :
具有廣播功能,從一個站點可很方便地訪問全網。區域網上的主機可共享連接在區域網上的各種硬體和軟體資源。
便於系統的擴展和逐漸地演變,各設備的位置可靈活調整和改變。
提高了系統的可靠性、可用性和殘存性。
數據鏈路層的兩個子層
為了使數據鏈路層能更好地適應多種區域網標准,IEEE 802 委員會就將區域網的數據鏈路層拆成 兩個子層 :
邏輯鏈路控制 LLC (Logical Link Control)子層;
媒體接入控制 MAC (Medium Access Control)子層。
與接入到傳輸媒體有關的內容都放在 MAC子層,而 LLC 子層則與傳輸媒體無關。 不管採用何種協議的區域網,對 LLC 子層來說都是透明的。
基本概念
為什麼要媒體接入控制(介質訪問控制)?
共享信道帶來的問題
若多個設備在共享信道上同時發送數據,則會造成彼此干擾,導致發送失敗。
隨著技術的發展,交換技術的成熟和成本的降低,具有更高性能的使用點對點鏈路和鏈路層交換機的交換式區域網在有線領域已完全取代了共享式區域網,但由於無線信道的廣播天性,無線區域網仍然使用的是共享媒體技術
靜態劃分信道
信道復用
頻分復用FDM (Frequency Division Multiplexing)
將整個帶寬分為多份,用戶在分配到一定的頻帶後,在通信過程中自始至終都佔用這個頻帶。
頻分復用 的所有用戶在同樣的時間 佔用不同的帶寬資源 (請注意,這里的「帶寬」是頻率帶寬而不是數據的發送速率)。
2. RTT是什麼
這要看是在哪種場合了。
RTT(Real-Time Tactics):即時戰術游戲又稱「實時戰術」游戲。
RTT(Round-Trip Time): 往返時延。在計算機網路中它是一個重要的性能指標,表示從發送端發送數據開始,到發送端收到來自接收端的確認(接收端收到數據後便立即發送確認),總共經歷的時延。
RTT(Render to Texture):渲染到紋理。普通的圖形渲染流程中,最終結果是渲染到幀緩存中,最後顯示到屏幕上,然後可以把紋理繼續應用到場景繪制中。
RTT(RT-Thread):國產開源實時操作系統。
RTT(Radio Transmission Technology):無線傳輸技術。參考CDMA2000詞條中的CDMA2000 1xRTT。
RTT(Radiation Tracking Transcer): 紅外線跟蹤系統, 輻射跟蹤換能器。
RTT(Radio Teletype (-writer)): 無線電電傳打字電報機。
RTT(Radioteletype Transmitter): 無線電電傳打字電報發射機。
3. 計算機網路主要的兩個性能指標是什麼啊
速率、帶寬、吞吐量、時延、時延帶寬積、往返時間rtt、利用率
計算機發送出的信號都是數字形式的。比特(bit)是計算機中的數據量的單位,也是資訊理論中使用的信息量單位。英文字bit來源binary
digit(一個二進制數字),因此一個比特就是二進制數字中的一個1或0。網路技術中的速率指的是鏈接在計算機網路上的主機在數字信道上傳送數據的速率,也稱為數據率(data
rate)或者比特率(bit
rate)。速率的單位是b/s(比特每秒)或者bit/s,也可以寫為bps,即bit
per
second。當數據率較高時,可以使用kb/s(k=10^3=千)、mb/s(m=10^6=兆)、gb/s(g=10^9=吉)或者tb/s(t=10^12=太)。現在一般常用更簡單並不是很嚴格的記法來描述網路的速率,如100m乙太網,而省略了b/s,意思為數據率為100mb/s的乙太網。這里的數據率通常指額定速率。
4. 網路中的RTT是什麼意思
RTT(Round-Trip Time): 往返時延。在計算機網路中它是一個重要的性能指標,表示從發送端發送數據開始,到發送端收到來自接收端的確認(接收端收到數據後便立即發送確認),總共經歷的時延。 RTT(Radio Transmission Technology): 無線傳輸技術。參考CDMA2000詞條中的CDMA2000 1xRTT。 RTT(Radiation Tracking Transcer): 紅外線跟蹤系統, 輻射跟蹤換能器。 RTT(Radio Teletype (-writer)): 無線電電傳打字電報機。 RTT(Radioteletype Transmitter): 無線電電傳打字電報發射機。 RTT(Real-Time Tactics):即時戰術游戲又稱「實時戰術」游戲。它與即時戰略(RTS:Real-Time Strategy)相類似,但缺少必要的戰略要素,如資源採集、建造、發展等。一種常見的誤解是認為「只要是即時進行的戰爭游戲就是即時戰略游戲」。其實即時戰略游戲的定義是很嚴格的,即時戰略的「戰略(Strategy)」的謀定過程必須是即時的,如果只有戰斗是即時的,而採集、建造、發展等戰略元素卻以回合制進行,則該游戲不能歸為即時戰略游戲。如果該游戲完全沒有上述戰略元素,則只能歸為即時戰術(RTT:Real-Time Tactics)游戲。
5. [計算機網路之一] 網路基礎知識
協議就是計算機與計算機之間通過網路實現通信時事先達成的一種 「約定」。這種 「約定」 使那些由不同的廠商、不同的 CPU 以及不同的操作系統組成的計算機之間,只要遵循相同的協議就能夠實現通信。
TCP/IP、AppleTalk(僅限蘋果計算機使用)、SNA(IBM)、DECnet(DEC)、IPX/SPX(Novell)
分組交換是指將大數據分割為一個個叫做包的較小單位進行傳輸的方法。
ISO (International Organization for Stardards,國際標准化組織)制定了國際標准 OSI (Open System Interconnection,開放系統互聯參考模型),但是沒有得到普及,反而是隨 Apanet 而生的 TCP/IP 協議在大學研究機構和計算機行業的推動下成為實際的業界標准。
每個分層都接收由它下一層所提供的特定服務,並且負責為自己的上一層提供特定服務。上下層之間進行交互所遵循的約定叫做 「介面」 ,同一層之間交互所遵循的約定叫做 「協議」 。
協議分層參考了計算機軟體中的模塊化開發。
單播、廣播、多播、任播。
一個地址必須明確地表示一個主體對象,在同一個通信網路中不允許有兩個相同地址的通信主體存在。
有層次性的地址方便高效地找到通訊目標(eg: 快遞地址國家、省市區)
MAC地址有唯一性但沒有層次性。
乙太網、無線、幀中繼、ATM、FDDI、ISDN。
NIC(Network Interface Card,網路介面卡),計算機必須有網卡才能接入網路。
物理層面上延長網路的設備。將電纜傳遞過來的光電信號經過波形調整和放大之後傳遞給另一個電纜。
集線器 :提供多個埠的中繼器。
數據鏈路層面連接兩個網路的設備。 不同網路可能採用了不同的數據鏈路,數據傳輸的速率可能完全不一樣 ,網橋會緩存一個網段傳輸到另一個網段的數據幀,再重新生成信號作為全新的幀轉發給另一個網段(這里我理解不同數據鏈路幀的格式不一樣,所以網橋需要緩存數據並轉換位另一個數據鏈路中的幀格式)。
網橋的其他作用:
① 根據數據幀中的 FCS 檢查數據幀是否已損壞,是則不轉發;
② 自學習MAC設備來自哪些網路,並記錄在地址轉發表中(地址轉發表記錄硬體地址與網路的映射關系);
③ 過濾功能控制網路流量。
交換集線器 :每個埠都相當於一個網橋。
網路層面上連接兩個網路、並對分組報文進行轉發的設備。
應用場景:廣域網加速器、特殊應用訪問加速、防火牆。
將傳輸層到應用層的數據進行轉發和翻譯的設備。
代理伺服器 :控制流量和出於安全考慮,客戶端和服務端無需在網路上直接通信,而是從傳輸層到應用層對數據和訪問進行各種控制和處理。
研發基於分組交換技術的 ARPANET,取代容災性差的中央集中式網路。
單個網路無法解決所有通信問題,開始研究網路互連技術,出現了 TCP/IP,並首先被 BSD UNIX 採用,隨之被廣泛使用變得流程,所有使用 TCP/IP 協議的計算機都能利用互連網相互通信。
圍繞大型計算機中心建設計算機網路,即 NSFNET(國家科學基金網),它是一個三級網路,分為主幹網、地區網和校園網。這種三級計算機網路覆蓋了全美主要的大學和研究所,並成為互聯網中的主要組成部分。
NSFNET 逐漸被商用的互聯網主幹網替代,政府機構不再負責互聯網的運營。用戶接入互聯網需要通過 ISP(Internet Service Provider:互聯網服務提供商)。
IXP(Internet eXchange Point)互聯網交換點 的作用是允許兩個網路直接相連並交換分組,而不需要再通過第三個網路(如上圖中的主幹 ISP)來轉發分組。
所有的互聯網標准都是以 RFC 的形式在互聯網上發表的,但並非所有的 RFC 文檔都是互聯網標准。
制定互聯網的正式標准要經過以下三個階段
(1)互聯網草案
(2)建議標准
(3)互聯網標准
由所有連接在互聯網上的主機組成。這部分是用戶直接使用的額,用來進行通信和資源共享。
由大量網路和連接這些網路的路由器組成。這部分視為邊緣部分提供服務的(提供連通性和交換)。
① 電路交換的起源
② 電路交換的特點
在使用信道時,信道兩端的兩個用戶始終佔用端到端的通信資源,線路上真正傳送數據的時間比例很小,傳輸效率很低。
③ 電路交換的步驟
建立連接 (佔用通信資源)→ 通話 (一直佔用通信資源)→ 釋放連接 (歸還通信資源)
電報通信採用基於存儲轉發原理的報文交換,整個報文被發送到相鄰結點,存儲下來,再轉發到下一個結點。
① 分組交換的特點
把一個完整的報文劃分為一個個分組,每個分組傳送到相鄰結點後,存在下來查找轉發表,在轉發到下一個結點。
② 分組交換的優缺點
優點:每個分組可以經過不同的路由,使得有更好的可靠性,也能充分利用網路性能。
缺點:分組控制信息有一定開銷,路由器存儲轉發時需要排隊導致產生時延,無法確保通信時端到端所需的寬頻。
① 廣域網 WAN(Wide Area Network) 廣域網的作用范圍通常為幾十到幾千公里,是互聯網的核心,其任務是通過長距離運送主機鎖發送的數據。連接廣域網各結點交換機的鏈路一般都是高速鏈路,具有較大的通信量。
② 城域網 MAN(Metropolotan Area Network) 城域網的作用范圍一般是一個城市,作用距離約為 5 ~ 50 km。可以為一個或幾個單位所用歐,也可以是一種公用設置,用來將多個區域網進行互聯。目前很多城域網採用的是乙太網技術。
③ 區域網 LAN(Local Area Network) 區域網一般用微型計算機或工作站通過高速通信鏈路相連(速率通常在 10 Mbit/s 以上),但地理上則局限在較小的范圍(如 1 km 左右)。在區域網發展的初期,一個學校或工廠往往只擁有有個區域網,但現在區域網已非常廣泛地使用,學校或企業大都擁有多個互連的區域網(這樣的網路常稱為 校園網 或 企業網 )。
④ 個人區域網 PAN(Personal Area Network) 個人區域網就是在個人工作的地方把屬於個人使用的電子設備用無線技術連接起來的網路,因此也常稱為 無線個人區域網 WPAN(Wireless PAN) ,其范圍很小,大約在 10 m 左右。
① 公用網(pulic network) 電信公司出資建造的大型網路。
② 專用網(private network) 某個部門為滿足本單位的特殊業務工作的需要而建造的網路。這種網路不向本單位以外的人提供服務,例如,軍隊、鐵路、銀行、電力等系統均有本系統的專用網。
接入網(Access Network) ,又稱為本地接入網或居民接入網。
數據的傳輸速率,也稱為數據率或比特率,單位為 bit/s(比特每秒)(或 b/s,有時也寫為 bps,即 bit per second)。
1 kbit/s = 1 × 10³ bit/s,1 Mbit/s = 1 × 10^6 bit/s,1 Gbit/s = 1 × 10^9 bit/s,1 Tbit/s = 1 × 10^12 bit/s
吞吐量表示在單位時間內通過某個網路的實際的數據量,單位同速率帶寬。
時延是指數據從網路的一端傳送到另一端所需的時間,網路時延由幾個部分組成:
網路總時延 = 發送時延 + 傳播時延 + 處理時延 + 排隊時延
[誤區] 光纖的傳播速率實際上比銅線要慢,但是光纖的帶寬卻比普通的雙絞線要快,這是因為光信號的抗干擾性強,並且可以通過波分復用的信道復用技術,達到一路光纖傳輸多路信號的效果。
時延帶寬積表示信道中可以容納多少比特。
在計算機網路中,往返時間 RTT(Round-Trip Time)是一個重要的性能指標,因為在許多情況下,互聯網上的信息不僅僅單方向傳輸而是雙向交互的。
使用衛星通信時,發送時延很短,主要消耗在來回傳播時延上,即往返時間相對較長。
利用率有信道利用率和網路利用率兩種。信道利用率指出某信道有百分之幾的時間是被利用的(有數據通過)。完全空閑的信道的利用率為零。網路利用率則是全網路的信道利用率的加權平均值。
D0 表示網路空閑時的時延,D 表示網路當前的時延,U 表示利用率,則
U = 1 - D0/D,變形一下,有
信道利用率不是越高越好,因為信道利用率增大時,網路時延也會增加,因為排隊時延增大。所以當 U 趨於 1 時,D 會趨於無限大,所以 信道或網路的利用率過高會產生非常大的時延 。
費用、質量、標准化、可靠性、可擴展性和可升級性、易於管理和維護。
① 語法,即數據與控制信息的結構或格式;
② 語義,即需要發出何種控制信息,完成何種動作以及做出何種響應;
③ 同步,即時間實現順序的詳細說明。
① 各層獨立;
② 靈活性好;
③ 結構上可分割開;
④ 易於實現和維護;
⑤ 能促進標准化工作。
計算機網路的各層及其協議的集合就是網路的體系結構。
實體 :表示任何可發送或接收信息的硬體或軟體進程。
協議 :協議是水平的,控制兩個對等實體進行通信的規則的集合。
服務 :服務是垂直的,下層通過介面向上層提供服務。
服務訪問點 :SAP(Service Access Point),同一系統中相鄰兩層的實體進行交互的地方。
6. 計算機網路的性能指標有哪些簡述其概念。
計算機網路的性能一般指它的幾個重要的性能指標。但除了這些重要的性能指標外,還有一些非性能特徵也對計算機網路的性能有很大的影響。
性能指標從不同的方面來度量計算機網路的性能。下面總結下常用的七個性能指標。
1、速率
計算機發送出的信號都是數字形式的。比特(bit)是計算機中的數據量的單位,也是資訊理論中使用的信息量單位。英文字bit來源binary digit(一個二進制數字),因此一個比特就是二進制數字中的一個1或0。網路技術中的速率指的是鏈接在計算機網路上的主機在數字信道上傳送數據的速率,也稱為數據率(data rate)或者比特率(bit rate)。速率的單位是b/s(比特每秒)或者bit/s,也可以寫為bps,即bit per second。當數據率較高時,可以使用kb/s(k=10^3=千)、Mb/s(M=10^6=兆)、Gb/s(G=10^9=吉)或者Tb/s(T=10^12=太)。現在一般常用更簡單並不是很嚴格的記法來描述網路的速率,如100M乙太網,而省略了b/s,意思為數據率為100Mb/s的乙太網。這里的數據率通常指額定速率。
2、帶寬
帶寬本上包含兩種含義:
(1)帶寬本來指某個信號具有的頻帶寬度。信號的帶寬是指該信號所包含的各種不同頻率成分所佔據的頻率范圍。例如,在傳統的通信線路上傳送的電話信號的標准帶寬是3.1kHz(從300Hz到3.1kHz,即聲音的主要成分的頻率范圍)。這種意義的帶寬的單位是赫茲。在以前的通信的主幹線路傳送的是模擬信號(即連續變化的信號)。因此,表示通信線路允許通過的信號頻帶范圍即為線路的帶寬。
(2)在計算機網路中,貸款用來表示網路的通信線路所能傳送數據的能力,因此網路帶寬表示在單位時間內從網路的某一點到另一點所能通過的「最高數據量「。這種意義的帶寬的單位是」比特每秒「,即為b/s。子這種單位的前面也通常加上千(k)、兆(M)、吉(G)、太(T)這樣的倍數。
3、吞吐量
吞吐量(throughput)表示在單位時間內通過某個網路(或信道、介面)的數據量。吞吐量進場用於對現實世界中的網路的一種測量,以便知道實際上到底有多少數據量能夠通過網路。顯然,吞吐量受到網路的帶寬或網路的額定速率的限制。例如,對於一個100Mb/s的乙太網,其額定速率為100Mb/s,那麼這個數值也是該乙太網的吞吐量的絕對上限值。因此,對100Mb/s的乙太網,其典型的吞吐量可能只有70Mb/s。
4、時延
時延指數據(一個報文或者分組)從網路(或鏈路)的一端傳送到另一端所需的時間。時延是一個非常重要的性能指標,也可以稱為延遲或者遲延。
網路中的時延由以下幾部分組成:
(1)發送時延 發送時延是主機或路由器發送數據幀所需要的時間,也就是從發送數據幀的第一個比特算起,到該幀的最後一個比特發送完畢所需時間。發送時延也可以稱為傳輸時延。發送的時延=數據幀長度(b)/發送速率(b/s)。
對於一定的網路,發送時延並非固定不變,而是與發送的幀長成正比,與發送數率成反比。
(2)傳播時延 傳播時延是電磁波在信道中傳播一定的距離需要花費的時間。
傳播時延=信道長度(m)/電磁波在信道上的傳播數率(m/s)
電磁波在自由空間的傳播速率是光速,即3.0×10^5 km/s。電磁波在網路傳輸媒體中的傳播速率比在自由空間低一些,在銅線電纜中的傳播速率約為2.3×10^5 km/s,在光纖中的傳播速率約為2.0×10^5 km/s。
(3)處理時延 主機或路由器在收到分組時需要花費一定的時間處理,分析分組首部、從分組中提取數據部分、進行差錯檢驗、查到適當路由等,這就產生了處理時延。
(4)排隊時延 分組在經過網路傳輸時,要經過許多的路由器。但分組在進入路由器後要先在輸入隊列中排隊等待處理。在路由器確定了轉發介面後,還要在輸出隊列中排隊等待轉發。這就產生了排隊延時。排隊延時通常取決於網路當時的通信量。
這樣數據在網路中盡力的總延時就是
總延時 = 發送延時 + 傳播延時 + 處理延時 + 排隊延時
對於高速網路鏈路,提高的僅僅是數據的發送數率而不是比特在鏈路上的傳播速率。荷載信息的電磁波在通信線路上的傳播速率與數據的發送速率並無關系。提高的數據的發送速率只是減小了數據的發送時延。
5、時延帶寬積
把以上兩個網路性能的兩個度量,傳播時延和帶寬相乘,就等到另外一個度量:傳播時延帶寬積,即
時延帶寬積 = 傳播時延 × 帶寬
例如,傳播時延為20ms,帶寬為10Mb/s,則時延帶寬積 = 20 × 10 × 10^3 /1000 = 2 × 10^5 bit。這就表示,若發送端連續發送數據,則在發送的第一個比特即將達到終點時,發送端就已經發送了20萬個比特,而這20萬個bit都在鏈路上向前移動。
6、往返時間RTT
在計算機網路中,往返時間RTT也是一個重要的性能指標,表示從發送方發送數據開始,到發送方收到來自接收方的確認,總共經歷的時間。對於上面提到的例子,往返時間RTT就是40ms,而往返時間和帶寬的乘積是4×10^5(bit)。
顯然,往返時間與所發送的分組長度有關。發送很長的數據塊的往返時間,應當比發送很短的數據塊往返時間要多些。
往返時間帶寬積的意義就是當發送方連續發送數據時,即能夠及時收到對方的確認,但已經將許多比特發送到鏈路上了。對於上述例子,假定數據的接收方及時發現了差錯,並告知發送發,使發送方立即停止發送,但也已經發送了40萬個比特了。
7、利用率
利用率有信道利用率和網路利用率。信道利用率指出某信道有百分之幾的時間是被利用的。網路利用率則是全網路的信道利用率的加權平均值。信道利用率並非越高越好。這是因為,根據排隊的理論,當某信道的利用率增大時,該信道引起的時延也就迅速增加。
如果D0表示網路空閑時的時延,D表示當前網路時延,可以用簡單公式(D=D0/(1-U)來表示D,D0和利用率U之間的關系。U數值在0和1之間。當網路的利用率接近最大值1時,網路的時延就趨近於無窮大。
7. 計算機網路按傳輸介質可分為哪三類
計算機網路按傳輸介質可分為有線網、光纖網、無線網。
1.有線網:指採用雙絞線來連接的計算機網路。
2.光纖網:採用光導纖維作為傳輸介質。
3.無線網:採用一種電磁波作為載體來實現數據傳輸的網路類型。
按數據交換方式劃分分為電路交換網、報文交換網、分組交換網 。
按通信方式劃分為廣播式傳輸網路、點到點式傳輸網路。
根據網路的覆蓋范圍與規模分為區域網、城域網、廣域網。
(7)計算機網路里的rtt是什麼擴展閱讀
計算機網路的性能指標
(1)速率
網路技術中的速率指的是連接在計算機網路上的主機在數字信道上傳送數據的速率,它也稱為數據率(data rate)或比特率(bit rate)。速率是計算機網路中最重要的一個性能指標。速率的單位是bit/s(比特每秒)(即bit per second)。
(2)帶寬
信號的帶寬是指該信號所包含的各種不同頻率成分所佔據的頻率范圍。
(3)吞吐量
吞吐量表示在單位時間內通過某個網路(或信道、介面)的數據量。
(4)時延
時延是指數據(一個報文或分組,甚至比特)從網路(或鏈路)的一端傳送到另一端所需的時間。
(5)時延帶寬積
把以上討論的網路性能的兩個度量—傳播時延和帶寬相乘,就得到另一個很有用的度量:傳播時延帶寬積,即時延帶寬積=傳播時延×帶寬。
(6)往返時間(RTT)
在計算機網路中,往返時間也是一個重要的性能指標,它表示從發送方發送數據開始,到發送方收到來自接收方的確認(接受方收到數據後便立即發送確認)總共經歷的時間。
(7)利用率
利用率有信道利用率和網路利用率兩種。信道利用率指某信道有百分之幾的時間是被利用的(有數據通過),完全空閑的信道的利用率是零。網路利用率是全網路的信道利用率的加權平均值。
8. 計算機網路(5)| 運輸層
從通信和處理信息的角度看,運輸層是向它上面的應用層提供通信服務的,它屬於面向通信部分的最高層,同時也是用戶功能中的最低層。當網路的邊緣部分中的兩台主機使用網路的核心部分的功能進行端到端的通信時,只有主機的協議棧才有運輸層,而網路核心部分中的路由器在轉發分組時都只用到下三層的功能。
運輸層的兩個主要協議 TCP/IP 都是互聯網的正式標准,即:
(1)用戶數據報協議UDP
(2)傳輸控制協議TCP
TCP則是面向連接的服務。在傳送數據之前必須先建立連接,數據傳送結束後要釋放連接。TCP不提供廣播或者多播服務。由於TCP要提供可靠的面向連接的運輸服務,因此需要增加很多的開銷。
TCP/IP的運輸層用一個16位埠號來標志一個埠。埠號只有本地意義。它是為了標志本計算機應用層中的各個進程在和運輸層交互時的層間介面。
運輸層的埠號分為以下兩類:
(1)伺服器端使用的埠號: 它主要分為系統埠號0~1023和登記埠號1024~49151。
(2)客戶端使用的埠號: 49152~65535,這類埠號僅在客戶端進程運行時才動態選擇。當伺服器收到客戶端進程的報文時,就知道客戶端進程的埠號。因而可以把數據發送給客戶進程。
用戶數據報協議相比於IP的數據報服務就是只增加了復用、分用和差錯檢測功能。UDP的主要特點是:
(1)UDP是無連接的, 發送數據之前不需要建立連接,因此減少開銷和發送數據之前的時延。
(2)UDP使用盡最大努力交付, 即不保證可靠交付,因此主機不需要維持復雜的連接狀態表。
(3)UDP是面向報文的。 發送方的UDP對應用交下來的報文,添加首部後就向下交付給IP層。不對報文做任何處理,因此當報文過長時,IP層可能需要進行分片處理。
(4)UDP沒有擁塞控制, 網路出現的擁塞不會使源主機的發送速率減低。
(5)UDP支持一對一、一對多、多對一和多對多的交互通信。
(6)UDP的首部開銷小, 只有8個位元組。
UDP有兩個欄位:數據欄位和首部欄位。先介紹首部欄位,它是由4個欄位組成的,每個欄位只有2個位元組,總共有8個位元組。各個欄位的意義如下:
(1)源埠: 源埠號。在需要對方回信時選用。不需要時可用全0。
(2)目的埠: 目的埠號。在這終點交付報文時必須使用。
(3)長度: UDP用戶數據報的長度,其最小值是8(只有首部)。
(4)檢驗和: 檢測UDP用戶數據報在傳輸中是否有錯,有錯則丟棄。
當在傳送用戶數據報時,如果接收方UDP發現收到的報文中目的埠號不正確(即不存在對應於該埠號的應用進程),就丟棄該報文,並由網際控制報文協議ICMP發送「埠不可達」差錯報文給發送方。
TCP的主要特點如下:
(1)TCP是面向連接的運輸層協議。 應用程序在使用TCP協議之前,必須先建立TCP連接。傳送數據完畢後,必須釋放TCP連接。
(2)每一條TCP連接只能有兩個端點。 每一條TCP連接只能是點對點的。
(3)TCP提供可靠交付的服務。 通過TCP連接傳送的數據,無差錯、不丟失、不重復,並且按序到達。
(4)TCP提供全雙工通信。 TCP允許通信雙方的應用進程在任何時候都能發送數據。
(5)面向位元組流。 TCP中的流指的是流入到進程或進程流出的位元組序列。雖然應用程序和TCP的交互是一次一個數據塊,但TCP把應用程序交下來的數據看成一連串的無結構的位元組流。TCP不保證發送方發送的數據塊和接收方接收的數據塊一致,但保證程序接收到的位元組流和程序發送的位元組流一致。
TCP連接的端點叫做套接字或者插口。套接字是指將埠號拼接到IP地址之後,即:
每一條TCP連接唯一的被通信兩端的兩個端點所確定。即:
如圖所示,A發送分組M1,發送完畢就暫停發送,等待B的確認,B收到了M1就向A發死你確認。A在收到了對M1的確認之後,就再發送下一個分組M2,以此類推。
如圖所示,當B接收M1時檢測出了差錯,就丟棄M1,其他什麼也不做。而A只要超過了一段時間沒有收到確認,就會認為剛才發送的分組丟失了,因而重傳前面發送過的分組,這就叫做超時重傳,而實現超時重傳則需要A為每一個已發送的分組都設置一個超時計時器。
需要注意以下三點:
(1)A在發送完一個分組後,必須暫時保留已發送的分組的副本。
(2)分組和確認分組必須編號,這樣才能明確哪一個發出的分組收到了確認。
(3)超時計時器設置的重傳時間應當比數據在分組傳輸的平均往返時間更長。
如圖所示,B所發送的對M1確認丟失了,A在設定的超時重傳時間內沒有收到確認,所以無法知道自己發送的分組是怎樣出錯的,所以會重傳M1,而當B又收到了重傳的分組M1,這時應該採取兩個行動:
(1)丟棄這個重復分組M1。
(2)向A發送確認。
還有一種情況就是在傳輸過程中沒有出現差錯,但B對分組M1的確認遲到了,而A會收到重復的確認,A收下後就會丟棄,B仍然會收到重復的M1,並且同樣要丟棄重復的M1,並且重傳確認分組。
停止等待協議的優點是簡單,缺點則是信道的利用率太低。我們用TD表示A發送分組需要的時間,TA表示B發送確認分組需要的時間,RTT為往返時間,則:
為了提高傳輸的效率,發送方可以不使用低效率的停止等待協議,而是採用流水線傳輸的方式。即不必每發完一個分組就停下來等待對方的確認,這樣就可以使信道上一直有數據在不間斷的傳送。
如圖表示的是發送方維持的發送窗口,它指的是位於發送窗口內的5個分組都可以連續發送出去而不需要等待對方的確認。同時連續ARP協議規定,發送方每收到一個確認,就把發送窗口向前滑動一個分組的位置。
對於接收方採用的則是累計確認的方式,即接收方不必對收到的分組逐個發送確認。而是在收到幾個分組後,對按序到達的最後一個分組發送確認,這就表示:到這個分組為止的所有分組都已正確收到了。這種方式的優點是:容易實現,即使確認丟失也不必重傳(意思是發送方不必重傳)。但缺點是不能向發送方反映出接收方已經正確收到的所有分組信息。
TCP雖然是面向位元組流的,但傳送TCP的數據單元卻是報文段。一個TCP報文段可以分為首部和數據兩部分。
為了後面講述的方便,我們假設數據傳輸只在一個方向進行,即A發送數據,B給出確認。
TCP的滑動窗口是以位元組為單位的。如圖所示,現在假定A收到了B發來的確認報文段,其中的窗口是20位元組,而確認號是31,根據這2個數據,A就構造出自己的發送窗口。
發送窗口表示:在沒有收到B的確認的情況下,A可以連續把窗口內的數據都發送出去。凡是已經發送過的數據,在未收到確認之前都必須暫時保留,以便在超時重傳時使用。發送窗口後面的部分表示已發送且已經收到了確認。而發送窗口前沿的部分表示不允許發送的。
現在假定A發送了序號為31~41的數據。這時發送窗口位置並未改變但是發送窗口內靠後面有11個位元組表示已發送但是未收到確認。而發送窗口內靠前面的9個位元組時允許發送但未發送的。如圖所示:
而對於B,它的接收窗口大小是20,在接收窗口外面到30號位置的數據是接收並確認的,因此可以丟棄。在下圖中,B收到了32和33的數據,但它們不是按序到達的,因為並沒有收到31號數據。B只能對按序達收到的數據中的最高序號給出確認,因此B發送的確認報文欄位的確認號依然是31號。
現在假定B收到了序號為31的數據,並把31~33的數據交付主機,然後B刪除這些數據。接著把窗口向前移動3個序號,同時給a發送確認,其中的窗口值仍為20,但確認號變為34。表明B已經收到序號33為止的數據。
因為TCP的發送方在規定的時間內沒有收到確認就要重傳已經發送的報文段,但是重傳時間的選擇卻TCP最復雜的問題之一。為此TCP採用了一種自適應演算法,它記錄了一個報文段發出的時間以及收到相應的確認的時間。這兩個時間之差就是報文段的往返時間RTT,同時TCP保留了RTT的加權平均往返時間RTTs。而RTTD是RTT的偏差加權平均值,它與RTTs和新的RTT樣本之差有關。
超時重傳時間的演算法如下:
第一次測量時,加權平均往返時間取往返時間RTT,以後每次測量到一個新的RTT,按以下公式計算:
第一次測量時,RTT偏差的加權平均等於RTT的一半,以後的測里中,按以下公式計算:
綜上超時重傳時間RTO計算如下:
若收到的報文無差錯,只是未按序號,使用選擇確認SACK可是讓發送方發送那些未收到的數據,而不重復發送已經收到的那些數據。如果要使用選擇確認SACK,那麼在建立TCP連接時,就要在TCP首部的選項中加上「允許SACK」的選項,並且雙方必須都事先商量好。
流量控制就是指讓發送方的發送速率不要太快,要讓接收方來得及接收。而利用滑動窗口機制就可以很方便的在TCP連接上實現對發送方的流量控制。
如上圖所示,接收方B進行了三次流量控制。第一次把窗口減小到rwnd=300,第二次又減到rwnd=100,最後是rwnd=0,即不允許發送方再發送數據了。
但是我們應該考慮一種情況,就是當接收方B的存儲已滿時,會向發送方發送零窗口的報文段,接著B的存儲又有了一些空間,B再向A發送一個不為零的窗口值,但這個報文丟失了,結果就是雙方一直等待下去。所以為了解決這個問題,TCP為每一個連接設有一個持續計時器。只要TCP連接的一方收到對方的零窗口通知,就啟動持續計時器,當計時器到期後,就發送一個探測段文段,而對方就在確認這個探測段時給出了現在的窗口值。如果窗口仍然是0,那麼收到這個報文段的一方就重新設置持續計時器,反之則死鎖的僵局就可以打破了。
應用程序把數據傳送到TCP的發送緩存後,TCP在何時發送這些數據?,在TCP的實現中廣泛使用了Nagle演算法。具體演算法如下:
(1)若發送應用進程要把數據逐個位元組地送到TCP的發送緩存,則發送方就把第一個數據位元組先發出去,把後面到達的數據位元組都緩存起來。
(2)方發送方收到對第一個數據位元組的確認後,再把發送緩存中的所有數據組裝成一個報文發送出去,同時繼續對後續到來的數據進行緩存。
(3)只有收到對前一個報文段的確認後才繼續發送下一個報文段。
當數據到達快而網路速度慢時,這種方法可以明顯減少網路帶寬。Nagle還規定:當到達的數據達到窗口的一半或最大報文長度時就立即發送一個報文。
但還還需要考慮一個叫做糊塗綜合征的問題,具體內容是若接收方的緩存已滿,應用進程每次只從緩存中取1個位元組,然後向發送方確認,並把窗口設為1個位元組(緩存只空了1個位元組的空間),接著發送方發來1個位元組,接收方發回確認,仍然將窗口設為1,這樣進行下去,網路的利用率很低。
為了解決這個問題,可以讓接收方等待一段時間,使得或者緩存已有足夠的空間或者等到接收緩存已有一半的空閑空間。此時,接收方就發出確認報文,並向發送方通知當前窗口的大小。
擁塞 是指在某一段時間內,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的性能就會變壞的情況。而所謂的 擁塞控制 就是防止過多的數據注入到網路當中,這樣可以使網路中的路由器或者鏈路不致過載,它是一個全局性的過程,涉及到所有的主機和路由器,而流量控制往往是指點對點通信量的控制。擁塞控制所要做的都有一個前提,就是網路能夠承受現有的網路負荷。
TCP進行擁塞控制的演算法有4種:慢開始、擁塞避免、快重傳和快恢復。下面在討論這些演算法時我們假定:
(1)數據是單方向傳送的,對方只傳送確認報文。
(2)接收方總是有足夠大的緩存空間。
發送方維持一個擁塞窗口的狀態變數,其大小取決於擁塞程度,並且動態變化。發送方讓自己的發送窗口小於擁塞窗口(如果考慮接收方的接收能力的話,發送窗口可能小於擁塞窗口)。發送方控制擁塞窗口的原則是:只要網路沒有擁塞,擁塞窗口就再增大一點,以便把更多的分組發送出去,只要出現擁塞,就減小擁塞窗口,以減少注入到網路的分組數。
下面會從「慢開始演算法」講起來討論擁塞窗口的大小如何變化的。
慢開始的演算法思路是:當主機開始發送數據時,由於並不清楚網路的負荷情況,所以如果立即把大量數據位元組注入到網路中,就有可能引起網路擁塞。因此會採用由小逐漸增大發送窗口。即在通常開始發送報文時,先將擁塞窗口cwnd的值設為一個最大報文段MSS的數值,而在每收到一個新的報文段確認後,把擁塞窗口增加至多一個MSS的數值。
如上圖所示,開始時cwnd=1,發送方發送一個M1,接收方收到M1發送確認,發送方收到一個確認後將cwnd加1,此時cwnd=2,因此發送方發送M2和M3兩個報文段,接收方收到後返回兩個確認,因此cwnd增加兩次,此時cwnd=4,接著發送方發送M4~M7四個報文段。依次類推。因此使用慢開始演算法後,每經過一個傳輸輪次,擁塞窗口就加倍。
但是為了防止擁塞窗口cwnd增加過大導致網路擁塞,需要設置一個慢開始門限ssthresh,慢開始門限用法如下:
當cwnd<ssthresh時,使用上述的慢開始演算法。
當cwnd>ssthresh時,停止使用慢開始演算法,使用擁塞避免演算法。
當cwnd=ssthresh時,既可以使用慢開始演算法,也可以使用擁塞避免演算法。
這里的擁塞避免演算法是指讓擁塞窗口緩慢的增大,即每經過一個往返時間RTT就把發送方的擁塞窗口cwnd加1,而不是像慢開始階段那樣加倍增長。
需要注意的是無論在慢開始階段還是擁塞避免階段,只要發送方判斷網路出現擁塞(根據是沒有按時收到確認),立即把慢開始門限ssthresh設為出現擁塞時的發送窗口的一半。然後發送窗口cwnd重新設為1,執行慢開始演算法。目的是迅速減少主機發送到網路分組的分組數。
快重傳演算法要求接收方每收到一個失序的報文段後就立即發送重復確認,如下圖接收了M1和M2後,又接收到一個M4,M4屬於失序報文,則發送對M2的重復確認。發送方只要連續收到三次確認重復就立即重傳對方未收到的報文段M3。
與快重傳演算法配合的還有快恢復演算法,過程如下:
(1)當發送方連續收到三個重復確認時,就把慢開始門限ssthresh減半,這是為了防止網路擁塞,接著並不執行慢開始演算法。
(2)由於上圖這種情況很可能不是因為網路擁塞引起的,因此這里不執行慢開始演算法(即不把擁塞窗口cwnd設為1,這樣速度太慢),而是把cwnd值設置為慢開始門限ssthresh減半後的數值,然後開始執行擁塞避免演算法。
TCP的運輸連接有是三個階段:連接建立、數據傳送和連接釋放。在TCP的連接過程中要解決以下三個問題:
(1)要使每一方能夠確知對方的存在。
(2)要允許雙方協商一些參數(如最大窗口值、是否使用窗口擴大選項和時間戳選項以及服務質量)。
(3)能夠對運輸實體資源進行分配。
TCP建立連接的過程叫做握手,握手需要在客戶和伺服器之間交換3個TCP報文段。如圖是三報文握手建立的連接過程:
A最後還要發送一次確認的原因是為了防止已經失效的連接請求報文段突然又傳送到了B,因而產生錯誤。試想一種情況:如果只有第一次和第二次握手,第二次B向A發送的確認丟失了,此時B進入了連接建立狀態,A沒有收到確認,過一段時間後會再次向B發送連接請求,B收到後又會再次建立連接,白白浪費B的資源。
A在TIME-WAIT狀態等待2MSL(MSL,最長報文段壽命),主要是因為以下兩點考慮:首先是為了保證A發送的最後一個ACK報文段能夠到達B,因為這個ACK報文段可能丟失,此時B會重傳連接釋放報文,如果A已經關閉,則無法收到這個報文。其次,當A在發送完最後一個ACK報文段後,再經過時間2MSL,就可以使本連接持續時間內產生的所有報文段都從網路中消失。這樣,下一個新連接中不會出現這種舊的連接請求報文段。
在圖中每一個方框即TCP可能具有的狀態。每個方框中的大寫英文字元串時TCP標准所使用的的TCP連接狀態名。狀態之間的箭頭表示可能發生的狀態變遷。箭頭旁邊的字表明引起這種變遷的原因,或表明發生狀態變遷後又出現什麼動作,在圖中粗實線箭頭表示對客戶進程的正常變遷,粗虛線箭頭表示對伺服器進程的正常變遷,細線箭頭表示異常變遷。
9. 網路編程(五)TCP詳解
考慮最簡單的情況:兩台主機之間的通信。這個時候只需要一條網線把兩者連起來,規定好彼此的硬體介面,如都用 USB、電壓 10v、頻率 2.4GHz 等, 這一層就是物理層,這些規定就是物理層協議 。
我們當然不滿足於只有兩台電腦連接,因此我們可以使用交換機把多個電腦連接起來,如下圖:
這樣連接起來的網路,稱為區域網,也可以稱為乙太網(乙太網是區域網的一種)。在這個網路中,我們需要標識每個機器,這樣才可以指定要和哪個機器通信。這個標識就是硬體地址 MAC。
硬體地址隨機器的生產就被確定,永久性唯一。在區域網中,我們需要和另外的機器通信時,只需要知道他的硬體地址,交換機就會把我們的消息發送到對應的機器。
這里我們可以不管底層的網線介面如何發送,把物理層抽離,在他之上創建一個新的層次,這就是 數據鏈路層 。
我們依然不滿足於區域網的規模,需要把所有的區域網聯系起來,這個時候就需要用到路由器來連接兩個區域網:
但是如果我們還是使用硬體地址來作為通信對象的唯一標識,那麼當網路規模越來越大,需要記住所有機器的硬體地址是不現實的;
同時,一個網路對象可能會頻繁更換設備,這個時候硬體地址表維護起來更加復雜。這里使用了一個新的地址來標記一個網路對象: IP 地址 。
通過一個簡單的寄信例子來理解 IP 地址。
我住在北京市,我朋友 A 住在上海市,我要給朋友 A 寫信:
因此,這里 IP 地址就是一個網路接入地址(朋友 A 的住址),我只需要知道目標 IP 地址,路由器就可以把消息給我帶到。 在區域網中,就可以動態維護一個 MAC 地址與 IP 地址的映射關系,根據目的 IP 地址就可以尋找到機器的 MAC 地址進行發送 。
這樣我們不需管理底層如何去選擇機器,我們只需要知道 IP 地址,就可以和我們的目標進行通信。這一層就是 網路層 。網路層的核心作用就是 提供主機之間的邏輯通信 。
這樣,在網路中的所有主機,在邏輯上都連接起來了,上層只需要提供目標 IP 地址和數據,網路層就可以把消息發送到對應的主機。
一個主機有多個進程,進程之間進行不同的網路通信,如邊和朋友開黑邊和女朋友聊微信。我的手機同時和兩個不同機器進行通信。
那麼當我的手機收到數據時,如何區分是微信的數據,還是王者的數據?那麼就必須在網路層之上再添加一層: 運輸層 :
運輸層通過 socket(套接字),將網路信息進行進一步的拆分,不同的應用進程可以獨立進行網路請求,互不幹擾。
這就是運輸層的最本質特點: 提供進程之間的邏輯通信 。這里的進程可以是主機之間,也可以是同個主機,所以在 android 中,socket 通信也是進程通信的一種方式。
現在不同的機器上的應用進程之間可以獨立通信了,那麼我們就可以在計算機網路上開發出形形式式的應用:如 web 網頁的 http,文件傳輸 ftp 等等。這一層稱為 應用層 。
應用層還可以進一步拆分出表示層、會話層,但他們的本質特點都沒有改變: 完成具體的業務需求 。和下面的四層相比,他們並不是必須的,可以歸屬到應用層中。
最後對計網分層進行小結:
這里需要注意的是,分層並不是在物理上的分層,而是邏輯上的分層。通過對底層邏輯的封裝,使得上層的開發可以直接依賴底層的功能而無需理會具體的實現,簡便了開發。
這種分層的思路,也就是責任鏈設計模式,通過層層封裝,把不同的職責獨立起來,更加方便開發、維護等等。
TCP 並不是把應用層傳輸過來的數據直接加上首部然後發送給目標,而是把數據看成一個位元組 流,給他們標上序號之後分部分發送。這就是 TCP 的 面向位元組流 特性:
面向位元組流的好處是無需一次存儲過大的數據佔用太多內存,壞處是無法知道這些位元組代表的意義,例如應用層發送一個音頻文件和一個文本文件,對於 TCP 來說就是一串位元組流,沒有意義可言,這會導致粘包以及拆包問題,後面講。
前面講到,TCP 是可靠傳輸協議,也就是,一個數據交給他,他肯定可以完整無誤地發送到目標地址,除非網路炸了。他實現的網路模型如下:
對於應用層來說,他就是一個可靠傳輸的底層支持服務;而運輸層底層採用了網路層的不可靠傳輸。雖然在網路層甚至數據鏈路層就可以使用協議來保證數據傳輸的可靠性,但這樣網路的設計會更加復雜、效率會隨之降低。把數據傳輸的可靠性保證放在運輸層,會更加合適。
可靠傳輸原理的重點總結一下有: 滑動窗口、超時重傳、累積確認、選擇確認、連續 ARQ 。
停止等待協議
要實現可靠傳輸,最簡便的方法就是:我發送一個數據包給你,然後你跟我回復收到,我繼續發送下一個數據包。傳輸模型如下:
這種「一來一去」的方法來保證傳輸可靠就是 停止等待協議 (stop-and-wait)。不知道還記不記得前面 TCP 首部有一個 ack 欄位,當他設置為 1 的時候,表示這個報文是一個確認收到報文。
然後再來考慮另一種情況:丟包。網路環境不可靠,導致每一次發送的數據包可能會丟失,如果機器 A 發送了數據包丟失了,那麼機器 B 永遠接收不到數據,機器 A 永遠在等待。
解決這個問題的方法是: 超時重傳 。當機器 A 發出一個數據包時便開始計時,時間到還沒收到確認回復,就可以認為是發生了丟包,便再次發送,也就是重傳。
但重傳會導致另一種問題:如果原先的數據包並沒有丟失,只是在網路中待的時間比較久,這個時候機器 B 會受到兩個數據包,那麼機器 B 是如何辨別這兩個數據包是屬於同一份數據還是不同的數據?
這就需要前面講過的方法: 給數據位元組進行編號 。這樣接收方就可以根據數據的位元組編號,得出這些數據是接下來的數據,還是重傳的數據。
在 TCP 首部有兩個欄位:序號和確認號,他們表示發送方數據第一個位元組的編號,和接收方期待的下一份數據的第一個位元組的編號。
停止等待協議的優點是簡單,但缺點是 信道利用率 太低。
假定AB之間有一條直通的信道來傳送分組
這里的TD是A發送分組所需要的時間(顯然TD = 分組長度 / 數據速率)再假定TA是B發送確認分組所需要的時間(A和B處理分組的時間都忽略不計)那麼A在經過TD+RTT+TA時間後才能發送下一個分組,這里的RTT是往返時間,因為只有TD是採用來傳輸有用的數據(這個數據包括了分組首部,如果可以知道傳輸更精確的數據的時間,可以計算的更精確),所有信道利用率為
為了提高傳輸效率,發送方可以不使用低效率的停止等待協議,而是採用 流水線傳輸 :就是發送方可以 連續的發送多個分組 ,不必每發完一個分組就停下來等待對方的確認。這樣可使信道上一直有數據不間斷地在傳送。顯然這種傳輸方式可以獲得很高的信道利用率
停止等待協議已經可以滿足可靠傳輸了,但有一個致命缺點: 效率太低 。發送方發送一個數據包之後便進入等待,這個期間並沒有干任何事,浪費了資源。解決的方法是: 連續發送數據包 。
也就是下面介紹的 連續ARQ協議 和 滑動窗口協議
連續 ARQ 協議
模型如下:
和停止等待最大的不同就是,他會源源不斷地發送,接收方源源不斷收到數據之後,逐一進行確認回復。這樣便極大地提高了效率。但同樣,帶來了一些額外的問題:
發送是否可以無限發送直到把緩沖區所有數據發送完?不可以。因為需要考慮接收方緩沖區以及讀取數據的能力。如果發送太快導致接收方無法接受,那麼只是會頻繁進行重傳,浪費了網路資源。所以發送方發送數據的范圍,需要考慮到接收方緩沖區的情況。這就是 TCP 的 流量控制 。
解決方法是: 滑動窗口 。基本模型如下:
在 TCP 的首部有一個窗口大小欄位,他表示接收方的剩餘緩沖區大小,讓發送方可以調整自己的發送窗口大小。通過滑動窗口,就可以實現 TCP 的流量控制,不至於發送太快,導致太多的數據丟失。
連續 ARQ 帶來的第二個問題是:網路中充斥著和發送數據包一樣數據量的確認回復報文,因為每一個發送數據包,必須得有一個確認回復。提高網路效率的方法是: 累積確認 。
接收方不需要逐個進行回復,而是累積到一定量的數據包之後,告訴發送方,在此數據包之前的數據全都收到。例如,收到 1234,接收方只需要告訴發送方我收到 4 了,那麼發送方就知道 1234 都收到了。
第三個問題是:如何處理丟包情況。在停止等待協議中很簡單,直接一個超時重傳就解決了。但,連續 ARQ 中不太一樣。
例如:接收方收到了 123 567,六個位元組,編號為 4 的位元組丟失了。按照累積確認的思路,只能發送 3 的確認回復,567 都必須丟掉,因為發送方會進行重傳。這就是 GBN(go-back-n) 思路。
但是我們會發現,只需要重傳 4 即可,這樣不是很浪費資源,所以就有了: 選擇確認 SACK 。在 TCP 報文的選項欄位,可以設置已經收到的報文段,每一個報文段需要兩個邊界來進行確定。這樣發送方,就可以根據這個選項欄位只重傳丟失的數據了。
第四個問題是:擁塞控制的問題
也是通過窗口的大小來控制的,但是檢測網路滿不滿是個挺難的事情,所以 TCP 發送包經常被比喻成往誰管理灌水,所以擁塞控制就是在不堵塞,不丟包的情況下盡可能的發揮帶寬。
水管有粗細,網路有帶寬,即每秒鍾能發送多少數據;水管有長度,端到端有時延。理想狀態下,水管裡面的水 = 水管粗細 * 水管長度。對於網路上,通道的容量 = 帶寬 * 往返時延。
如果我們設置發送窗口,使得發送但未確認的包為通道的容量,就能撐滿整個管道。
如圖所示,假設往返時間為 8 秒,去 4 秒,回 4 秒,每秒發送一個包,已經過去了 8 秒,則 8 個包都發出去了,其中前四個已經到達接收端,但是 ACK 還沒返回,不能算發送成功,5-8 後四個包還在路上,還沒被接收,這個時候,管道正好撐滿,在發送端,已發送未確認的 8 個包,正好等於帶寬,也即每秒發送一個包,也即每秒發送一個包,乘以來回時間 8 秒。
如果在這個基礎上調大窗口,使得單位時間可以發送更多的包,那麼會出現接收端處理不過來,多出來的包會被丟棄,這個時候,我們可以增加一個緩存,但是緩存裡面的包 4 秒內肯定達不到接收端課,它的缺點會增加時延,如果時延達到一定程度就會超時重傳
TCP 擁塞控制主要來避免兩種現象,包丟失和超時重傳,一旦出現了這些現象說明發送的太快了,要慢一點。
具體的方法就是發送端慢啟動,比如倒水,剛開始倒的很慢,漸漸變快。然後設置一個閾值,當超過這個值的時候就要慢下來
慢下來還是在增長,這時候就可能水滿則溢,出現擁塞,需要降低倒水的速度,等水慢慢滲下去。
擁塞的一種表現是丟包,需要超時重傳,這個時候,採用快速重傳演算法,將當前速度變為一半。所以速度還是在比較高的值,也沒有一夜回到解放前。
到這里關於 TCP 的可靠傳輸原理就已經介紹得差不多。最後進行一個小結:
當然,這只是可靠傳輸的冰山一角,感興趣可以再深入去研究
10. RTT 往返時延
RTT(Round-Trip Time),往返時延。在計算機網路中它是一個重要的性能指標,表示從發送端發送數據開始,到發送端收到來自接收端的確認(接收端收到數據後便立即發送確認),總共經歷的時延。
往返延時(RTT)由三個部分決定:即鏈路的傳播時間、末端系統的處理時間以及路由器的緩存中的排隊和處理時間。其中,前面兩個部分的值作為一個TCP連接相對固定 ,路由器的緩存中的排隊和處理時間會隨著整個網路擁塞程度的變化而變化。所以RTT的變化在一定程度上反映了網路擁塞程度的變化