精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

為什么建鏈接要3次握手,斷鏈接需要4次揮手?

Linux愛好者 ? 來源:Jack ? 作者:Linux愛好者 ? 2020-11-12 15:36 ? 次閱讀

首先處理這個問題,我們要知道一些網絡知識,要知道tcp那些事,比如說三次握手,和四次揮手......很多人會問,為什么建鏈接要3次握手,斷鏈接需要4次揮手?讓我們一起看下下面的流程圖:

首先,是三次握手:

首先Client端發送連接請求報文,Server段接受連接后回復ACK報文,并為這次連接分配資源。Client端接收到ACK報文后也向Server段發生ACK報文,并分配資源,這樣TCP連接就建立了。

然后是中間部分:兩者之間可以傳輸數據了

再次,下面的斷開鏈接:【注意】中斷連接端可以是Client端,也可以是Server端。

假設Client端發起中斷連接請求,也就是發送FIN報文。Server端接到FIN報文后,意思是說"我Client端沒有數據要發給你了",但是如果你還有數據沒有發送完成,則不必急著關閉Socket,可以繼續發送數據。

所以你先發送ACK,"告訴Client端,你的請求我收到了,但是我還沒準備好,請繼續你等我的消息"。這個時候Client端就進入FIN_WAIT狀態,繼續等待Server端的FIN報文。當Server端確定數據已發送完成,則向Client端發送FIN報文,"告訴Client端,好了,我這邊數據發完了,準備好關閉連接了"。

Client端收到FIN報文后,"就知道可以關閉連接了,但是他還是不相信網絡,怕Server端不知道要關閉,所以發送ACK后進入TIME_WAIT狀態,如果Server端沒有收到ACK則可以重傳?!?,Server端收到ACK后,"就知道可以斷開連接了"。Client端等待了2MSL后依然沒有收到回復,則證明Server端已正常關閉,那好,我Client端也可以關閉連接了。Ok,TCP連接就這樣關閉了!

那么可以這么理解,當client進入time_wait的等待時間是2個MSL

讓我們看一下一臺linux服務器的網絡狀態:

# netstat -an | awk '/^tcp/ {++State[$NF]}END{for(key in State)print key " " State[key]}'LAST_ACK 7LISTEN 9SYN_RECV 2CLOSE_WAIT 125ESTABLISHED 1070FIN_WAIT1 17FIN_WAIT2 247CLOSING 4TIME_WAIT 25087

對于網站來說,這樣的time_wait略顯偏高, 也就是說大量的關閉操作在等待2個MSL后結束,正常我們的tcp 端口是65535個,如果并發再高一些,可能會大量的socket不能及時被釋放,從而導致性能下降,所以我們可以通過linux內核進行一些網絡調整比如,開啟socket重用和快速回收:

net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_max_tw_buckets = 5000net.ipv4.tcp_max_syn_backlog = 8192net.ipv4.tcp_keepalive_time = 1200net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.tcp_syncookies = 1

表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關閉;

net.ipv4.tcp_tw_reuse = 1

表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認為0,表示關閉;

net.ipv4.tcp_tw_recycle = 1

表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。

系統tcp_timestamps缺省就是開啟的,所以當tcp_tw_recycle被開啟后,實際上這種行為就被激活了.如果服務器身處NAT環境,安全起見,通常要禁止tcp_tw_recycle,至于TIME_WAIT連接過多的問題,可以通過激活tcp_tw_reuse來緩解。

net.ipv4.tcp_max_tw_buckets = 5000

表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除并打印警告信息。默認為180000,改為 5000。對于Apache、Nginx等服務器,上幾行的參數可以很好地減少TIME_WAIT套接字數量,但是對于Squid,效果卻不大。此項參數可以控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。

net.ipv4.tcp_max_syn_backlog = 8192

表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網絡連接數。

net.ipv4.tcp_keepalive_time = 1200

表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改為20分鐘。

net.ipv4.ip_local_port_range = 1024-65000

表示用于向外連接的端口范圍。缺省情況下很?。?2768到61000,改為1024到65000。

# netstat -an | awk '/^tcp/ {++State[$NF]}END{for(key in State)print key " " State[key]}' LAST_ACK140 LISTEN9 SYN_RECV7 CLOSE_WAIT2 ESTABLISHED972 FIN_WAIT121 FIN_WAIT2152 CLOSING2 TIME_WAIT682

責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11230

    瀏覽量

    208933
  • 服務器
    +關注

    關注

    12

    文章

    9024

    瀏覽量

    85186
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1351

    瀏覽量

    78989

