成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

大師帶你了解TCP基本功之滑動窗口

網絡 網絡管理
將TCP與UDP這樣的簡單傳輸協議區分開來的是它傳輸數據的質量。TCP對于發送數據進行跟蹤,這種數據管理需要協議有可靠性、數據流控兩大關鍵功能。

將TCP與UDP這樣的簡單傳輸協議區分開來的是它傳輸數據的質量。TCP對于發送數據進行跟蹤,這種數據管理需要協議有以下兩大關鍵功能:

可靠性:保證數據確實到達目的地。如果未到達,能夠發現并重傳。

數據流控:管理數據的發送速率,以使接收設備不致于過載。

要完成這些任務,整個協議操作是圍繞滑動窗口確認機制來進行的。因此,理解了滑動窗口,也就是理解了TCP。

TCP面向流的滑動窗口確認機制:

TCP將獨立的字節數據當作流來處理。一次發送一個字節并接收一次確認顯然是不可行的。即使重疊傳輸(即不等待確認就發送下一個數據),速度也還是會非常緩慢。

 

[[126296]]

 

TCP消息確認機制如上圖所示,首先,每一條消息都有一個識別編號,每一條消息都能夠被獨立地確認,因此同一時刻可以發送多條信息。設備B定期發送給A一條發送限制參數,制約設備A一次能發送的消息***數量。設備B可以對該參數進行調整,以控制設備A的數據流。

為了提高速度,TCP并沒有按照字節單個發送而是將數據流劃分為片段。片段內所有字節都是一起發送和接收的,因此也是一起確認的。確認機制沒有采用message ID字段,而是使用的片段內***一個字節的sequence number。因此一次可以處理不同的字節數,這一數量即為片段內的sequence number。

TCP數據流的概念劃分類別

假設A和B之間新建立了一條TCP連接。設備A需要傳送一長串數據流,但設備B無法一次全部接收,所以它限制設備A每次發送分段指定數量的字節數,直到分段中已發送的字節數得到確認。之后,設備A可以繼續發送更多字節。每一個設備都對發送,接收及確認數據進行追蹤。

如果我們在任一時間點對于這一過程做一個“快照”,那么我們可以將TCP buffer中的數據分為以下四類,并把它們看作一個時間軸:

1. 已發送已確認 數據流中最早的字節已經發送并得到確認。這些數據是站在發送設備的角度來看的。如下圖所示,31個字節已經發送并確認。

2. 已發送但尚未確認 已發送但尚未得到確認的字節。發送方在確認之前,不認為這些數據已經被處理。下圖所示14字節為第2類。

3. 未發送而接收方已Ready 設備尚未將數據發出,但接收方根據最近一次關于發送方一次要發送多少字節確認自己有足夠空間。發送方會立即嘗試發送。如圖,第3類有6字節。

4. 未發送而接收方Not Ready 由于接收方not ready,還不允許將這部分數據發出。

 

[[126297]]

 

接收方采用類似的機制來區分已接收并已確認,尚未接受但準備好接收,以及尚未接收并尚未準備好接收的數據。實際上,收發雙方各自維護一套獨立的變量,來監控發送和接收的數據流落在哪一類。

Sequence Number設定與同步:

發送方和接收方必須就它們將要為數據流中的字節指定的sequence number達成一致。這一過程稱為同步,在TCP連接建立時完成。為了簡化假設***個字節sequence number是1,按照上圖示例,四類字節如下:

1. 已發送已確認字節1至31。

2. 已發送但尚未確認字節32至45。

3. 未發送而接收方已Ready字節46至51。

4. 未發送而接收方Not Ready字節52至95。#p#

發送窗口與可用窗口:

整個過程關鍵的操作在于接收方允許發送方一次能容納的未確認的字節數。這稱為發送窗口,有時也稱為窗口。該窗口決定了發送方允許傳送的字節數,也是2類和3類的字節數之和。因此,***兩類(接收方準備好而尚未發送,接收方未準備好)的分界線在于添加了從***個未確認字節開始的窗口。本例中,***個未確認字節是32,整個窗口大小是20。

可用窗口的定義是:考慮到正在傳輸的數據量,發送方仍被允許發送的數據量。實際上等于第3類的大小。左邊界就是窗口中的***個字節(字節32),右邊界是窗口中***一個字節(字節51)。概念的詳細解釋看下圖。

 

[[126298]]

 

可用窗口字節發送后TCP類目與窗口大小的改變:

當上圖中第三類的6字節立即發送之后,這6字節從第3類轉移到第2類。字節變為如下:

1. 已發送已確認字節1至31。

