国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【計算機網(wǎng)絡(luò)】深入理解TCP協(xié)議二(連接管理機制、WAIT_TIME、滑動窗口、流量控制、擁塞控制)

這篇具有很好參考價值的文章主要介紹了【計算機網(wǎng)絡(luò)】深入理解TCP協(xié)議二(連接管理機制、WAIT_TIME、滑動窗口、流量控制、擁塞控制)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

網(wǎng)絡(luò)編程,計算機網(wǎng)絡(luò),網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò)協(xié)議

1.連接管理機制

正常情況下,TCP需要經(jīng)過三次握手建立連接+四次揮手斷開鏈接,下面看一個圖:
網(wǎng)絡(luò)編程,計算機網(wǎng)絡(luò),網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò)協(xié)議

  • 服務(wù)器的狀態(tài)變化:
  • [CLOSED -> LISTEN] 服務(wù)器端調(diào)用listen后進入LISTEN狀態(tài), 等待客戶端連接;
  • [LISTEN -> SYN_RCVD] 一旦監(jiān)聽到連接請求(同步報文段), 就將該連接放入內(nèi)核等待隊列中, 并向客戶端發(fā)送SYN確認報文.
  • [SYN_RCVD -> ESTABLISHED] 服務(wù)端一旦收到客戶端的確認報文, 就進入ESTABLISHED狀態(tài), 可以進行
    讀寫數(shù)據(jù)了.
  • [ESTABLISHED -> CLOSE_WAIT] 當(dāng)客戶端主動關(guān)閉連接(調(diào)用close), 服務(wù)器會收到結(jié)束報文段, 服務(wù)器返回確認報文段并進入CLOSE_WAIT;
  • [CLOSE_WAIT -> LAST_ACK] 進入CLOSE_WAIT后說明服務(wù)器準備關(guān)閉連接(需要處理完之前的數(shù)據(jù)); 當(dāng)服務(wù)器真正調(diào)用close關(guān)閉連接時, 會向客戶端發(fā)送FIN, 此時服務(wù)器進入LAST_ACK狀態(tài), 等待最后一個ACK到來(這個ACK是客戶端確認收到了FIN)
  • [LAST_ACK -> CLOSED] 服務(wù)器收到了對FIN的ACK, 徹底關(guān)閉連接.
  • 客戶端狀態(tài)變化
  • [CLOSED -> SYN_SENT] 客戶端調(diào)用connect, 發(fā)送同步報文段;
  • [SYN_SENT -> ESTABLISHED] connect調(diào)用成功, 則進入ESTABLISHED狀態(tài), 開始讀寫數(shù)據(jù);
  • [ESTABLISHED -> FIN_WAIT_1] 客戶端主動調(diào)用close時, 向服務(wù)器發(fā)送結(jié)束報文段, 同時進入FIN_WAIT_1;
  • [FIN_WAIT_1 -> FIN_WAIT_2] 客戶端收到服務(wù)器對結(jié)束報文段的確認, 則進入FIN_WAIT_2, 開始等待服務(wù)器的結(jié)束報文段;
  • [FIN_WAIT_2 -> TIME_WAIT] 客戶端收到服務(wù)器發(fā)來的結(jié)束報文段, 進入TIME_WAIT, 并發(fā)出LAST_ACK;
  • [TIME_WAIT -> CLOSED] 客戶端要等待一個2MSL(Max Segment Life, 報文最大生存時間)的時間, 才會進入CLOSED狀態(tài).

2.再談WAIT_TIME狀態(tài)

2.1理解WAIT_TIME狀態(tài)

現(xiàn)在做一個測試,首先啟動server,然后啟動client,然后用Ctrl-C使server終止,這時馬上再運行server, 結(jié)果是:
網(wǎng)絡(luò)編程,計算機網(wǎng)絡(luò),網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò)協(xié)議
這是因為,雖然server的應(yīng)用程序終止了,但TCP協(xié)議層的連接并沒有完全斷開,因此不能再次監(jiān) 聽同樣的server端口.
我們用netstat命令查看一下:
網(wǎng)絡(luò)編程,計算機網(wǎng)絡(luò),網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò)協(xié)議

