【转】tcp链接的状态
生活随笔
收集整理的這篇文章主要介紹了
【转】tcp链接的状态
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
tcp鏈接的幾種狀態
博客分類:- C語言&Linux@嵌入式開發
?
說明: 通常情況下:一個正常的TCP連接,都會有三個階段:1、TCP三次握手;2、數據傳送;3、TCP四次揮手
里面的幾個概念:
- SYN: (同步序列編號,Synchronize Sequence Numbers)
- ACK: (確認編號,Acknowledgement Number)
- FIN: (結束標志,FINish)
TCP三次握手(創建 OPEN)
數據通訊
TCP四次握手(關閉 finish)
詳細的狀態說明(以及linux相關參數調整)
- 客戶端嘗試鏈接服務端,通過open方法。也就是TCP三次握手中的第1步之后,注意是客戶端狀態
- sysctl -w net.ipv4.tcp_syn_retries = 2 ,做為客戶端可以設置SYN包的重試次數,默認5次(大約180s)引用校長的話:僅僅重試2次,現代網絡夠了
- 服務接受創建請求的SYN后,也就是TCP三次握手中的第2步,發送ACK數據包之前
- 注意是服務端狀態,一般15個左右正常,如果很大,懷疑遭受SYN_FLOOD攻擊
- sysctl -w net.ipv4.tcp_max_syn_backlog=4096 , 設置該狀態的等待隊列數,默認1024,調大后可適當防止syn-flood,可參見man 7 tcp
- sysctl -w net.ipv4.tcp_syncookies=1 , 打開syncookie,在syn backlog隊列不足的時候,提供一種機制臨時將syn鏈接換出
- sysctl -w net.ipv4.tcp_synack_retries = 2 ,做為服務端返回ACK包的重試次數,默認5次(大約180s)引用校長的話:僅僅重試2次,現代網絡夠了
- 客戶端接受到服務端的ACK包后的狀態,服務端在發出ACK在一定時間后即為ESTABLISHED
- sysctl -w net.ipv4.tcp_keepalive_time = 1200 ,默認為7200秒(2小時),系統針對空閑鏈接會進行心跳檢查,如果超過net.ipv4.tcp_keepalive_probes * net.ipv4.tcp_keepalive_intvl = 默認11分,終止對應的tcp鏈接,可適當調整心跳檢查頻率
- 目前線上的監控 waring:600 , critial : 800
- 主動關閉的一方,在發出FIN請求之后,也就是在TCP四次握手的第1步
- 被動關閉的一方,在接受到客戶端的FIN后,也就是在TCP四次握手的第2步
- 主動關閉的一方,在接受到被動關閉一方的ACK后,也就是TCP四次握手的第2步
- sysctl -w net.ipv4.tcp_fin_timeout=30, 可以設定被動關閉方返回FIN后的超時時間,有效回收鏈接,避免syn-flood.
- 被動關閉的一方,在發送ACK后一段時間后(確保客戶端已收到),再發起一個FIN請求。也就是TCP四次握手的第3步
- 主動關閉的一方,在收到被動關閉的FIN包后,發送ACK。也就是TCP四次握手的第4步
- sysctl -w net.ipv4.tcp_tw_recycle = 1 , 打開快速回收TIME_WAIT,Enabling this option is not recommended since this causes problems when working with NAT (Network Address Translation)
- sysctl -w net.ipv4.tcp_tw_reuse =1, 快速回收并重用TIME_WAIT的鏈接,?貌似和tw_recycle有沖突,不能重用就回收?
- net.ipv4.tcp_max_tw_buckets: 處于time_wait狀態的最多鏈接數,默認為180000.
?
相關說明 |
?
分享到:轉載于:https://www.cnblogs.com/xiaoying1245970347/p/5334994.html
總結
以上是生活随笔為你收集整理的【转】tcp链接的状态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【BOOM】一款有趣的Javascrip
- 下一篇: mysql TableMap id递增问