'TCP/IP加速原理詳解(乾貨)'

"

請先看下這個case.

對某一個key value應用,從網卡接收數據包到應用層處理,再把數據發送出去,整個系統資源消耗情況如下:

"

請先看下這個case.

對某一個key value應用,從網卡接收數據包到應用層處理,再把數據發送出去,整個系統資源消耗情況如下:

TCP/IP加速原理詳解(乾貨)

可以看出,Sockets接口+TCP是系統瓶頸。

根據下圖模型,瓶頸在於TCP(包括sockets接口)。

"

請先看下這個case.

對某一個key value應用,從網卡接收數據包到應用層處理,再把數據發送出去,整個系統資源消耗情況如下:

TCP/IP加速原理詳解(乾貨)

可以看出,Sockets接口+TCP是系統瓶頸。

根據下圖模型,瓶頸在於TCP(包括sockets接口)。

TCP/IP加速原理詳解(乾貨)

要想提升系統吞吐量,必須要優化TCP。

由於網絡延遲的存在,對用戶體驗影響更大的是如何快速傳遞數據到客戶端,而這屬於流量優化的範疇。

本文講述如何優化TCP性能和TCP數據傳遞。

1、什麼是TCP加速

引用百度百科的定義:

"

請先看下這個case.

對某一個key value應用,從網卡接收數據包到應用層處理,再把數據發送出去,整個系統資源消耗情況如下:

TCP/IP加速原理詳解(乾貨)

可以看出,Sockets接口+TCP是系統瓶頸。

根據下圖模型,瓶頸在於TCP(包括sockets接口)。

TCP/IP加速原理詳解(乾貨)

要想提升系統吞吐量,必須要優化TCP。

由於網絡延遲的存在,對用戶體驗影響更大的是如何快速傳遞數據到客戶端,而這屬於流量優化的範疇。

本文講述如何優化TCP性能和TCP數據傳遞。

1、什麼是TCP加速

引用百度百科的定義:

TCP/IP加速原理詳解(乾貨)

主流的TCP加速方式主要有 :基於流量的加速傳遞和數據包處理性能優化。

基於流量的方式主要通過修改擁塞控制算法來達到快速傳遞數據包的目的。

數據包處理性能優化包括內核優化、TCP offload和基於用戶態TCP協議的方式。這些方式可用於優化數據包處理,從而提升系統的吞吐量。

2、基於流量的TCP加速方式

2.1 TCP雙邊加速

TCP雙邊加速需要在TCP連接的兩端部署硬件設備或安裝軟件。

雙邊加速的優點是可以利用壓縮等技術進一步提升TCP傳輸效率,缺點是部署麻煩。

雙邊加速一般應用於公司不同分支之間的遠距離訪問。

下圖是雙邊加速的一個例子。TCP加速設備之間採用SCTP的協議進行交互,而原本TCP對端跟TCP加速設備之間則採用常規的TCP協議進行交互。這種透明代理的方式方便了TCP加速設備之間採用特殊的方式來加速。

"

請先看下這個case.

對某一個key value應用,從網卡接收數據包到應用層處理,再把數據發送出去,整個系統資源消耗情況如下:

TCP/IP加速原理詳解(乾貨)

可以看出,Sockets接口+TCP是系統瓶頸。

根據下圖模型,瓶頸在於TCP(包括sockets接口)。

TCP/IP加速原理詳解(乾貨)

要想提升系統吞吐量,必須要優化TCP。

由於網絡延遲的存在,對用戶體驗影響更大的是如何快速傳遞數據到客戶端,而這屬於流量優化的範疇。

本文講述如何優化TCP性能和TCP數據傳遞。

1、什麼是TCP加速

引用百度百科的定義:

TCP/IP加速原理詳解(乾貨)

主流的TCP加速方式主要有 :基於流量的加速傳遞和數據包處理性能優化。

基於流量的方式主要通過修改擁塞控制算法來達到快速傳遞數據包的目的。

數據包處理性能優化包括內核優化、TCP offload和基於用戶態TCP協議的方式。這些方式可用於優化數據包處理,從而提升系統的吞吐量。

2、基於流量的TCP加速方式

2.1 TCP雙邊加速

TCP雙邊加速需要在TCP連接的兩端部署硬件設備或安裝軟件。

雙邊加速的優點是可以利用壓縮等技術進一步提升TCP傳輸效率,缺點是部署麻煩。

雙邊加速一般應用於公司不同分支之間的遠距離訪問。

下圖是雙邊加速的一個例子。TCP加速設備之間採用SCTP的協議進行交互,而原本TCP對端跟TCP加速設備之間則採用常規的TCP協議進行交互。這種透明代理的方式方便了TCP加速設備之間採用特殊的方式來加速。

TCP/IP加速原理詳解(乾貨)

2.2 單邊加速

TCP單邊加速只需要在在TCP的一端部署軟件或設備,達到提升TCP快速傳輸數據的目的。