TCP協(xié)議規(guī)定,主動關(guān)閉連接的一方要處于TIME_ WAIT狀態(tài),等待兩個MSL(maximum segment lifetime)的時間后才能回到CLOSED狀態(tài).
我們使用Ctrl-C終止了server, 所以server是主動關(guān)閉連接的一方, 在TIME_WAIT期間仍然不能再次監(jiān)聽同樣的server端口;
MSL在RFC1122中規(guī)定為兩分鐘,但是各操作系統(tǒng)的實現(xiàn)不同, 在Centos7上默認配置的值是60s;
可以通過 cat /proc/sys/net/ipv4/tcp_fin_timeout 查看msl的值;

  • 為什么TIME_WAIT的時間是2MSL?

MSL是TCP報文的最大生存時間, 因此TIME_WAIT持續(xù)存在2MSL的話
就能保證在兩個傳輸方向上的尚未被接收或遲到的報文段都已經(jīng)消失(否則服務(wù)器立刻重啟, 可能會收到來自上一個進程的遲到的數(shù)據(jù), 但是這種數(shù)據(jù)很可能是錯誤的);
同時也是在理論上保證最后一個報文可靠到達(假設(shè)最后一個ACK丟失, 那么服務(wù)器會再重發(fā)一個FIN. 這時雖然客戶端的進程不在了, 但是TCP連接還在, 仍然可以重發(fā)LAST_ACK);

2.2解決TIME_WAIT狀態(tài)引起的bind失敗的方法

  • 在server的TCP連接沒有完全斷開之前不允許重新監(jiān)聽, 某些情況下可能是不合理的

服務(wù)器需要處理非常大量的客戶端的連接(每個連接的生存時間可能很短, 但是每秒都有很大數(shù)量的客戶端來請求).
這個時候如果由服務(wù)器端主動關(guān)閉連接(比如某些客戶端不活躍, 就需要被服務(wù)器端主動清理掉), 就會產(chǎn)
生大量TIME_WAIT連接.由于我們的請求量很大, 就可能導(dǎo)致TIME_WAIT的連接數(shù)很多, 每個連接都會占用一個通信五元組(源ip,源端口, 目的ip, 目的端口, 協(xié)議). 其中服務(wù)器的ip和端口和協(xié)議是固定的. 如果新來的客戶端連接的ip和端口號和TIME_WAIT占用的鏈接重復(fù)了, 就會出現(xiàn)問題.

  • setsockopt函數(shù)介紹

setsockopt 是一個用于設(shè)置套接字選項的函數(shù),通常用于配置套接字的各種屬性。它可以被用于不同類型的套接字,如 TCP 套接字和 UDP 套接字,以及其他類型的網(wǎng)絡(luò)套接字。setsockopt 允許你在編程中控制套接字的行為和參數(shù)。

下面是 setsockopt 函數(shù)的常用參數(shù):

套接字描述符(Socket Descriptor):指定要設(shè)置選項的套接字描述符。

  • 層級(Level):指定選項的所屬協(xié)議族或協(xié)議層級,如 SOL_SOCKET 表示通用套接字選項,IPPROTO_TCP 表示 TCP 協(xié)議選項,IPPROTO_IP 表示 IP 協(xié)議選項等。
  • 選項名稱(Option Name):指定要設(shè)置的選項名稱,如 SO_REUSEADDR 表示重用本地地址選項,TCP_NODELAY 表示禁用 Nagle 算法選項等。
  • 選項值(Option Value):設(shè)置選項的新值,這個值的數(shù)據(jù)類型和選項名稱有關(guān),通常是一個指向某種數(shù)據(jù)類型的指針,例如 int、struct timeval 等。
  • 選項值的長度(Option Length):指定選項值的長度。
    通過 setsockopt,你可以配置諸如套接字緩沖區(qū)大小、重用地址、禁用 Nagle 算法、設(shè)置超時等多種選項,以滿足你的網(wǎng)絡(luò)通信需求。這個函數(shù)在網(wǎng)絡(luò)編程中經(jīng)常用于優(yōu)化套接字的性能和行為,確保數(shù)據(jù)傳輸?shù)目煽啃院托省?/li>
  • 需要注意的是,setsockopt 函數(shù)的錯誤處理很重要,因為配置錯誤的套接字選項可能導(dǎo)致不穩(wěn)定的網(wǎng)絡(luò)行為或錯誤。因此,在使用該函數(shù)時,建議檢查返回值以確保選項設(shè)置成功。
  • 實際案例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netinet/tcp.h>

