1. 程式人生 > >TCP協議中的視窗機制------滑動視窗詳解

TCP協議中的視窗機制------滑動視窗詳解

一、視窗機制的分類

在TCP協議當中視窗機制分為兩種:

1.固定的視窗大小

2.滑動視窗

二、固定視窗存在的問題

如下圖所示:


我們假設這個固定視窗的大小為1,也就是每次只能傳送一個數據,只有接收方對這個資料進行了確認後才能傳送第二個資料。在圖中我們可以看到,傳送方每傳送一個數據接收方就要給傳送方一個ACK對這個資料進行確認。只有接收了這個確認資料以後傳送方才能傳輸下個數據。

存在的問題:如果視窗過小,當傳輸比較大的資料的時候需要不停的對資料進行確認,這個時候就會造成很大的延遲。

                    如果視窗過大,我們假設傳送方一次傳送100個數據,但接收方只能處理50個數據,這樣每次都只對這50個數據進行確認。傳送方下一次還是傳送100個數據,但接受方還是隻能處理50個數據。這樣就避免了不必要的資料來擁塞我們的鏈路。

因此,我們引入了滑動視窗

二、滑動視窗(以位元組為單位)

1.概述

    滑動視窗通俗來講就是一種流量控制技術。

    它本質上是描述接收方的TCP資料報緩衝區大小的資料,傳送方根據這個資料來計算自己最多能傳送多長的資料,如果傳送方收到接收方的視窗大小為0的TCP資料報,那麼傳送方將停止傳送資料,等到接收方傳送視窗大小不為0的資料報的到來

2.工作原理


第一次傳送資料這個時候的視窗大小是根據鏈路頻寬的大小來決定的。

假設這時候的視窗是3.這個時候接收方收到資料以後會對資料進行確認告訴哦傳送方我下次希望收到的資料是多少。

在上圖中:我們看到接收方傳送的ACK = 3(這是對傳送方傳送序列2的回答確認,下一次接收方期望接收到的是3序列訊號),這個時候傳送方收到這個資料以後就知道我第一次傳送的3個數據對方只收到了兩個,就知道第三個資料對方沒有收到,下次返送的時候就從第3個數據開始發。這時候視窗大小就變為了2.

如下圖所示:


看到接收方傳送的ACK是5就表示他下一次希望收到的資料是5,傳送方就知道我剛才傳送的2個數據對方收到了,這個時候開始傳送第5個數據。

*****當鏈路變好或者變差,這個視窗還會發生變化,並不是第一次協商好了以後就永遠不會變化了。

3.死鎖狀態

(1)概述:

    當接收端向傳送端傳送零視窗報文段後不久,接收端的接收快取又有了一些儲存空間,於是接收端向傳送端傳送了Windows size = 2的報文段,然而這個報文段在傳輸過程中丟失了。傳送端一直等待收到接收端傳送的非零視窗的通知,而接收端一直等待發送端傳送資料,這樣就死鎖了。

(2)解決方法

    TCP為每個連線設有一個持續計時器。只要TCP連線的一方收到對方的零視窗通知,就啟動持續計時器,若持續計時器設定的時間到期,就傳送一個零視窗探測報文段(僅攜帶1位元組的資料),而對方就在確認這個探測報文段時給出了現在的視窗值。

4.TCP報文段的傳送時機(傳輸效率問題)

可以用以下三種不同的機制控制TCP報文段的傳送時機:

(1)TCP維持一個變數MSS,等於最大報文段的長度。只要緩衝區存放的資料達到MSS位元組時,就組裝成了一個TCP報文段傳送出去

(2)由傳送方的應用程序指明要傳送的報文段,即:TCP支援推送操作

(3)傳送方的一個計時器期限到了,這時就把當前已有的快取資料裝入報文段(但長度不能超過MSS)傳送出去。

5.Nagle演算法(控制TCP報文段的傳送時機)

(1)主旨:避免大量傳送小包

(2)初衷:避免傳送大量的小包,防止小包氾濫於網路,在理想情況下,對於一個TCP連線而言,網路上每次只能有一個小包存在。它更多的是端到端意義上的優化

【CORK演算法:提高網路利用率,理想情況下,完全避免傳送小包,僅僅傳送滿包以及不得不發的小包】

    傳送方將第一個資料位元組傳送出去,把後面到達的資料位元組快取起來。當傳送方接收對第一個資料字元的確認後,再把傳送快取中的所有資料組裝成一個報文段再發送出去,同時繼續對隨後到達的資料進行快取。只有在收到對前一個報文段的確認之後,才繼續傳送下一個報文段。規定一個TCP連線最多隻能有一個未被確認的未完成的小分組,在該分組的確認到達之前不能傳送其它的小分組。當資料到達較快而網路速率較慢時,用這樣的方法可以明顯的減少所用的網路頻寬。

    Nagle演算法還規定:當達到的資料已經達到傳送視窗大小的一半或者已經達到報文段的最大長度時,就可以立即傳送一個報文段。