絕大部分TCP單邊加速都是通過修改TCP的擁塞控制算法來實現。

下圖顯示了某商用化產品的單邊加速情況,數據包的發送很暴力,並沒有慢啟動過程。這種無視網絡狀況發送數據包的方式,大部分場景下確實能夠提升性能,但這樣的性能提升方式其實是搶佔了互聯網帶寬資源,就像高速公路走應急車道一樣。

"

請先看下這個case.

對某一個key value應用,從網卡接收數據包到應用層處理,再把數據發送出去,整個系統資源消耗情況如下:

TCP/IP加速原理詳解(乾貨)

可以看出,Sockets接口+TCP是系統瓶頸。

根據下圖模型,瓶頸在於TCP(包括sockets接口)。

TCP/IP加速原理詳解(乾貨)

要想提升系統吞吐量,必須要優化TCP。

由於網絡延遲的存在,對用戶體驗影響更大的是如何快速傳遞數據到客戶端,而這屬於流量優化的範疇。

本文講述如何優化TCP性能和TCP數據傳遞。

1、什麼是TCP加速

引用百度百科的定義:

TCP/IP加速原理詳解(乾貨)

主流的TCP加速方式主要有 :基於流量的加速傳遞和數據包處理性能優化。

基於流量的方式主要通過修改擁塞控制算法來達到快速傳遞數據包的目的。

數據包處理性能優化包括內核優化、TCP offload和基於用戶態TCP協議的方式。這些方式可用於優化數據包處理,從而提升系統的吞吐量。

2、基於流量的TCP加速方式

2.1 TCP雙邊加速

TCP雙邊加速需要在TCP連接的兩端部署硬件設備或安裝軟件。

雙邊加速的優點是可以利用壓縮等技術進一步提升TCP傳輸效率,缺點是部署麻煩。

雙邊加速一般應用於公司不同分支之間的遠距離訪問。

下圖是雙邊加速的一個例子。TCP加速設備之間採用SCTP的協議進行交互,而原本TCP對端跟TCP加速設備之間則採用常規的TCP協議進行交互。這種透明代理的方式方便了TCP加速設備之間採用特殊的方式來加速。

TCP/IP加速原理詳解(乾貨)

2.2 單邊加速

TCP單邊加速只需要在在TCP的一端部署軟件或設備,達到提升TCP快速傳輸數據的目的。

絕大部分TCP單邊加速都是通過修改TCP的擁塞控制算法來實現。

下圖顯示了某商用化產品的單邊加速情況,數據包的發送很暴力,並沒有慢啟動過程。這種無視網絡狀況發送數據包的方式,大部分場景下確實能夠提升性能,但這樣的性能提升方式其實是搶佔了互聯網帶寬資源,就像高速公路走應急車道一樣。

TCP/IP加速原理詳解(乾貨)

近幾年出現的google擁塞控制算法BBR可以看成是單邊加速的一種。

"

請先看下這個case.

對某一個key value應用,從網卡接收數據包到應用層處理,再把數據發送出去,整個系統資源消耗情況如下:

TCP/IP加速原理詳解(乾貨)

可以看出,Sockets接口+TCP是系統瓶頸。

根據下圖模型,瓶頸在於TCP(包括sockets接口)。

TCP/IP加速原理詳解(乾貨)

要想提升系統吞吐量,必須要優化TCP。

由於網絡延遲的存在,對用戶體驗影響更大的是如何快速傳遞數據到客戶端,而這屬於流量優化的範疇。

本文講述如何優化TCP性能和TCP數據傳遞。

1、什麼是TCP加速

引用百度百科的定義:

TCP/IP加速原理詳解(乾貨)

主流的TCP加速方式主要有 :基於流量的加速傳遞和數據包處理性能優化。

基於流量的方式主要通過修改擁塞控制算法來達到快速傳遞數據包的目的。

數據包處理性能優化包括內核優化、TCP offload和基於用戶態TCP協議的方式。這些方式可用於優化數據包處理,從而提升系統的吞吐量。

2、基於流量的TCP加速方式

2.1 TCP雙邊加速

TCP雙邊加速需要在TCP連接的兩端部署硬件設備或安裝軟件。

雙邊加速的優點是可以利用壓縮等技術進一步提升TCP傳輸效率,缺點是部署麻煩。

雙邊加速一般應用於公司不同分支之間的遠距離訪問。

下圖是雙邊加速的一個例子。TCP加速設備之間採用SCTP的協議進行交互,而原本TCP對端跟TCP加速設備之間則採用常規的TCP協議進行交互。這種透明代理的方式方便了TCP加速設備之間採用特殊的方式來加速。

TCP/IP加速原理詳解(乾貨)

2.2 單邊加速

TCP單邊加速只需要在在TCP的一端部署軟件或設備,達到提升TCP快速傳輸數據的目的。

絕大部分TCP單邊加速都是通過修改TCP的擁塞控制算法來實現。

