日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux上的TIME_WAIT和tcp_fin_timeout

發布時間:2024/1/17 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux上的TIME_WAIT和tcp_fin_timeout 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
當Linux服務器的TIME_WAIT過多時,
通常會想到去修改參數降低TIME_WAIT時長,
以減少TIME_WAIT數量,但Linux并沒有提供這樣的接口,
除非重新編譯內核。

Linux默認的TIME_WAIT時長一般是60秒,
定義在內核的include/net/tcp.h文件中:
#define TCP_TIMEWAIT_LEN (60*HZ)
/* how long to wait to destroy TIME-WAIT state,
?* about 60 seconds
?*/
#define TCP_FIN_TIMEOUT TCP_TIMEWAIT_LEN
/* BSD style FIN_WAIT2 deadlock breaker.
?* It used to be 3min, new value is 60sec,
?* to combine FIN-WAIT-2 timeout with
?* TIME-WAIT timer.
?*/

注意tcp_fin_timeout不是TIME_WAIT時間:
# cat /proc/sys/net/ipv4/tcp_fin_timeout
60
tcp_fin_timeout實為FIN_WAIT_2狀態的時長,
Linux沒有提供修改TIME_WAIT時長接口,除非修改宏的定義重新編譯內核。
但Windows可以修改注冊表中的TcpTimedWaitDelay值來控制TIME_WAIT時長。

RTO:超時重傳(Retransmission Timeout)

TIME_WAIT是一個常見經常的問題,相關內容(/etc/sysctl.conf或/proc/sys/net/ipv4):
1) net.ipv4.tcp_timestamps
? ?為1表示開啟TCP時間戳,用來計算往返時間RTT(Round-Trip Time)和防止序列號回繞
2) net.ipv4.tcp_tw_reuse
? ?為1表示允許將TIME-WAIT的句柄重新用于新的TCP連接
3) net.ipv4.tcp_tw_recycle
? ?為1表示開啟TCP連接中TIME-WAIT的快速回收,NAT環境可能導致DROP掉SYN包(回復RST)
4) net.ipv4.tcp_fin_timeout
? ?FIN_WAIT_2狀態的超時時長
5) net.ipv4.tcp_syncookies
? ?為1時SYN Cookies,當SYN等待隊列溢出時啟用cookies來處理,可防范少量SYN攻擊
6) net.ipv4.tcp_max_tw_buckets
? ?保持TIME_WAIT套接字的最大個數,超過這個數字TIME_WAIT套接字將立刻被清除并打印警告信息
7) net.ipv4.ip_local_port_range
8) net.ipv4.tcp_max_syn_backlog
? ?端口最大backlog內核限制,防止占用過大內核內存
9) net.ipv4.tcp_syn_retries
? ?對一個新建連接,內核要發送多少個SYN連接請求才決定放棄,不應該大于255
10) net.ipv4.tcp_retries1
? ?放棄回應一個TCP連接請求前﹐需要進行多少次重試,RFC規定最低的數值是3,這也是默認值
11) net.ipv4.tcp_retries2
? ?在丟棄激活(已建立通訊狀況)的TCP連接之前﹐需要進行多少次重試,默認值為15
12) net.ipv4.tcp_synack_retries
? ?TCP三次握手的SYN/ACK階段重試次數,缺省5

13) net.ipv4.tcp_max_orphans
? ?不屬于任何進程(已經從進程上下文中刪除)的sockets最大個數,超過這個值會被立即RESET,并同時顯示警告信息
14) net.ipv4.tcp_orphan_retries
? ?孤兒sockets廢棄前重試的次數,缺省值是7
15) net.ipv4.tcp_mem
? ?內核分配給TCP連接的內存,單位是page:
? ?第一個數字表示TCP使用的page少于此值時,內核不進行任何處理(干預),
? ?第二個數字表示TCP使用的page超過此值時,內核進入“memory pressure”壓力模式,
? ?第三個數字表示TCP使用的page超過些值時,報“Out of socket memory”錯誤,TCP 連接將被拒絕
16) net.ipv4.tcp_rmem
? ?為每個TCP連接分配的讀緩沖區內存大小,單位是byte
17) net.ipv4.tcp_wmem
? ?為每個TCP連接分配的寫緩沖區內存大小,單位是byte:
? ?第一個數字表示,為TCP連接分配的最小內存,
? ?第二個數字表示,為TCP連接分配的缺省內存,
? ?第三個數字表示,為TCP連接分配的最大內存(net.core.wmem_max可覆蓋該值)
18) net.ipv4.tcp_keepalive_time
? ?當keepalive起用的時候,TCP發送keepalive消息的頻度,單位為秒,缺省是7200秒(即2小時)
19) net.ipv4.tcp_keepalive_intvl
? ?keepalive探測包的發送間隔? ??
20) net.ipv4.tcp_keepalive_probes
? ?如果對方不予應答,探測包的發送次數

代碼中可通過SO_LINGER來控制。

總結

以上是生活随笔為你收集整理的Linux上的TIME_WAIT和tcp_fin_timeout的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。