6.糊塗視窗綜合症(接收端糊塗,網路上小包氾濫的原因之一)

(1)概述:

        TCP接收方的快取已滿,而互動式的應用程序一次只從接收快取區中讀取1位元組(這樣就使接收快取空間僅騰出1位元組),然後向傳送方傳送確認,並把視窗設定為1個位元組(但傳送的資料報為40位元組的話),然後,傳送方又發來1位元組的資料(傳送方的IP資料報是41位元組),接收方發回確認,仍將視窗設定為1個位元組,這樣,網路效率就會很低

(2)解決辦法

        a.你糊塗我不糊塗法。即Nagle演算法。

         可讓接收方等待一段時間,使得或者  接收快取已有足夠的空間容納一個  最長的報文段,或者等到接收方快取已有一半的空閒空間。只要出現這兩種情況,接收方就發回確認報文,並向傳送方通知當前的視窗大小。此外,傳送方也不要傳送太小的報文段,而是把資料報文積累為足夠大的報文段或達到接收方快取的空間的一半大小。

            b.治療接收端的糊塗(其中一種機制是延遲ACK(還有其它機制,例如不傳送小視窗通告等))

               對於接收方而言, 延遲ACK可以拖延ACK傳送時間,進而延遲視窗通告,在這段時間內,接收視窗有機會進一步放大

               對於傳送方而言, 不理會接收端的小視窗通告等於說不馬上1傳送小包,小包有時間積累成大包

相關推薦

TCP協議視窗機制------滑動視窗

一、視窗機制的分類在TCP協議當中視窗機制分為兩種:1.固定的視窗大小2.滑動視窗二、固定視窗存在的問題如下圖所示:我們假設這個固定視窗的大小為1,也就是每次只能傳送一個數據,只有接收方對這個資料進行了確認後才能傳送第二個資料。在圖中我們可以看到,傳送方每傳送一個數據接收方就

TCP/IP之TCP協議——流量控制(滑動視窗協議

一、流量控制(滑動視窗協議)  1、流量控制是管理兩端的流量,以免會產生髮送過塊導致收端溢位,或者因收端處理太快而浪費時間的狀態。用的是:滑動視窗,以位元組為單位 2、視窗有3種動作:展開(右邊向右),合攏(左邊向右),收縮(右邊向左)這三種動作受接收端的控制。 合攏:表

TCP/IP--流量控制機制 滑動視窗 Nagle演算法 糊塗視窗綜合徵

1. 利用滑動視窗實現流量控制     如果傳送方把資料傳送得過快,接收方可能會來不及接收,這就會造成資料的丟失。所謂流量控制就是讓傳送方的傳送速率不要太快,要讓接收方來得及接收。     利用滑動視窗機制可以很方便地在TCP連線上實現對傳送方的流量控制。     設A向B

TCP-可靠傳輸的實現-滑動視窗協議

 TCP協議作為一個可靠的面向流的傳輸協議,其可靠性和流量控制由滑動視窗協議保證,而擁塞控制則由控制視窗結合一系列的控制演算法實現。一、滑動視窗協議     關於這部分自己不曉得怎麼敘述才好,因為理解的部分更多,下面就用自己的理解來介紹下TCP的精髓:滑動視窗協議。   

TCP/IP--TCP/IP可靠的原理 滑動視窗 擁塞視窗

TCP和UDP處在同一層---運輸層,但是TCP和UDP最不同的地方是,TCP提供了一種可靠的資料傳輸服務,TCP是面向連線的,也就是說,利用TCP通訊的兩臺主機首先要經歷一個“撥打電話”的過程,等到通訊準備結束才開始傳輸資料,最後結束通話。所以TCP要比UDP可靠的多,U

《計算機網路》知識總結-8.TCP什麼是滑動視窗技術?為什麼要這個?

前提 在討論這個問題前,先提出一個問題,假定我現在要A要傳送一些資料給B,A要怎麼才能保證傳送的量B在網路良好的情況下能承受得住呢? 答案:A在傳送前B要告訴他自己的容量是多少,比如,我給你盛飯,你要先告訴我,你能吃多少飯,我保證不超過你的飯量,這樣就不會浪

劍指offer系列——二叉搜尋樹的第k個結點,資料流的位數,滑動視窗的最大值

二叉搜尋樹的第k個結點 題目描述 給定一棵二叉搜尋樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8)    中,按結點數值大小順序第三小結點的值為4。 解題思路: 二叉搜尋樹中序遍歷就能排好序,所以中序遍歷到第k個結點就是第k小的結點。 程式