下圖顯示了某商用化產品的單邊加速情況,數據包的發送很暴力,並沒有慢啟動過程。這種無視網絡狀況發送數據包的方式,大部分場景下確實能夠提升性能,但這樣的性能提升方式其實是搶佔了互聯網帶寬資源,就像高速公路走應急車道一樣。

TCP/IP加速原理詳解(乾貨)

近幾年出現的google擁塞控制算法BBR可以看成是單邊加速的一種。

TCP/IP加速原理詳解(乾貨)

上圖展示了相對於傳統擁塞控制算法CUBIC,BBR算法在網絡丟包情況下仍然表現優異,原因在於BBR算法摒棄丟包作為擁塞控制的直接反饋因素,通過實時計算帶寬和最小RTT來決定發送速率和窗口大小。

在移動應用場合,大部分網絡丟包並不是由於路由器網絡擁塞導致,因此在移動場合,BBR算法具有更好的適應性。

在Linux內核4.9以上版本(不包括docker環境),使用BBR算法,一般只需要在sysctl.conf文件加上下面兩句:

"

請先看下這個case.

對某一個key value應用,從網卡接收數據包到應用層處理,再把數據發送出去,整個系統資源消耗情況如下:

TCP/IP加速原理詳解(乾貨)

可以看出,Sockets接口+TCP是系統瓶頸。

根據下圖模型,瓶頸在於TCP(包括sockets接口)。

TCP/IP加速原理詳解(乾貨)

要想提升系統吞吐量,必須要優化TCP。

由於網絡延遲的存在,對用戶體驗影響更大的是如何快速傳遞數據到客戶端,而這屬於流量優化的範疇。

本文講述如何優化TCP性能和TCP數據傳遞。

1、什麼是TCP加速

引用百度百科的定義:

TCP/IP加速原理詳解(乾貨)

主流的TCP加速方式主要有 :基於流量的加速傳遞和數據包處理性能優化。

基於流量的方式主要通過修改擁塞控制算法來達到快速傳遞數據包的目的。

數據包處理性能優化包括內核優化、TCP offload和基於用戶態TCP協議的方式。這些方式可用於優化數據包處理,從而提升系統的吞吐量。

2、基於流量的TCP加速方式

2.1 TCP雙邊加速

TCP雙邊加速需要在TCP連接的兩端部署硬件設備或安裝軟件。

雙邊加速的優點是可以利用壓縮等技術進一步提升TCP傳輸效率,缺點是部署麻煩。

雙邊加速一般應用於公司不同分支之間的遠距離訪問。

下圖是雙邊加速的一個例子。TCP加速設備之間採用SCTP的協議進行交互,而原本TCP對端跟TCP加速設備之間則採用常規的TCP協議進行交互。這種透明代理的方式方便了TCP加速設備之間採用特殊的方式來加速。

TCP/IP加速原理詳解(乾貨)

2.2 單邊加速

TCP單邊加速只需要在在TCP的一端部署軟件或設備,達到提升TCP快速傳輸數據的目的。

絕大部分TCP單邊加速都是通過修改TCP的擁塞控制算法來實現。

下圖顯示了某商用化產品的單邊加速情況,數據包的發送很暴力,並沒有慢啟動過程。這種無視網絡狀況發送數據包的方式,大部分場景下確實能夠提升性能,但這樣的性能提升方式其實是搶佔了互聯網帶寬資源,就像高速公路走應急車道一樣。

TCP/IP加速原理詳解(乾貨)

近幾年出現的google擁塞控制算法BBR可以看成是單邊加速的一種。

TCP/IP加速原理詳解(乾貨)

上圖展示了相對於傳統擁塞控制算法CUBIC,BBR算法在網絡丟包情況下仍然表現優異,原因在於BBR算法摒棄丟包作為擁塞控制的直接反饋因素,通過實時計算帶寬和最小RTT來決定發送速率和窗口大小。

在移動應用場合,大部分網絡丟包並不是由於路由器網絡擁塞導致,因此在移動場合,BBR算法具有更好的適應性。

在Linux內核4.9以上版本(不包括docker環境),使用BBR算法,一般只需要在sysctl.conf文件加上下面兩句:

TCP/IP加速原理詳解(乾貨)

然後執行sysctl -p使其生效。

TCP單邊加速的優點是隻需要在一側進行部署,缺點是無法直接利用壓縮等功能,而且大都會破壞互聯網的公平性。

3、內核優化

3.1 純內核優化

根據Wikipedia內容:

"

請先看下這個case.

對某一個key value應用,從網卡接收數據包到應用層處理,再把數據發送出去,整個系統資源消耗情況如下:

TCP/IP加速原理詳解(乾貨)

可以看出,Sockets接口+TCP是系統瓶頸。

根據下圖模型,瓶頸在於TCP(包括sockets接口)。

TCP/IP加速原理詳解(乾貨)

要想提升系統吞吐量,必須要優化TCP。