int main() {
    // 創(chuàng)建 TCP 套接字
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        perror("socket");
        exit(EXIT_FAILURE);
    }

    // 設(shè)置 TCP 連接超時時間為 5 秒
    struct timeval timeout;
    timeout.tv_sec = 5; // 5 秒
    timeout.tv_usec = 0;

    if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) < 0) {
        perror("setsockopt");
        close(sockfd);
        exit(EXIT_FAILURE);
    }

    // 嘗試連接到遠程服務(wù)器
    struct sockaddr_in server_addr;
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(80); // HTTP 默認端口
    inet_pton(AF_INET, "www.example.com", &(server_addr.sin_addr));

    if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("connect");
        close(sockfd);
        exit(EXIT_FAILURE);
    }

    printf("Connected to www.example.com\n");

    // 在這里可以進行后續(xù)的數(shù)據(jù)交換或操作

    // 關(guān)閉套接字
    close(sockfd);

    return 0;
}

在上面的示例中,我們創(chuàng)建了一個 TCP 套接字,并使用 setsockopt 設(shè)置了接收超時時間為 5 秒。然后,我們嘗試連接到 www.example.com 的 HTTP 服務(wù)。如果連接在 5 秒內(nèi)成功建立,將打印 “Connected to www.example.com”。否則,連接超時會導(dǎo)致 connect 失敗,錯誤處理部分將處理超時情況。

2.3監(jiān)聽套接字listen第二個參數(shù)介紹

if(listen(listenSock,2)<0)
{
exit(3);
}

在這里的2表示什么?當(dāng)服務(wù)器在處理其他請求時來不及處理新的鏈接請求,監(jiān)聽套接字所維護的最大鏈接數(shù)為:2+1,相當(dāng)于排隊
listen底層有個backlog來維護:

backlog 是 TCP 套接字選項之一,它用于指定操作系統(tǒng)中已完成連接隊列的最大長度。在網(wǎng)絡(luò)編程中,當(dāng)服務(wù)器接受到客戶端的連接請求時,操作系統(tǒng)會將這些請求存儲在一個已完成連接隊列中,等待服務(wù)器進程調(diào)用 accept 來接受這些連接。backlog 參數(shù)控制了這個隊列的最大長度。

  • 下面是關(guān)于 backlog 的一些重要信息:
  • 作用:backlog 的主要作用是限制已完成連接隊列的長度,以防止服務(wù)器處理不過來的連接請求。它允許服務(wù)器在高負載情況下接受連接請求,并將未處理的連接請求排隊等待處理。
  • 默認值:backlog 的默認值在不同的操作系統(tǒng)上可能有所不同。通常,操作系統(tǒng)會提供一個合理的默認值,但這個值可能不足以處理高負載情況。
  • 合適的值:合適的 backlog 值取決于服務(wù)器的負載和性能要求。如果服務(wù)器期望高并發(fā)連接,應(yīng)該將 backlog 設(shè)置為較大的值,以便排隊更多的連接請求。但是,設(shè)置太大的值可能會占用過多的系統(tǒng)資源,因此需要權(quán)衡。
  • 超出 backlog 的連接請求:如果有更多的連接請求到達服務(wù)器,超過了 backlog 設(shè)置的大小,這些連接請求可能會被服務(wù)器拒絕或丟棄,具體行為取決于操作系統(tǒng)和服務(wù)器的配置。
  • 動態(tài)調(diào)整:一些服務(wù)器應(yīng)用程序支持在運行時動態(tài)調(diào)整 backlog 值,以根據(jù)服務(wù)器的當(dāng)前負載和性能要求進行優(yōu)化。這可以通過重新設(shè)置套接字選項來實現(xiàn)。
  • 總之,backlog 是一個重要的套接字選項,用于控制服務(wù)器的連接排隊行為。合適的 backlog 值應(yīng)該根據(jù)服務(wù)器的性能需求和負載情況來配置,以確保服務(wù)器能夠有效地處理連接請求。

