1. 程式人生 > >TCP 滑動視窗/TCP 接收和傳送緩衝區/核心sock接收和傳送緩衝區

TCP 滑動視窗/TCP 接收和傳送緩衝區/核心sock接收和傳送緩衝區

  1. 一個socket在核心中有兩個緩衝區,分別為接收和傳送緩衝區。

struct sock {
……
struct sk_buff_head sk_receive_queue;—-接收佇列
struct sk_buff_head sk_write_queue;——傳送佇列
……
};
2. socket程式設計中可以通過以下API設定:

setsockopt( fd, SOL_SOCKET, SO_SNDBUF, (void *)&sndbuf_len, len )
setsockopt( fd, SOL_SOCKET, SO_RCVBUF
, (void *)
&rcvbuf_len, len )
  1. 可以在proc檔案下檢視緩衝區的大小:
    socket緩衝區預設大小:
    /proc/sys/net/core/rmem_default 對應net.core.rmem_default
    /proc/sys/net/core/wmem_default 對應net.core.wmem_default
    上面是各種型別socket的預設讀寫緩衝區大小,然而對於特定型別的socket則可以設定獨立的值覆蓋預設值大小。例如tcp型別的socket就可以用/proc/sys/net/ipv4/tcp_rmem和tcp_wmem來覆蓋。

socket緩衝區最大值:
/proc/sys/net/core/rmem_max 對應net.core.rmem_max
/proc/sys/net/core/wmem_max 對應net.core.wmem_max

gwwu@hz-dev8:~/unix_socket>cat /proc/sys/net/core/rmem_max
212992
gwwu@hz-dev8:~/unix_socket>cat /proc/sys/net/core/wmem_max
212992
gwwu@hz-dev8:~/unix_socket>cat /proc/sys/net/core/wmem_default
212992
gwwu@hz-dev8:~/unix_socket>cat /proc/sys/net/core/rmem_default
212992
  1. tcp 接收和傳送緩衝區
    TCP/IPV4核心引數:
    TCP socket緩衝區大小是它自己控制而不是由core核心緩衝區控制。
    /proc/sys/net/ipv4/tcp_rmem 對應net.ipv4.tcp_rmem
    /proc/sys/net/ipv4/tcp_wmem 對應net.ipv4.tcp_wmem
    以上是TCP socket的讀寫緩衝區的設定,每一項裡面都有三個值,第一個值是緩衝區最小值,中間值是緩衝區的預設值,最後一個是緩衝區的最大值,雖然緩衝區的值不受core緩衝區的值的限制,但是緩衝區的最大值仍舊受限於core的最大值。
gwwu@hz-dev8:~/unix_socket>cat /proc/sys/net/ipv4/tcp_rmem
4096    87380   6291456
gwwu@hz-dev8:~/unix_socket>cat /proc/sys/net/ipv4/tcp_wmem
4096    16384   4194304
  1. socket 緩衝區與tcp 緩衝區的關係
    socket緩衝區預設大小:
    /proc/sys/net/core/rmem_default 對應net.core.rmem_default
    /proc/sys/net/core/wmem_default 對應net.core.wmem_default
    上面是各種型別socket的預設讀寫緩衝區大小,然而對於特定型別的socket則可以設定獨立的值覆蓋預設值大小。例如tcp型別的socket就可以用/proc/sys/net/ipv4/tcp_rmem和tcp_wmem來覆蓋。
gwwu@hz-dev8:~/unix_socket>cat rcvbuf_sendbuf_size.c 
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>

int main(int argc, char *argv[])
{
    int fd;
    int sndbuf_len, rcvbuf_len;
    socklen_t len;

    fd = socket(AF_INET, SOCK_STREAM, 0);
    if (fd < 0) 
        perror("create socket error\n");

    len = sizeof(int);
    if (getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &sndbuf_len, &len) < 0) {
        perror("get sendbuf error\n");
    }
    printf("sndbuf_len = %d\n", sndbuf_len);
    if (getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &rcvbuf_len, &len) < 0) {
        perror("get sendbuf error\n");
    }
    printf("rcvbuf_len = %d\n", rcvbuf_len);
    return 0;
}

編譯執行:

[email protected]-dev8:~/unix_socket>gcc -g rcvbuf_sendbuf_size.c -o rcvbuf_sendbuf_size -Wall
[email protected]-dev8:~/unix_socket>./rcvbuf_sendbuf_size 
sndbuf_len = 16384
rcvbuf_len = 87380
單位應該都是位元組

可見tcp socket的核心緩衝區大小被tcp緩衝區大小值覆蓋了

gwwu@hz-dev8:~/unix_socket>cat /proc/sys/net/core/rmem_max
212992
gwwu@hz-dev8:~/unix_socket>cat /proc/sys/net/core/wmem_max
212992
gwwu@hz-dev8:~/unix_socket>cat /proc/sys/net/core/wmem_default
212992
gwwu@hz-dev8:~/unix_socket>cat /proc/sys/net/core/rmem_default
212992
gwwu@hz-dev8:~/unix_socket>cat /proc/sys/net/ipv4/tcp_rmem
4096    87380   6291456
gwwu@hz-dev8:~/unix_socket>cat /proc/sys/net/ipv4/tcp_wmem
4096    16384   4194304
  1. tcp滑動視窗
    tcp滑動視窗的大小就是接收緩衝區的大小,這個值通過TCP中的window size value欄位傳送給資料的傳送方,以便傳送方控制報文的傳送量
    TCP的流量控制由連線的每一端通過宣告的視窗大小來提供。視窗大小為位元組數,視窗起始於確認序號欄位指明的值,這個值是接收端期望接收的位元組。
    這裡寫圖片描述

相關推薦

TCP 滑動視窗/TCP 接收傳送緩衝區/核心sock接收傳送緩衝區

一個socket在核心中有兩個緩衝區,分別為接收和傳送緩衝區。 struct sock { …… struct sk_buff_head sk_receive_queue;—-接收佇列 struct sk_buff_hea

TCP 滑動視窗傳送視窗接收視窗

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

TCP滑動視窗socket緩衝區之間的關係(記錄)

一、TCP的滑動視窗大小實際上就是socket的接收緩衝區大小的位元組數 二、對於server端的socket一定要在listen之間設定緩衝區大小,因為,accept時新產生的socket會繼承監聽socket的緩衝區大小。對於client端的socket一定要在co

TCP滑動視窗機制 流量控制 擁塞控制

轉自http://blog.chinaunix.net/uid-26275986-id-4109679.html TCP協議作為一個可靠的面向流的傳輸協議,其可靠性和流量控制由滑動視窗協議保證,而擁塞控制則由控制視窗結合一系列的控制演算法實現。 一、滑動視窗協議     &n

TCP滑動視窗控制流量的原理 TCP滑動視窗控制流量的原理

  TCP滑動視窗控制流量的原理   TCP的滑動視窗機制       TCP這個協議是網路中使用的比較廣泛,他是一個面向連線的可靠的傳輸協議。既然是一個可靠的傳輸協議就需要對資料進行確認。TCP協議裡視窗機制有2種:一種是固定的

TCP 滑動視窗 (流量控制)

首先明確: 1)TCP滑動視窗分為接受視窗,傳送視窗 滑動視窗協議是傳輸層進行流控的一種措施,接收方通過通告發送方自己的視窗大小,從而控制傳送方的傳送速度,從而達到防止傳送方傳送速度過快而導致自己被淹沒的目的。 對ACK的再認識,ack通常被理解為收到資料後給出的一個確認ACK,ACK包含兩個非常重要的資訊:

網路基本功(八):細說TCP滑動視窗

介紹 將TCP與UDP這樣的簡單傳輸協議區分開來的是它傳輸資料的質量。TCP對於傳送資料進行跟蹤,這種資料管理需要協議有以下兩大關鍵功能: 可靠性:保證資料確實到達目的地。如果未到達,能夠發現並重傳。 資料流控:管理資料的傳送速率,以使接收裝置不致於過載。 要完

TCP滑動視窗,流量控制,擁塞控制原理介紹

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

TCP滑動視窗協議及擁塞控制

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

TCP滑動視窗與回退N針協議

滑動視窗協議   1.傳送端和接收端分別設定傳送視窗和接收視窗。  2.三次握手的時候,客戶端把自己的緩衝區大小也就是視窗大小發送給伺服器,伺服器迴應是也將視窗大小發送給客戶端,伺服器客戶端都知道了彼此的視窗大小。  3.比如主機A的傳送視窗大小為5,主機A可以向主機B傳

