基於tcp的各類解決方案,可以根據資料吞吐量來大致分成兩大類:
(1)互動資料型別,例如telnet,ssh,這種型別的協議在大多數情況下只是做小流量的資料交換,比如說按一下鍵盤,回顯一些文字等等。
(2)資料成塊型別,例如ftp,這種型別的協議要求tcp能盡量的運載資料,把資料的吞吐量做到最大,並盡可能的提高效率。
針對這兩種情況,tcp給出了兩種不同的策略來進行資料傳輸。
通常,在網路速度很快的情況下,比如用lo介面進行telnet通訊,當按下字母鍵並要求回顯的時候,客戶端和伺服器將經歷 傳送按鍵資料->伺服器傳送按鍵資料的ack -> 伺服器端傳送回顯資料->客戶端傳送回顯資料的ack的過程,而其中的資料流量將是40bit + 41bit+41bit+40bit = 162bit,如果在廣域網裡面,這種小分組的tcp流量將會造成很大的網路負擔。
對於互動性要求比較高的應用,tcp給出兩個策略來提高傳送效率和減低網路負擔(
但這樣是不是反而使資料互動延遲增大呢,
是否理解為減低網路負擔反而提高了資料互動呢
): (1).捎帶ack。
(2).nagle演算法(一次盡量多的發資料)。
這個策略是說,當主機收到遠端主機的tcp資料報之後,通常不馬上傳送ack資料報,而是等上乙個短暫的時間,如果這段時間裡面主機還有傳送到遠端 主機的tcp資料報,那麼就把這個ack資料報「捎帶」著傳送出去,把本來兩個tcp資料報整合成乙個傳送。一般的,這個時間是200ms。這裡的計時器 是以核心為基礎的,和在什麼時候接收到資料沒有對應關係。
上過bbs的人應該都會有感受,就是在網路慢的時候發貼,有時鍵入一串字串以後,經過一段時間,客戶端「發瘋」一樣突然回顯出很多內容,就好像資料一下子傳過來了一樣,這就是nagle演算法的作用。
nagle演算法是說,當主機a給主機b傳送了乙個tcp資料報並進入等待主機b的ack資料報的狀態時,tcp的輸出緩衝區裡面只能有乙個tcp數 據報,並且,這個資料報不斷地收集後來的資料,整合成乙個大的資料報,等到b主機的ack包一到,就把這些資料「一股腦」的傳送出去。雖然這樣的描述有些 不準確,但還算形象和易於理解,我們同樣可以體會到這個策略對於低減網路負擔的好處。
在編寫插口程式的時候,可以通過tcp_nodelay來關閉這個演算法。並且,使用這個演算法看情況的,比如基於tcp的x視窗協議,如果處理滑鼠事件時還是用這個演算法,那麼「延遲」可就非常大了。
對於ftp這樣對於資料吞吐量有較高要求的要求,將總是希望每次盡量多的傳送資料到對方主機,就算是有點「延遲」也無所謂。tcp也提供了一整套的策略來支援這樣的需求。tcp協議中有16個bit表示「視窗」的大小,這是這些策略的核心。
在解釋滑動視窗前,需要看看ack的應答策略,一般來說,傳送端傳送乙個tcp資料報,那麼接收端就應該傳送乙個ack資料報。但是事實上卻不是這 樣,傳送端將會連續傳送資料盡量填滿接受方的緩衝區,而接受方對這些資料只要傳送乙個ack報文來回應就可以了,這就是ack的累積特性,這個特性大大減 少了傳送端和接收端的負擔。
滑動視窗本質上是描述接受方的tcp資料報緩衝區大小的資料,傳送方根據這個資料來計算自己最多能傳送多長的資料。如果傳送方收到接受方的視窗大小為0的tcp資料報,那麼傳送方將停止傳送資料,等到接受方傳送視窗大小不為0的資料報的到來。
關於滑動視窗協議,書上還介紹了三個術語,分別是:
視窗合攏:當視窗從左邊向右邊靠近的時候,這種現象發生在資料被傳送和確認的時候。
視窗張開:當視窗的右邊沿向右邊移動的時候,這種現象發生在接受端處理了資料以後。
視窗收縮:當視窗的右邊沿向左邊移動的時候,這種現象不常發生。
上面的策略用於區域網內傳輸還可以,但是用在廣域網中就可能會出現問題,最大的問題就是當傳輸時出現了瓶頸(比如說一定要經過乙個slip低速鏈 路)所產生的大量資料堵塞問題(擁塞),為了解決這個問題,tcp傳送方需要確認連線雙方的線路的資料最大吞吐量是多少。這,就是所謂的擁塞視窗。(
網路不擁塞,資料吞吐率也上去了)
s6 7 TCP 傳輸策略
防止黏包現象的出現 當視窗數為 0 時,傳送者不能正常傳送資料段,除非 urgent資料。比如,使用者想殺掉遠端機器上的程序的時候,可以傳送資料 傳送者可以傳送乙個位元組的資料段,以便讓接收者再次傳送期待接收的位元組號和視窗數 避免死鎖 考慮乙個指向某互動式編輯器 遠端 的telnet 連線,該編輯...
TCP雙向傳輸
tcp雙向傳輸 客戶端通過鍵盤向服務端傳送字串,服務端接收到客戶端發來的字串進行翻轉後,傳送給客戶端。思路 1.客戶端 源 鍵盤錄入 目的 網路輸出流 操作字串 選擇字元流 2.伺服器端 源 輸入流 目的 輸出流 3.為提高效率,加入緩衝 伺服器端步驟 1.建立伺服器socket服務 2.獲取客戶端...
傳輸協議 TCP
一tcp可靠資料傳輸 1 封裝tcp報文段 2 發出報文後啟動乙個計時器 3 通過校驗和發現資料差錯 4 通過序號重新排序,丟棄重複報文 5 流量控制 tcp的可靠傳說實現機制包括差錯編碼 確認 序號 重傳 計時器等 tcp的可靠資料傳輸是基於滑動視窗協議,但是傳送的視窗大小動態變化 二tcp流量控...