這其實也是一種池化技術(shù),進行排隊等待處理,

  • 排隊的意義在于:可以讓服務(wù)器在有閑置的情況下,拿到鏈接處理相關(guān)任務(wù),減少資源的閑置,提高利用率。
  • 為什么不能設(shè)置過長:1.太長的排隊影響處理效率,新的任務(wù)需要等待很長的時間才能處理,影響客戶體驗;2.隊列也是會占用系統(tǒng)資源的,設(shè)置過長占用過多的系統(tǒng)資源,反而可能導(dǎo)致服務(wù)器的效率降低!

3.滑動窗口

3.1介紹

  • 定義:滑動窗口是一個用于管理數(shù)據(jù)傳輸?shù)拇翱诨蚓彌_區(qū),通常由接收方控制。這個窗口可以看作是接收方的一個緩沖區(qū),用于存儲將要接收的數(shù)據(jù)包。發(fā)送方根據(jù)窗口的大小和接收方的狀態(tài)來確定可以發(fā)送多少數(shù)據(jù)包。
  • 工作原理:滑動窗口的大小以數(shù)據(jù)包數(shù)量為單位。發(fā)送方和接收方都維護一個窗口大小的計數(shù)器。發(fā)送方將數(shù)據(jù)包發(fā)送到接收方,并等待接收方確認。一旦接收方確認收到數(shù)據(jù)包,發(fā)送方就可以向前滑動窗口,發(fā)送下一個數(shù)據(jù)包。接收方使用窗口大小來控制允許接收的數(shù)據(jù)包數(shù)量,一旦接收方處理了一個數(shù)據(jù)包,它可以向前滑動窗口以接收下一個數(shù)據(jù)包。
  • 流量控制:滑動窗口用于流量控制,以確保發(fā)送方不會發(fā)送太多數(shù)據(jù)導(dǎo)致接收方無法處理。接收方可以通過減小窗口大小來通知發(fā)送方減慢數(shù)據(jù)傳輸速度。這種機制可防止數(shù)據(jù)包的堆積和丟失。
  • 擁塞控制:滑動窗口也用于擁塞控制,幫助避免網(wǎng)絡(luò)擁塞。當(dāng)網(wǎng)絡(luò)出現(xiàn)擁塞時,接收方可以減小窗口大小,通知發(fā)送方降低傳輸速度,從而減輕網(wǎng)絡(luò)負載。
  • 實時調(diào)整:滑動窗口的大小通??梢詣討B(tài)調(diào)整,以適應(yīng)網(wǎng)絡(luò)條件的變化。這種動態(tài)調(diào)整可以根據(jù)網(wǎng)絡(luò)延遲、丟包率等指標來執(zhí)行,以確保最佳的性能。
  • 應(yīng)用:滑動窗口廣泛應(yīng)用于TCP協(xié)議中,用于實現(xiàn)可靠的數(shù)據(jù)傳輸和流量控制。它還用于一些應(yīng)用層協(xié)議,如HTTP,以管理并發(fā)連接和數(shù)據(jù)傳輸。
  • 沒有滑動窗口情況下通信:
    網(wǎng)絡(luò)編程,計算機網(wǎng)絡(luò),網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò)協(xié)議
    既然這樣一發(fā)一收的方式性能較低, 那么我們一次發(fā)送多條數(shù)據(jù), 就可以大大的提高性能(其實是將多個段的等待時間重疊在一起了).

網(wǎng)絡(luò)編程,計算機網(wǎng)絡(luò),網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò)協(xié)議

窗口大小指的是無需等待確認應(yīng)答而可以繼續(xù)發(fā)送數(shù)據(jù)的最大值. 上圖的窗口大小就是4000個字節(jié)(四個段).
發(fā)送前四個段的時候, 不需要等待任何ACK, 直接發(fā)送;
收到第一個ACK后, 滑動窗口向后移動, 繼續(xù)發(fā)送第五個段的數(shù)據(jù); 依次類推;
操作系統(tǒng)內(nèi)核為了維護這個滑動窗口, 需要開辟 ** 發(fā)送緩沖區(qū) ** (沒有收到確認時需要重傳) 來記錄當(dāng)前還有哪些數(shù)據(jù)沒有應(yīng)答;
只有確認應(yīng)答過的數(shù)據(jù), 才能從緩沖區(qū)刪掉;
窗口越大, 則網(wǎng)絡(luò)的吞吐率就越高;
網(wǎng)絡(luò)編程,計算機網(wǎng)絡(luò),網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò)協(xié)議

