TCP採用哪些機制來實現可靠資料轉送、流控和擁塞控制?

來源:互聯網
上載者:User
TCP採用哪些機制來實現可靠資料轉送、流控和擁塞控制?
1.採用連線導向的三向交握實現可靠對象傳輸。2.使用資料視窗機制協商隊列大小實現資料隊列傳輸。3.通過序列化應答和必要時重發資料包,TCP 為應用程式提供了可靠的傳輸串流和虛擬串連服務。下面是找到的長篇大論中比較好的文章:一、TCP協議1、TCP 通過以下方式提供可靠性: ◆ 應用程式分割為TCP認為最合適發送的資料區塊。由TCP傳遞給IP的資訊單位叫做報文段。 ◆ 當TCP發出一個報文段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能記時收到一個確認,它 就重發這個報文段。 ◆ 當TCP收到發自TCP串連另一端的資料,它將發送一個確認。這個確認不是立即發送,通常延遲幾分之一秒。 ◆ TCP將保持它首部和資料的檢驗和。這是一個端到端的檢驗和,目的是檢測資料在傳輸過程中的任何變化如果收到報文段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到這個報文段。 ◆ 既然TCP報文段作為IP資料報來傳輸,而IP資料報的到達可能失序,因此TCP報文段的到達也可能失序。如果必要,TCP將對收到的資料進行排序,將收到的資料以正確的順序交給應用程式層。 ◆ 既然IP資料報會發生重複,TCP串連端必須丟棄重複的資料。 ◆ TCP還能提供流量控制,TCP串連的每一方都有固定大小的緩衝空間。TCP的接收端只允許另一端發送接收端緩衝區所能接納的資料。這將防止較快主機致使較慢主機的緩衝區溢位。   另外,TCP對位元組流的內容不作任何解釋。2、TCP首部:  TCP資料被封裝在一個IP資料報中,格式如下:   IP首部20 TCP首部20 TCP首部 TCP首部格式如下:   16位源連接埠號碼 16位目的連接埠號碼 32位序號 32位確認序號 4位首部長度 保留6位 URG ACK PSH RST SYN FIN 16位視窗大小 16位檢驗和 16位緊急指標 選項 資料 說明:(1)每個TCP段都包括源端和目的端的連接埠號碼,用於尋找發送端和接收端的應用進程。這兩個值加上IP首部的源端IP地址和目的端IP地址唯一確定一個TCP串連。(2)序號用來標識從TCP發送端向接收端發送的資料位元組流,它表示在這個報文段中的第一個資料位元組。如果將位元組流看作在兩個應用程式間的單向流動,則TCP用序號對每個位元組進行計數。(3)當建立一個新串連時,SYN標誌變1。序號欄位包含由這個主機選擇的該串連的初始序號ISN,該主機要發送資料的第一個位元組的序號為這個ISN加1,因為SYN標誌使用了一個序號。(4)既然每個被傳輸的位元組都被計數,確認序號包含發送確認的一端所期望收到的下一個序號。因此,確認序號應當時上次已成功收到資料位元組序號加1。只有ACK標誌為1時確認序號欄位才有效。(5)發送ACK無需任何代價,因為32位的確認序號欄位和ACK標誌一樣,總是TCP首部的一部分。因此一旦一個串連建立起來,這個欄位總是被設定,ACK標誌也總是被設定為1。(6)TCP為應用程式層提供全雙工系統的服務。因此,串連的每一端必須保持每個方向上的傳輸資料序號。(7)TCP可以表述為一個沒有選擇確認或否認的華東視窗協議。因此TCP首部中的確認序號表示發送方已成功收到位元組,但還不包含確認序號所指的位元組。當前還無法對資料流中選定的部分進行確認。(8)首部長度需要設定,因為任選欄位的長度是可變的。TCP首部最多60個位元組。(9)6個標誌位中的多個可同時設定為1    ◆ URG-緊急指標有效    ◆ ACK-確認序號有效    ◆ PSH-接收方應儘快將這個報文段交給應用程式層    ◆ RST-重建串連    ◆ SYN-同步序號用來發起一個串連    ◆ FIN-發送端完成發送任務(10)TCP的流量控制由串連的每一端通過聲明的視窗大小來提供。視窗大小為位元組數,起始於確認序號欄位指明的值,這個值是接收端期望接收的位元組數。視窗大小是一個16為的欄位,因而視窗大小最大為65535位元組。(11)檢驗和覆蓋整個TCP報文端:TCP首部和TCP資料。這是一個強制性的欄位,一定是由發送端計算和儲存,並由接收端進行驗證。TCP檢驗和的計算和UDP首部檢驗和的計算一樣,也使用偽首部。(12)緊急指標是一個正的位移量,黃蓉序號欄位中的值相加表示緊急資料最後一個位元組的序號。TCP的緊急方式是發送端向另一端發送緊急資料的一種方式。(13)最常見的可選欄位是最長報文大小MMS,每個串連方通常都在通訊的第一個報文段中指明這個選項。它指明本端所能接收的最大長度的報文段。二、TCP串連的建立和終止1、建立連線協定(1) 請求端發送一個SYN段指明客戶打算已連線的服務器的連接埠,隱疾初始序號(ISN),這個SYN報文段為報文段1。(2) 伺服器端發回包含伺服器的初始序號的SYN報文段(報文段2)作為應答。同時將確認序號設定為客戶的ISN加1以對客戶的SYN報文段進行確認。一個SYN將佔用一個序號。(3) 客戶必須將確認序號設定為伺服器的ISN加1以對伺服器的SYN報文段進行確認(報文段3)。   這3個報文段完成串連的建立,稱為三向交握。發送第一個SYN的一端將執行主動開啟,接收這個SYN並發回下一個SYN的另一端執行被動開啟。2、串連終止協議  由於TCP串連是全雙工系統的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的資料發送任務後就能發送一個FIN來終止這個方向的串連。收到一個FIN只意味著這一方向上沒有資料流動,一個TCP串連在收到一個FIN後仍能發送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。 (1) TCP用戶端發送一個FIN,用來關閉客戶到伺服器的資料傳送(報文段4)。 (2) 伺服器收到這個FIN,它發回一個ACK,確認序號為收到的序號加1(報文段5)。和SYN一樣,一個FIN將佔用一個序號。 (3) 伺服器關閉用戶端的串連,發送一個FIN給用戶端(報文段6)。 (4) 客戶段發回確認,並將確認序號設定為收到序號加1(報文段7)。3、串連建立的逾時   如果與伺服器無法建立串連,用戶端就會三次向伺服器發送串連請求。在規定的時間內伺服器未應答,則串連失敗。4、最大報文段長度MSS  最大報文段長度表示TCP傳往另一端的最大塊資料的長度。當一個串連建立時,串連的雙方都要通告各自的MSS。一般,如果沒有分段發生,MSS還是越大越好。報文段越大允許每個報文段傳送的資料越多,相對IP和TCP首部有更高的網路利用率。當TCP發送一個 SYN時,它能將MSS值設定為外出介面的MTU長度減去IP首部和TCP首部長度。對於乙太網路,MSS值可達1460。   如果目的地址為非本地的,MSS值通常預設為536,是否本地主要通過網路號區分。MSS讓主機限制另一端發送資料報的長度,加上主機也能控制它發送資料報的長度,這將使以較小MTU串連到一個網路上的主機避免分段。5、 TCP的半關閉   TCP提供了串連的一端在結束它的發送後還能接收來自另一端資料的能力,這就是TCP的半關閉。用戶端發送FIN,另一端發送對這個FIN的ACK報文段。當收到半關閉的一端在完成它的資料傳送後,才發送FIN關閉這個方向的串連,用戶端再對這個FIN確認,這個串連才徹底關閉。6、2MSL串連  TIME_WAIT狀態也稱為2MSL等待狀態。每個TCP必須選擇一個報文段最大存留時間(MSL)。它是任何報文段被丟棄前在網路的最長時間。  處理原則:當TCP執行一個主動關閉,並發回最後一個ACK,該串連必須在TIME_WAIT狀態停留的時間為2MSL。這樣可以讓TCP再次發送最後的ACK以避免這個ACK丟失(另一端逾時並重發最後的FIN)。這種2MSL等待的另一個結果是這個TCP串連在2MSL等待期間,定義這個串連的插口不能被使用。7、平靜時間  TCP在重啟的MSL秒內不能建立任何串連,這就是平靜時間。8、FIN_WAIT_2狀態  在FIN_WAIT_2狀態我們已經發出了FIN,並且另一端也對它進行了確認。只有另一端的進程完成了這個關閉,我們這端才會從 FIN_WAIT_2狀態進入TIME_WAIT狀態。這意味著我們這端可能永遠保持這個狀態,另一端也將處於CLOSE_WAIT狀態,並一直保持這個狀態直到應用程式層決定進行關閉。9、複位報文段  TCP首部的RST位是用於複位的。一般,無論合適一個報文端發往相關的串連出現錯誤,TCP都會發出一個複位報文段。主要情況:(1)到不存在的連接埠的串連請求;(2)異常終止一個串連。10、同時開啟  為了處理同時開啟,對於同時開啟它僅建立一條串連而不是兩條串連。兩端幾乎在同時發送SYN,並進入SYN_SENT狀態。當每一端收到SYN時,狀態變為SYN_RCVD,同時他們都再發SYN並對收到的SYN進行確認。當雙方都收到SYN及相應的ACK時,狀態都變為ESTABLISHED。一個同時開啟的串連需要交換4個報文段,比正常的三向交握多了一次。11、 同時關閉  當應用程式層發出關閉命令,兩端均從ESTABLISHED變為FIN_WAIT_1。這將導致雙方各發送一個FIN,兩個FIN經過網路傳送後分別到達另一端。收到FIN後,狀態由FIN_WAIT_1變為CLOSING,並發送最後的ACK。當收到最後的ACK,狀態變為TIME_WAIT。同時關閉和正常關閉的段減緩數目相同。12、TCP選項  每個選項的開始是1位元組的kind欄位,說明選項的類型。    Kind=1:選項表結束(1位元組)   Kind=1:無操作(1位元組)   Kind=2:最大報文段長度(4位元組)   Kind=3:視窗擴大因子(4位元組)   Kind=8:時間戳記(10位元組)三、TCP的逾時和重傳  對於每個TCP串連,TCP管理4個不同的定時器。  (1) 重傳定時器用於當希望收到另一端的確認。  (2) 堅持定時器使視窗大小資訊保持不斷流動,即使另一端關閉了其接收視窗。  (3) 保活定時器可檢測到一個空閑串連的另一端何時崩潰或重啟。  (4) 2MSL定時器測量一個串連處於TIME_WAIT狀態的時間。1、往返時間測量  TCP逾時和重傳重最重要的就是對一個給定串連的往返時間(RTT)的測量。由於路由器和網路流量均會變化,因此TCP應該跟蹤這些變化並相應地改變逾時時間。首先TCP必須測量在發送一個帶有特別序號地位元組和接收到包含該位元組地確認之間的RTT。2、擁塞避免演算法  該演算法假定由於分組收到損壞引起的丟失是非常少的,因此分組丟失就意味著在源主機和目的主機之間的某處網路上發生了阻塞。有兩種分組丟失的指示:發生逾時和收到重複的確認。擁塞避免演算法需要對每個串連維持兩個變數:一個擁塞視窗cwnd和一個慢啟動門限ssthresh。  (1) 對一個給定的串連,初始化cwnd為1個報文段,ssthresh為65535個位元組。  (2) TCP輸出常式的輸出不能超過cwnd和接收方通告視窗的大小。擁塞避免是發送方使用的流量控制。前者是發送方感受到的網路擁塞的估計,而後者則與接收方在該串連上的可用緩衝大小有關。  (3) 當擁塞發生時,ssthresh被設定為當前視窗大小的一般(cwnd和接收方通告視窗大小的最小值,但最小為2個報文段)。此外,如果是逾時引起了擁塞,則cwnd被設定為1個報文段。  (4) 當新的資料被對方確認時,就增加cwnd,但增加的方法依賴與是否進行中慢啟動或擁塞避免。如果cwnd小於或等於ssthresh,則進行中慢啟動,否則進行中擁塞避免。3、快速重傳和快速恢複演算法  如果我們一連串收到3個或以上的重複ACK,就非常可能是一個報文段丟失了。於是我們就重傳丟失的資料報文段,而無需等待逾時定時器溢出。 (1) 當收到第3個重複的ACK時,將ssthresh設定為當前擁塞視窗cwnd的一半,重傳丟失的報文段,設定cwnd為ssthresh加上3倍的報文段大小。 (2) 每次收到另一個重複的ACK時,cwnd增加1個報文段大小並發送一個1個分組,如果允許的話。 (3)當下一個確認新資料的ACK到達時,設定cwnd為ssthresh,這個ACK應該時在進行重傳後的一個往返時間內對步驟1重重傳的確認。另外,這個 ACK也應該是對丟失的分組和收到的第一個重複的ACK之間的所有中間報文段的確認。4、 ICMP差錯  TCP如何處理一個給定的串連返回的ICMP差錯。TCP能夠遇到的最常見的ICMP差錯就是來源站點抑制、主機不可達和網路不可達。 (1) 一個接收到的來源站點抑制引起擁塞視窗cwnd被置為1個報文段大小來發起慢啟動,但是慢啟動門限ssthresh沒有變化,所以視窗將開啟直到它開放了所有的通路或者發生了擁塞。 (2) 一個接收到的主機不可達或網路不可達實際都被忽略,因為這兩個差錯都被認為是短暫現象。TCP試圖發送引起該差錯的資料,儘管最終有可能會逾時。5、重新分組:  當TCP逾時並重傳時,它並不一定要重傳同樣的報文段,相反,TCP允許進行重新分組而發送一個較大的報文段。這是允許的,因為TCP是使用位元組序號而不是報文段序號來進行識別它所要發送的資料和進行確認。四、TCP的堅持定時器   ACK的傳輸並不可靠,也就是說,TCP不對ACK報文段進行確認,TCP只確認那些包含資料的ACK報文段。為了防止因為ACK報文段丟失而雙方進行等待的問題,發送方用一個堅持定時器來周期性地向接收方查詢。這些從發送方發出地報文段稱為視窗探查。五、TCP的保活定時器   如果一個給定的串連在2小時內沒有任何動作,那麼伺服器就向客戶發送一個探查報文段。客戶主機必須處於以下4個狀態之一。   (1) 客戶主機依然正常運行,並從伺服器可達。客戶的TCP響應正常,而伺服器也知道對方的正常工作的。伺服器在2小時內將保活定時器複位。   (2) 客戶主機已經崩潰,並且關閉或者正在重新啟動。在任何一種情況下,客戶的TCP都沒有響應。伺服器將不能收到對探查的響應,並在75秒後逾時。總共發送10個探查,間隔75秒。   (3) 客戶主機崩潰並已經重新啟動。這是伺服器將收到一個對其保活探查的響應,但這個響應是一個複位,使得伺服器終止這個串連。  (4) 客戶主機正常運行,但是從伺服器不可達。六、TCP的一些效能1、 路徑MTU發現:  TCP的路徑MTU發現按如下方式進行:在串連建立時,TCP使用輸出介面或對段聲明的MSS中的最下MTU作為其實的報文段大小。路徑MTU發現不允許TCP超過對端聲明的MSS。如果對端沒有指定一個MSS,則預設為536。  一旦選定了起始的報文段大小,在該串連上的所有被TCP發送的IP資料報都將被設定DF位。如果中間路由器需要對一個設定了DF標誌的資料報進行分區,它就丟棄這個資料報,併產生一個ICMP的“不能分區”差錯。  如果收到這個ICMP差錯,TCP就減少段大小並進行重傳。如果路由器產生的是一個較新的該類ICMP差錯,則報文段大小被設定位下一跳的MTU減去 IP和TCP的首部長度。如果是一個較舊的該類ICMP差錯,則必須嘗試下一個可能的最小MTU。2、 長肥管道  一個串連的容量=頻寬X時延(RTT)。具有大的頻寬時延乘積的網路稱為長肥網路(LFN)。一個運行在LFN的TCP串連稱為長肥管道。管道可以被水平拉長(一個長的RTT),或被垂直拉高(較高的頻寬),或兩個方向展開。3、視窗擴大選項:  視窗擴大選項使TCP的視窗定義從16位增加到32位,這並不是通過修改TCP首部來實現的,TCP首部仍然使用16位,而是通過定義一個選項實現對16位的擴大操作來完成的。4、時間戳記選項:  時間戳記選項使發送方在每個報文段中放置一個時間戳記值。接收方在確認中返回這個數值,從而允許發送方為每一個收到的ACK計算RTT。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.