① 計算機網路自學筆記:TCP
如果你在學習這門課程,僅僅為了理解網路工作原理,那麼只要了解TCP是可靠傳輸,數據傳輸丟失時會重傳就可以了。如果你還要參加研究生考試或者公司面試等,那麼下面內容很有可能成為考查的知識點,主要的重點是序號/確認號的編碼、超時定時器的設置、可靠傳輸和連接的管理。
1 TCP連接
TCP面向連接,在一個應用進程開始向另一個應用進程發送數據之前,這兩個進程必須先相互「握手」,即它們必須相互發送某些預備報文段,以建立連接。連接的實質是雙方都初始化與連接相關的發送/接收緩沖區,以及許多TCP狀態變數。
這種「連接」不是一條如電話網路中端到端的電路,因為它們的狀態完全保留在兩個端系統中。
TCP連接提供的是全雙工服務 ,應用層數據就可在從進程B流向進程A的同時,也從進程A流向進程B。
TCP連接也總是點對點的 ,即在單個發送方與單個接收方之間建立連接。
一個客戶機進程向伺服器進程發送數據時,客戶機進程通過套接字傳遞數據流。
客戶機操作系統中運行的 TCP軟體模塊首先將這些數據放到該連接的發送緩存里 ,然後會不時地從發送緩存里取出一塊數據發送。
TCP可從緩存中取出並放入報文段中發送的數據量受限於最大報文段長MSS,通常由最大鏈路層幀長度來決定(也就是底層的通信鏈路決定)。 例如一個鏈路層幀的最大長度1500位元組,除去數據報頭部長度20位元組,TCP報文段的頭部長度20位元組,MSS為1460位元組。
報文段被往下傳給網路層,網路層將其封裝在網路層IP數據報中。然後這些數據報被發送到網路中。
當TCP在另一端接收到一個報文段後,該報文段的數據就被放人該連接的接收緩存中。應用程序從接收緩存中讀取數據流(注意是應用程序來讀,不是操作系統推送)。
TCP連接的每一端都有各自的發送緩存和接收緩存。
因此TCP連接的組成包括:主機上的緩存、控制變數和與一個進程連接的套接字變數名,以及另一台主機上的一套緩存、控制變數和與一個進程連接的套接字。
在這兩台主機之間的路由器、交換機中,沒有為該連接分配任何緩存和控制變數。
2報文段結構
TCP報文段由首部欄位和一個數據欄位組成。數據欄位包含有應用層數據。
由於MSS限制了報文段數據欄位的最大長度。當TCP發送一個大文件時,TCP通常是將文件劃分成長度為MSS的若干塊。
TCP報文段的結構。
首部包括源埠號和目的埠號,它用於多路復用/多路分解來自或送至上層應用的數據。另外,TCP首部也包括校驗和欄位。報文段首部還包含下列欄位:
32比特的序號欄位和32比特的確認號欄位。這些欄位被TCP發送方和接收方用來實現可靠數據傳輸服務。
16比特的接收窗口欄位,該欄位用於流量控制。該欄位用於指示接收方能夠接受的位元組數量。
4比特的首部長度欄位,該欄位指示以32比特的字為單位的TCP首部長度。一般TCP首部的長度就是20位元組。
可選與變長的選項欄位,該欄位用於當發送方與接收方協商最大報文段長度,或在高速網路環境下用作窗口調節因子時使用。
標志欄位ACK比特用於指示確認欄位中的ACK值的有效性,即該報文段包括一個對已被成功接收報文段的確認。 SYN和FIN比特用於連接建立和拆除。 PSH、URG和緊急指針欄位通常沒有使用。
•序號和確認號
TCP報文段首部兩個最重要的欄位是序號欄位和確認號欄位。
TCP把數據看成一個無結構的但是有序的位元組流。TCP序號是建立在傳送的位元組流之上,而不是建立在傳送的報文段的序列之上。
一個報文段的序號是該報文段首位元組在位元組流中的編號。
例如,假設主機A上的一個進程想通過一條TCP連接向主機B上的一個進程發送一個數據流。主機A中的TCP將對數據流中的每一個位元組進行編號。假定數據流由一個包含4500位元組的文件組成(可以理解為應用程序調用send函數傳遞過來的數據長度),MSS為1000位元組(鏈路層一次能夠傳輸的位元組數),如果主機決定數據流的首位元組編號是7。TCP模塊將為該數據流構建5個報文段(也就是分5個IP數據報)。第一個報文段的序號被賦為7;第二個報文段的序號被賦為1007,第三個報文段的序號被賦為2007,以此類推。前面4個報文段的長度是1000,最後一個是500。
確認號要比序號難理解一些。前面講過,TCP是全雙工的,因此主機A在向主機B發送數據的同時,也可能接收來自主機B的數據。從主機B到達的每個報文段中的序號欄位包含了從B流向A的數據的起始位置。 因此主機B填充進報文段的確認號是主機B期望從主機A收到的下一報文段首位元組的序號。
假設主機B已收到了來自主機A編號為7-1006的所有位元組,同時假設它要發送一個報文段給主機A。主機B等待主機A的數據流中位元組1007及後續所有位元組。所以,主機B會在它發往主機A的報文段的確認號欄位中填上1007。
再舉一個例子,假設主機B已收到一個來自主機A的包含位元組7-1006的報文段,以及另一個包含位元組2007-3006的報文段。由於某種原因,主機A還沒有收到位元組1007-2006的報文段。
在這個例子中,主機A為了重組主機B的數據流,仍在等待位元組1007。因此,A在收到包含位元組2007-3006的報文段時,將會又一次在確認號欄位中包含1007。 因為TCP只確認數據流中至第一個丟失報文段之前的位元組數據,所以TCP被稱為是採用累積確認。
TCP的實現有兩個基本的選擇:
1接收方立即丟棄失序報文段;
2接收方保留失序的位元組,並等待缺少的位元組以填補該間隔。
一條TCP連接的雙方均可隨機地選擇初始序號。 這樣做可以減少將那些仍在網路中的來自兩台主機之間先前連接的報文段,誤認為是新建連接所產生的有效報文段的可能性。
•例子telnet
Telnet由是一個用於遠程登錄的應用層協議。它運行在TCP之上,被設計成可在任意一對主機之間工作。
假設主機A發起一個與主機B的Telnet會話。因為是主機A發起該會話,因此主機A被標記為客戶機,主機B被標記為伺服器。用戶鍵入的每個字元(在客戶機端)都會被發送至遠程主機。遠程主機收到後會復制一個相同的字元發回客戶機,並顯示在Telnet用戶的屏幕上。這種「回顯」用於確保由用戶發送的字元已經被遠程主機收到並處理。因此,在從用戶擊鍵到字元顯示在用戶屏幕上之間的這段時間內,每個字元在網路中傳輸了兩次。
現在假設用戶輸入了一個字元「C」,假設客戶機和伺服器的起始序號分別是42和79。前面講過,一個報文段的序號就是該報文段數據欄位首位元組的序號。因此,客戶機發送的第一個報文段的序號為42,伺服器發送的第一個報文段的序號為79。前面講過,確認號就是主機期待的數據的下一個位元組序號。在TCP連接建立後但沒有發送任何數據之前,客戶機等待位元組79,而伺服器等待位元組42。
如圖所示,共發了3個報文段。第一個報文段是由客戶機發往伺服器,其數據欄位里包含一位元組的字元「C」的ASCII碼,其序號欄位里是42。另外,由於客戶機還沒有接收到來自伺服器的任何數據,因此該報文段中的確認號欄位里是79。
第二個報文段是由伺服器發往客戶機。它有兩個目的:第一個目的是為伺服器所收到的數據提供確認。伺服器通過在確認號欄位中填入43,告訴客戶機它已經成功地收到位元組42及以前的所有位元組,現在正等待著位元組43的出現。第二個目的是回顯字元「C」。因此,在第二個報文段的數據欄位里填入的是字元「C」的ASCII碼,第二個報文段的序號為79,它是該TCP連接上從伺服器到客戶機的數據流的起始序號,也是伺服器要發送的第一個位元組的數據。
這里客戶機到伺服器的數據的確認被裝載在一個伺服器到客戶機的數據的報文段中,這種確認被稱為是捎帶確認.
第三個報文段是從客戶機發往伺服器的。它的唯一目的是確認已從伺服器收到的數據。
3往返時延的估計與超時
TCP如同前面所講的rdt協議一樣,採用超時/重傳機制來處理報文段的丟失問題。最重要的一個問題就是超時間隔長度的設置。顯然,超時間隔必須大於TCP連接的往返時延RTT,即從一個報文段發出到收到其確認時。否則會造成不必要的重傳。
•估計往返時延
TCP估計發送方與接收方之間的往返時延是通過採集報文段的樣本RTT來實現的,就是從某報文段被發出到對該報文段的確認被收到之間的時間長度。
也就是說TCP為一個已發送的但目前尚未被確認的報文段估計sampleRTT,從而產生一個接近每個RTT的采樣值。但是,TCP不會為重傳的報文段計算RTT。
為了估計一個典型的RTT,採取了某種對RTT取平均值的辦法。TCP據下列公式來更新
EstimatedRTT=(1-)*EstimatedRTT+*SampleRTT
即估計RTT的新值是由以前估計的RTT值與sampleRTT新值加權組合而成的。
參考值是a=0.125,因此是一個加權平均值。顯然這個加權平均對最新樣本賦予的權值
要大於對老樣本賦予的權值。因為越新的樣本能更好地反映出網路當前的擁塞情況。從統計學觀點來講,這種平均被稱為指數加權移動平均
除了估算RTT外,還需要測量RTT的變化,RTT偏差的程度,因為直接使用平均值設置計時器會有問題(太靈敏)。
DevRTT=(1-β)*DevRTT+β*|SampleRTT-EstimatedRTT|
RTT偏差也使用了指數加權移動平均。B取值0.25.
•設置和管理重傳超時間隔
假設已經得到了估計RTT值和RTT偏差值,那麼TCP超時間隔應該用什麼值呢?TCP將超時間隔設置成大於等於估計RTT值和4倍的RTT偏差值,否則將造成不必要的重傳。但是超時間隔也不應該比估計RTT值大太多,否則當報文段丟失時,TCP不能很快地重傳該報文段,從而將給上層應用帶來很大的數據傳輸時延。因此,要求將超時間隔設為估計RTT值加上一定餘量。當估計RTT值波動較大時,這個余最應該大些;當波動比較小時,這個餘量應該小些。因此使用4倍的偏差值來設置重傳時間。
TimeoutInterval=EstimatedRTT+4*DevRTT
4可信數據傳輸
網際網路的網路層服務是不可靠的。IP不保證數據報的交付,不保證數據報的按序交付,也不保證數據報中數據的完整性。
TCP在IP不可靠的盡力而為服務基礎上建立了一種可靠數據傳輸服務。
TCP提供可靠數據傳輸的方法涉及前面學過的許多原理。
TCP採用流水線協議、累計確認。
TCP推薦的定時器管理過程使用單一的重傳定時器,即使有多個已發送但還未被確認的報文段也一樣。重傳由超時和多個ACK觸發。
在TCP發送方有3種與發送和重傳有關的主要事件:從上層應用程序接收數據,定時器超時和收到確認ACK。
從上層應用程序接收數據。一旦這個事件發生,TCP就從應用程序接收數據,將數據封裝在一個報文段中,並將該報文段交給IP。注意到每一個報文段都包含一個序號,這個序號就是該報文段第一個數據位元組的位元組流編號。如果定時器還沒有計時,則當報文段被傳給IP時,TCP就啟動一個該定時器。
第二個事件是超時。TCP通過重傳引起超時的報文段來響應超時事件。然後TCP重啟定時器。
第三個事件是一個來自接收方的確認報文段(ACK)。當該事件發生時,TCP將ACK的值y與變數SendBase(發送窗口的基地址)進行比較。TCP狀態變數SendBase是最早未被確認的位元組的序號。就是指接收方已正確按序接收到數據的最後一個位元組的序號。TCP採用累積確認,所以y確認了位元組編號在y之前的所有位元組都已經收到。如果Y>SendBase,則該ACK是在確認一個或多個先前未被確認的報文段。因此發送方更新其SendBase變數,相當於發送窗口向前移動。
另外,如果當前有未被確認的報文段,TCP還要重新啟動定時器。
快速重傳
超時觸發重傳存在的另一個問題是超時周期可能相對較長。當一個報文段丟失時,這種長超時周期迫使發送方等待很長時間才重傳丟失的分組,因而增加了端到端時延。所以通常發送方可在超時事件發生之前通過觀察冗餘ACK來檢測丟包情況。
冗餘ACK就是接收方再次確認某個報文段的ACK,而發送方先前已經收到對該報文段的確認。
當TCP接收方收到一個序號比所期望的序號大的報文段時,它認為檢測到了數據流中的一個間隔,即有報文段丟失。這個間隔可能是由於在網路中報文段丟失或重新排序造成的。因為TCP使用累計確認,所以接收方不向發送方發回否定確認,而是對最後一個正確接收報文段進行重復確認(即產生一個冗餘ACK)
如果TCP發送方接收到對相同報文段的3個冗餘ACK.它就認為跟在這個已被確認過3次的報文段之後的報文段已經丟失。一旦收到3個冗餘ACK,TCP就執行快速重傳 ,
即在該報文段的定時器過期之前重傳丟失的報文段。
5流量控制
前面講過,一條TCP連接雙方的主機都為該連接設置了接收緩存。當該TCP連接收到正確、按序的位元組後,它就將數據放入接收緩存。相關聯的應用進程會從該緩存中讀取數據,但沒必要數據剛一到達就立即讀取。事實上,接收方應用也許正忙於其他任務,甚至要過很長時間後才去讀取該數據。如果應用程序讀取數據時相當緩慢,而發送方發送數據太多、太快,會很容易使這個連接的接收緩存溢出。
TCP為應用程序提供了流量控制服務以消除發送方導致接收方緩存溢出的可能性。因此,可以說 流量控制是一個速度匹配服務,即發送方的發送速率與接收方應用程序的讀速率相匹配。
前面提到過,TCP發送方也可能因為IP網路的擁塞而被限制,這種形式的發送方的控制被稱為擁塞控制(congestioncontrol)。
TCP通過讓接收方維護一個稱為接收窗口的變數來提供流量控制。接收窗口用於告訴發送方,該接收方還有多少可用的緩存空間。因為TCP是全雙工通信,在連接兩端的發送方都各自維護一個接收窗口變數。 主機把當前的空閑接收緩存大小值放入它發給對方主機的報文段接收窗口欄位中,通知對方它在該連接的緩存中還有多少可用空間。
6 TCP連接管理
客戶機中的TCP會用以下方式與伺服器建立一條TCP連接:
第一步: 客戶機端首先向伺服器發送一個SNY比特被置為1報文段。該報文段中不包含應用層數據,這個特殊報文段被稱為SYN報文段。另外,客戶機會選擇一個起始序號,並將其放置到報文段的序號欄位中。為了避免某些安全性攻擊,這里一般隨機選擇序號。
第二步: 一旦包含TCP報文段的用戶數據報到達伺服器主機,伺服器會從該數據報中提取出TCPSYN報文段,為該TCP連接分配TCP緩存和控制變數,並向客戶機TCP發送允許連接的報文段。這個允許連接的報文段還是不包含應用層數據。但是,在報文段的首部卻包含3個重要的信息。
首先,SYN比特被置為1。其次,該 TCP報文段首部的確認號欄位被置為客戶端序號+1最後,伺服器選擇自己的初始序號,並將其放置到TCP報文段首部的序號欄位中。 這個允許連接的報文段實際上表明了:「我收到了你要求建立連接的、帶有初始序號的分組。我同意建立該連接,我自己的初始序號是XX」。這個同意連接的報文段通常被稱為SYN+ACK報文段。
第三步: 在收到SYN+ACK報文段後,客戶機也要給該連接分配緩存和控制變數。客戶機主機還會向伺服器發送另外一個報文段,這個報文段對伺服器允許連接的報文段進行了確認。因為連接已經建立了,所以該ACK比特被置為1,稱為ACK報文段,可以攜帶數據。
一旦以上3步完成,客戶機和伺服器就可以相互發送含有數據的報文段了。
為了建立連接,在兩台主機之間發送了3個分組,這種連接建立過程通常被稱為 三次握手(SNY、SYN+ACK、ACK,ACK報文段可以攜帶數據) 。這個過程發生在客戶機connect()伺服器,伺服器accept()客戶連接的階段。
假設客戶機應用程序決定要關閉該連接。(注意,伺服器也能選擇關閉該連接)客戶機發送一個FIN比特被置為1的TCP報文段,並進人FINWAIT1狀態。
當處在FINWAIT1狀態時,客戶機TCP等待一個來自伺服器的帶有ACK確認信息的TCP報文段。當它收到該報文段時,客戶機TCP進入FINWAIT2狀態。
當處在FINWAIT2狀態時,客戶機等待來自伺服器的FIN比特被置為1的另一個報文段,
收到該報文段後,客戶機TCP對伺服器的報文段進行ACK確認,並進入TIME_WAIT狀態。TIME_WAIT狀態使得TCP客戶機重傳最終確認報文,以防該ACK丟失。在TIME_WAIT狀態中所消耗的時間是與具體實現有關的,一般是30秒或更多時間。
經過等待後,連接正式關閉,客戶機端所有與連接有關的資源將被釋放。 因此TCP連接的關閉需要客戶端和伺服器端互相交換連接關閉的FIN、ACK置位報文段。
② 計算機網路第三章(數據鏈路層)
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)
將整個帶寬分為多份,用戶在分配到一定的頻帶後,在通信過程中自始至終都佔用這個頻帶。
頻分復用 的所有用戶在同樣的時間 佔用不同的帶寬資源 (請注意,這里的「帶寬」是頻率帶寬而不是數據的發送速率)。
③ 計算機網路之RDMA技術(三)服務類型
姓名:周肇星;學號:22011110028;學院:通信工程學院
補充改編自 https://zhuanlan.hu.com/p/144099636
【嵌牛導讀】RDMA技術全稱遠程直接數據存取,就是為了解決網路傳輸中伺服器端數據處理的延遲而產生的。RDMA通過網路把資料直接傳入計算機的存儲區,將數據從一個系統快速移動到遠程系統存儲器中,而不對操作系統造成任何影響,這樣就不需要用到多少計算機的處理功能。它消除了外部存儲器復制和上下文切換的開銷,因而能解放內存帶寬和CPU周期用於改進應用系統性能。本專題將針對RDMA技術進行介紹!
【嵌牛鼻子】計算機網路,高性能網路,RDMA
【嵌牛提問】讀完本文,對RDMA技術的服務類型有所認識了嗎?
【嵌牛正文】
InfiniBand specification R1.3, Chapter3, 3.2.2, Page 101【連接類型的概述】
InfiniBand specification R1.3, Chapter3, 3.5.2, Page 109【服務類型的概述】
InfiniBand specification R1.3, Chapter3, 3.6.2, Page 127【服務類型具體介紹】
InfiniBand specification R1.3, Chapter3, 3.7.4, Page 135【數據包序號PSN】
InfiniBand specification R1.3, Chapter9, 9.1, Page 242【服務類型與丟包的處理】
InfiniBand specification R1.3, Chapter9, 9.4.5.3, Page 276【Connection Conext與EE Context】
InfiniBand specification R1.3, Chapter9, 9.7, Page 293【可靠性】
RDMA的基本通信單元是QP,而基於QP的通信模型有很多種,我們在RDMA領域稱其為「服務類型」。IB協議中通過「可靠」和「連接」兩個維度來描述一種服務類型
The five IBA transport service types are:
The non-IBA protocol encapsulation services are:
通信中的可靠性指的是通過一些機制保證發出去的數據包都能夠被正常接收,可靠連接中的通道適配器可以維護序列號並確認所有消息
其特徵是:在沒有不可恢復錯誤出現的情況下,數據只被發送一次;並且每個數據都被隱式或顯式確認。
不可靠服務主要是沒有應答機制,注意不可靠服務仍會使用PSN序號與CRC校驗和,使得接收端對錯包、丟包進行檢測
響應者認為操作已經完成的條件:
接收者認為操作已經完成的條件:
發端會對Header和Payload(有效載荷,也就是真正要收發的數據)通過一定的演算法(IB協議使用的CRC校驗)得到一個校驗值放到數據包的末尾。對端收到數據包後,也會用相同的演算法計算出校驗值,然後與數據包中的校驗值比對,如果不一致,說明數據中包含錯誤,那麼接收端就會丟棄這個包,並回復否定確認NAK(Not Acknowledge)告知發送端重發
無論可靠還是不可靠均有該機制,不可靠類型的服務在校驗錯誤後將進行丟包
保證先被發送到物理鏈路上的數據包一定要先於後發送的數據包被接收方收到
IB協議中有PSN(Packet Sequence Number,數據包序號)的概念,即每個數據包的基本傳輸頭BTH中都有一個遞增的24位編號,可用於監測缺失或無序的包:
在連接建立的過程中,發送者的傳輸層協議將在合法PSN中(0~16777215)計算出一個初始PSN,而接收端的初始PSN為第一個數據包中的PSN。請求者應為其生成的每個請求包為當前PSN值增加1。唯一的例外是在RDMA READ請求消息之後的任何請求包,緊隨RDMA READ請求消息之後的請求包應具有比最後一個預期的RDMA READ響應包的PSN大一個的PSN,即請求者就會在請求包的PSN序列後預留空間(由於請求者知道請求的RDMA READ數據總長度以及PMTU,因此請求者可以計算預期響應包的總數,從而能夠計算出在RDMA READ之後請求的PSN),以使得所有的響應包都將具有單調遞增的PSN
在邏輯上,一個接收隊列或EE Context維護一個預期PSN(ePSN)。這是響應者希望在它接收到的下一個新請求包的BTH中找到的PSN
在數據包入站時,響應者(的接收隊列)將數據包中的PSN與自己維護存儲的ePSN進行比較來檢查PSN;對於可靠的數據報服務,PSN由響應者的EE Context進行檢查
特別注意,IBA不支持選擇性的分組重傳與分組的無序接收,例如發送的PSN依次為1、2、3、4、5、6,若接收端判定PSN=3發生了丟包,此時收端會丟棄隨後所有的數據包(PSN=4、5、6),並發送NAK要求發送者重新傳輸PSN=3、4、5、6【響應者將繼續等待一個有效的入站請求數據包,即:其PSN等於其預期的PSN或在其有效區域內。在該過程中,響應者接收到的任何無效的請求數據包將被丟棄、且不返回NAK】
但Mellanox CX-6系列網卡已經支持選擇性重傳,但存在一些限制
需要注意的是對於無確認機制的服務,PSN同樣啟用,可以幫助接收端盡可能的監測到是否發生了丟包
此PSN保序外,接收端將通過校驗OpCode以確保順序正確,即「First」、「Middle」、「Last」、「Only」
在IB協議的可靠服務類型中,使用了應答機制來保證數據包被對方收到。IB的可靠服務類型中,接收方不是每一個包都必須回復,也可以一次回復多個包的確認ACK(Acknowledge)【隱式確認Fig91】
注意應答機制並不是用戶級別的確認,確認ACK僅表示數據已經到達目的地
對於接收重復入站的SEND或RDMA Write請求的HCA,響應者不得重新執行該請求,而只為重復包生成一個響應包,同時支持ACK確認合並,即回復最近接收到的PSN
對於RDMA Read的響應,在圖中:
響應數據包必須重新生成,且需要顯式回復,不能使用確認合並進行隱式回復
IBA支持面向連接和數據報的服務。對於面向連接的服務來說,每個QP都和另一個(且僅有一個)遠端節點的QP相關聯。在這種情況下,QP Context中包含有遠端節點的QP信息。面向連接的服務需要通信連接建立的過程,以關聯QP,在建立通信的過程中,兩個節點會交換包括稍後用於通信的QP在內的對端信息
QP Context(簡稱QPC)可以簡單理解為是記錄一個QP相關信息的表格,關於QP的信息需要記錄到一張表裡面,這些信息可能包括隊列的深度,隊列的編號等等
在連接服務類型中的每個QP,都和唯一的另一個QP建立了連接,也就是說QP下發的每個WQE的目的地都是唯一的
兩個節點在建立連接的過程中,會交換稍後用於數據交互的QP Number,然後分別記錄在QPC中
對於數據報服務來說,QP不會跟一個唯一的遠端節點綁定,而是通過WQE來指定目的節點。和連接類型的服務一樣,建立通信的過程也需要兩端交換對端信息,但是數據報服務對於每個目的節點都需要執行一次這個交換過程
對於可靠的傳輸方式,QP將包括PSN、響應回復報文等信息存儲在Connetion Context中
對於可靠的面向連接服務,Connnection Context實際上就是QP Context
QPC中包含有遠端的QP信息,兩個節點在建立連接時會交換用於數據交互的QPN,並記錄在QPC中
對於可靠的數據報服務中,Connection Context實際上就是End-to-End Context
在數據報類型的QP的Context中,不包含對端信息,即每個QP不跟另一個QP綁定。QP下發給硬體的每個WQE都可能指向不同的目的地。比如節點A的QP2下發的第一個WQE,指示給節點C的QP3發數據;而下一個WQE,可以指示硬體發給節點B的QP7。
每個發送隊列與EEC相關聯,多個RD類型的QP可以使用相同的EE Context,一個RD類型的QP可以使用多個EEC(本端某RD類型QP可針對某遠端節點的多個RD類型QP各使用一個EEC)
每個用戶只需要創建一個QP,節點可以為與其通信的每個節點創建一個EEC。因此如果N個節點上都有M個用戶,都希望通過IBA可靠的數據報服務進行通信,那麼每個節點都需要M個QP和N個EEC
EEC通過數據報的序列號和ACK確認,以確保可靠性
與連接服務類型一樣,本端QP可以和哪個對端QP發送數據,是在准備階段提前通過某些方式相互告知的。這也是定義中「數據報服務對於每個目的節點都需要執行一次這個交換過程」的含義。
InfiniBand支持IBA傳輸服務及原始數據包傳輸模式
當InfiniBand作為原始數據包傳輸模式時,IBA將使用通道適配器作為數據鏈路的引擎,在節點之間傳送原始數據包
上面介紹的兩個維度兩兩組合就形成了IB的四種基本服務類型,RC和UD是應用最多也是最基礎的兩種服務類型,我們可以將他們分別類比成TCP/IP協議棧傳輸層的TCP和UDP
RC用於對數據完整性和可靠性要求較高的場景,跟TCP一樣,需要各種機制來保證可靠,所以開銷自然會大一些。另外由於RC服務類型和每個節點間需要各自維護一個QP,而QP和QPC本身是需要佔用網卡資源或者內存的,當節點數很多時,存儲資源消耗將會非常大,例如N個節點需要相互通信,每個節點上有M個用戶,那麼需要M (N M)個QP
UD硬體開銷小並且節省存儲資源,比如N個節點需要相互通信,每個節點上有M個用戶,各節點上只需要創建M個QP就可以了,但是可靠性跟UDP一樣沒法保證。常用於管理器發現、配置新接入的IBA交換機或端節點設備,但UD不支持RDMA和ATOMIC操作
④ 何謂計算機網路的體系結構與網路協議
計算機協議及體系結構網路協議與層次結構
1.2.1網路體系結構
1.網路協議
通過通信信道和網路設備互聯起來的不同地理位置的多個計算機系統,要使其能協同工作實現信息交換和資源共享,它們之間必須具有共同的語言。交流什麼、怎樣交流及何時交流,都必須遵循某種互相都能接受的規則。
網路協議(Protocol)是為進行計算機網路中的數據交換而建立的規則、標准或約定的集
合。准確地說,它是對同等實體之間通信而制定的有關規則和約定的集合;
網路協議的三個要素: 、
l)語義(Semarlties)涉及用於協調與差錯處理的控制信息。
2)語法(Syntax)涉及數據及控制信息的格式、編碼及信號電平等。
3)定時(Timing)涉及速度匹配和定序等。
2.網路的體系結構及其劃分所遵循的原則計算機網路系統是一個十分復雜的系統。將一個復雜系統分解為若干個容
易處理的子系統。分層就是系統分解的最好方法之一。
在圖1-4所示的一般分層結構中,n層是n-l層的用戶,又是n+l層的服務提供者。n+1層雖然只直接使用了n層提供的服務,實際上它通過n層還間接地使用了n-1層以及以下所有各層的服務。、
層次結構的好處在於使每一層實現一種相對獨立的功能。分層結構還有利於交流、理解和標准化。
所謂網路的層次模型就是計算機網路各層次及其協議的 集合。層次結構一般以垂直分層模型來表示, 層次結構的要點:
1)除了在物理媒體上進行的是實通信之外,其餘各 對等實體間進行的都是虛通信。
2)對等層的虛通信必須遵循該層的協議。
3)n層的虛通信是通過n/n-l層間介面處n-l層提供的服務以及n-1層的通信(通常也
是虛通信)來實現的。
1.2.2網路體系結構
網路體系結構最常用的分為兩種:
OSI七層結構和TCP/IP(TramferControlProtocol/InternetProtocol,傳輸控制協議/網際協議)四層結構。TCP/IP協議是Internet的核心協議。
1.OSI/RM基本參考模型
開放系統互聯(OpenSystemIntercomectim)基本參考模型是由國際標准化組織(ISO)
制定的標准化開放式計算機網路層次結構模型,又稱ISO/OSI參考模型。"開放"這個詞表示能使任何兩個遵守參考模型和有關標準的系統可以進行互聯。
OSI/RM包括了體系結構、服務定義和協議規范三級抽象。OSI的體系結構定義了一個七層模型,用以進行進程間的通信,並作為一個框架來協調各層標準的制定gOSI的服務定義描述了各層所提供的服務,以及層與層之間的抽象介面和交互用的服務原語:OSI各層的協議規范,精確地定義了應當發送何種控制信息及何種過程來解釋該控制信息。
OSI/RM的七層參考模型結構包括:從下至上分別為物理層、數據鏈路層、網路層、傳輸層,
會話層、表示層和應用層。
2.Internet層次模型
Internet網路結構以TCP/IP協議層次模型為核心,
共分四層結構:應用層、傳輸層、網際層和網路介面層。TCP/IP的體系結構與ISO的OSI七層參考模型的對應關系如圖1-6所示。TCP/IP是Internet的核心,利用TCP/IP協議可以方便地實現各種網路的平滑、無縫連接。在TCP/IP四層模型中,作為最高層的應用層相當於OSI的5~7層,該層中包括了所有的高層協議,如常見的文件傳輸協議FTP(文件傳輸協議)、電子郵件SMTP,(簡單郵件傳送協議)、域名系統DNS(域名服務)、網路管理協議SNMP、訪問WWW的超文本傳輸協議HTTP、遠程終端訪問協議TELNET等。
TCP/IP的次高層為傳輸層,相當於OSI的傳輸層,該層負責在源主機和目的主機之間提供端到端的數據傳輸服務。這一層上主要定義了兩個協議:面向連接的傳輸控制協議TCP和無連接的用戶數據報協議UDP(UserDatagramProtocol)。
TCP/IP的第二層相當於OSI的網路層,該層負責將報文(數據包)獨立地從信源傳送到信宿,主要解決路由選擇、阻塞控制級網際互聯問題。這一層上定義了網際協議(InternetProtocol,IP協議)、地址轉換協議ARP(AddressResolutionProtocol)、反向地址轉換協議RARP(ReverseARP)和網際控制報文協議ICMP()等協議。
TCP/IP的最低層為網路介面層,該層負責將IP分組封裝成適合在物理網路上傳輸的幀格式並發送出去,或將從物理網路接收到的幀卸裝並遞交給高層。這一層與物理網路的具體實現有關,自身並無專用的協議。事實上,任何能傳輸IP報文的協議都可以運行。雖然該層一般不需要專門的TCP/IP協議,各物理網路可使用自己的數據鏈路層協議和物理層協議。
3.Internet主要協議
TCP/IP協議集的各層協議的總和亦稱作協議枝。給出了TCP/IP協議集與OSI參
考模型的對應關系。其中每一層都有著多種協議。一般來說,TCP提供傳輸層服務,而IP提供網路層服務。
(l)TCP/IP的數據鏈路層
數據鏈路層不是TCP/IP協議的一部分,但它是TCP/IP與各種通信網之間的介面。這些通信網包括多種廣域網和各種區域網。
一般情況下,各物理網路可以使用自己的數據鏈路層協議和物理層協議,不需要在數據鏈路層上設置專門的TCP/IP協議。但是,當使用串列線路連接主機與網路,或連接網路與網路時,例如用戶使用電話線接入網路肘,則需要在數據鏈路層運行專門的SLIP(SerialLineIP)協議的PPP(PointtoPointProtocol)協議。
(2)TCP/IP網路層
網路層最重要的協議是IP,它將多個網路聯成一個互聯網,可以把高層的數據以多個數據報的形式通過互聯網分發出去。
網路層的功能主要由IP來提供。除了提供端到端的報文分發功能外,IP還提供了很多擴充功能。例如:為了克服數據鏈路層對幀大小的限制,網路層提供了數據分塊和重組功能,這使得很大的IP數據報能以較小的報文在網上傳輸。
網路層的另一個重要服務是在互相獨立的區域網上建立互聯網路,即網際網。網間的報文來往根據它的目的IP地址通過路由器傳到另一網路。
IP的基本任務是通過互聯網傳送數據報,各個IP數據報之間是相互獨立的。主機上的IP層向傳輸層提供服務。IP從源傳輸實體取得數據,通過它的數據鏈路層服務傳給目的主機的IP層。IP不保證服務的可靠性,在主機資源不足的情況下,它可能丟棄某些數據報,同時IP也不檢查被數據鏈路層丟棄的報文。
在傳送時,高層協議將數據傳給IP層,IP層再將數據封裝為互聯網數據報,並交給數據鏈路層協議通過區域網傳送。若目的主機直接連在本區域網中,IP可直接通過網路將數據報傳給
目的主機;若目的主機在其他網路中,則IP路由器傳送數據報,而路由器則依次通過下一網路將數據報傳送到目的主機或再下一個路由器。即IP數據報是通過互聯網路逐步傳遞,直到終點 為止。
(3)TCP/IP傳輸層
TCP/IP在這一層提供了兩個主要的協議:傳輸控制協議(TCP)和用戶數據協議(UDP)。TCP提供的是一種可靠的數據流服務。當傳送有差錯數據,或網路故障,或網路負荷太
重不能正常工作時,就需要通過其他協議來保證通信的可靠。TCP就是這樣的協議,它對應於OSI模型的傳輸層,它在IP協議的基礎上,提供端到端的面向連接的可靠傳輸。
TCP採用"帶重傳的肯定確認"技術來實現傳輸的可靠性。簡單的"帶重傳的肯定確認"是指與發送方通信的接收者,每接收一次數據,就送回一個確認報文J發送者對每個發出去的
報文都留一份記錄,等到收到確認之後再發出下一報文。發送者發出報文時,啟動計時器,若計時器計數完畢,確認還未到達,則發送者重新發送該報文。
TCP通信建立在面向連接的基礎上,實現了一種"虛電路"的概念。雙方通信之前,先建立一條連接,然後雙方就可以在其上發送數據流。這種數據交換方式能提高效率,但事先建立連接和事後拆除連接需要開銷。
4.TCP/IP協議族中的其他協議
TCP/IP是網路中使用的基本的通信協議,是一系列協議和服務的總集。雖然從名字上看
τCP/IP包括兩個協議一一…傳輸控制協議(TCP)和網際協議(IP),但TCP/IP實際上是一組協議,包括了上百個各種功能的協議,如:遠程登錄、文件傳輸和電子郵件(PPP,ICMP,ARP/
RARP,UDP,FTP,HTTP,SMTP,SNMP,RIP,OSPF)等協議,而TCP協議和IP協議是保證數據完整傳輸的兩個最基本的重要協議。通常說TCP/IP是指TCP/IP協議族,而不單單是TCP和IP。TCP/IP依靠TCP和IP這兩個主要協議提供的服務,加上高層應用層的服務,共同實現了TCP/IP協議族的功能。
TCP/IP的最高層與OSI參考模型的上三層有較大區別,也沒有非常明確的層次劃分。其中FTP,TELNET,SMTP,DNS是幾種廣泛應用的協議,TCP/IP中還定義了許多別的高層協議。
(l)文件傳輸協議FTP
FTP(FileTransferProtocol):文件傳輸協議,允許用戶將遠程主機上的文件拷貝到自
己的計算機上。
文件傳輸協議是用於訪問遠程機器的專門協議,它使用戶可以在本地機與遠程機之間進行有關文件的操作。FTP工作時建立兩條TCP連接,條用於傳送文件,另一條用於傳送控制。
FTP採用客戶/伺服器模式,它包含FTP客戶端和FTP伺服器。客戶啟動傳送過程,而服 務器對其做出應答。客戶FTP大多有互動式界面,使客戶可以方便地上傳或下載文件。
(2)遠程終端訪問TELNET
Telnet(RemoteLogin):提供遠程登錄功能,用戶可以登錄到遠程的另一台計算機土,如同在遠程主機上直接操作一樣。
設備或終端進程交互的方訟,支持終端到終端的連接及進程到進程分布式計算的通信。
(3)域名服務DNS
DNS是一個域名服務的協議,提供域名到IP地址的轉換,允許對域名資源進行分散管理。(4)簡單郵件傳送協議SMTP
SMTP(SimpleMailTransferProtocol,簡單郵件傳輸協議),用於傳輸電子郵件。
互聯網標准中的電子郵件是基於文件的協議,用於可靠、有效的數據傳輸。SMTP作為應用層的服務,並不關心它下面採用的是何種傳輸服務,它可通過網路在TCP連接上傳送郵件, 或者簡單地在同一機器的進程之間通過進程通信的通道來傳送郵件。
郵件發送之前必須協商好發送者、接收者。SMTP服務進程同意為接收方發送郵件時,它將郵件直接交給接收方用戶或將郵件經過若干段網路傳輸,直到郵件交給接收方用戶。在郵件傳輸過程中,所經過的路由被記錄下來。這樣,當郵件不能正常傳輸時可按原路由找到發送者。
13網路互聯基礎
1.3.1IP地址
IP地址和域名是Internet使用的、符合TCP/IP協議規定的地址方案。這種地址方案與日常生活中涉及的電話號碼和通信地址相似,涉及到Internet服務的每一環節。IP協議要求所有Internet的網路節點要有統一規定格式的地址,簡稱IP地址。IP地址是運行TCP/IP協議的唯一標識符。TCP/IP協議是上層協議,無論下層是何種拓撲結構的網路,均應統一在上層IP地址上。任何網路接入Internet,均應使用IP地址。
IP地址是唯一的、全球識別的InterIEt網路地址,採用32位二進制(即4位元組)的格式。
在Internet上,每台計算機或網路設備都被分配一個IP地址,這個IP地址在整個InterIIet網路中是唯一的,保證了Internet成為全球開放互聯的網路系統。
1.3.2IP地址的格式和分類
IP地址可表達為二進制格式和十進制格式。二進制的IP地址為32位,分為4個8位二進制數。為書寫方便起見,常將每個位元組作為一段並以十進制數來表示,每段間用"."分隔,每段取值為0~255,。例如:135.111.5.27(二進制格式:10000111.01101111.00000101.00011011)就是合怯的IP地址。
IP地址由網路標識和主機標識兩部分組成。常用的IP地址有ATB,C三類,每類均規定
了網路標識和主機標識在32位中所佔的位數。這三類IP地址的格式表示範圍分別為:
A類地址:0.0.0.O~127.255.255.255
B類地址:128.0.0.O~191.255.255.255
C類地址:192.0.0.O~233.255.255.255
A類IP地址一般用於主機數多達160餘萬台的大型網路,前8位代表網路號,後3個8
位代表主機號。32位的最高位為Og十進制的第一組數值范圍為000~127。IP地址范圍為:001.x.y.z~126.x.y.z。
B類IP地址一般用於中等規模的各地區網管中心,前兩個8位二進制代表網路號,後兩個8位代表主機號。32位的最高兩位為10;十進制的第一組數值范圍為128~191。IP地址范圍為:128.x.y.Z~191.x.y.z。
C類地址一般用於規模較小的本地網路,如校園網、企業網、政府機構網等。前三個8位代表網路號,最後8位代表主機號。32位的最高3位為110,十進制第一組數值范圍為192~223。IP地址范圍為:192.x.y.z~223.x.y.z。一個C類地址可連接256個主機。
A類地址一般分配給具有大量主機的網路使用,B類地址通常分配給規模中等的網路使用,C類地址通常分配給小型區域網使用。為了確保唯→性,IP地址由世界各大地區的權威機構InterNIC()管理和分配。
1.3.3子網的劃分與掩碼
在Internet中,如果每個物理網路就要佔用一個網路號,是不夠用的。另外,如果每個單位增添新的物理網路(例如新建樓房或新部門中新建的網路)就要向Internet的NIC申請新網路號,也太麻煩,並且不便於IP地址的分配管理。
,
在IP地址的某個網路標識中,可以包含大量的主機(如A類地址的主機標識域為24位,B類地址的主機標識域為16位),而在實際應用中不可能將這么多的主機連接到單一的網路中, 這將給網路定址和管理帶來不便。為解決這個問題,可以在網路中引入"子網"的概念。
注意:這里的子網與前面所說的通信子網是兩個完全不同的概念。將主機標識域進一步劃分為子網標識和子網主機標識,通過靈活定義子網標識域的位數,可以控制每個子網的規模。將一個大型網路劃分為若干個既相對獨立又相互聯系的子網後,網路內部各子網便可獨立定址和管理,各子網間通過跨子網的路由器連接,這樣也提高了網路的安全性。
利用子網掩碼可以判斷兩台主機是否在同一子網中。子網掩碼與IP地址一樣也是32位二進制數,不同的是它的子網主機標識部分為全"。"。若兩台主機的IP地址分別與它們的子網掩碼相"與"後的結果相同,則說明這兩台主機在同一網中。
1.子網劃分
為使多個物理網路共用一個IP地址,可以採取把IP地址中主機號部分進一步劃分為子網號和主機號兩部分。例如:一個B類IP地址,可以把第三個位元組作為子網號,第四個位元組作為子網(物理網路)上主機號。
2.子網掩碼
IP路由選擇演算法是根據IP數據報報頭中目的地址的網路號,查找它的路由表,找到一個表項的目的網路號能與它匹配,然後用匹配上表項的中繼IP地址作為發送該數據報到達目的主機的下一個路由器地址。IP數據報報頭中目的地址的網路號是根據該地址最高位值來決定它是哪一類IP地址,網路號應佔用多少位。
劃分了子網後,就不能從地址的最高位值來判斷網路號佔用的位數了,用戶可以自行決定子網號佔用的位數。為了解決這個問題,必須使用子網掩碼(mask)子網掩碼是一個32位的數,其中取值為1的位,對應網路號或子&網號:取值為0的位,對應主機號。
⑤ [計算機網路]Ch.3 數據鏈路層
數據鏈路層使用物理層提供的服務在通信信道上發送和接收比特。
(1) 向網路層提供一個定義良好的介面
(2) 處理傳輸錯誤
(3) 調節數據流,確保慢速的接收方不會被快速的發送方淹沒
提供的服務
(1) 無確認的無連接服務 (區域網)
(2) 有確認的無連接服務 (無線通信)
(3) 有確認的有連接服務 (電話)
無線通信,信道使用率很低但數據傳輸的誤碼率相對較高,確認是必要的
成幀:將原始的位流分散到離散的幀中。
成幀的方法有:
(1)字元計數法
(2)帶位元組/字元填充的標志位元組法
(3)比特填充的比特標志法
(4)物理層編碼違例法
位元組計數法:利用幀頭部的一個欄位來標識該幀中的字元數
缺點:簡單,無法恢復,已經很少使用
該方法考慮了錯誤之後重新開始同步的問題,用一些特殊位元組(FLAG)作為幀開始和結束標志,用轉義字元(ESC)來區分二進制數據中存在的特殊位元組。
採用冗餘編碼技術,如曼切斯特編碼,即兩個脈沖寬來表示一個二進制位
數據0:低-高電平對
數據1:高-低電平對
高-高電平對和低-低電平對沒有使用,可用作幀邊界
差錯的種類:
差錯的處理:
計算機網路中主要採用:
海明距離的意義 :如果海明距離為d,則一個碼字需要發生d個1位錯誤才能變成另外一個碼字
海明距離與檢錯和糾錯的關系:
糾正單比特錯的冗餘位下界, m為數據位數 , r為校驗位數
將某一位數據位的編號展開成2的乘冪的和,那末每一項所對應的位即為該數據位的校驗位(收方使用)。
如: 11 = 1 + 2 + 8
29 = 1 + 4 + 8 + 16
校驗位1的檢驗集合為所有奇數位。
校驗位2的檢驗集合:2、3、6、7、10、11、…
校驗位4的檢驗集合:4、5、6、7、……
校驗位8的檢驗集合:8、9、10、11、……
海明碼糾錯過程(只糾錯1位)
首先將差錯計數器置「0」。
當海明碼數據到達接收端後,接收端逐個檢查各個校驗位的奇偶性。
如發現某一校驗位和它所檢測的集合的奇偶性不正確,就將該檢驗位的編號加到差錯計數器中。
待所有校驗位核對完畢:
若差錯計數器仍為「0」值,則說明該碼字接收無誤。
非「0」值,差錯計數器的值為出錯位的編號,將該位求反就可得到正確結果。
例子:
經計算需要的檢驗字個數的最小值 r應滿足 ( 所以r最小值為4,再根據校驗位的對應規則可得下表:
Data: 1011010
Even: 1011010 0 (偶校驗)
Odd: 1011010 1 (奇校驗)
使用CRC編碼時發送方和接收方必須預先商定一個生成多項式G(x),假設有一個m為的幀M(x),使用G(x)生成的幀的步驟如下:
假設G(x)的階為r, 那麼M(x)在末尾添加r個0,得到 m+r位的位模式 。
利用模2出發,用G(x)去除 ,得到對應的余數(總是小於等於r位)。
利用 減去(模2減法)第2步中得到的余數,得到的位模式就是即將被傳輸的帶校驗和的幀
Sender
在數據幀的低端加上r個零,對應多項式為XrM(x)
採用模2除法,用G(x)去除XrM(x),得余數
採用模2減法,用XrM(x)減去余數,得到帶CRC校驗和的幀
Receiver
用收到的幀去除以G(x)
為零:無錯誤產生。非零:發生了錯誤,重傳
在一定條件下運作:
缺點 :
缺點 :
對協議2的改進:
確認幀
只在接收無差錯時才發確認幀,出錯時不發確認幀。
重發
網路中採用檢錯碼,無法糾正錯誤,由重發原來幀的方式來恢復正確的幀。
計時器
控制何時重發,防止無限期等待(死鎖)。
幀序號
防止重發時接收端收到重復的幀,序號還用於接收時排序。
保證送給網路層的都是按序無重復的分組
幀格式:
****
與前三個協議不同,這是一個雙向傳遞的協議。 之後的三個協議都屬於滑動窗口協議。
滑動窗口協議
如果發送端可以連續發送一批數據幀,必須考慮接收端是否來得及接納與處理這么多的幀,這里就提出了網路流量控制問題
N回退協議 和 選擇重傳協議:
由於傳輸過程中存在延遲,即數據在傳播過程中需要時間,那麼如果使用上面所提及的協議,傳輸過程中有大量的時間存在阻塞狀態,所以為了充分利用帶寬,我們讓發送方一次發送w個幀。所以就存在如何處理在傳輸過程中出現的幀錯誤的問題
協議四的基本工作原理:
窗口設置
窗口滑動機制
特點
出錯情況 :
連續發送W個數據幀,其中有一幀出錯,但其後續幀被成功發送
接收方的接收策略: 丟棄錯幀,其後續幀因不是期望接收幀也被丟棄(接收窗口為1)。
發送方的重傳策略: 緩存在發送窗口中的出錯幀以及其後續幀全部重發
W<=2BD+1(個幀)
BD:帶寬-延遲乘積,bit乘積出來之後換算成幀的個數
該圖的發送方和接收方的窗口大小都是7,那麼也就是說發送方一次最多隻能發送7個幀,剛開始發送方只能發送序號為0~6的數據幀,圖中發送方收到序列號為第0和第1號幀的確認幀,那麼整個窗口向前滑動,發送方可以發送序列號為7和8 的數據幀,但是不幸的是2號數據幀並沒有收到確認幀,所以整個窗口並不會向前滑動,此時只能等待2號數據幀的計時器超時,那麼超時後發送方將會從2號數據幀開始發送,重復這個過程。
實現
出錯情況
原因:如果錯誤很少發生,那麼協議5可以很好的工作。一旦線路質量很差,那麼重傳幀需要浪費大量帶寬。而選擇重傳節約了帶寬,允許接收方緩存丟失幀之後的所有幀
接收方的接收策略: 丟棄錯幀,緩存後續正確接收幀
發送方的重傳策略: 只重發出錯幀。
基本概念:
選擇重傳策略:
接收方丟掉壞幀,但接受並緩存壞幀後面的所有好幀。
否定重傳策略 :
當接收方收到錯誤,他就發送一個否定確認(NAK)信息,而不需要等到相應的計數器超時,提高協議性能。
滑動窗口長度w的選擇
協議5(回退n幀) W = MAX_SEQ
協議6(選擇重傳) W= (MAX_SEQ + 1) / 2
發送方和接收方的窗口大小 W=((MAX_SEQ+1))/2,原因是 防止窗口重疊,在確認幀丟失的情況下而導致的數據錯誤
接收方在某個幀出錯後繼續接受和緩存後續發送的數據包,直到整個窗口的填滿後,把幀進行排序後才傳遞給網路層。
面向字元的數據鏈路協議
PPP 是一種在鏈路上傳輸分組的常用方法
3個主要特性:
PPP兩種認證協議: PAP and CHAP
PPP的幀格式
PPP成幀是面向位元組填充的:
具體細節可以參考上面的位元組填充法, 因為PPP重用了HDLC的技術,所以PPP使用標志字(0x7E 01111110)來標記幀的起始,使用0x7D來作為轉義字元, 具體操作如下:
接收方接收到幀後進行下面處理:
在幀中遇到0x7D 就把0x7D刪除,在把緊跟在0x7D 後的位元組和0x20進行異或運算,就得到對應的數據
LCP ( Link Control Protocol)提供了建立、配置、維護和終止點對點鏈接的方法
PPP的工作過程
⑥ 計算機網路的基礎是什麼
TCP/IP協議(又名:網路通訊協議)即傳輸控制協議/互聯網協議,是一個網路通信模型,以及一整個網路傳輸協議家族。這一模型是Internet最基本的協議,也是Internet國際互聯網路的基礎,由網路層的IP協議和傳輸層的TCP協議組成。 其定義了電子設備如何連入網際網路,以及數據如何在它們之間傳輸的標准。TCP負責發現傳輸的問題,而IP是給網際網路的每一台聯網設備規定一個地址。
為了減少網路設計的復雜性,大多數網路都採用分層結構。對於不同的網路,層的數量、名字、內容和功能都不盡相同。在相同的網路中,一台機器上的第N層與另一台機器上的第N層可利用第N層協議進行通信,協議基本上是雙方關於如何進行通信所達成的一致。
不同機器中包含的對應層的實體叫做對等進程。在對等進程利用協議進行通信時,實際上並不是直接將數據從一台機器的第N層傳送到另一台機器的第N層,而是每一層都把數據連同該層的控制信息打包交給它的下一層,它的下一層把這些內容看做數據,再加上它這一層的控制信息一起交給更下一層,依此類推,直到最下層。最下層是物理介質,它進行實際的通信。相鄰層之間有介面,介面定義下層向上層提供的原語操作和服務。相鄰層之間要交換信息,對等介面必須有一致同意的規則。層和協議的集合被稱為網路體系結構。
每一層中的活動元素通常稱為實體,實體既可以是軟體實體,也可以是硬體實體。第N層實體實現的服務被第N+1層所使用。在這種情況下,第N層稱為服務提供者,第N+1層稱為服務用戶。
服務是在服務接入點提供給上層使用的。服務可分為面向連接的服務和面向無連接的服務,它在形式上是由一組原語來描述的。這些原語可供訪問該服務的用戶及其他實體使用。
TCP是面向連接的通信協議,通過三次握手建立連接,通訊完成時要拆除連接,由於TCP是面向連接的所以只能用於端到端的通訊。
TCP提供的是一種可靠的數據流服務,採用「帶重傳的肯定確認」技術來實現傳輸的可靠性。TCP還採用一種稱為「滑動窗口」的方式進行流量控制,所謂窗口實際表示接收能力,用以限制發送方的發送速度。
如果IP數據包中有已經封好的TCP數據包,那麼IP將把它們向『上』傳送到TCP層。TCP將包排序並進行錯誤檢查,同時實現虛電路間的連接。TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。
TCP將它的信息送到更高層的應用程序,例如Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最後到接收方。
面向連接的服務(例如 Telnet、 FTP、 rlogin、 X Windows和 SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發送和接收 域名資料庫),但使用UDP傳送有關單個主機的信息。
⑦ 計算機網路知識點
一、計算機網路概述
1.1 計算機網路的分類
按照網路的作用范圍:廣域網(WAN)、城域網(MAN)、區域網(LAN);
按照網路使用者:公用網路、專用網路。
1.2 計算機網路的層次結構
TCP/IP四層模型與OSI體系結構對比:
1.3 層次結構設計的基本原則
各層之間是相互獨立的;
每一層需要有足夠的靈活性;
各層之間完全解耦。
1.4 計算機網路的性能指標
速率:bps=bit/s 時延:發送時延、傳播時延、排隊時延、處理時延 往返時間RTT:數據報文在端到端通信中的來回一次的時間。
二、物理層
物理層的作用:連接不同的物理設備,傳輸比特流。該層為上層協議提供了一個傳輸數據的可靠的物理媒體。簡單的說,物理層確保原始的數據可在各種物理媒體上傳輸。
物理層設備:
中繼器【Repeater,也叫放大器】:同一區域網的再生信號;兩埠的網段必須同一協議;5-4-3規程:10BASE-5乙太網中,最多串聯4個中繼器,5段中只能有3個連接主機;
集線器:同一區域網的再生、放大信號(多埠的中繼器);半雙工,不能隔離沖突域也不能隔離廣播域。
信道的基本概念:信道是往一個方向傳輸信息的媒體,一條通信電路包含一個發送信道和一個接受信道。
單工通信信道:只能一個方向通信,沒有反方向反饋的信道;
半雙工通信信道:雙方都可以發送和接受信息,但不能同時發送也不能同時接收;
全雙工通信信道:雙方都可以同時發送和接收。
三、數據鏈路層
3.1 數據鏈路層概述
數據鏈路層在物理層提供的服務的基礎上向網路層提供服務,其最基本的服務是將源自網路層來的數據可靠地傳輸到相鄰節點的目標機網路層。數據鏈路層在不可靠的物理介質上提供可靠的傳輸。
該層的作用包括: 物理地址定址、數據的成幀、流量控制、數據的檢錯、重發 等。
有關數據鏈路層的重要知識點:
數據鏈路層為網路層提供可靠的數據傳輸;
基本數據單位為幀;
主要的協議:乙太網協議;
兩個重要設備名稱:網橋和交換機。
封裝成幀:「幀」是 數據鏈路層 數據的基本單位:
透明傳輸:「透明」是指即使控制字元在幀數據中,但是要當做不存在去處理。即在控制字元前加上轉義字元ESC。
3.2 數據鏈路層的差錯監測
差錯檢測:奇偶校驗碼、循環冗餘校驗碼CRC
奇偶校驗碼–局限性:當出錯兩位時,檢測不到錯誤。
循環冗餘檢驗碼:根據傳輸或保存的數據而產生固定位數校驗碼。
3.3 最大傳輸單元MTU
最大傳輸單元MTU(Maximum Transmission Unit),數據鏈路層的數據幀不是無限大的,數據幀長度受MTU限制.
路徑MTU:由鏈路中MTU的最小值決定。
3.4 乙太網協議詳解
MAC地址:每一個設備都擁有唯一的MAC地址,共48位,使用十六進製表示。
乙太網協議:是一種使用廣泛的區域網技術,是一種應用於數據鏈路層的協議,使用乙太網可以完成相鄰設備的數據幀傳輸:
區域網分類:
Ethernet乙太網IEEE802.3:
乙太網第一個廣泛部署的高速區域網
乙太網數據速率快
乙太網硬體價格便宜,網路造價成本低
乙太網幀結構:
類型:標識上層協議(2位元組)
目的地址和源地址:MAC地址(每個6位元組)
數據:封裝的上層協議的分組(46~1500位元組)
CRC:循環冗餘碼(4位元組)
乙太網最短幀:乙太網幀最短64位元組;乙太網幀除了數據部分18位元組;數據最短46位元組;
MAC地址(物理地址、區域網地址)
MAC地址長度為6位元組,48位;
MAC地址具有唯一性,每個網路適配器對應一個MAC地址;
通常採用十六進製表示法,每個位元組表示一個十六進制數,用 - 或 : 連接起來;
MAC廣播地址:FF-FF-FF-FF-FF-FF。
四、網路層
網路層的目的是實現兩個端系統之間的數據透明傳送,具體功能包括定址和路由選擇、連接的建立、保持和終止等。數據交換技術是報文交換(基本上被分組所替代):採用儲存轉發方式,數據交換單位是報文。
網路層中涉及眾多的協議,其中包括最重要的協議,也是TCP/IP的核心協議——IP協議。IP協議非常簡單,僅僅提供不可靠、無連接的傳送服務。IP協議的主要功能有:無連接數據報傳輸、數據報路由選擇和差錯控制。
與IP協議配套使用實現其功能的還有地址解析協議ARP、逆地址解析協議RARP、網際網路報文協議ICMP、網際網路組管理協議IGMP。具體的協議我們會在接下來的部分進行總結,有關網路層的重點為:
1、網路層負責對子網間的數據包進行路由選擇。此外,網路層還可以實現擁塞控制、網際互連等功能;
2、基本數據單位為IP數據報;
3、包含的主要協議:
IP協議(Internet Protocol,網際網路互聯協議);
ICMP協議(Internet Control Message Protocol,網際網路控制報文協議);
ARP協議(Address Resolution Protocol,地址解析協議);
RARP協議(Reverse Address Resolution Protocol,逆地址解析協議)。
4、重要的設備:路由器。
路由器相關協議
4.1 IP協議詳解
IP網際協議是 Internet 網路層最核心的協議。虛擬互聯網路的產生:實際的計算機網路錯綜復雜;物理設備通過使用IP協議,屏蔽了物理網路之間的差異;當網路中主機使用IP協議連接時,無需關注網路細節,於是形成了虛擬網路。
IP協議使得復雜的實際網路變為一個虛擬互聯的網路;並且解決了在虛擬網路中數據報傳輸路徑的問題。
其中,版本指IP協議的版本,佔4位,如IPv4和IPv6;首部位長度表示IP首部長度,佔4位,最大數值位15;總長度表示IP數據報總長度,佔16位,最大數值位65535;TTL表示IP數據報文在網路中的壽命,佔8位;協議表明IP數據所攜帶的具體數據是什麼協議的,如TCP、UDP。
4.2 IP協議的轉發流程
4.3 IP地址的子網劃分
A類(8網路號+24主機號)、B類(16網路號+16主機號)、C類(24網路號+8主機號)可以用於標識網路中的主機或路由器,D類地址作為組廣播地址,E類是地址保留。
4.4 網路地址轉換NAT技術
用於多個主機通過一個公有IP訪問訪問互聯網的私有網路中,減緩了IP地址的消耗,但是增加了網路通信的復雜度。
NAT 工作原理:
從內網出去的IP數據報,將其IP地址替換為NAT伺服器擁有的合法的公共IP地址,並將替換關系記錄到NAT轉換表中;
從公共互聯網返回的IP數據報,依據其目的的IP地址檢索NAT轉換表,並利用檢索到的內部私有IP地址替換目的IP地址,然後將IP數據報轉發到內部網路。
4.5 ARP協議與RARP協議
地址解析協議 ARP(Address Resolution Protocol):為網卡(網路適配器)的IP地址到對應的硬體地址提供動態映射。可以把網路層32位地址轉化為數據鏈路層MAC48位地址。
ARP 是即插即用的,一個ARP表是自動建立的,不需要系統管理員來配置。
RARP(Reverse Address Resolution Protocol)協議指逆地址解析協議,可以把數據鏈路層MAC48位地址轉化為網路層32位地址。
4.6 ICMP協議詳解
網際控制報文協議(Internet Control Message Protocol),可以報告錯誤信息或者異常情況,ICMP報文封裝在IP數據報當中。
ICMP協議的應用:
Ping應用:網路故障的排查;
Traceroute應用:可以探測IP數據報在網路中走過的路徑。
4.7網路層的路由概述
關於路由演算法的要求:正確的完整的、在計算上應該盡可能是簡單的、可以適應網路中的變化、穩定的公平的。
自治系統AS: 指處於一個管理機構下的網路設備群,AS內部網路自治管理,對外提供一個或多個出入口,其中自治系統內部的路由協議為內部網關協議,如RIP、OSPF等;自治系統外部的路由協議為外部網關協議,如BGP。
靜態路由: 人工配置,難度和復雜度高;
動態路由:
鏈路狀態路由選擇演算法LS:向所有隔壁路由發送信息收斂快;全局式路由選擇演算法,每個路由器計算路由時,需構建整個網路拓撲圖;利用Dijkstra演算法求源端到目的端網路的最短路徑;Dijkstra(迪傑斯特拉)演算法
距離-向量路由選擇演算法DV:向所有隔壁路由發送信息收斂慢、會存在迴路;基礎是Bellman-Ford方程(簡稱B-F方程);
4.8 內部網關路由協議之RIP協議
路由信息協議 RIP(Routing Information Protocol)【應用層】,基於距離-向量的路由選擇演算法,較小的AS(自治系統),適合小型網路;RIP報文,封裝進UDP數據報。
RIP協議特性:
RIP在度量路徑時採用的是跳數(每個路由器維護自身到其他每個路由器的距離記錄);
RIP的費用定義在源路由器和目的子網之間;
RIP被限制的網路直徑不超過15跳;
和隔壁交換所有的信息,30主動一次(廣播)。
4.9 內部網關路由協議之OSPF協議
開放最短路徑優先協議 OSPF(Open Shortest Path First)【網路層】,基於鏈路狀態的路由選擇演算法(即Dijkstra演算法),較大規模的AS ,適合大型網路,直接封裝在IP數據報傳輸。
OSPF協議優點:
安全;
支持多條相同費用路徑;
支持區別化費用度量;
支持單播路由和多播路由;
分層路由。
RIP與OSPF的對比(路由演算法決定其性質):
4.10外部網關路由協議之BGP協議
BGP(Border Gateway Protocol)邊際網關協議【應用層】:是運行在AS之間的一種協議,尋找一條好路由:首次交換全部信息,以後只交換變化的部分,BGP封裝進TCP報文段.
五、傳輸層
第一個端到端,即主機到主機的層次。傳輸層負責將上層數據分段並提供端到端的、可靠的或不可靠的傳輸。此外,傳輸層還要處理端到端的差錯控制和流量控制問題。
傳輸層的任務是根據通信子網的特性,最佳的利用網路資源,為兩個端系統的會話層之間,提供建立、維護和取消傳輸連接的功能,負責端到端的可靠數據傳輸。在這一層,信息傳送的協議數據單元稱為段或報文。
網路層只是根據網路地址將源結點發出的數據包傳送到目的結點,而傳輸層則負責將數據可靠地傳送到相應的埠。
有關網路層的重點:
傳輸層負責將上層數據分段並提供端到端的、可靠的或不可靠的傳輸以及端到端的差錯控制和流量控制問題;
包含的主要協議:TCP協議(Transmission Control Protocol,傳輸控制協議)、UDP協議(User Datagram Protocol,用戶數據報協議);
重要設備:網關。
5.1 UDP協議詳解
UDP(User Datagram Protocol: 用戶數據報協議),是一個非常簡單的協議。
UDP協議的特點:
UDP是無連接協議;
UDP不能保證可靠的交付數據;
UDP是面向報文傳輸的;
UDP沒有擁塞控制;
UDP首部開銷很小。
UDP數據報結構:
首部:8B,四欄位/2B【源埠 | 目的埠 | UDP長度 | 校驗和】 數據欄位:應用數據
5.2 TCP協議詳解
TCP(Transmission Control Protocol: 傳輸控制協議),是計算機網路中非常復雜的一個協議。
TCP協議的功能:
對應用層報文進行分段和重組;
面向應用層實現復用與分解;
實現端到端的流量控制;
擁塞控制;
傳輸層定址;
對收到的報文進行差錯檢測(首部和數據部分都檢錯);
實現進程間的端到端可靠數據傳輸控制。
TCP協議的特點:
TCP是面向連接的協議;
TCP是面向位元組流的協議;
TCP的一個連接有兩端,即點對點通信;
TCP提供可靠的傳輸服務;
TCP協議提供全雙工通信(每條TCP連接只能一對一);
5.2.1 TCP報文段結構:
最大報文段長度:報文段中封裝的應用層數據的最大長度。
TCP首部:
序號欄位:TCP的序號是對每個應用層數據的每個位元組進行編號
確認序號欄位:期望從對方接收數據的位元組序號,即該序號對應的位元組尚未收到。用ack_seq標識;
TCP段的首部長度最短是20B ,最長為60位元組。但是長度必須為4B的整數倍
TCP標記的作用:
5.3 可靠傳輸的基本原理
基本原理:
不可靠傳輸信道在數據傳輸中可能發生的情況:比特差錯、亂序、重傳、丟失
基於不可靠信道實現可靠數據傳輸採取的措施:
差錯檢測:利用編碼實現數據包傳輸過程中的比特差錯檢測 確認:接收方向發送方反饋接收狀態 重傳:發送方重新發送接收方沒有正確接收的數據 序號:確保數據按序提交 計時器:解決數據丟失問題;
停止等待協議:是最簡單的可靠傳輸協議,但是該協議對信道的利用率不高。
連續ARQ(Automatic Repeat reQuest:自動重傳請求)協議:滑動窗口+累計確認,大幅提高了信道的利用率。
5.3.1TCP協議的可靠傳輸
基於連續ARQ協議,在某些情況下,重傳的效率並不高,會重復傳輸部分已經成功接收的位元組。
5.3.2 TCP協議的流量控制
流量控制:讓發送方發送速率不要太快,TCP協議使用滑動窗口實現流量控制。
5.4 TCP協議的擁塞控制
擁塞控制與流量控制的區別:流量控制考慮點對點的通信量的控制,而擁塞控制考慮整個網路,是全局性的考慮。擁塞控制的方法:慢啟動演算法+擁塞避免演算法。
慢開始和擁塞避免:
【慢開始】擁塞窗口從1指數增長;
到達閾值時進入【擁塞避免】,變成+1增長;
【超時】,閾值變為當前cwnd的一半(不能<2);
再從【慢開始】,擁塞窗口從1指數增長。
快重傳和快恢復:
發送方連續收到3個冗餘ACK,執行【快重傳】,不必等計時器超時;
執行【快恢復】,閾值變為當前cwnd的一半(不能<2),並從此新的ssthresh點進入【擁塞避免】。
5.5 TCP連接的三次握手(重要)
TCP三次握手使用指令:
面試常客:為什麼需要三次握手?
第一次握手:客戶發送請求,此時伺服器知道客戶能發;
第二次握手:伺服器發送確認,此時客戶知道伺服器能發能收;
第三次握手:客戶發送確認,此時伺服器知道客戶能收。
建立連接(三次握手):
第一次: 客戶向伺服器發送連接請求段,建立連接請求控制段(SYN=1),表示傳輸的報文段的第一個數據位元組的序列號是x,此序列號代表整個報文段的序號(seq=x);客戶端進入 SYN_SEND (同步發送狀態);
第二次: 伺服器發回確認報文段,同意建立新連接的確認段(SYN=1),確認序號欄位有效(ACK=1),伺服器告訴客戶端報文段序號是y(seq=y),表示伺服器已經收到客戶端序號為x的報文段,准備接受客戶端序列號為x+1的報文段(ack_seq=x+1);伺服器由LISTEN進入SYN_RCVD (同步收到狀態);
第三次: 客戶對伺服器的同一連接進行確認.確認序號欄位有效(ACK=1),客戶此次的報文段的序列號是x+1(seq=x+1),客戶期望接受伺服器序列號為y+1的報文段(ack_seq=y+1);當客戶發送ack時,客戶端進入ESTABLISHED 狀態;當服務收到客戶發送的ack後,也進入ESTABLISHED狀態;第三次握手可攜帶數據;
5.6 TCP連接的四次揮手(重要)
釋放連接(四次揮手)
第一次: 客戶向伺服器發送釋放連接報文段,發送端數據發送完畢,請求釋放連接(FIN=1),傳輸的第一個數據位元組的序號是x(seq=x);客戶端狀態由ESTABLISHED進入FIN_WAIT_1(終止等待1狀態);
第二次: 伺服器向客戶發送確認段,確認字型大小段有效(ACK=1),伺服器傳輸的數據序號是y(seq=y),伺服器期望接收客戶數據序號為x+1(ack_seq=x+1);伺服器狀態由ESTABLISHED進入CLOSE_WAIT(關閉等待);客戶端收到ACK段後,由FIN_WAIT_1進入FIN_WAIT_2;
第三次: 伺服器向客戶發送釋放連接報文段,請求釋放連接(FIN=1),確認字型大小段有效(ACK=1),表示伺服器期望接收客戶數據序號為x+1(ack_seq=x+1);表示自己傳輸的第一個位元組序號是y+1(seq=y+1);伺服器狀態由CLOSE_WAIT 進入 LAST_ACK (最後確認狀態);
第四次: 客戶向伺服器發送確認段,確認字型大小段有效(ACK=1),表示客戶傳輸的數據序號是x+1(seq=x+1),表示客戶期望接收伺服器數據序號為y+1+1(ack_seq=y+1+1);客戶端狀態由FIN_WAIT_2進入TIME_WAIT,等待2MSL時間,進入CLOSED狀態;伺服器在收到最後一次ACK後,由LAST_ACK進入CLOSED;
為什麼需要等待2MSL?
最後一個報文沒有確認;
確保發送方的ACK可以到達接收方;
2MSL時間內沒有收到,則接收方會重發;
確保當前連接的所有報文都已經過期。
六、應用層
為操作系統或網路應用程序提供訪問網路服務的介面。應用層重點:
數據傳輸基本單位為報文;
包含的主要協議:FTP(文件傳送協議)、Telnet(遠程登錄協議)、DNS(域名解析協議)、SMTP(郵件傳送協議),POP3協議(郵局協議),HTTP協議(Hyper Text Transfer Protocol)。
6.1 DNS詳解
DNS(Domain Name System:域名系統)【C/S,UDP,埠53】:解決IP地址復雜難以記憶的問題,存儲並完成自己所管轄范圍內主機的 域名 到 IP 地址的映射。
域名解析的順序:
【1】瀏覽器緩存,
【2】找本機的hosts文件,
【3】路由緩存,
【4】找DNS伺服器(本地域名、頂級域名、根域名)->迭代解析、遞歸查詢。
IP—>DNS服務—>便於記憶的域名
域名由點、字母和數字組成,分為頂級域(com,cn,net,gov,org)、二級域(,taobao,qq,alibaba)、三級域(www)(12-2-0852)
6.2 DHCP協議詳解
DHCP(Dynamic Configuration Protocol:動態主機設置協議):是一個區域網協議,是應用UDP協議的應用層協議。作用:為臨時接入區域網的用戶自動分配IP地址。
6.3 HTTP協議詳解
文件傳輸協議(FTP):控制連接(埠21):傳輸控制信息(連接、傳輸請求),以7位ASCII碼的格式。整個會話期間一直打開。
HTTP(HyperText Transfer Protocol:超文本傳輸協議)【TCP,埠80】:是可靠的數據傳輸協議,瀏覽器向伺服器發收報文前,先建立TCP連接,HTTP使用TCP連接方式(HTTP自身無連接)。
HTTP請求報文方式:
GET:請求指定的頁面信息,並返回實體主體;
POST:向指定資源提交數據進行處理請求;
DELETE:請求伺服器刪除指定的頁面;
HEAD:請求讀取URL標識的信息的首部,只返回報文頭;
OPETION:請求一些選項的信息;
PUT:在指明的URL下存儲一個文檔。
6.3.1 HTTP工作的結構
6.3.2 HTTPS協議詳解
HTTPS(Secure)是安全的HTTP協議,埠號443。基於HTTP協議,通過SSL或TLS提供加密處理數據、驗證對方身份以及數據完整性保護
原文地址:https://blog.csdn.net/Royalic/article/details/119985591
⑧ 計算機網路中ack是什麼意思
計算機網路中ack意思是確認字元。
確認消息也稱為ACK消息,是在計算機網上中通信協議的一部分,是設備或是進程發出的消息,回復已收到數據。例如在傳輸控制協議(TCP,TransmissionControlProtocol)中就有用ACK來告知創建鏈接時有收到SYN數據包、使用鏈接時有收到數據包,或是在中止鏈接有收到FIN數據包。
⑨ 操作系統是如何將socket接受的數據發送給應用層的
在正篇開始之前,我先提問幾個問題,不知道你是否全都了解:
(1) 網路請求是通過http發送的嗎?
(2) http與tcp之間的關系?
(3) 網路請求是怎麼發送的,通過什麼形式去發送的?
在過往對於http與tcp的理解其實只是一個簡單模糊的概念,仔細想想其實http只是一種協議,tcp只是用於建立一個持久連接,它們都不是用於網路發送數據的根本,真正發送數據的是我們的物理層,http協議只是作為一個標識的作用,簡單來說是定位到某一主機。
下面來介紹一下計算機網路體系結構
計算機網路分為7層,分別是物理層,數據鏈路層,網路層,傳輸層,會話層,表示層以及應用層,由於7層太多所以後面經過演變之後定為5層,把應用層,會話層,表示層給合統稱為應用層,我們客戶端的每一步操作,舉個例子,當我們點擊發送按鈕請求網路的時候,這時候會通過應用層逐漸往下傳遞直到物理層,物理層會提供一個互聯網網路介面,這時候才真正通過互聯網開始傳輸數據,這里最主要介紹的是傳輸層以及物理層,其它的網路一下,傳輸層是第一個端到端的層次,也是進程——進程的層次。
主要功能是實現端到端的可靠數據傳輸、復用與分解、連接控制、流量控制和擁塞控制(這些東西都是定義去網路一下,比如說流量控制,其實就是控制數據的發送量,你不能一次性發送很多數據,原因想一下就知道了),客戶端的每一步操作都會在這5層體現出來,查下定義之後就會一目瞭然(比如說在我們終止會話,這時候就是由會話層管理,實體間交換數據的語法,解決格式和數據表示的差別是由表示層來完成等),在我們建立連接的時候比如說發送一個http請求(原理跟後面的socket數據傳輸模塊是一樣的),我們會先建立一個tcp連接,然後發送http請求,這時候數據會經過傳輸層,傳輸層里攜帶了發送數據的報文(比如ip地址,埠號之類的,數據內容),向下傳遞到物理層,物理層最後會提供一個互聯網網路介面去發送數據,數據是以比特流的形式發送,發送到交換機上面(交換機是什麼,去網路查一下,不做解釋),交換機是有多個的,當我們數據非常大的時候,數據會被分解發送到多個交換機上面,傳到對方客戶端或者伺服器的時候數據會重新整合起來,上面的是一個簡單的http請求,下面來介紹一下Socket。
1.Socket的整體流程:
udp客戶端:創建套接字,發送數據,接收數據,關閉套接字。
udp服務端:創建套接字,綁定地址和埠號,接收數據,發送數據,關閉套接字。
tcp客戶端:創建套接字,建立連接,發送數據,接收數據,關閉套接字。
tcp服務端:創建套接字,綁定地址和埠號,設置監聽,建立連接,發送數據,接收數據,關閉套接字。
這些理解起來很容易,我們客戶端是要發送數據的,服務端需要接收數據,所以服務端要綁定地址和埠號,而tcp是需要三次握手的所以要有監聽。
2.Socket三次握手
第一次握手,客戶端發送請求給服務端(詢問是否可以建立連接)。
第二次捂手,服務端回應給客戶端一個確認,接受連接或者拒絕連接
第三次握手,經過確認之後,客戶端回應給服務端(意思是我要開始發送數據了,下一步就開始發送了)。
理解三次握手,為什麼要三次,第一次握手確認客戶端可以發送請求,第二次握手確認服務端可以接收並且發送,第三部確認客戶端可以接收。
3.Scoket四次揮手
第一次揮手,客戶端向伺服器發送斷開連接請求
第二次揮手,服務端回應客戶端(意思是,稍等等我數據傳完(處理完的意思),在斷開)
第三次揮手,服務端回應客戶端斷開請求(可以斷開了)
第四次揮手,客戶端與服務端請求斷開。
tcp連接是面向連接的,數據發送可靠,udp是面向無連接的,數據發送過後就不管了,下面介紹一下tcp為什麼數據可靠
具體方法如下:
差錯檢測:我們發送數據的時候剛剛說過是由物理層提供的互聯網網路介面以比特流的形式進行發送,那麼這個時候差錯檢測利用差錯編碼實現數據包傳輸過程中的比特差錯檢測,保證數據正確性
確認:接收方向發送方反饋接收狀態。ACK(肯定確認);NAK(否定確認)
重傳:當沒有接收到反饋狀態。ACK(肯定確認);NAK(否定確認)的時候,或者請求超時的時候進行重新發送
計時器:內部檢測,一個定時器,當數據在一定時間沒有接收到確認的時候就認為發送失敗,進行重傳操作。
序號:剛剛說了重傳有兩種情況,那麼當重傳是因為網路超時引起的,那麼這個時候計時器進行了一次重傳,然後上次超時後並沒有發送失敗這個時候也發送成功了,這個時候就會造成數據錯亂,那麼序號就起了一個作用,就是給數據進行排序,以至於不錯亂。
下面來說一下tcp可靠傳輸協議滑動窗口協議
左邊的代表的是接收的數據,中間代表的是正在處理的,右邊代表的是沒有處理的,在我們發送數據的時候比如56789這些數據發送,56成功了,這時候窗口就會往右移動,接收的時候呢,當我們接收比如56,接收成功了,這時候窗口往右移動,這里有一個需要注意一下,比如說當我們5沒有發送成功或者說5沒有接收成功,而6發送成功了,這時候窗口是不會往右移動的,它會等待5發送成功後在往右移動,浮動窗口協議里還有GBN協議和SR協議,這兩個的主要區別是,GBN協議的發送窗口只能發送一個,比如上面中間准備發送的5678就只能存在5一個,但是接收窗口是可以有多個的,SR協議是可以發送窗口與接收窗口都是可以多個的。
最後總結一下http請求與socket的差異,socket是套接字,用於將報文傳輸到傳輸層,http請求在發送的時候會建立tcp連接,所以http也會分為http持久性連接和非持久性連接,至於網路傳輸都是要經過物理層才能傳輸,數據經過多個交換機進行分解,傳到伺服器的時候在進行整合。
網卡接收到數據根據數據頭,將數據寫到對應的內存,並發出中斷,系統接收到中斷,然後通知應用吧?
VC中客戶端socket與伺服器連接後,需要執行一個封狀的操作
朝伺服器發送一些數據(命令),然後返回結果
假設全部才字元串,類似這樣的函數
CString SendCommand (CString cmd,socket sk)
要求在執行這個函數的時候能同時響應用戶界面操作
也就是要用非同步方式
而且這個socket已經建立好,有RecvTheard在處理
我目前是用Event實現的,很別扭:
m_hevtReadStore=CreateEvent(NULL,false,FALSE,NULL);
//m_tcp是封裝的socket基本操作類
⑩ 計算機網路——TCP/UDP協議
計算機網路七層模型中,傳輸層有兩個重要的協議:
(1)用戶數據報協議UDP (User Datagram Protocol)
(2)傳輸控制協議TCP (Transmission Control Protocol)
UDP 在傳送數據之前不需要先建立連接。遠地主機的運輸層在收到UDP 報文後,不需要給出任何確認。雖然UDP 不提供可靠交付,但在某些情況下UDP 卻是一種最有效的工作方式。
TCP 則提供面向連接的服務。在傳送數據之前必須先建立連接,數據傳送結束後要釋放連接。TCP 不提供廣播或多播服務。由於TCP 要提供可靠的、面向連接的運輸服務,因此不可避免地增加了許多的開銷,如確認、流量控制、計時器以及連接管理等。
UDP 的主要特點是:
首部手段很簡單,只有8 個位元組,由四個欄位組成,每個欄位的長度都是兩個位元組。
前面已經講過,每條TCP 連接有兩個端點,TCP 連接的端點叫做套接字(socket)或插口。套接字格式如下:
套接寧socket= (IP 地址:埠號』)
每一條TCP 連接唯一地被通信兩端的兩個端點(即兩個套接宇)所確定。即:
TCP 連接= {socket1, socket2} = {(IP1: port1), (IP2: port2)}
3次握手鏈接
4次握手釋放鏈接
斷開連接請求可以由客戶端發出,也可以由伺服器端發出,在這里我們稱A端向B端請求斷開連接。
各個狀態節點解釋如下:
下面為了討論問題的萬便,我們僅考慮A發送數據而B 接收數據並發送確認。因此A 叫做發送方,而B 叫做接收方。
「停止等待」就是每發送完一個分組就停止發送,等待對方的確認。在收到確認後再發送下一個分組。
使用上述的確認和重傳機制,我們就可以在不可靠的傳輸網路上實現可靠的通信。像上述的這種可靠傳輸協議常稱為自動重傳請求ARQ (Automatic Repeat reQuest)。意思是重傳的請求是自動進行的。接收方不需要請求發送方重傳某個出錯的分組。
滑動窗口協議比較復雜,是TCP 協議的精髓所在。這里先給出連續ARQ 協議最基本的概念,但不涉提到許多細節問題。詳細的滑動窗口協議將在後面討論。
下圖表示發送方維持的發送窗口,它的意義是:位於發送窗口內的5 個分組都可連續發送出去,而不需要等待對方的確認。這樣,信道利用率就提高了。
連續ARQ 協議規定,發送方每收到一個確認,就把發送窗口向前滑動一個分組的位置。
接收方一般都是採用 累積確認 的方式。這就是說,接收方不必對收到的分組逐個發送確認,而是可以在收到幾個分組後,對按序到達的最後一個分組發送確認,這樣就表示:到這個分組為止的所有分組都己正確收到了。
累積確認 的優點是容易實現,即使確認丟失也不必重傳。但缺點是不能向發送方反映出接收方己經正確收到的所有分組的信息。
例如,如果發送方發送了前5 個分組,而中間的第3 個分組丟失了。這時接收方只能對前兩個分組發出確認。發送方無法知道後面三個分組的下落,而只好把後面的三個分組都再重傳一次。這就叫做Go-back-N (回退N ),表示需要再退回來重傳己發送過的N 個分組。可見當通信線路質量不好時,連續ARQ 協議會帶來負面的影響。
TCP 的滑動窗口是以位元組為單位的。現假定A 收到了B 發來的確認報文段,其中窗口是20 (位元組),而確認號是31 (這表明B 期望收到的下一個序號是31 ,而序號30 為止的數據己經收到了)。根據這兩個數據, A 就構造出自己的發送窗口,其位置如圖所示。
發送窗口表示:在沒有收到B 的確認的情況下, A可以連續把窗口內的數據都發送出去。凡是己經發送過的數據,在未收到確認之前都必須暫時保留,以便在超時重傳時使用。
發送窗口後沿的後面部分表示己發送且己收到了確認。這些數據顯然不需要再保留了。而發送窗口前沿的前面部分表示不允許發送的,因為接收方都沒有為這部分數據保留臨時存放的緩存空間。
現在假定A 發送了序號為31 ~ 41 的數據。這時發送窗口位置並未改變,但發送窗口內靠後面有11個位元組(灰色小方框表示)表示己發送但未收到確認。而發送窗口內靠前面的9 個位元組( 42 ~ 50 )是允許發送但尚未發送的。】
再看一下B 的接收窗口。B 的接收窗口大小是20,在接收窗口外面,到30 號為止的數據是已經發送過確認,並且己經交付給主機了。因此在B 可以不再保留這些數據。接收窗口內的序號(31~50)足允許接收的。B 收到了序號為32 和33 的數據,這些數據沒有按序到達,因為序號為31 的數據沒有收到(也許丟失了,也許滯留在網路中的某處)。 請注意, B 只能對按序收到的數據中的最高序號給出確認,因此B 發送的確認報文段中的確認號仍然是31 (即期望收到的序號)。
現在假定B 收到了序號為31 的數據,並把序號為31~33的數據交付給主機,然後B刪除這些數據。接著把接收窗口向前移動3個序號,同時給A 發送確認,其中窗口值仍為20,但確認號是34,這表明B 已經收到了到序號33 為止的數據。我們注意到,B還收到了序號為37, 38 和40 的數據,但這些都沒有按序到達,只能先存在接收窗口。A收到B的確認後,就可以把發送窗口向前滑動3個序號,指針P2 不動。可以看出,現在A 的可用窗口增大了,可發送的序號范圍是42~53。整個過程如下圖:
A 在繼續發送完序號42-53的數據後,指針P2向前移動和P3重合。發送窗口內的序號都已用完,但還沒有再收到確認。由於A 的發送窗口己滿,可用窗口己減小到0,因此必須停止發送。
上面已經講到, TCP 的發送方在規定的時間內沒有收到確認就要重傳已發送的報文段。這種重傳的概念是很簡單的,但重傳時間的選擇卻是TCP 最復雜的問題之一。
TCP採用了一種自適應演算法 ,它記錄一個報文段發出的時間,以及收到相應的確認的時間。這兩個時間之差就是報文段的往返時間RTT,TCP 保留了RTT的一個加權平均往返時間RTTs (這又稱為平滑的往返時間, S 表示Smoothed 。因為進行的是加權平均,因此得出的結果更加平滑)。每當第一次測量到RTT樣本時, RTTs值就取為所測量到的RTT樣本值。但以後每測量到一個新的RTT樣本,就按下式重新計算一次RTTs:
新的RTTs = (1 - α)×(舊的RTTs) + α ×(新的RTT樣本)
α 越大表示新的RTTs受新的RTT樣本的影響越大。推薦的α 值為0.125,用這種方法得出的加權平均往返時間RTTs 就比測量出的RTT值更加平滑。
顯然,超時計時器設置的超時重傳時間RTO (RetransmissionTime-Out)應略大於上面得出的加權平均往返時間RTTs。RFC 2988 建議使用下式計算RTO:
RTO = RTTs + 4 × RTTd
RTTd是RTT 的偏差的加權平均值,它與RTTs和新的RTT樣本之差有關。計算公式如下:
新的RTTd= (1- β)×(舊的RTTd) + β × |RTTs-新的RTT樣本|
發現問題: 如圖所示,發送出一個報文段。設定的重傳時間到了,還沒有收到確認。於是重
傳報文段。經過了一段時間後,收到了確認報文段。現在的問題是:如何判定此確認報文段是對先發送的報文段的確認,還是對後來重傳的報文段的確認?
若收到的確認是對重傳報文段的確認,但卻被源主機當成是對原來的報文段的確認,則這樣計算出的RTTs 和超時重傳時間RTO 就會偏大。若後面再發送的報文段又是經過重傳後才收到確認報文段,則按此方法得出的超時重傳時間RTO 就越來越長。
若收到的確認是對原來的報文段的確認,但被當成是對重傳報文段的確認,則由此計算出的RTTs 和RTO 都會偏小。這就必然導致報文段過多地重傳。這樣就有可能使RTO 越來越短。
Kam 提出了一個演算法:在計算加權平均RTTs 時,只要報文段重傳了就不採用其往返時間樣本。這樣得出的加權平均RTTs 和RTO 就較准確。
新問題: 設想出現這樣的情況:報文段的時延突然增大了很多。因此在原來得出的重傳時間內,不會收到確認報文段。於是就重傳報文段。但根據Kam 演算法,不考慮重傳的報文段的往返時間樣本。這樣,超時重傳時間就無法更新。
解決方案: 對Kam 演算法進行修正,方法是z報文段每重傳一次,就把超時重傳時間RTO 增大一些。典型的做法是取新的重傳時間為2 倍的舊的重傳時間。當不再發生報文段的重傳時,才根據上面給出的公式計算超時重傳時間。
流量控制(flow control)就是讓發送方的發送速率不要太快,要讓接收方來得及接收。
利用滑動窗口機制可以很方便地在TCP 連接上實現對發送方的流量控制。
接收方的主機B 進行了三次流量控制。第一次把窗口減小到rwnd =300,第二次又減到rwnd = 100 ,最後減到rwnd = 0 ,即不允許發送方再發送數據了。這種使發送方暫停發送的狀態將持續到主機B 重新發出一個新的窗口值為止。我們還應注意到,B 向A 發送的三個報文段都設置了ACK=1,只有在ACK=1 時確認號欄位才有意義。
發生死鎖: 現在我們考慮一種情況。上圖中, B 向A 發送了零窗口的報文段後不久, B 的接收緩存又有了一些存儲空間。於是B 向A 發送了rwnd = 400 的報文段。然而這個報文段在傳送過程中丟失了。A 一直等待收到B 發送的非零窗口的通知,而B 也一直等待A 發送的數據。如果沒有其他措施,這種互相等待的死鎖局面將一直延續下去。
解決方案: TCP 為每一個連接設有一個 持續計時器(persistence timer) 。只要TCP 連接的一方收到對方的零窗口通知,就啟動持續計時器。若持續計時器設置的時間到期,就發送一個 零窗口探測報文段 (僅攜帶1 宇節的數據),而對方就在確認這個探測報文段時給出了現在的窗口值。
1 TCP連接時是三次握手,那麼兩次握手可行嗎?
在《計算機網路》中是這樣解釋的:已失效的連接請求報文段」的產生在這樣一種情況下:client發出的第一個連接請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連接釋放以後的某個時間才到達server。本來這是一個早已失效的報文段。但server收到此失效的連接請求報文段後,就誤認為是client再次發出的一個新的連接請求。於是就向client發出確認報文段,同意建立連接。假設不採用「三次握手」,那麼只要server發出確認,新的連接就建立了。由於現在client並沒有發出建立連接的請求,因此不會理睬server的確認,也不會向server發送ACK包。這樣就會白白浪費資源。而經過三次握手,客戶端和伺服器都有應有答,這樣可以確保TCP正確連接。
2 為什麼TCP連接是三次,揮手確是四次?
在TCP連接中,伺服器端的SYN和ACK向客戶端發送是一次性發送的,而在斷開連接的過程中,B端向A端發送的ACK和FIN是是分兩次發送的。因為在B端接收到A端的FIN後,B端可能還有數據要傳輸,所以先發送ACK,等B端處理完自己的事情後就可以發送FIN斷開連接了。
3 為什麼在第四次揮手後會有2個MSL的延時?
MSL是Maximum Segment Lifetime,最大報文段生存時間,2個MSL是報文段發送和接收的最長時間。假定網路不可靠,那麼第四次發送的ACK可能丟失,即B端無法收到這個ACK,如果B端收不到這個確認ACK,B端會定時向A端重復發送FIN,直到B端收到A的確認ACK。所以這個2MSL就是用來處理這個可能丟失的ACK的。
1 文件傳送協議
文件傳送協議FTP (File Transfer Protocol) [RFC 959]是網際網路上使用得最廣泛的文件傳送協議,底層採用TCP協議。
盯P 使用客戶伺服器方式。一個FTP 伺服器進程可同時為多個客戶進程提供服務。FTP的伺服器進程由兩大部分組成:一個主進程,負責接受新的請求:另外有若干個從屬進程,負責處理單個請求。
在進行文件傳輸時,客戶和伺服器之間要建立兩個並行的TCP 連接:「控制連接」(21埠)和「數據連接」(22埠)。控制連接在整個會話期間一直保持打開, FTP 客戶所發出的傳送請求,通過控制連接發送給伺服器端的控制進程,但控制連接並不用來傳送文件。實際用於傳輸文件的是「數據連接」。伺服器端的控制進程在接收到FTP 客戶發送來的文件傳輸請求後就創建「數據傳送進程」和「數據連接」,用來連接客戶端和伺服器端的數據傳送進程。
2 簡單文件傳送協議TFTP
TCP/IP 協議族中還有一個簡單文件傳送協議TFfP (Trivial File Transfer Protocol),它是一個很小且易於實現的文件傳送協議,埠號69。
TFfP 也使用客戶伺服器方式,但它使用UDP 數據報,因此TFfP 需要有自己的差錯改正措施。TFfP 只支持文件傳輸而不支持交耳。
3 TELNET
TELNET 是一個簡單的遠程終端協議,底層採用TCP協議。TELNET 也使用客戶伺服器方式。在本地系統運行TELNET 客戶進程,而在遠地主機則運行TELNET 伺服器進程,佔用埠23。
4 郵件傳輸協議
一個電子郵件系統應具如圖所示的三個主要組成構件,這就是用戶代理、郵件伺服器,以及郵件發送協議(如SMTP )和郵件讀取協議(如POP3), POP3 是郵局協議(Post Office Protocol)的版本3 。
SMTP 和POP3 (或IMAP )都是在TCP 連接的上面傳送郵件,使用TCP 的目的是為了使郵件的傳送成為可靠的。