傳輸層 傳輸控制協議TCP概述 之一

2021-08-27 06:29:38 字數 3381 閱讀 1428

一,tcp的主要特點

1)面向連線

2)點對點

3)可靠交付,無差錯、不丟包、不重複、按需到達

4)全雙工通訊,接收端和傳送端都設有傳送快取和接受快取

5)面向位元組流:tcp把應用程式交付下來的資料僅僅看成 」一連串無結構位元組流「,但tcp不知道位元組流含義。tcp也不保證接收方收到的資料塊和傳送方應用程式所發出的資料塊具有對應大小。應用程式應具備能力識別收到的位元組流,把它還原成有意義的資料。

二,細節

1)tcp對應用程式一次把多長的報文送到tcp快取中是不關心的,tcp根據對方給出的視窗值和網路擁塞程度來決定乙個報文段應包含多少位元組。udp傳送的報文長度是應用程式給出的。

2)每一條tcp鏈結,被兩個端點的兩個套接字唯一的確定。

三,可靠傳輸的工作原理

理想的傳輸條件:傳輸通道不產生差錯、不管傳送方以多快速度傳輸,接收方都來得及出路

1)停止等待協議

出現差錯: 超時重傳(大於乙個來回的時間)

a 傳送完分組,儲存已傳送的分組的副本,收到確認後再丟棄。

b 分組和確認分組都進行編號,這樣才能知道那個是哪個的確認

c 超時重傳時間應大於乙個來回的時間

確認丟失和確認遲到:

a 確認丟失就超時重傳,對方明明傳送確認,但是還收到重複資料,則丟棄重複資料,再發確認。

b 類似確認丟失,只是在傳送方再次收到 遲來的確認時,丟棄並什麼也不做。

2)連續arq協議 (automatic repeat-request)

傳送方:每收到乙個分組的確認,把視窗向前移動乙個分組的位置。

接收方:採用積累傳送確認的方式,對按序到達的最後乙個分組傳送確認(不比所有都確認)

缺點:不能向傳送方反映 接受到的所有分組的資訊。

go-back-n:傳送五個分組,第三個丟失了。接收方只能對第二個確認,這樣傳送方,只能重傳後三個分組。

四,tcp可靠傳輸的實現

1)以位元組為單位的滑動視窗

2)傳送快取和接收快取

傳送快取與接收快取的作用

(1) 傳送快取用來暫時存放:

a) 傳送應用程式傳送給傳送方 tcp準備傳送的資料;

b) tcp 已傳送出但尚未收到確認的資料。

(2) 接收快取用來暫時存放:

a)按序到達的、但尚未被接收應用程式讀取的資料;

b)不按序到達的資料。

3) 注意

(1) a 的傳送視窗並不總是和 b 的接收視窗一樣大(因為有一定的時間滯後)。

(2) tcp 標準沒有規定對不按序到達的資料應如何處理。通常是先臨時存放在接收視窗中,等到位元組流中所缺少的位元組收到後,再按序交付上層的應用程序。

(3) tcp 要求接收方必須有累積確認的功能,這樣可以減小傳輸開銷。接收方可以在有訊息傳送時,順便把確認訊息帶上。但不能過分推遲確認,以免造成重傳浪費。

4) 超時重傳時間的選擇

重傳機制是 tcp 中最重要和最複雜的問題之一。tcp 每傳送乙個報文段,就對這個報文段設定一次計時器。只要計時器設定的重傳時間到但還沒有收到確認,就要重傳這一報文段。

1 往返時延的方差很大

由於 tcp 的下層是乙個網際網路環境,ip 資料報所選擇的路由變化很大。因而運輸層的往返時間的方差也很大。

2加權平均往返時間

tcp 保留了rtt的乙個加權平均往返時間rtts(這又稱為平滑的往返時間)。

第一次測量到rtt樣本時,rtts值就取為所測量到的 rtt樣本值。以後每測量到乙個新的rtt 樣本,就按下式重新計算一次rtts:

新的 rtts= (1 - a) * (舊的 rtts) + a *(新的 rtt 樣本)

式中,0<= a < 1。若 a 很接近於零,表示 rtt 值更新較慢。若選擇 a 接近於 1,則表示 rtt 值更新較快。(rfc 2988 推薦的 a 值為 1/8,即 0.125)

3 超時重傳時間 rto (retransmissiontime-out)

(1)rto應略大於上面得出的加權平均往返時間rtts。

(2) rfc 2988 建議使用下式計算 rto:

rto = rtts+ 4 *rttd

(3)rttd是 rtt 的偏差的加權平均值。

(4) rfc 2988 建議這樣計算rttd。第一次測量時,rttd值取為測量到的 rtt 樣本值的一半。在以後的測量中,則使用下式計算加權平均的rttd:

新的rttd= (1 - b) *(舊的rttd)+ b *|rtts- 新的 rtt 樣本| 式中,b 是個小於 1 的係數,其推薦值是 1/4,即 0.25。

4往返時間的測量

往返時間的測量相當複雜

tcp 報文段 1 沒有收到確認。重傳(即報文段 2)後,收到了確認報文段 ack。但如何判定此確認報文段是對原來的報文段 1 的確認,還是對重傳的報文段 2 的確認?

下面這些演算法提供了一下方法:

karn 演算法

在計算平均往返時間 rtt 時,只要報文段重傳了,就不採用其往返時間樣本。這樣得出的加權平均平均往返時間 rtts 和超時重傳時間 rto 就較準確。

修正karn 演算法

報文段每重傳一次,就把 rto 增大一些,如下公式所示:新的 rto=y*(舊的 rto) 式中,係數y的典型值是 2 。

當不再發生報文段的重傳時,才根據報文段的往返時延更新平均往返時延 rtt 和超時重傳時間 rto 的數值。實踐證明,這種策略較為合理。

5 選擇確認 sack (selective ack)

當接收方收到了和前面的位元組流不連續的兩個位元組塊。如果這些位元組的序號都在接收視窗之內,那麼接收方就先收下這些資料,但要把這些資訊準確地告訴傳送方,使傳送方不要再重**送這些已收到的資料。

rfc 2018 的規定

(1) 如果要使用選擇確認,那麼在建立 tcp 連線時,就要在 tcp 首部的選項中加上「允許 sack」的選項,而雙方必須都事先商定好。

(2) 如果使用選擇確認,那麼原來首部中的「確認號字段」的用法仍然不變。只是以後在 tcp 報文段的首部中都增加了 sack 選項,以便報告收到的不連續的位元組塊的邊界。

(3) 由於首部選項的長度最多只有 40 位元組,而指明乙個邊界就要用掉 4 位元組,因此在選項中最多只能指明 4 個位元組塊的邊界資訊。

傳輸控制協議TCP概述

tcp是tcp ip體系中非常複雜的乙個協議。下面介紹tcp最主要的特點。tcp是面向連線的運輸層協議。這就是說應用程式在使用tcp協議之前,必須先簡歷tcp連線。在傳送資料完畢後,必須釋放已經建立的tcp連線。每一條tcp連線只能有兩個端點,每一條tcp連線只能是 點對點 一對一 的 tcp提供可...

傳輸層之TCP協議

傳輸層 屬於較上面的一層。它的上面是應用層,下面是網路層!在端到端的傳輸中,必須通過傳輸層。傳輸層的作用域是 端裝置。傳輸層主要功能是 1 把從應用層的資料報進行復用,然後傳送到網路層 2 把從網路層接受到的資料報進行分用 不同的埠 然後傳遞給應用層。與網路層的區別 網路層是把主機的資料報傳到另一台...

傳輸層之TCP協議

埠 port 用來標記不同的網路程序,埠使用16位元位表示 0 65535 udp user datagram protocol 即使用者資料報協議,它是無連線的協議。udp資料報位於ip資料報內,它接收來自應用層的資料,且不會對資料進行任何處理。因為udp結構簡單,所以不保證可靠的交付資料。udp...