由於網絡延遲的存在,對用戶體驗影響更大的是如何快速傳遞數據到客戶端,而這屬於流量優化的範疇。

本文講述如何優化TCP性能和TCP數據傳遞。

1、什麼是TCP加速

引用百度百科的定義:

TCP/IP加速原理詳解(乾貨)

主流的TCP加速方式主要有 :基於流量的加速傳遞和數據包處理性能優化。

基於流量的方式主要通過修改擁塞控制算法來達到快速傳遞數據包的目的。

數據包處理性能優化包括內核優化、TCP offload和基於用戶態TCP協議的方式。這些方式可用於優化數據包處理,從而提升系統的吞吐量。

2、基於流量的TCP加速方式

2.1 TCP雙邊加速

TCP雙邊加速需要在TCP連接的兩端部署硬件設備或安裝軟件。

雙邊加速的優點是可以利用壓縮等技術進一步提升TCP傳輸效率,缺點是部署麻煩。

雙邊加速一般應用於公司不同分支之間的遠距離訪問。

下圖是雙邊加速的一個例子。TCP加速設備之間採用SCTP的協議進行交互,而原本TCP對端跟TCP加速設備之間則採用常規的TCP協議進行交互。這種透明代理的方式方便了TCP加速設備之間採用特殊的方式來加速。

TCP/IP加速原理詳解(乾貨)

2.2 單邊加速

TCP單邊加速只需要在在TCP的一端部署軟件或設備,達到提升TCP快速傳輸數據的目的。

絕大部分TCP單邊加速都是通過修改TCP的擁塞控制算法來實現。

下圖顯示了某商用化產品的單邊加速情況,數據包的發送很暴力,並沒有慢啟動過程。這種無視網絡狀況發送數據包的方式,大部分場景下確實能夠提升性能,但這樣的性能提升方式其實是搶佔了互聯網帶寬資源,就像高速公路走應急車道一樣。

TCP/IP加速原理詳解(乾貨)

近幾年出現的google擁塞控制算法BBR可以看成是單邊加速的一種。

TCP/IP加速原理詳解(乾貨)

上圖展示了相對於傳統擁塞控制算法CUBIC,BBR算法在網絡丟包情況下仍然表現優異,原因在於BBR算法摒棄丟包作為擁塞控制的直接反饋因素,通過實時計算帶寬和最小RTT來決定發送速率和窗口大小。

在移動應用場合,大部分網絡丟包並不是由於路由器網絡擁塞導致,因此在移動場合,BBR算法具有更好的適應性。

在Linux內核4.9以上版本(不包括docker環境),使用BBR算法,一般只需要在sysctl.conf文件加上下面兩句:

TCP/IP加速原理詳解(乾貨)

然後執行sysctl -p使其生效。

TCP單邊加速的優點是隻需要在一側進行部署,缺點是無法直接利用壓縮等功能,而且大都會破壞互聯網的公平性。

3、內核優化

3.1 純內核優化

根據Wikipedia內容:

TCP/IP加速原理詳解(乾貨)

我們得知,內核需要根據實際場景進行優化,不能一概而論。合理優化,可以提升性能很多(有時能夠提升10倍),但如果盲目優化,性能反而下降。

當今的內核,在大部分場景下,TCP buffer能夠自動調整buffer大小來匹配傳輸,所以在內核方面需要優化的地方就是選擇合適的擁塞控制算法。

下面是Linux默認算法CUBIC和BBR算法在丟包情況下的對比情況:

"

請先看下這個case.

對某一個key value應用,從網卡接收數據包到應用層處理,再把數據發送出去,整個系統資源消耗情況如下:

TCP/IP加速原理詳解(乾貨)

可以看出,Sockets接口+TCP是系統瓶頸。

根據下圖模型,瓶頸在於TCP(包括sockets接口)。

TCP/IP加速原理詳解(乾貨)

要想提升系統吞吐量,必須要優化TCP。

由於網絡延遲的存在,對用戶體驗影響更大的是如何快速傳遞數據到客戶端,而這屬於流量優化的範疇。

本文講述如何優化TCP性能和TCP數據傳遞。

1、什麼是TCP加速

引用百度百科的定義:

TCP/IP加速原理詳解(乾貨)

主流的TCP加速方式主要有 :基於流量的加速傳遞和數據包處理性能優化。

基於流量的方式主要通過修改擁塞控制算法來達到快速傳遞數據包的目的。

數據包處理性能優化包括內核優化、TCP offload和基於用戶態TCP協議的方式。這些方式可用於優化數據包處理,從而提升系統的吞吐量。

2、基於流量的TCP加速方式

2.1 TCP雙邊加速

TCP雙邊加速需要在TCP連接的兩端部署硬件設備或安裝軟件。

雙邊加速的優點是可以利用壓縮等技術進一步提升TCP傳輸效率,缺點是部署麻煩。

