原文源自:
在有關tcp連線的很多配置中,有很多選項有的配置
net.ipv4.tcp_rmem:這個引數定義了tcp接收緩衝(用於tcp接收滑動視窗)的最小值、預設值、最大值
net.ipv4.tcp_wmem:這個引數定義了tcp傳送緩衝(用於tcp傳送滑動視窗)的最小值、預設值、最大值
netdev_max_backlog:當網絡卡接收資料報的速度大於核心處理的速度時,會有乙個佇列儲存這些資料報。這個引數表示佇列的最大值
rmem_default:這個引數表示核心套接字接收快取區預設的大小
wmem_default:這個引數表示核心套接字傳送快取區預設的大小
rmem_max:這個引數表示核心套接字接收快取區最大的大小
rmem_max:這個引數表示核心套接字接收快取區最大的大小
滑動視窗的大小與套接字快取區會在一定程度上影響併發連線的資料,每個tcp連線都會為維護tcp滑動視窗而消耗記憶體,這個視窗會根據伺服器的處理速度收縮或擴張。
這裡想說的是核心緩衝區和滑動視窗之間的區別聯絡:
整個資料的流程中,首先網絡卡接收到的資料存放到核心緩衝區內,然後核心緩衝區存放的資料根據tcp資訊將資料移動到具體的某乙個tcp連線上的接收緩衝區內,也就是接收滑動視窗內,然後應用程式從tcp的接受緩衝區內讀取資料,如果應用程式一直不讀取,那麼滑動視窗就會變小,直至為0.
如果網絡卡處理資料的速度比核心處理資料的速度慢,那麼核心會有乙個佇列來儲存這些資料,這個佇列的大小就是由引數netdev_max_backlog決定的
對於傳送資料來說,應用程式將資料拷貝到各自tcp傳送緩衝區內(也就是傳送滑動視窗),然後系統的所有tcp套接字上傳送緩衝區(也就是傳送滑動視窗)內的資料都將資料拷貝到核心傳送緩衝區內,然後核心將核心緩衝區的資料經過網絡卡傳送出去。
tcp的傳送/接受緩衝區(也就是傳送/接受滑動視窗),是針對某乙個具體的tcp連線來說的,每乙個tcp連線都會有相應的滑動視窗,但是核心的傳送/接受緩衝區是針對整個系統的,裡面存放著整個系統的所有tcp連線的接收/傳送的資料。
TCP IP滑動視窗
t c p使用一種視窗 w i n d o w 機制來控制資料流。當乙個連線建立時,連線的每一端分配乙個緩衝區來儲存輸入的資料,並將緩衝區的尺寸傳送給另一端。當資料到達時,接收方傳送確認,其中包含了自己剩餘的緩衝區尺寸。剩餘的緩衝區空間的大小被稱為視窗 w i n d o w 指出視窗大小的通知稱為...
TCP IP 滑動視窗
這樣的傳輸方式有乙個缺點 資料報的往返時間越長,通訊的效率就越低。為解決這個問題,tcp 引入了視窗這個概念。即使在往返時間較長的情況下,它也不會降低網路通訊的效率。那麼有了視窗,就可以指定視窗大小,視窗大小就是指無需等待確認應答,而可以繼續傳送資料的最大值。視窗的實現實際上是作業系統開闢的乙個快取...
TCP IP 協議中的滑動視窗
乙個例子明白傳送緩衝區 接受緩衝區 滑動視窗協議之間的關係。在上面的幾篇文章中簡單介紹了上述幾個概念在tcp網路程式設計中的關係,也對應了幾個基本socket系統呼叫的幾個行為,這裡再列舉乙個例子,由於對於每乙個tcp的socket來說,都有乙個傳送緩衝區和接受緩衝區與之對應,所以這裡只做單方向ji...