3.2丟包情況分析

  • 情況一: 數(shù)據(jù)包已經(jīng)抵達, ACK被丟了
    網(wǎng)絡(luò)編程,計算機網(wǎng)絡(luò),網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò)協(xié)議
    這種情況下, 部分ACK丟了并不要緊, 因為可以通過后續(xù)的ACK進行確認,也就是說:主機A給主機B發(fā)送1~6000號數(shù)據(jù)包,主機B已經(jīng)收到了,但是其中的確認請求1001(確認前1000號)和2001、3001、4001、主機A都沒有收到,但是6001收到了,這就說明前6000號數(shù)據(jù)包已經(jīng)成功接收?。?! 如果說出現(xiàn)這樣一種情況:1000–2000號數(shù)據(jù)包丟了,其他的數(shù)據(jù)包成功接收,那么主機B并不會確認6001號,而是確認1001,表示后面的丟失,這時候就要進行重傳!

  • 情況二: 數(shù)據(jù)包就直接丟了.
    網(wǎng)絡(luò)編程,計算機網(wǎng)絡(luò),網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò)協(xié)議

當(dāng)某一段報文段丟失之后, 發(fā)送端會一直收到 1001 這樣的ACK, 就像是在提醒發(fā)送端 "我想要的是 1001"一樣;
如果發(fā)送端主機連續(xù)三次收到了同樣一個 “1001” 這樣的應(yīng)答, 就會將對應(yīng)的數(shù)據(jù) 1001 - 2000 重新發(fā)送;
這個時候接收端收到了 1001 之后, 再次返回的ACK就是7001了(因為2001 - 7000)接收端其實之前就已經(jīng)收到了, 被放到了接收端操作系統(tǒng)內(nèi)核的接收緩沖區(qū)中;

  • 這種機制被稱為 “高速重發(fā)控制”(也叫 “快重傳”).

4.流量控制

接收端處理數(shù)據(jù)的速度是有限的. 如果發(fā)送端發(fā)的太快, 導(dǎo)致接收端的緩沖區(qū)被打滿, 這個時候如果發(fā)送端繼續(xù)發(fā)送,就會造成丟包, 繼而引起丟包重傳等等一系列連鎖反應(yīng).
因此TCP支持根據(jù)接收端的處理能力, 來決定發(fā)送端的發(fā)送速度. 這個機制就叫做流量控制(Flow Control);

接收端將自己可以接收的緩沖區(qū)大小放入 TCP 首部中的 “窗口大小” 字段, 通過ACK端通知發(fā)送端;
窗口大小字段越大, 說明網(wǎng)絡(luò)的吞吐量越高;
接收端一旦發(fā)現(xiàn)自己的緩沖區(qū)快滿了, 就會將窗口大小設(shè)置成一個更小的值通知給發(fā)送端;
發(fā)送端接受到這個窗口之后, 就會減慢自己的發(fā)送速度;
如果接收端緩沖區(qū)滿了, 就會將窗口置為0; 這時發(fā)送方不再發(fā)送數(shù)據(jù), 但是需要定期發(fā)送一個窗口探測數(shù)據(jù)段, 使接收端把窗口大小告訴發(fā)送端.

網(wǎng)絡(luò)編程,計算機網(wǎng)絡(luò),網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò)協(xié)議

接收端如何把窗口大小告訴發(fā)送端呢? 回憶我們的TCP首部中, 有一個16位窗口字段, 就是存放了窗口大小信息;
那么問題來了, 16位數(shù)字最大表示65535, 那么TCP窗口最大就是65535字節(jié)么?
實際上, TCP首部40字節(jié)選項中還包含了一個窗口擴大因子M, 實際窗口大小是 窗口字段的值左移 M 位;

5.擁塞控制

5.1介紹