原文標題:Linux TCP 狀態 TIME_WAIT 過多的處理

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    KeyStone I和IlDevices上的SERDES鏈接調試

    電子發燒友網站提供《KeyStone I和IlDevices上的SERDES鏈接調試.pdf》資料免費下載
    發表于 10-11 10:05 ?0次下載
    KeyStone I和IlDevices上的SERDES<b class='flag-5'>鏈接</b>調試

    先進的鏈接器技術,方便高效地使用內存

    電子發燒友網站提供《先進的鏈接器技術,方便高效地使用內存.pdf》資料免費下載
    發表于 09-06 15:02 ?0次下載
    先進的<b class='flag-5'>鏈接</b>器技術,方便高效地使用內存

    嵌入式學習-靜態鏈接和動態鏈接

    一、靜態鏈接靜態鏈接通過靜態庫進行鏈接,生成的目標程序中包含運行需要的所有庫,可以直接運行,不過就是文件比較大。靜態庫是匯編產生的.o文件的集合,一般以.a文件形式出現。gcc在使用靜
    發表于 08-28 09:33

    靜態鏈接和動態鏈接

    一、靜態鏈接靜態鏈接通過靜態庫進行鏈接,生成的目標程序中包含運行需要的所有庫,可以直接運行,不過就是文件比較大。靜態庫是匯編產生的.o文件的集合,一般以.a文件形式出現。gcc在使用靜
    發表于 08-27 10:20

    簡述TCP協議的三握手機制

    TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它主要用于在IP網絡中進行數據傳輸。TCP協議的三握手
    的頭像 發表于 08-16 10:57 ?669次閱讀

    TSER953 4.16Gbps V3鏈接串行器數據表

    電子發燒友網站提供《TSER953 4.16Gbps V3鏈接串行器數據表.pdf》資料免費下載
    發表于 07-02 09:25 ?9次下載
    TSER953 4.16Gbps V<b class='flag-5'>3</b><b class='flag-5'>鏈接</b>串行器數據表

    e2 studio中鏈接腳本的修改指導

    一般而言,程序編譯經歷下圖四個階段,鏈接是編譯的最后一步,無論是在PC上編譯代碼,還是在PC上使用嵌入式gcc工具交叉編譯嵌入式代碼,編譯過程都是如下幾步。深入理解鏈接過程是嵌入式工程師必要掌握的能力!
    的頭像 發表于 06-13 10:49 ?418次閱讀
    e2 studio中<b class='flag-5'>鏈接</b>腳本的修改指導

    鏈接與硬鏈接的區別

    鏈接又叫符號鏈接,和原文件不是一個文件,類似Windows的快捷方式,如果原始文件被刪除,所有指向它的符號鏈接也就都被破壞了
    的頭像 發表于 04-19 10:09 ?1125次閱讀
    軟<b class='flag-5'>鏈接</b>與硬<b class='flag-5'>鏈接</b>的區別

    STM32+LWIP通信12無法再次通信怎么解決?

    嘗試移植LWIP+FREERTOS的時候出現了如下問題,請各位大佬幫忙看看是哪里的問題,我用了FreeRTOS+LWIP做ModbusTCP時出現了鏈接出現通信12然后通信中斷,并且再也沒法
    發表于 04-12 07:42

    說說TCP三握手的過程?為什么是三而不是兩、四?

    說說TCP三握手的過程?為什么是三而不是兩、四? TCP三
    的頭像 發表于 02-04 11:03 ?621次閱讀

    TCP協議連接的三握手

    通過三握手,客戶端與服務端能夠確保彼此的網絡連接是可用的??蛻舳税l起的SYN報文和服務端返回的SYN+ACK報文都包含了對方的初始序列號和通信能力信息,通過互相確認這些信息,雙方確認彼此的能力和正確性。
    的頭像 發表于 02-03 16:44 ?1307次閱讀
    TCP協議連接的三<b class='flag-5'>次</b><b class='flag-5'>握手</b>

    NUC980新做的板子使用USB0啟動,計算機鏈接不上是怎么回事?

    做了3板子,都是4層板。打算用USB燒寫程序,鏈接計算機時,每次報 “設備描述符請求失敗”的錯誤。最后一把USB0 連接到一個1.25間
    發表于 01-17 07:47

    淺談TCP三握手和四揮手

    在計算機網絡的基本概念中,分層次的體系結構是最基本的。計算機網絡體系結構的抽象概念較多,在學習時多思考。這些概念對后面的學習很有幫助。
    的頭像 發表于 01-03 13:40 ?709次閱讀
    淺談TCP三<b class='flag-5'>次</b><b class='flag-5'>握手</b>和四<b class='flag-5'>次</b><b class='flag-5'>揮手</b>

    TCP四揮手過程分析

    TCP 連接是全雙工的,雙方可以同時發送和接收數據。第一客戶端發送 FIN 報文后只表示它不再發送數據,但還是能接受數據。服務端接收到 FIN 報文,回一個 ACK 應答報文,這次服務端可以還有數據需要處理和發送,等它處理完成
    的頭像 發表于 12-10 15:40 ?2839次閱讀
    TCP四<b class='flag-5'>次</b><b class='flag-5'>揮手</b>過程分析

    u-boot armv8鏈接腳本

    u-boot armv8鏈接腳本 在進行源碼分析之前,首先看看u-boot的鏈接腳本,通過鏈接腳本可以從整體了解一個u-boot的組成,并且可以在啟動分析中知道某些邏輯是在完成什么工作。 在
    的頭像 發表于 12-07 11:19 ?611次閱讀