推薦一個基於 kcp 協議的遠程端口轉發工具

kcptun 是一個基於 kcp 協議的遠程端口轉發工具。它創建基於 kcp 協議的 UDP 隧道,可以將 TCP 流轉換爲 KCP+UDP 流。

kcptun 使用 Go 開發,可以用於 Windows、Linux、MacOS 等操作系統。它對硬件要求非常低,內存最低僅需要 20MB。

安裝非常簡單,庫提供了安裝腳本:

curl -L  https://raw.githubusercontent.com/xtaci/kcptun/master/download.sh | sh

爲了在服務器上發揮最大性能,建議你做如下操作:

1,增加文件打開數量。

ulimit -n 65535

2,調整 udp 包的相關參數。

net.core.rmem_max=26214400 // BDP - bandwidth delay product
net.core.rmem_default=26214400
net.core.wmem_max=26214400
net.core.wmem_default=26214400
net.core.netdev_max_backlog=2048 // proportional to -rcvwnd

3,增大 buffer 大小,默認的 buffer 大小爲 4MB。對於速度較慢的處理器,增加緩衝區對於正確接收數據包至關重要。

-sockbuf 16777217

這是使用 kcptun 啓動的一個示例:

KCP Client: ./client_darwin_amd64 -r "KCP_SERVER_IP:4000" -l ":8388" -mode fast3 -nocomp -autoexpire 900 -sockbuf 16777217 -dscp 46
KCP Server: ./server_linux_amd64 -t "TARGET_IP:8388" -l ":4000" -mode fast3 -nocomp -sockbuf 16777217 -dscp 46

上面的命令將會建立端口轉發通道,應用 ->KCP 客戶端(8388/tcp)->KCP 服務端(4000/udp)-> 目標服務(8388/tcp)。

使用 kcptun 基本調優指南:

一、如果擁有高速網絡連接,如何提高帶寬使用?

同時增加 kcptun 客戶端 rcvnd 參數和 kcptun 服務端 sndnd 參數。這些值中的最小值決定了鏈路的最大傳輸速率,如 wnd * mtu / rtt。然後,嘗試下載一些東西,看看它是否符合您的要求。MTU 可以通過 - mtu 進行調整。

二、如果使用 kcptun 加速遊戲,如何減小延遲?

延遲通常表示數據包丟失。您可以通過更改 - mode 參數來減少延遲。這裏延遲從小到大的模式:fast3>fast2>fast>normal>default。

三、如何減少頭部阻塞?

由於流被多路複用到單個物理信道中,因此可能會發生頭部阻塞。將 smuxbuf 增加到更大值(默認爲 4MB)可能會緩解這個問題,但它會使用更多的內存。對於版本 >= v20190924,可以切換到 smux 版本 2。這個版本可以現在流內存使用。通過 - streambuf 可以限制每個流的內存使用。

四、性能低的設備如何調優?例如嵌入式設備?

kcptun 使用 Reed-Solomon 碼來恢復丟失的數據包,而這需要大量的計算。低端 ARM 設備可能無法很好地與 kcptun 配合使用。爲了獲得最佳性能,建議使用 AMD、Intel 等多核服務器 CPU。如果必須使用 ARM 路由器,最好禁用 FEC 並使用 salsa20 作爲加密方法。

看了很多帖子及 GitHub kcptun 項目,kcptun 特別適合在長距離通信以及擁塞嚴重的網絡發揮優勢。相較於 TCP,它能提供更低的延時,但消耗更多的帶寬。KCP 的好處和劣勢都非常明顯,請選擇合適的場景來應用 kcptun 工具。

更多的內容,請參考 Github:

https://github.com/xtaci/kcptun

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/NYBrc02Ln5ROMyKaZYn6gw