擁塞控制(Congestion Control)是計算機網(wǎng)絡(luò)中的一種重要機制,用于管理網(wǎng)絡(luò)擁塞的發(fā)生和傳播,以保持網(wǎng)絡(luò)的穩(wěn)定性和性能。擁塞通常發(fā)生在網(wǎng)絡(luò)上的某個點或鏈路上,當(dāng)網(wǎng)絡(luò)負載超過其容量時,數(shù)據(jù)包開始堆積、丟失或延遲增加,從而降低了網(wǎng)絡(luò)的效率和可用性。
擁塞控制的主要目標是防止和減輕網(wǎng)絡(luò)擁塞,確保網(wǎng)絡(luò)吞吐量最大化,同時避免過多的數(shù)據(jù)包丟失。以下是擁塞控制的一些關(guān)鍵概念和技術(shù):

  • 擁塞窗口:擁塞控制使用擁塞窗口(Congestion Window,通??s寫為cwnd)來限制發(fā)送方可以發(fā)送到網(wǎng)絡(luò)的數(shù)據(jù)包數(shù)量。擁塞窗口的大小決定了發(fā)送方可以在網(wǎng)絡(luò)上發(fā)送的數(shù)據(jù)包的數(shù)量。發(fā)送方會根據(jù)網(wǎng)絡(luò)的擁塞程度來動態(tài)調(diào)整擁塞窗口的大小。
  • 擁塞信號:網(wǎng)絡(luò)中的路由器和交換機會在發(fā)生擁塞時向發(fā)送方發(fā)送擁塞信號。這些信號可以是丟棄數(shù)據(jù)包、降低數(shù)據(jù)包優(yōu)先級或發(fā)送擁塞通知等方式。發(fā)送方根據(jù)這些信號來減少發(fā)送速率。
  • 慢啟動:慢啟動是一種擁塞控制算法,用于在連接開始時逐漸增加發(fā)送速率,以避免立即引發(fā)網(wǎng)絡(luò)擁塞。發(fā)送方開始時只發(fā)送少量數(shù)據(jù)包,然后根據(jù)網(wǎng)絡(luò)的反饋逐漸增加發(fā)送速率。
  • 擁塞避免:一旦擁塞窗口達到某個閾值,發(fā)送方進入擁塞避免階段。在這個階段,發(fā)送方以更加保守的速率增加擁塞窗口,以避免引發(fā)擁塞。
  • 快重傳和快恢復(fù):快重傳和快恢復(fù)是一種機制,用于更快地檢測和響應(yīng)數(shù)據(jù)包丟失。當(dāng)接收方收到無序的數(shù)據(jù)包時,它可以立即向發(fā)送方發(fā)送重復(fù)確認,以觸發(fā)發(fā)送方進行快速重傳和快速恢復(fù)。
  • 主動隊列管理:路由器和交換機可以使用主動隊列管理算法來減輕擁塞。這些算法可以根據(jù)網(wǎng)絡(luò)負載動態(tài)管理數(shù)據(jù)包的排隊,以防止擁塞的發(fā)生。
  • 流量控制和窗口調(diào)整:擁塞控制和流量控制有時會被混淆,但它們有不同的目標。流量控制是為了防止接收方被發(fā)送方的數(shù)據(jù)淹沒,而擁塞控制是為了防止網(wǎng)絡(luò)擁塞。窗口大小的調(diào)整是擁塞控制的核心部分。
  • 擁塞控制在現(xiàn)代計算機網(wǎng)絡(luò)中至關(guān)重要,它確保了網(wǎng)絡(luò)的穩(wěn)定性和性能。通過動態(tài)調(diào)整數(shù)據(jù)包的發(fā)送速率和響應(yīng)網(wǎng)絡(luò)擁塞,擁塞控制確保了數(shù)據(jù)的可靠傳輸,并提供了更好的用戶體驗。不同的擁塞控制算法和機制可以根據(jù)網(wǎng)絡(luò)類型和需求進行選擇和配置。

5.2慢啟動

網(wǎng)絡(luò)編程,計算機網(wǎng)絡(luò),網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò)協(xié)議

此處引入一個概念程為擁塞窗口
發(fā)送開始的時候, 定義擁塞窗口大小為1;
每次收到一個ACK應(yīng)答, 擁塞窗口加1;
每次發(fā)送數(shù)據(jù)包的時候, 將擁塞窗口和接收端主機反饋的窗口大小做比較, 取較小的值作為實際發(fā)送的窗口

  • 像上面這樣的擁塞窗口增長速度, 是指數(shù)級別的. “慢啟動” 只是指初使時慢, 但是增長速度非???

為了不增長的那么快, 因此不能使擁塞窗口單純的加倍.
此處引入一個叫做慢啟動的閾值
當(dāng)擁塞窗口超過這個閾值的時候, 不再按照指數(shù)方式增長, 而是按照線性方式增長

