激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

電腦之家 - 專業計算機基礎知識與電腦技術學習網站
分類導航

路由器|交換機|網絡協議|網絡知識|

服務器之家 - 電腦之家 - 網絡技術 - 網絡協議 - TCP性能調優實現原理及過程解析

TCP性能調優實現原理及過程解析

2021-07-19 01:03-零 網絡協議

這篇文章主要介紹了TCP性能調優實現原理及過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

三次握手階段

TCP性能調優實現原理及過程解析

客戶端syn包的重試次數

sysctl -w net.ipv4.tcp_syn_retries=6

相關介紹

第 1 次重試發生在 1 秒鐘后,接著會以翻倍的方式在第 2、4、8、16、32 秒共做 6 次重試,最后一次重試會等待 64 秒,如果仍然沒有返回 ack,才會終止三次握手。所以,總耗時是 1+2+4+8+16+32+64=127 秒,超過 2 分鐘。

服務端半連接池大小

sysctl -w net.ipv4.tcp_max_syn_backlog=16384

TCP性能調優實現原理及過程解析

服務端半連接池滿了以后是否開啟syncookie機制

sysctl -w net.ipv4.tcp_syncookies=1

相關介紹

如果 syn 半連接隊列已滿,默認會丟棄連接并不是這樣,開啟 syncookies 功能就可以在不使用 syn 隊列的情況下成功建立連接。

syncookies 是這么做的:服務器根據當前狀態計算出一個值,放在己方發出的 syn+ack 報文中發出,當客戶端返回 ack 報文時,取出該值驗證,如果合法,就認為連接建立成功,如下圖所示。

TCP性能調優實現原理及過程解析

  • 0 表示關閉該功能;
  • 2 表示無條件開啟功能;
  • 1 則表示僅當 syn 半連接隊列放不下時,再啟用它。

注意:由于 syncookie 僅用于應對 syn 泛洪攻擊(攻擊者惡意構造大量的 syn 報文發送給服務器,造成 syn 半連接隊列溢出,導致正常客戶端的連接無法建立),這種方式建立的連接,許多 tcp 特性都無法使用。所以,應當把 tcp_syncookies 設置為 1,僅在隊列滿時再啟用。

服務端syn+ack包的重試次數

net.ipv4.tcp_synack_retries=5

相關介紹

tcp_synack_retries 的默認重試次數是 5 次,與客戶端重發 syn 類似,它的重試會經歷 1、2、4、8、16 秒,最后一次重試后等待 32 秒,若仍然沒有收到 ack,才會關閉連接,故共需要等待 63 秒。

服務端全連接隊列的大小

取決于min(backlog, /proc/sys/net/core/somaxconn),在linux內核2.2版本以后,listen 函數的 backlog 參數就可以設置 accept 隊列的大小。

另外backlog 參數還受限于 linux 系統級的隊列長度上限,當然這個上限閾值也可以通過 somaxconn 參數修改,somaxconn是內核的參數,默認是128。

sysctl -w net.core.somaxconn=32768

四次揮手階段

接下來我們把先關閉連接的一方叫做主動方,后關閉連接的一方叫做被動方。

四次揮手的流程:

其實四次揮手只涉及兩種報文:fin 和 ack。fin 就是 finish 結束連接的意思,誰發出 fin 報文,就表示它將不再發送任何數據,關閉這一方向的傳輸通道。ack 是 acknowledge 確認的意思,它用來通知對方:你方的發送通道已經關閉。當主動方關閉連接時,會發送 fin 報文,此時主動方的連接狀態由 established 變為 fin_wait1。當被動方收到 fin 報文后,內核自動回復 ack 報文,連接狀態由 established 變為 close_wait,顧名思義,它在等待進程調用 close 函數關閉連接。當主動方接收到這個 ack 報文后,連接狀態由 fin_wait1 變為 fin_wait2,主動方的發送通道就關閉了。再來看被動方的發送通道是如何關閉的。當被動方進入 close_wait 狀態時,進程的 read 函數會返回 0,這樣開發人員就會有針對性地調用 close 函數,進而觸發內核發送 fin 報文,此時被動方連接的狀態變為 last_ack。當主動方收到這個 fin 報文時,內核會自動回復 ack,同時連接的狀態由 fin_wait2 變為 time_wait,linux 系統下大約 1 分鐘后 time_wait 狀態的連接才會徹底關閉。而被動方收到 ack 報文后,連接就會關閉。

TCP性能調優實現原理及過程解析

主動方的優化

等待ack,fin包的重發次數

主動方發送 fin 報文后,連接就處于 fin_wait1 狀態下,該狀態通常應在數十毫秒內轉為 fin_wait2。只有遲遲收不到對方返回的 ack 時,才能用 netstat 命令觀察到 fin_wait1 狀態。此時,內核會定時重發 fin 報文,其中重發次數由 tcp_orphan_retries 參數控制(注意,orphan 雖然是孤兒的意思,該參數卻不只對孤兒連接有效,事實上,它對所有 fin_wait1 狀態下的連接都有效),默認值是 0,特指 8 次:

net.ipv4.tcp_orphan_retries = 0

孤兒連接的數量

net.ipv4.tcp_max_orphans = 16384

相關介紹

tcp_max_orphans 定義了孤兒連接的最大數量。當進程調用 close 函數關閉連接后,該連接是在 fin_wait1 狀態,這個連接都與該進程無關了,它變成了孤兒連接。linux 系統為防止孤兒連接過多,導致系統資源長期被占用,就提供了 tcp_max_orphans 參數。如果孤兒連接數量大于它,新增的孤兒連接將不再走四次揮手,而是直接發送 rst 復位報文強制關閉。

孤兒連接的定義:由進程調用close關閉的連接稱為孤兒連接,另外shutdown 函數也可以關閉連接,這二者都會向對方發送 fin 報文(shutdown 參數須傳入 shut_wr 或者 shut_rdwr 才會發送 fin),區別在于 close 調用后,哪怕對方在半關閉狀態下發送的數據到達主動方,進程也無法接收。如果你用 netstat -p 命令,會發現連接對應的進程名為空(與進程無關!)。而 shutdown 函數調用后,即使連接進入了 fin_wait1 或者 fin_wait2 狀態,它也不是孤兒連接,進程仍然可以繼續接收數據。

等待fin的時間

net.ipv4.tcp_fin_timeout = 60

相關介紹

當連接收到 ack 進入 fin_wait2 狀態后,就表示主動方的發送通道已經關閉,接下來將等待對方發送 fin 報文,關閉對方的發送通道。這時,如果連接是用 shutdown 函數關閉的,連接可以一直處于 fin_wait2 狀態。但對于 close 函數關閉的孤兒連接,這個狀態不可以持續太久,而 tcp_fin_timeout 控制了這個狀態下連接的持續時長。

time_wait相關參數

相關介紹

time_wait 是主動方四次揮手的最后一個狀態。當收到被動方發來的 fin 報文時,主動方回復 ack,表示確認對方的發送通道已經關閉,連接隨之進入 time_wait 狀態,等待 60 秒后關閉。

time_wait狀態最大連接數

當 time_wait 的連接數量超過該參數時,新關閉的連接就不再經歷 time_wait 而直接關閉。

net.ipv4.tcp_max_tw_buckets = 5000

是否復用time_wait狀態的端口

復用 time_wait 狀態的端口,如果服務器會主動向上游服務器發起連接的話,就可以把 tcp_tw_reuse 參數設置為 1,它允許作為客戶端的新連接,在安全條件下使用 time_wait 狀態下的端口。

net.ipv4.tcp_tw_reuse = 1

當然,要想使 tcp_tw_reuse 生效,還得把 timestamps 參數設置為 1,它滿足安全復用的先決條件(對方也要打開 tcp_timestamps ):

net.ipv4.tcp_timestamps = 1

老版本的 linux 還提供了 tcp_tw_recycle 參數,它并不要求 time_wait 狀態存在 60 秒,很容易導致數據錯亂,不建議設置為 1。

net.ipv4.tcp_tw_recycle = 0

所以在 linux 4.12 版本后,直接取消了這一參數。

其他配置

允許系統打開的端口范圍

sysctl -w net.ipv4.ip_local_port_range=1024 65000

系統全局允許分配的最大文件句柄數

sysctl -w fs.file-max=2097152

sysctl -w fs.nr_open=2097152

echo 2097152 > /proc/sys/fs/nr_open

允許當前會話或進程打開文件句柄數

ulimit -n 1048576

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/-wenli/p/13779474.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 九九精品影院 | 成人免费乱码大片a毛片视频网站 | 免费一级欧美大片视频在线 | julieann艳星激情办公室 | 国内成人自拍视频 | 中文字幕 亚洲一区 | 国产男女爽爽爽爽爽免费视频 | 污版视频在线观看 | 伊人99在线 | 天天艹综合| 久久人人做 | 福利在线小视频 | 中国黄色一级生活片 | 青久草视频 | 狠狠干b| 亚洲视频综合网 | 国产一级淫片a级aaa | 免费久久久 | 日韩字幕在线观看 | 国产外围在线 | 欧美亚洲免费 | 日韩黄网站 | 久久久久北条麻妃免费看 | 成人福利视频网站 | 看91视频 | 羞羞的视频免费 | 宅男视频在线观看免费 | 久久99国产精品二区护士 | 久久久久9999| 日本精品久久久一区二区三区 | 国产成人精品一区在线播放 | 高清在线国产 | 99精品国产小情侣高潮露脸在线 | www.成人在线视频 | 韩日黄色片 | 国产精品资源手机在线播放 | 成人免费看片a | 久久人人97超碰国产公开结果 | 欧美性受xxx黑人xyx性爽 | 欧美日本91精品久久久久 | 欧美成人免费tv在线播放 |