雙邊加速一般應用於公司不同分支之間的遠距離訪問。

下圖是雙邊加速的一個例子。TCP加速設備之間採用SCTP的協議進行交互,而原本TCP對端跟TCP加速設備之間則採用常規的TCP協議進行交互。這種透明代理的方式方便了TCP加速設備之間採用特殊的方式來加速。

TCP/IP加速原理詳解(乾貨)

2.2 單邊加速

TCP單邊加速只需要在在TCP的一端部署軟件或設備,達到提升TCP快速傳輸數據的目的。

絕大部分TCP單邊加速都是通過修改TCP的擁塞控制算法來實現。

下圖顯示了某商用化產品的單邊加速情況,數據包的發送很暴力,並沒有慢啟動過程。這種無視網絡狀況發送數據包的方式,大部分場景下確實能夠提升性能,但這樣的性能提升方式其實是搶佔了互聯網帶寬資源,就像高速公路走應急車道一樣。

TCP/IP加速原理詳解(乾貨)

近幾年出現的google擁塞控制算法BBR可以看成是單邊加速的一種。

TCP/IP加速原理詳解(乾貨)

上圖展示了相對於傳統擁塞控制算法CUBIC,BBR算法在網絡丟包情況下仍然表現優異,原因在於BBR算法摒棄丟包作為擁塞控制的直接反饋因素,通過實時計算帶寬和最小RTT來決定發送速率和窗口大小。

在移動應用場合,大部分網絡丟包並不是由於路由器網絡擁塞導致,因此在移動場合,BBR算法具有更好的適應性。

在Linux內核4.9以上版本(不包括docker環境),使用BBR算法,一般只需要在sysctl.conf文件加上下面兩句:

TCP/IP加速原理詳解(乾貨)

然後執行sysctl -p使其生效。

TCP單邊加速的優點是隻需要在一側進行部署,缺點是無法直接利用壓縮等功能,而且大都會破壞互聯網的公平性。

3、內核優化

3.1 純內核優化

根據Wikipedia內容:

TCP/IP加速原理詳解(乾貨)

我們得知,內核需要根據實際場景進行優化,不能一概而論。合理優化,可以提升性能很多(有時能夠提升10倍),但如果盲目優化,性能反而下降。

當今的內核,在大部分場景下,TCP buffer能夠自動調整buffer大小來匹配傳輸,所以在內核方面需要優化的地方就是選擇合適的擁塞控制算法。

下面是Linux默認算法CUBIC和BBR算法在丟包情況下的對比情況:

TCP/IP加速原理詳解(乾貨)

在丟包情況下,BBR所受影響沒有Linux TCP默認算法CUBIC那麼大,而且在20%以下的丟包率情況下性能遠超CUBIC。一般建議在非網絡擁塞導致丟包的場合使用BBR算法,例如移動應用。

對於帶寬比較大,RTT時間比較長的應用場景,可以參考。

3.2 Dedicated fast path

由於內核處理TCP是通用的處理方式,不同的場景,執行的路徑是不一樣的,針對某些場景做特殊的優化,可以大大提升TCP的處理性能。

這方面可以參考論文"TAS: TCP Accleration as an OS Service"。

4、TCP offload

內核消耗性能的地方主要有如下四個方面:

"

請先看下這個case.

對某一個key value應用,從網卡接收數據包到應用層處理,再把數據發送出去,整個系統資源消耗情況如下:

TCP/IP加速原理詳解(乾貨)

可以看出,Sockets接口+TCP是系統瓶頸。

根據下圖模型,瓶頸在於TCP(包括sockets接口)。

TCP/IP加速原理詳解(乾貨)

要想提升系統吞吐量,必須要優化TCP。

由於網絡延遲的存在,對用戶體驗影響更大的是如何快速傳遞數據到客戶端,而這屬於流量優化的範疇。

本文講述如何優化TCP性能和TCP數據傳遞。

1、什麼是TCP加速

引用百度百科的定義:

TCP/IP加速原理詳解(乾貨)

主流的TCP加速方式主要有 :基於流量的加速傳遞和數據包處理性能優化。

基於流量的方式主要通過修改擁塞控制算法來達到快速傳遞數據包的目的。

數據包處理性能優化包括內核優化、TCP offload和基於用戶態TCP協議的方式。這些方式可用於優化數據包處理,從而提升系統的吞吐量。

2、基於流量的TCP加速方式

2.1 TCP雙邊加速

TCP雙邊加速需要在TCP連接的兩端部署硬件設備或安裝軟件。

雙邊加速的優點是可以利用壓縮等技術進一步提升TCP傳輸效率,缺點是部署麻煩。

雙邊加速一般應用於公司不同分支之間的遠距離訪問。

下圖是雙邊加速的一個例子。TCP加速設備之間採用SCTP的協議進行交互,而原本TCP對端跟TCP加速設備之間則採用常規的TCP協議進行交互。這種透明代理的方式方便了TCP加速設備之間採用特殊的方式來加速。