網(wǎng)絡(luò)編程,計算機網(wǎng)絡(luò),網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò)協(xié)議
當(dāng)TCP開始啟動的時候, 慢啟動閾值等于窗口最大值;
在每次超時重發(fā)的時候, 慢啟動閾值會變成原來的一半, 同時擁塞窗口置回1;
少量的丟包, 我們僅僅是觸發(fā)超時重傳; 大量的丟包, 我們就認為網(wǎng)絡(luò)擁塞;
當(dāng)TCP通信開始后, 網(wǎng)絡(luò)吞吐量會逐漸上升; 隨著網(wǎng)絡(luò)發(fā)生擁堵, 吞吐量會立刻下降;
擁塞控制, 歸根結(jié)底是TCP協(xié)議想盡可能快的把數(shù)據(jù)傳輸給對方, 但是又要避免給網(wǎng)絡(luò)造成太大壓力的折中方案.

6.捎帶應(yīng)答、延時應(yīng)答

相關(guān)博客: 點擊跳轉(zhuǎn)文章來源地址http://www.zghlxwxcb.cn/news/detail-732343.html

到了這里,關(guān)于【計算機網(wǎng)絡(luò)】深入理解TCP協(xié)議二(連接管理機制、WAIT_TIME、滑動窗口、流量控制、擁塞控制)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 05.計算機網(wǎng)絡(luò)——TCP協(xié)議

    05.計算機網(wǎng)絡(luò)——TCP協(xié)議

    TCP協(xié)議——TCP全稱為 “ 傳輸控制協(xié)議 (Transmission Control Protocol)”,對數(shù)據(jù)的傳輸進行一個詳細的控制。 源/目的端口號: 表示數(shù)據(jù)是從哪個進程來, 到哪個進程去; 32位序號/32位確認號: 用來支持確認應(yīng)答和按序到達 4位TCP報頭長度: 表示該TCP報頭有多少個4字節(jié)大小; 6位標志位

    2024年02月16日
    瀏覽(21)
  • 【計算機網(wǎng)絡(luò)篇】TCP協(xié)議

    【計算機網(wǎng)絡(luò)篇】TCP協(xié)議

    ?作者簡介:大家好,我是小楊 ??個人主頁:「小楊」的csdn博客 ??希望大家多多支持??一起進步呀! TCP(Transmission Control Protocol)是一種在計算機網(wǎng)絡(luò)中廣泛使用的傳輸層協(xié)議,用于在網(wǎng)絡(luò)上可靠地傳輸數(shù)據(jù)。 TCP 提供了可靠的、面向連接的通信,并負責(zé)數(shù)據(jù)的劃分、排

    2024年02月11日
    瀏覽(23)
  • 【計算機網(wǎng)絡(luò)】TCP協(xié)議詳解

    【計算機網(wǎng)絡(luò)】TCP協(xié)議詳解

    目錄 1. TCP協(xié)議頭部格式 2. TCP協(xié)議原理? 2.1 可靠傳輸機制 2.1.1 確認應(yīng)答機制 2.1.2 超時重傳機制 2.1.3 連接管理機制(三次握手,四次揮手) 2.1.4 流量控制 2.1.5 擁塞控制? 2.2 效率機制? 2.2.1 滑動窗口? 2.2.2 延遲應(yīng)答? 2.2.3 捎帶應(yīng)答? 3. 粘包問題? 4. TCP的異常情況? 5. TCP協(xié)議特

    2024年01月18日
    瀏覽(20)
  • 【計算機網(wǎng)絡(luò)】UDP協(xié)議與TCP協(xié)議

    【計算機網(wǎng)絡(luò)】UDP協(xié)議與TCP協(xié)議

    端口號(Port)標識了一個主機上進行通信的不同的應(yīng)用程序; 在TCP/IP協(xié)議中, 用 “源IP”, “源端口號”, “目的IP”, “目的端口號”, “協(xié)議號” 這樣一個五元組來標識一個通信(可以通過netstat -n查看); 服務(wù)器的同一個服務(wù)會使用多進程或者多線程的方式,對于不同的客戶端請

    2024年01月25日
    瀏覽(43)
  • 【計算機網(wǎng)絡(luò)】TCP|IP協(xié)議

    【計算機網(wǎng)絡(luò)】TCP|IP協(xié)議

    目錄 前言 什么是TCP/IP協(xié)議? TCP/IP協(xié)議的層次結(jié)構(gòu) TCP/IP協(xié)議的工作原理 TCP/IP協(xié)議的重要性 結(jié)語 ? TCP/IP協(xié)議是當(dāng)今互聯(lián)網(wǎng)世界中最重要的網(wǎng)絡(luò)協(xié)議之一,它是網(wǎng)絡(luò)通信的基石,為數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸提供了可靠性和有效性。本文將深入探討TCP/IP協(xié)議的重要性、基本原理以及其

    2024年02月03日
    瀏覽(26)
  • 【計算機網(wǎng)絡(luò)-傳輸層】TCP 協(xié)議

    【計算機網(wǎng)絡(luò)-傳輸層】TCP 協(xié)議

    端到端通信 :提供應(yīng)用進程間的端到端通信(邏輯通信)。因此傳輸層又稱為端到端協(xié)議。 差錯檢測 :對首部和數(shù)據(jù)部分進行檢測。 兩種協(xié)議 :面向連接的 TCP、無連接的 UDP。 復(fù)用和分用 : 概念 解釋 傳輸層 TCP 復(fù)用 發(fā)送方的部分應(yīng)用進程的報文在傳輸層使用 TCP 協(xié)議進

    2023年04月13日
    瀏覽(21)
  • 【計算機網(wǎng)絡(luò)】UDP/TCP協(xié)議

    【計算機網(wǎng)絡(luò)】UDP/TCP協(xié)議

    我們先來看一張圖; 在研究UDP前我們先來回答兩個問題: 有效載荷如何與報頭分離? 如何將有效載荷交付? 第一個問題由于在報頭里面有16位UDP長度(表示的是有效載荷+報頭長度),而報頭長度8字節(jié)是固定的,所以分離時我們只需要用整個報文的大小減去固定的8字節(jié)報頭數(shù)據(jù)即

    2024年02月08日
    瀏覽(65)
  • 【計算機網(wǎng)絡(luò)】UDP/TCP 協(xié)議

    【計算機網(wǎng)絡(luò)】UDP/TCP 協(xié)議

    端口號(Port)標識了一個主機上進行通信的不同的應(yīng)用程序。在 TCP/IP 協(xié)議中, 用 “源IP”, “源端口號”, “目的IP”, “目的端口號”, “協(xié)議號” 這樣一個五元組來標識一個通信(可以通過netstat -n查看)。 0 - 1023: 知名端口號,HTTP, FTP, SSH 等這些廣為使用的應(yīng)用層協(xié)議,它們的

    2024年03月14日
    瀏覽(20)
  • 【計算機網(wǎng)絡(luò)】TCP協(xié)議與UDP協(xié)議詳解

    【計算機網(wǎng)絡(luò)】TCP協(xié)議與UDP協(xié)議詳解

    文章目錄 一、傳輸層 1、1 再次理解傳輸層 1、2 再次理解端口號 1、2、1?端口號范圍劃分 1、2、2?認識知名端口號 1、3 網(wǎng)絡(luò)常用指令netstat 與 pidof 二、UDP協(xié)議 2、1 UDP協(xié)議的報文 2、2 UDP的特點? 2、3 UDP的緩沖區(qū) 三、TCP協(xié)議 3、1 TCP協(xié)議的報文 3、2 確認應(yīng)答 3、3?按序到達 3、

    2024年02月08日
    瀏覽(24)
  • [計算機網(wǎng)絡(luò)] 實驗四 TCP協(xié)議分析

    [計算機網(wǎng)絡(luò)] 實驗四 TCP協(xié)議分析

    實驗?zāi)康?了解運輸層 TCP 協(xié)議基本概念、報文結(jié)構(gòu) 分析 TCP 報文頭部 分析 TCP 連接建立過程、TCP 連接釋放 掌握利用 tcpdump 和 wireshark 進行 tcp 協(xié)議分析技術(shù)。 實驗內(nèi)容 1.wget使用和TCP分析 [如果你還不懂 w g e t wget w g e t 指令請點擊這里] 我們首先通過 w g e t wget w g e t 下載該網(wǎng)

    2023年04月25日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包