2. 已發送但尚未確認字節32至51。

3. 未發送而接收方已Ready字節為0。

4. 未發送而接收方Not Ready字節52至95。

 

[[126299]]

 

確認處理以及窗口縮放:

過了一段時間,目標設備向發送方傳回確認信息。目標設備不會特別列出它已經確認的字節,因為這會導致效率低下。目標設備會發送自上一次成功接收后的最長字節數。

例如,假設已發送未確認字節(32至45)分為4段傳輸:32-34,35-36,37-41,42-45。第1,2,4已經到達,而3段沒有收到。接收方只會發回32-36的確認信息。接收方會保留42-45但不會確認,因為這會表示接收方已經收到了37-41。這是很必要的,因為TCP的確認機制是累計的,只使用一個數字來確認數據。這一數字是自上一次成功接收后的最長字節數。假設目標設備同樣將窗口設為20字節。

當發送設備接收到確認信息,則會將一部分第2類字節轉移到第1類,因為它們已經得到了確認。由于5個字節已被確認,窗口大小沒有改變,允許發送方多發5個字節。結果,窗口向右滑動5個字節。同時5個字節從第二類移動到第1類,5個字節從第4類移動至第3類,為接下來的傳輸創建了新的可用窗口。因此,在接收到確認信息以后,看起來如下圖所示。字節變為如下:

1. 已發送已確認字節1至36。

2. 已發送但尚未確認字節37至51。

3. 未發送而接收方已Ready字節為52至56。

4. 未發送而接收方Not Ready字節57至95。

 

[[126300]]

 

每一次確認接收以后,這一過程都會發生,從而讓窗口滑動過整個數據流以供傳輸。

處理丟失確認信息:

但是丟失的42-45如何處理呢?在接收到第3段(37-41)之前,接收設備不會發送確認信息,也不會發送這一段之后字節的確認信息。發送設備可以將新的字節添加到第3類之后,即52-56。發送設備之后會停止發送,窗口停留在37-41。

TCP包括一個傳輸及重傳的計時機制。TCP會重傳丟失的片段。但有一個缺陷是:因為它不會對每一個片段分別進行確認,這可能會導致其他實際上已經接收到的片段被重傳(比如42至45)。

責任編輯:林琳 來源: EMC中文支持論壇
相關推薦

2014-11-20 14:39:12

網絡傳輸

2022-03-31 15:17:04

JavaSocketServlet容器

2010-09-26 08:56:10

Oracle

2024-11-01 08:34:18

Spring配置@Bean

2025-05-28 08:15:00

字符集編碼字符

2009-10-10 16:57:33

布線工藝要求

2011-07-22 16:43:37

java

2023-08-11 07:44:40

TCP滑動窗口數據

2017-04-12 10:40:34

公有云

2023-08-26 20:56:02

滑動窗口協議

2021-07-14 08:24:23

TCPIP 通信協議

2017-02-27 21:30:29

數據中心光纖電纜

2011-11-28 09:26:57

2020-12-07 10:38:13

Python開發語言

2020-10-21 09:18:50

程序員前端Github

2020-11-20 14:16:20

Python開發表格

2014-03-27 15:34:55

Android組件Activity

2023-06-28 11:58:00

2020-11-06 09:05:18

前端web開發

2013-11-18 10:04:31

TCP 滑動窗口
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天拍天天操 | 国产一区二区三区在线视频 | 午夜激情网 | 91看片免费版 | 欧美一级大片免费看 | 自拍偷拍第一页 | 亚洲av毛片成人精品 | 国产一区二区三区四区三区四 | 男女羞羞视频网站 | 久久com| 国产精品国产三级国产aⅴ无密码 | 蜜桃五月天 | 亚洲精品一区二区 | 亚洲第一中文字幕 | 欧美天堂| 中文字幕国产第一页 | 欧美日韩一区二区三区四区 | 日韩av大片免费看 | 亚洲午夜电影 | 国产在线小视频 | 国产精品成人国产乱一区 | 99精品国产一区二区三区 | 中文字幕 欧美 日韩 | 有码在线 | 日本不卡一区 | 99re99| 91免费观看 | av网站在线免费观看 | 成人影院在线视频 | 色黄视频在线 | 欧美精品一区二区三区在线播放 | a在线观看| 亚洲人va欧美va人人爽 | 欧美性大战xxxxx久久久 | 亚洲精品久久国产高清情趣图文 | 亚洲精品白浆高清久久久久久 | 日本黄色免费视频 | 天天干狠狠操 | 亚洲精品一区二区三区蜜桃久 | 日本精品视频在线观看 | av黄色在线观看 |