TCP/IP加速原理詳解(乾貨)

2.2 單邊加速

TCP單邊加速只需要在在TCP的一端部署軟件或設備,達到提升TCP快速傳輸數據的目的。

絕大部分TCP單邊加速都是通過修改TCP的擁塞控制算法來實現。

下圖顯示了某商用化產品的單邊加速情況,數據包的發送很暴力,並沒有慢啟動過程。這種無視網絡狀況發送數據包的方式,大部分場景下確實能夠提升性能,但這樣的性能提升方式其實是搶佔了互聯網帶寬資源,就像高速公路走應急車道一樣。

TCP/IP加速原理詳解(乾貨)

近幾年出現的google擁塞控制算法BBR可以看成是單邊加速的一種。

TCP/IP加速原理詳解(乾貨)

上圖展示了相對於傳統擁塞控制算法CUBIC,BBR算法在網絡丟包情況下仍然表現優異,原因在於BBR算法摒棄丟包作為擁塞控制的直接反饋因素,通過實時計算帶寬和最小RTT來決定發送速率和窗口大小。

在移動應用場合,大部分網絡丟包並不是由於路由器網絡擁塞導致,因此在移動場合,BBR算法具有更好的適應性。

在Linux內核4.9以上版本(不包括docker環境),使用BBR算法,一般只需要在sysctl.conf文件加上下面兩句:

TCP/IP加速原理詳解(乾貨)

然後執行sysctl -p使其生效。

TCP單邊加速的優點是隻需要在一側進行部署,缺點是無法直接利用壓縮等功能,而且大都會破壞互聯網的公平性。

3、內核優化

3.1 純內核優化

根據Wikipedia內容:

TCP/IP加速原理詳解(乾貨)

我們得知,內核需要根據實際場景進行優化,不能一概而論。合理優化,可以提升性能很多(有時能夠提升10倍),但如果盲目優化,性能反而下降。

當今的內核,在大部分場景下,TCP buffer能夠自動調整buffer大小來匹配傳輸,所以在內核方面需要優化的地方就是選擇合適的擁塞控制算法。

下面是Linux默認算法CUBIC和BBR算法在丟包情況下的對比情況:

TCP/IP加速原理詳解(乾貨)

在丟包情況下,BBR所受影響沒有Linux TCP默認算法CUBIC那麼大,而且在20%以下的丟包率情況下性能遠超CUBIC。一般建議在非網絡擁塞導致丟包的場合使用BBR算法,例如移動應用。

對於帶寬比較大,RTT時間比較長的應用場景,可以參考。

3.2 Dedicated fast path

由於內核處理TCP是通用的處理方式,不同的場景,執行的路徑是不一樣的,針對某些場景做特殊的優化,可以大大提升TCP的處理性能。

這方面可以參考論文"TAS: TCP Accleration as an OS Service"。

4、TCP offload

內核消耗性能的地方主要有如下四個方面:

TCP/IP加速原理詳解(乾貨)

目前TCP offload常用的功能是TCP/IP checksum offload和TCP segmentation offload,主要是解決上面第二個問題。

其它問題需要更加強大的網卡支持,這方面可以參考"https://www.dell.com/downloads/global/power/1q04-her.pdf"。

"TCP Offload Engines"論文中描述了網絡應用內存拷貝的情況,具體參考下圖。

"

請先看下這個case.

對某一個key value應用,從網卡接收數據包到應用層處理,再把數據發送出去,整個系統資源消耗情況如下:

TCP/IP加速原理詳解(乾貨)

可以看出,Sockets接口+TCP是系統瓶頸。

根據下圖模型,瓶頸在於TCP(包括sockets接口)。

TCP/IP加速原理詳解(乾貨)

要想提升系統吞吐量,必須要優化TCP。

由於網絡延遲的存在,對用戶體驗影響更大的是如何快速傳遞數據到客戶端,而這屬於流量優化的範疇。

本文講述如何優化TCP性能和TCP數據傳遞。

1、什麼是TCP加速

引用百度百科的定義:

TCP/IP加速原理詳解(乾貨)

主流的TCP加速方式主要有 :基於流量的加速傳遞和數據包處理性能優化。

基於流量的方式主要通過修改擁塞控制算法來達到快速傳遞數據包的目的。

數據包處理性能優化包括內核優化、TCP offload和基於用戶態TCP協議的方式。這些方式可用於優化數據包處理,從而提升系統的吞吐量。

2、基於流量的TCP加速方式

2.1 TCP雙邊加速

TCP雙邊加速需要在TCP連接的兩端部署硬件設備或安裝軟件。

雙邊加速的優點是可以利用壓縮等技術進一步提升TCP傳輸效率,缺點是部署麻煩。

雙邊加速一般應用於公司不同分支之間的遠距離訪問。

