欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

TCP性能調(diào)優(yōu)實現(xiàn)原理及過程解析

 更新時間:2020年11月26日 09:01:38   作者:-零  
這篇文章主要介紹了TCP性能調(diào)優(yōu)實現(xiàn)原理及過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

三次握手階段

客戶端SYN包的重試次數(shù)

sysctl -w net.ipv4.tcp_syn_retries=6

相關(guān)介紹

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

服務(wù)端半連接池大小

sysctl -w net.ipv4.tcp_max_syn_backlog=16384

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

sysctl -w net.ipv4.tcp_syncookies=1

相關(guān)介紹

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

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

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

注意:由于 syncookie 僅用于應(yīng)對 SYN 泛洪攻擊(攻擊者惡意構(gòu)造大量的 SYN 報文發(fā)送給服務(wù)器,造成 SYN 半連接隊列溢出,導(dǎo)致正??蛻舳说倪B接無法建立),這種方式建立的連接,許多 TCP 特性都無法使用。所以,應(yīng)當把 tcp_syncookies 設(shè)置為 1,僅在隊列滿時再啟用。

服務(wù)端SYN+ACK包的重試次數(shù)

net.ipv4.tcp_synack_retries=5

相關(guān)介紹

tcp_synack_retries 的默認重試次數(shù)是 5 次,與客戶端重發(fā) SYN 類似,它的重試會經(jīng)歷 1、2、4、8、16 秒,最后一次重試后等待 32 秒,若仍然沒有收到 ACK,才會關(guān)閉連接,故共需要等待 63 秒。

服務(wù)端全連接隊列的大小

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

另外backlog 參數(shù)還受限于 Linux 系統(tǒng)級的隊列長度上限,當然這個上限閾值也可以通過 somaxconn 參數(shù)修改,somaxconn是內(nèi)核的參數(shù),默認是128。

sysctl -w net.core.somaxconn=32768

四次揮手階段

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

四次揮手的流程:

其實四次揮手只涉及兩種報文:FIN 和 ACK。FIN 就是 Finish 結(jié)束連接的意思,誰發(fā)出 FIN 報文,就表示它將不再發(fā)送任何數(shù)據(jù),關(guān)閉這一方向的傳輸通道。ACK 是 Acknowledge 確認的意思,它用來通知對方:你方的發(fā)送通道已經(jīng)關(guān)閉。當主動方關(guān)閉連接時,會發(fā)送 FIN 報文,此時主動方的連接狀態(tài)由 ESTABLISHED 變?yōu)?FIN_WAIT1。當被動方收到 FIN 報文后,內(nèi)核自動回復(fù) ACK 報文,連接狀態(tài)由 ESTABLISHED 變?yōu)?CLOSE_WAIT,顧名思義,它在等待進程調(diào)用 close 函數(shù)關(guān)閉連接。當主動方接收到這個 ACK 報文后,連接狀態(tài)由 FIN_WAIT1 變?yōu)?FIN_WAIT2,主動方的發(fā)送通道就關(guān)閉了。再來看被動方的發(fā)送通道是如何關(guān)閉的。當被動方進入 CLOSE_WAIT 狀態(tài)時,進程的 read 函數(shù)會返回 0,這樣開發(fā)人員就會有針對性地調(diào)用 close 函數(shù),進而觸發(fā)內(nèi)核發(fā)送 FIN 報文,此時被動方連接的狀態(tài)變?yōu)?LAST_ACK。當主動方收到這個 FIN 報文時,內(nèi)核會自動回復(fù) ACK,同時連接的狀態(tài)由 FIN_WAIT2 變?yōu)?TIME_WAIT,Linux 系統(tǒng)下大約 1 分鐘后 TIME_WAIT 狀態(tài)的連接才會徹底關(guān)閉。而被動方收到 ACK 報文后,連接就會關(guān)閉。

主動方的優(yōu)化

等待ACK,F(xiàn)IN包的重發(fā)次數(shù)

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

net.ipv4.tcp_orphan_retries = 0

孤兒連接的數(shù)量

net.ipv4.tcp_max_orphans = 16384

相關(guān)介紹