TCP 滑動視窗機制

本文要解決的問題: 瞭解滑動視窗機制的原理和基本方法。 (1).視窗機制    滑動視窗協議的基本原理就是在任意時刻,傳送方都維持了一個連續的允許傳送的幀的序號,稱為傳送視窗;同時,接收方也維

TCP滑動視窗機制

 (1).視窗機制 滑動視窗協議的基本原理就是在任意時刻,傳送方都維持了一個連續的允許傳送的幀的序號,稱為傳送視窗;同時,接收方也維持了一個連續的允許接收的幀的序號,稱為接收視窗。傳送視窗和接收視窗的序號的上下界不一定要一樣,甚至大小也可以不同。不同的滑動視窗協議視窗大

TCP滑動視窗移動規則

一、TCP的滑動視窗大小實際上就是socket的接收緩衝區大小的位元組數 二、對於server端的socket一定要在listen之間設定緩衝區大小,因為,accept時新產生的socket會繼承監聽socket的緩衝區大小。對於client端的socket一定要在co

TCP 滑動視窗用以進行流量控制

滑動視窗協議原理是:對所有資料幀按順序賦予編號,傳送方在傳送過程中始終保持著一個傳送視窗,只有落在傳送視窗內的幀才允許被髮送;同時接收方也維持著一個接收視窗,只有落在接收視窗內的幀才允許接收。 通過調整發送方視窗和接收方視窗的大小可以實現流量控制,就象通過閥門控制水流速度

TCP滑動視窗與擁塞視窗

一、滑動視窗 滑動視窗協議是傳輸層進行流控的一種措施,接收方通過通告發送方自己的視窗大小,從而控制傳送方的傳送速度,從而達到防止傳送方傳送速度過快而導致自己被淹沒的目的。 對ACK的再認識,ack通常被理解為收到資料後給出的一個確認ACK,ACK包含兩個非常

計算機網路 TCP 滑動視窗協議 詳解

滑動視窗機制解析: 1.視窗機制滑動視窗協議的基本原理就是在任意時刻,傳送方都維持了一個連續的允許傳送的幀的序號,稱為傳送視窗;同時,接收方也維持了一個連續的允許接收的幀的序號,稱為接收視窗。傳送視窗和接收視窗的序號的上下界不一定要一樣,甚至大小也可以不同。不同的滑動視窗

TCP滑動視窗/超時重傳/慢啟動機制

一. TCP的優勢從傳輸資料來講,TCP/UDP以及其他協議都可以完成資料的傳輸,從一端傳輸到另外一端,TCP比較出眾的一點就是提供一個可靠的,流控的資料傳輸,所以實現起來要比其他協議複雜的多,先來看下這兩個修飾詞的意義: 1. Reliability ,提供TCP的可靠性,

TCP滑動視窗

TCP的滑動視窗解決了端到端的流量控制問題,允許接受方對傳輸進行限制,直到它擁有足夠的緩衝空間來容納更多的資料。滑動視窗的大小由接收方確定,接收方在傳送確認訊號給傳送方的同時告訴傳送方自己的緩衝區大小(在TCP頭部欄位中),傳送方根據此大小確定視窗大小,從而控制資料傳送量。同時,滑動視窗協議允許傳送方在停止

TCP滑動視窗機制 流量控制

TCP滑動視窗機制TCP滑動視窗機制分為兩種:固定大小視窗;滑動視窗(不固定大小)。由於TCP傳輸是支援全雙工的,因此傳送方和接收方各維護了兩個滑動視窗(接收視窗和傳送視窗)。滑動視窗會對資料幀進行編號,只有落在傳送視窗的資料才能被髮送,也只有落在接收視窗的資料才能被讀取。因

TCP 滑動視窗的簡介

TCP的滑動視窗主要有兩個作用,一是提供TCP的可靠性,二是提供TCP的流控特性。同時滑動視窗機制還體現了TCP面向位元組流的設計思路。TCP 段中視窗的相關欄位。 TCP的Window是一個16bit位欄位,它代表的是視窗的位元組容量,也就是TCP的標準視窗最