TCP協議為什麼三次握手,四次揮手()!!!

建立TCP需要三次握手才能建立,而斷開連線則需要四次握手。整個過程如下圖所示: 先來看看如何建立連線的。 首先Client端傳送連線請求報文,Server段接受連線後回覆ACK報文,併為這次連線分配資源。Client端接收到ACK報文後也向Server段發

TCP協議的三次握手和四次揮手(圖解)(轉)

繼續 丟失 get 所有 如果 idt 請求報文 網絡 center 轉自:http://blog.csdn.net/whuslei/article/details/6667471 建立TCP需要三次握手才能建立,而斷開連接則需要四次握手。整個過程如下圖所示: 先來看看如

真的懂了:TCP協議中的三次握手和四次揮手(關閉連接時, 當收到對方的FIN報文時, 僅僅表示對方不在發送數據了, 但是還能接收數據, 己方也未必全部數據都發送對方了。相當於一開始還沒接上話不要緊,後來接上話以後得讓人把話講完)

流程圖 .cn 服務 soc knowledge ber tcp連接 是什麽 一次 一、TCP報文格式   下面是TCP報文格式圖:              (1) 序號, Seq(Sequence number), 占32位,用來標識從TCP源端向目的端發送的字節

TCP 三次握手說起:淺析TCP協議的疑難雜症 ( 1 )

從 TCP 三次握手說起:淺析TCP協議中的疑難雜症 ( 1 )   說到TCP協議,相信大家都比較熟悉了,對於TCP協議總能說個一二三來,但是TCP協議又是一個非常複雜的協議,其中有不少細節點讓人頭疼點。本文就是來說說這些頭疼點的,淺談一些TCP的疑難雜症。那麼從

Tcp協議的3次握手與4次揮手過程分析

轉載https://blog.csdn.net/u012824097/article/details/52490091 客戶端與服務端的通訊中步驟 1建立Tcp連線 3次握手 2再進行資料傳輸 3資料傳輸完成後,斷開連線。

Python Web開發,WSGI協議的作用和實現原理

首先理解下面三個概念: WSGI:全稱是Web Server Gateway Interface,WSGI不是伺服器,python模組,框架,API或者任何軟體,只是一種規範,描述web server如何與web application通訊的規範。 uwsgi:與WSGI一樣是一種協議,是uWSGI伺服器

Java多視窗賣票問題

Java多視窗賣票問題詳解 Java 在練習Java多執行緒的過程中,通常都會通過多視窗賣票這個問題來詳細逐漸解析多執行緒的執行緒同步,其中涉及到同步程式碼塊,同步方法和互斥鎖。 鐵道部發布了一個售票任務,銷售1000張票,要求有10個視窗來進行銷售,請編寫多

HTTP協議報文、工作原理及Java的HTTP通訊技術

一、web及網路基礎       1、HTTP的歷史            1.1、HTTP的概念:         &nb

TCP協議的三次握手和四次揮手(圖解)

建立TCP需要三次握手才能建立,而斷開連線則需要四次握手。整個過程如下圖所示: 先來看看如何建立連線的。 首先Client端傳送連線請求報文,Server段接受連線後回覆ACK報文,併為這次連線分配資源。Client端接收到ACK報文後也向Serve

TCP的RST標誌(Reset)

          在談RST攻擊前,必須先了解TCP:如何通過三次握手建立TCP連線、四次握手怎樣把全雙工的連線關閉掉、滑動視窗是怎麼傳輸資料的、TCP的flag標誌位裡R

【網路】TCP協議的四大定時器

前言 在TCP連線中,有四大定時器來維持連線的正常執行,這四個定時器分別是超時重傳定時器、堅持定時器、保活定時器以及時間等待計時器 超時重傳定時器 所謂超時重傳,是TCP之所以可靠的一點。該定時器就是

TCP/IP協議族》:IP地址

一、IP地址和MAC地址 1、MAC地址 MAC(Media Access Control,介質訪問控制)地址,或稱為實體地址,也叫硬體地址,用來定義網路裝置的位置,MAC地址是網絡卡出廠時設定的,是固定的(但可以通過在裝置管理器中或登錄檔等方式修改,同一網段內的MAC地址必須唯一)。MAC

TCP協議的三次握手和四次揮手+利用wireshark分析包

建立TCP需要三次握手才能建立,而斷開連線則需要四次握手。整個過程如下圖所示: 先來看看如何建立連線的。 首先Client端傳送連線請求報文,Server段接受連線後回覆ACK報文,併為這次連線分配資源。Client端接收到ACK報文後也向Server段