下圖是雙邊加速的一個例子。TCP加速設備之間採用SCTP的協議進行交互,而原本TCP對端跟TCP加速設備之間則採用常規的TCP協議進行交互。這種透明代理的方式方便了TCP加速設備之間採用特殊的方式來加速。

TCP/IP加速原理詳解(乾貨)

2.2 單邊加速

TCP單邊加速只需要在在TCP的一端部署軟件或設備,達到提升TCP快速傳輸數據的目的。

絕大部分TCP單邊加速都是通過修改TCP的擁塞控制算法來實現。

下圖顯示了某商用化產品的單邊加速情況,數據包的發送很暴力,並沒有慢啟動過程。這種無視網絡狀況發送數據包的方式,大部分場景下確實能夠提升性能,但這樣的性能提升方式其實是搶佔了互聯網帶寬資源,就像高速公路走應急車道一樣。

TCP/IP加速原理詳解(乾貨)

近幾年出現的google擁塞控制算法BBR可以看成是單邊加速的一種。

TCP/IP加速原理詳解(乾貨)

上圖展示了相對於傳統擁塞控制算法CUBIC,BBR算法在網絡丟包情況下仍然表現優異,原因在於BBR算法摒棄丟包作為擁塞控制的直接反饋因素,通過實時計算帶寬和最小RTT來決定發送速率和窗口大小。

在移動應用場合,大部分網絡丟包並不是由於路由器網絡擁塞導致,因此在移動場合,BBR算法具有更好的適應性。

在Linux內核4.9以上版本(不包括docker環境),使用BBR算法,一般只需要在sysctl.conf文件加上下面兩句:

TCP/IP加速原理詳解(乾貨)

然後執行sysctl -p使其生效。

TCP單邊加速的優點是隻需要在一側進行部署,缺點是無法直接利用壓縮等功能,而且大都會破壞互聯網的公平性。

3、內核優化

3.1 純內核優化

根據Wikipedia內容:

TCP/IP加速原理詳解(乾貨)

我們得知,內核需要根據實際場景進行優化,不能一概而論。合理優化,可以提升性能很多(有時能夠提升10倍),但如果盲目優化,性能反而下降。

當今的內核,在大部分場景下,TCP buffer能夠自動調整buffer大小來匹配傳輸,所以在內核方面需要優化的地方就是選擇合適的擁塞控制算法。

下面是Linux默認算法CUBIC和BBR算法在丟包情況下的對比情況:

TCP/IP加速原理詳解(乾貨)

在丟包情況下,BBR所受影響沒有Linux TCP默認算法CUBIC那麼大,而且在20%以下的丟包率情況下性能遠超CUBIC。一般建議在非網絡擁塞導致丟包的場合使用BBR算法,例如移動應用。

對於帶寬比較大,RTT時間比較長的應用場景,可以參考。

3.2 Dedicated fast path

由於內核處理TCP是通用的處理方式,不同的場景,執行的路徑是不一樣的,針對某些場景做特殊的優化,可以大大提升TCP的處理性能。

這方面可以參考論文"TAS: TCP Accleration as an OS Service"。

4、TCP offload

內核消耗性能的地方主要有如下四個方面:

TCP/IP加速原理詳解(乾貨)

目前TCP offload常用的功能是TCP/IP checksum offload和TCP segmentation offload,主要是解決上面第二個問題。

其它問題需要更加強大的網卡支持,這方面可以參考"https://www.dell.com/downloads/global/power/1q04-her.pdf"。

"TCP Offload Engines"論文中描述了網絡應用內存拷貝的情況,具體參考下圖。

TCP/IP加速原理詳解(乾貨)

不管是發送路徑還是接收路徑,系統存在大量內存拷貝,直接影響了TCP/IP協議棧性能,可以利用TCP offload功能,NIC直接拷貝到應用的buffer中去,減少拷貝次數,從而提升性能。

TCP offload可能是未來的趨勢,部署方便,代價小,是非常值得關注的一個方向。

5、用戶態TCP協議

用戶態的協議棧在下列場合比較有用:

"

請先看下這個case.

對某一個key value應用,從網卡接收數據包到應用層處理,再把數據發送出去,整個系統資源消耗情況如下:

TCP/IP加速原理詳解(乾貨)

可以看出,Sockets接口+TCP是系統瓶頸。

根據下圖模型,瓶頸在於TCP(包括sockets接口)。

TCP/IP加速原理詳解(乾貨)

要想提升系統吞吐量,必須要優化TCP。

由於網絡延遲的存在,對用戶體驗影響更大的是如何快速傳遞數據到客戶端,而這屬於流量優化的範疇。

本文講述如何優化TCP性能和TCP數據傳遞。

1、什麼是TCP加速

引用百度百科的定義:

TCP/IP加速原理詳解(乾貨)

主流的TCP加速方式主要有 :基於流量的加速傳遞和數據包處理性能優化。

基於流量的方式主要通過修改擁塞控制算法來達到快速傳遞數據包的目的。