tcp_max_orphans 定義了孤兒連接的最大數(shù)量。當進程調(diào)用 close 函數(shù)關(guān)閉連接后,該連接是在 FIN_WAIT1 狀態(tài),這個連接都與該進程無關(guān)了,它變成了孤兒連接。Linux 系統(tǒng)為防止孤兒連接過多,導(dǎo)致系統(tǒng)資源長期被占用,就提供了 tcp_max_orphans 參數(shù)。如果孤兒連接數(shù)量大于它,新增的孤兒連接將不再走四次揮手,而是直接發(fā)送 RST 復(fù)位報文強制關(guān)閉。

孤兒連接的定義:由進程調(diào)用close關(guān)閉的連接稱為孤兒連接,另外shutdown 函數(shù)也可以關(guān)閉連接,這二者都會向?qū)Ψ桨l(fā)送 FIN 報文(shutdown 參數(shù)須傳入 SHUT_WR 或者 SHUT_RDWR 才會發(fā)送 FIN),區(qū)別在于 close 調(diào)用后,哪怕對方在半關(guān)閉狀態(tài)下發(fā)送的數(shù)據(jù)到達主動方,進程也無法接收。如果你用 netstat -p 命令,會發(fā)現(xiàn)連接對應(yīng)的進程名為空(與進程無關(guān)?。?。而 shutdown 函數(shù)調(diào)用后,即使連接進入了 FIN_WAIT1 或者 FIN_WAIT2 狀態(tài),它也不是孤兒連接,進程仍然可以繼續(xù)接收數(shù)據(jù)。

等待FIN的時間

net.ipv4.tcp_fin_timeout = 60

相關(guān)介紹

當連接收到 ACK 進入 FIN_WAIT2 狀態(tài)后,就表示主動方的發(fā)送通道已經(jīng)關(guān)閉,接下來將等待對方發(fā)送 FIN 報文,關(guān)閉對方的發(fā)送通道。這時,如果連接是用 shutdown 函數(shù)關(guān)閉的,連接可以一直處于 FIN_WAIT2 狀態(tài)。但對于 close 函數(shù)關(guān)閉的孤兒連接,這個狀態(tài)不可以持續(xù)太久,而 tcp_fin_timeout 控制了這個狀態(tài)下連接的持續(xù)時長。

TIME_WAIT相關(guān)參數(shù)

相關(guān)介紹

TIME_WAIT 是主動方四次揮手的最后一個狀態(tài)。當收到被動方發(fā)來的 FIN 報文時,主動方回復(fù) ACK,表示確認對方的發(fā)送通道已經(jīng)關(guān)閉,連接隨之進入 TIME_WAIT 狀態(tài),等待 60 秒后關(guān)閉。

TIME_WAIT狀態(tài)最大連接數(shù)

當 TIME_WAIT 的連接數(shù)量超過該參數(shù)時,新關(guān)閉的連接就不再經(jīng)歷 TIME_WAIT 而直接關(guān)閉。

net.ipv4.tcp_max_tw_buckets = 5000

是否復(fù)用TIME_WAIT狀態(tài)的端口

復(fù)用 TIME_WAIT 狀態(tài)的端口,如果服務(wù)器會主動向上游服務(wù)器發(fā)起連接的話,就可以把 tcp_tw_reuse 參數(shù)設(shè)置為 1,它允許作為客戶端的新連接,在安全條件下使用 TIME_WAIT 狀態(tài)下的端口。

net.ipv4.tcp_tw_reuse = 1

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

net.ipv4.tcp_timestamps = 1

老版本的 Linux 還提供了 tcp_tw_recycle 參數(shù),它并不要求 TIME_WAIT 狀態(tài)存在 60 秒,很容易導(dǎo)致數(shù)據(jù)錯亂,不建議設(shè)置為 1。

net.ipv4.tcp_tw_recycle = 0

所以在 Linux 4.12 版本后,直接取消了這一參數(shù)。

其他配置

允許系統(tǒng)打開的端口范圍

sysctl -w net.ipv4.ip_local_port_range=1024 65000

系統(tǒng)全局允許分配的最大文件句柄數(shù)

sysctl -w fs.file-max=2097152

sysctl -w fs.nr_open=2097152

echo 2097152 > /proc/sys/fs/nr_open

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

ulimit -n 1048576

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Dell PowerEdge服務(wù)器工具下載集合

    Dell PowerEdge服務(wù)器工具下載集合

    這篇文章主要介紹了Dell PowerEdge服務(wù)器工具下載集合 ,需要的朋友可以參考下
    2016-04-04
  • 基于epoll實現(xiàn) Reactor服務(wù)器的詳細過程

    基于epoll實現(xiàn) Reactor服務(wù)器的詳細過程

    在我們調(diào)用epoll_create的時候會創(chuàng)建出epoll模型,這個模型也是利用文件描述類似文件系統(tǒng)的方式控制該結(jié)構(gòu),這篇文章主要介紹了基于epoll實現(xiàn) Reactor服務(wù)器的詳細過程,需要的朋友可以參考下
    2023-12-12
  • 使用寶塔面板如何查看網(wǎng)站日志分析搜索引擎蜘蛛數(shù)據(jù)

    使用寶塔面板如何查看網(wǎng)站日志分析搜索引擎蜘蛛數(shù)據(jù)

    網(wǎng)站日志(確切的講應(yīng)該是服務(wù)器日志)是記錄WEB服務(wù)器接收處理請求以及運行錯誤等各種原始信息的文件。通過查看網(wǎng)站日志分析數(shù)據(jù)我們可以獲得很有有用的數(shù)據(jù),例如蜘蛛訪問、是否被惡意訪問、網(wǎng)站訪客來源等等
    2023-04-04
  • dell 服務(wù)器開機總是提示按F1才能進入系統(tǒng)解決方法

    dell 服務(wù)器開機總是提示按F1才能進入系統(tǒng)解決方法

    這篇文章主要介紹了dell 服務(wù)器開機總是提示按F1才能進系統(tǒng)解決方法,不過提示上面一般都會有具體的提示信息,這里簡單分享一下,需要的朋友可以參考下
    2016-04-04
  • 詳解百度https認證提示"請將您的http站點301重定向到https站點"的解決辦法

    詳解百度https認證提示"請將您的http站點301重定向到https站點"的解決辦法

    對于301重定向這一概念玩SEO的同志們都不陌生了,近些年來https協(xié)議越來越火,百度大大已經(jīng)明確了對https的扶持政策,這篇文章主要介紹了詳解百度https認證提示"請將您的http站點301重定向到https站點"的解決辦法,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Chat2DB?Web版?服務(wù)器端安裝部署啟動步驟

    Chat2DB?Web版?服務(wù)器端安裝部署啟動步驟

    Chat2DB是款數(shù)據(jù)庫連接工具,主要就是使用JDBC做數(shù)據(jù)庫連接,外加多對接了幾個聊天AI網(wǎng)站,把數(shù)據(jù)庫和AI做了個集成,比使用傳統(tǒng)工具Navicat,再另外去AI查方便一點,這篇文章主要介紹了Chat2DB?Web版?服務(wù)器端安裝部署啟動流程,需要的朋友可以參考下
    2023-11-11
  • Dell R730服務(wù)器6i陣列卡Raid5配置方法(熱備)

    Dell R730服務(wù)器6i陣列卡Raid5配置方法(熱備)

    這篇文章主要介紹了Dell R730服務(wù)器6i陣列卡Raid5配置方法,需要的朋友可以參考下
    2018-05-05
  • 一文了解什么是CDN及實現(xiàn)原理

    一文了解什么是CDN及實現(xiàn)原理

    這篇文章主要為大家介紹了什么是CDN及實現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • TeamCenter12登陸報404/503問題解決方案

    TeamCenter12登陸報404/503問題解決方案

    這篇文章主要介紹了TeamCenter12登陸報404/503問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • 妙用.htaccess隱藏網(wǎng)頁文件擴展名

    妙用.htaccess隱藏網(wǎng)頁文件擴展名

    我總固執(zhí)地認為網(wǎng)頁鏈接后拖著一個.php讓人看著心煩,一心想要找到辦法把它給去掉。雖然網(wǎng)上有對WordPress、Discuz等系統(tǒng)關(guān)于這方面的介紹,但是對于自己設(shè)計的網(wǎng)站就不太好使了
    2013-12-12

最新評論