數據包處理性能優化包括內核優化、TCP offload和基於用戶態TCP協議的方式。這些方式可用於優化數據包處理,從而提升系統的吞吐量。

2、基於流量的TCP加速方式

2.1 TCP雙邊加速

TCP雙邊加速需要在TCP連接的兩端部署硬件設備或安裝軟件。

雙邊加速的優點是可以利用壓縮等技術進一步提升TCP傳輸效率,缺點是部署麻煩。

雙邊加速一般應用於公司不同分支之間的遠距離訪問。

下圖是雙邊加速的一個例子。TCP加速設備之間採用SCTP的協議進行交互,而原本TCP對端跟TCP加速設備之間則採用常規的TCP協議進行交互。這種透明代理的方式方便了TCP加速設備之間採用特殊的方式來加速。

TCP/IP加速原理詳解(乾貨)

2.2 單邊加速

TCP單邊加速只需要在在TCP的一端部署軟件或設備,達到提升TCP快速傳輸數據的目的。

絕大部分TCP單邊加速都是通過修改TCP的擁塞控制算法來實現。

下圖顯示了某商用化產品的單邊加速情況,數據包的發送很暴力,並沒有慢啟動過程。這種無視網絡狀況發送數據包的方式,大部分場景下確實能夠提升性能,但這樣的性能提升方式其實是搶佔了互聯網帶寬資源,就像高速公路走應急車道一樣。

TCP/IP加速原理詳解(乾貨)

近幾年出現的google擁塞控制算法BBR可以看成是單邊加速的一種。

TCP/IP加速原理詳解(乾貨)

上圖展示了相對於傳統擁塞控制算法CUBIC,BBR算法在網絡丟包情況下仍然表現優異,原因在於BBR算法摒棄丟包作為擁塞控制的直接反饋因素,通過實時計算帶寬和最小RTT來決定發送速率和窗口大小。

在移動應用場合,大部分網絡丟包並不是由於路由器網絡擁塞導致,因此在移動場合,BBR算法具有更好的適應性。

在Linux內核4.9以上版本(不包括docker環境),使用BBR算法,一般只需要在sysctl.conf文件加上下面兩句:

TCP/IP加速原理詳解(乾貨)

然後執行sysctl -p使其生效。

TCP單邊加速的優點是隻需要在一側進行部署,缺點是無法直接利用壓縮等功能,而且大都會破壞互聯網的公平性。

3、內核優化

3.1 純內核優化

根據Wikipedia內容:

TCP/IP加速原理詳解(乾貨)

我們得知,內核需要根據實際場景進行優化,不能一概而論。合理優化,可以提升性能很多(有時能夠提升10倍),但如果盲目優化,性能反而下降。

當今的內核,在大部分場景下,TCP buffer能夠自動調整buffer大小來匹配傳輸,所以在內核方面需要優化的地方就是選擇合適的擁塞控制算法。

下面是Linux默認算法CUBIC和BBR算法在丟包情況下的對比情況:

TCP/IP加速原理詳解(乾貨)

在丟包情況下,BBR所受影響沒有Linux TCP默認算法CUBIC那麼大,而且在20%以下的丟包率情況下性能遠超CUBIC。一般建議在非網絡擁塞導致丟包的場合使用BBR算法,例如移動應用。

對於帶寬比較大,RTT時間比較長的應用場景,可以參考。

3.2 Dedicated fast path

由於內核處理TCP是通用的處理方式,不同的場景,執行的路徑是不一樣的,針對某些場景做特殊的優化,可以大大提升TCP的處理性能。

這方面可以參考論文"TAS: TCP Accleration as an OS Service"。

4、TCP offload

內核消耗性能的地方主要有如下四個方面:

TCP/IP加速原理詳解(乾貨)

目前TCP offload常用的功能是TCP/IP checksum offload和TCP segmentation offload,主要是解決上面第二個問題。

其它問題需要更加強大的網卡支持,這方面可以參考"https://www.dell.com/downloads/global/power/1q04-her.pdf"。

"TCP Offload Engines"論文中描述了網絡應用內存拷貝的情況,具體參考下圖。

TCP/IP加速原理詳解(乾貨)

不管是發送路徑還是接收路徑,系統存在大量內存拷貝,直接影響了TCP/IP協議棧性能,可以利用TCP offload功能,NIC直接拷貝到應用的buffer中去,減少拷貝次數,從而提升性能。

TCP offload可能是未來的趨勢,部署方便,代價小,是非常值得關注的一個方向。

5、用戶態TCP協議

用戶態的協議棧在下列場合比較有用:

TCP/IP加速原理詳解(乾貨)

是否要採用用戶態TCP協議棧,可以參考"https://blog.cloudflare.com/why-we-use-the-linux-kernels-tcp-stack/".

6、總結

TCP加速是一個很大的領域,這方面應用得好,可以極大提升程序的性能,因此性能優化不要忽視這方面內容。

"

相關推薦

推薦中...