精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux中TCP三次握手與四次揮手介紹及調優

系統 Linux
TCP是一種面向連接的單播協議,在發送數據前,通信雙方必須在彼此間建立一條連接。所謂的“連接”,其實是客戶端和服務器的內存里保存的一份關于對方的信息,如ip地址、端口號等。

[[415215]]

TCP介紹

TCP是一種面向連接的單播協議,在發送數據前,通信雙方必須在彼此間建立一條連接。所謂的“連接”,其實是客戶端和服務器的內存里保存的一份關于對方的信息,如ip地址、端口號等。

TCP可以看成是一種字節流,它會處理IP層或以下的層的丟包、重復以及錯誤問題。在連接的建立過程中,雙方需要交換一些連接的參數。這些參數可以放在TCP頭部。

TCP提供了一種可靠、面向連接、字節流、傳輸層的服務,采用三次握手建立一個連接。采用4次揮手來關閉一個連接。

TCP三次握手

客戶端和服務端通信前要進行連接,“3次握手”的作用就是雙方都能明確自己和對方的收、發能力是正常的。

  • 第一次握手:客戶端發送網絡包,服務端收到了。這樣服務端就能得出結論:客戶端的發送能力、服務端的接收能力是正常的。
  • 第二次握手:服務端發包,客戶端收到了。這樣客戶端就能得出結論:服務端的接收、發送能力,客戶端的接收、發送能力是正常的。從客戶端的視角來看,我接到了服務端發送過來的響應數據包,說明服務端接收到了我在第一次握手時發送的網絡包,并且成功發送了響應數據包,這就說明,服務端的接收、發送能力正常。而另一方面,我收到了服務端的響應數據包,說明我第一次發送的網絡包成功到達服務端,這樣,我自己的發送和接收能力也是正常的。
  • 第三次握手:客戶端發包,服務端收到了。這樣服務端就能得出結論:客戶端的接收、發送能力,服務端的發送、接收能力是正常的。第一、二次握手后,服務端并不知道客戶端的接收能力以及自己的發送能力是否正常。而在第三次握手時,服務端收到了客戶端對第二次握手作的回應。從服務端的角度,我在第二次握手時的響應數據發送出去了,客戶端接收到了。所以,我的發送能力是正常的。而客戶端的接收能力也是正常的。

經歷了上面的三次握手過程,客戶端和服務端都確認了自己的接收、發送能力是正常的。之后就可以正常通信了。

TCP三次握手中的狀態

在 TCP 三次握手的時候,Linux 內核會維護兩個隊列,分別是:

  • 半連接隊列,也稱 SYN 隊列;
  • 全連接隊列,也稱 accepet 隊列;

服務端收到客戶端發起的 SYN 請求后,內核會把該連接存儲到半連接隊列,并向客戶端響應 SYN+ACK,接著客戶端會返回 ACK,服務端收到第三次握手的 ACK 后,內核會把連接從半連接隊列移除,然后創建新的完全的連接,并將其添加到 accept 隊列,等待進程調用 accept 函數時把連接取出來。

不管是半連接隊列還是全連接隊列,都有最大長度限制,超過限制時,內核會直接丟棄,或返回 RST 包。

半連接

很遺憾,我們沒有命令可以查看系統的半連接隊列數量。但是我們可以抓住 TCP 半連接的特點,就是服務端處于 SYN_RECV 狀態的 TCP 連接,就是 TCP 半連接隊列。使用如下命令計算當前 TCP 半連接隊列長度:

  1. $ netstat |grep SYN_RECV |wc -l 
  2. 1723 

SYN_RECV 狀態下,服務器必須建立一個 SYN 半連接隊列來維護未完成的握手信息,當這個隊列溢出后,服務器將無法再建立新連接。

如何模擬 TCP 半連接隊列溢出場景?

模擬 TCP 半連接溢出場景不難,實際上就是對服務端一直發送 TCP SYN 包,但是不回第三次握手 ACK,這樣就會使得服務端有大量的處于 SYN_RECV 狀態的 TCP 連接。這其實也就是所謂的 SYN 洪泛、SYN 攻擊、DDos 攻擊。

圖片

實驗環境:

  • 客戶端和服務端都是 CentOS Linux release 7.9.2009 (Core) ,Linux 內核版本 3.10.0-1160.15.2.el7.x86_64
  • 服務端 IP 172.16.0.20,客戶端 IP 172.16.0.157
  • 服務端是 Nginx 服務,端口為 80

本次實驗使用 hping3 工具模擬 SYN 攻擊:

  1. $ hping3 -S -p 80 --flood 172.16.0.20 
  2. HPING 172.16.0.20 (eth0 172.16.0.20): S set, 40 headers + 0 data bytes 
  3. hping in flood mode, no replies will be shown 

新連接建立失敗的原因有很多,怎樣獲得由于隊列已滿而引發的失敗次數呢?netstat -s 命令給出的統計結果中可以得到。

  1. $ netstat -s|grep "SYNs to LISTEN" 
  2.     1541918 SYNs to LISTEN sockets dropped 

這里給出的是隊列溢出導致 SYN 被丟棄的個數。注意這是一個累計值,如果數值在持續增加,則應該調大 SYN 半連接隊列。修改隊列大小的方法,是設置 Linux 的 tcp_max_syn_backlog 參數:

  1. sysctl -w net.ipv4.tcp_max_syn_backlog = 1024 

如果 SYN 半連接隊列已滿,只能丟棄連接嗎?并不是這樣,開啟 syncookies 功能就可以在不使用 SYN 隊列的情況下成功建立連接。syncookies 是這么做的:服務器根據當前狀態計算出一個值,放在己方發出的 SYN+ACK 報文中發出,當客戶端返回 ACK 報文時,取出該值驗證,如果合法,就認為連接建立成功,如下圖所示。

Linux 下怎樣開啟 syncookies 功能呢?修改 tcp_syncookies 參數即可,其中值為 0 時表示關閉該功能,2 表示無條件開啟功能,而 1 則表示僅當 SYN 半連接隊列放不下時,再啟用它。由于 syncookie 僅用于應對 SYN 泛洪攻擊(攻擊者惡意構造大量的 SYN 報文發送給服務器,造成 SYN 半連接隊列溢出,導致正??蛻舳说倪B接無法建立),這種方式建立的連接,許多 TCP 特性都無法使用。所以,應當把 tcp_syncookies 設置為 1,僅在隊列滿時再啟用。

  1. sysctl -w net.ipv4.tcp_syncookies = 1 

全連接

在服務端可以使用 ss 命令,來查看 TCP 全連接隊列的情況:但需要注意的是 ss 命令獲取的 Recv-Q/Send-Q 在「LISTEN 狀態」和「非 LISTEN 狀態」所表達的含義是不同的。從下面的內核代碼可以看出區別:

  1. static void tcp_diag_get_info(struct sock *sk, struct inet_diag_msg *r, 
  2.          void *_info) 
  3.  const struct tcp_sock *tp = tcp_sk(sk); 
  4.  struct tcp_info *info = _info; 
  5.  
  6.  if (sk->sk_state == TCP_LISTEN) { 
  7.   r->idiag_rqueue = sk->sk_ack_backlog; 
  8.   r->idiag_wqueue = sk->sk_max_ack_backlog; 
  9.  } else { 
  10.   r->idiag_rqueue = tp->rcv_nxt - tp->copied_seq; 
  11.   r->idiag_wqueue = tp->write_seq - tp->snd_una; 
  12.  } 
  13.  if (info != NULL
  14.   tcp_get_info(sk, info); 

在「LISTEN 狀態」時,Recv-Q/Send-Q 表示的含義如下:

  1. $ ss -ltnp 
  2. LISTEN     0      1024         *:8081                     *:*                   users:(("java",pid=5686,fd=310)) 
  • Recv-Q:當前全連接隊列的大小,也就是當前已完成三次握手并等待服務端 accept() 的 TCP 連接;
  • Send-Q:當前全連接最大隊列長度,上面的輸出結果說明監聽 8088 端口的 TCP 服務,最大全連接長度為 1024;

在「非 LISTEN 狀態」時,Recv-Q/Send-Q 表示的含義如下:

  1. $ ss -tnp 
  2. ESTAB      0      0      172.16.0.20:57672              172.16.0.20:2181                users:(("java",pid=5686,fd=292)) 
  • Recv-Q:已收到但未被應用進程讀取的字節數;
  • Send-Q:已發送但未收到確認的字節數;

如何模擬 TCP 全連接隊列溢出的場景?

實驗環境:

  • 客戶端和服務端都是 CentOS Linux release 7.9.2009 (Core) ,Linux 內核版本 3.10.0-1160.15.2.el7.x86_64
  • 服務端 IP 172.16.0.20,客戶端 IP 172.16.0.157
  • 服務端是 Nginx 服務,端口為 80

ab是apache bench命令的縮寫。ab是apache自帶的壓力測試工具。ab非常實用,它不僅可以對apache服務器進行網站訪問壓力測試,也可以對或其它類型的服務器進行壓力測試。比如nginx、tomcat、IIS等。ab的原理:ab命令會創建多個并發訪問線程,模擬多個訪問者同時對某一URL地址進行訪問。它的測試目標是基于URL的,因此,它既可以用來測試apache的負載壓力,也可以測試nginx、lighthttp、tomcat、IIS等其它Web服務器的壓力。ab命令對發出負載的計算機要求很低,它既不會占用很高CPU,也不會占用很多內存。但卻會給目標服務器造成巨大的負載,其原理類似CC攻擊。自己測試使用也需要注意,否則一次上太多的負載。可能造成目標服務器資源耗完,嚴重時甚至導致死機。

TCP 全連接隊列的最大值取決于 somaxconn 和 backlog 之間的最小值,也就是 min(somaxconn, backlog)。從下面的 Linux 內核代碼可以得知:

  1. int __sys_listen(int fd, int backlog) 
  2.  struct socket *sock; 
  3.  int err, fput_needed; 
  4.  int somaxconn; 
  5.  
  6.  sock = sockfd_lookup_light(fd, &err, &fput_needed); 
  7.  if (sock) { 
  8.   somaxconn = sock_net(sock->sk)->core.sysctl_somaxconn; 
  9.   if ((unsigned int)backlog > somaxconn) 
  10.    backlog = somaxconn; 
  11.  
  12.   err = security_socket_listen(sock, backlog); 
  13.   if (!err) 
  14.    err = sock->ops->listen(sock, backlog); 
  15.  
  16.   fput_light(sock->file, fput_needed); 
  17.  } 
  18.  return err; 
  • somaxconn 是 Linux 內核的參數,默認值是 128,可以通過 /proc/sys/net/core/somaxconn 來設置其值;我們設置為40000了。
  • backlog 是 listen(int sockfd, int backlog) 函數中的 backlog 大小,Nginx 默認值是 511,可以通過修改配置文件設置其長度;

所以測試環境的 TCP 全連接隊列最大值為 min(128, 511),也就是 511,可以執行 ss 命令查看:

  1. ss -tulnp|grep 80 
  2. tcp    LISTEN     0      511       *:80                    *:*                   users:(("nginx",pid=22913,fd=6),("nginx",pid=22912,fd=6),("nginx",pid=22911,fd=6))         
  3. tcp    LISTEN     0      511    [::]:80                 [::]:*                   users:(("nginx",pid=22913,fd=7),("nginx",pid=22912,fd=7),("nginx",pid=22911,fd=7)) 

客戶端執行 ab 命令對服務端發起壓力測試,并發 1 萬個連接,發送10萬個包:

  1. -n表示總的請求數為10000 
  2. -c表示并發請求數為1000 
  3. ab -c 10000 -n 100000 http://172.16.0.20:80/ 
  4. This is ApacheBench, Version 2.3 <$Revision: 1430300 $> 
  5. Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 
  6. Licensed to The Apache Software Foundation, http://www.apache.org/ 
  7.  
  8. Benchmarking 172.16.0.20 (be patient) 
  9. Completed 10000 requests 
  10. Completed 20000 requests 
  11. Completed 30000 requests 
  12. Completed 40000 requests 
  13. Completed 50000 requests 
  14. Completed 60000 requests 
  15. Completed 70000 requests 
  16. Completed 80000 requests 
  17. Completed 90000 requests 
  18. Completed 100000 requests 
  19. Finished 100000 requests 
  20.  
  21.  
  22. Server Software:        nginx/1.20.1 
  23. Server Hostname:       172.16.0.20 
  24. Server Port:            80 
  25.  
  26. Document Path:          / 
  27. Document Length:        4833 bytes 
  28.  
  29. Concurrency Level:      10000 
  30. Time taken for tests:   2.698 seconds 
  31. Complete requests:      100000 
  32. Failed requests:        167336 
  33.    (Connect: 0, Receive: 0, Length: 84384, Exceptions: 82952) 
  34. Write errors:           0 
  35. Total transferred:      86399264 bytes 
  36. HTML transferred:       82392984 bytes 
  37. Requests per second:    37069.19 [#/sec] (mean) 
  38. Time per request:       269.766 [ms] (mean) 
  39. Time per request:       0.027 [ms] (mean, across all concurrent requests) 
  40. Transfer rate:          31276.86 [Kbytes/sec] received 
  41.  
  42. Connection Times (ms) 
  43.               min  mean[+/-sd] median   max 
  44. Connect:        0  129 151.5    106    1144 
  45. Processing:    39  121  37.7    114     239 
  46. Waiting:        0   23  51.8      0     159 
  47. Total:        142  250 152.4    224    1346 
  48.  
  49. Percentage of the requests served within a certain time (ms) 
  50.   50%    224 
  51.   66%    227 
  52.   75%    232 
  53.   80%    236 
  54.   90%    283 
  55.   95%    299 
  56.   98%   1216 
  57.   99%   1228 
  58.  100%   1346 (longest request) 

其間共執行了兩次 ss 命令,從上面的輸出結果,可以發現當前 TCP 全連接隊列上升到了 512 大小,超過了最大 TCP 全連接隊列。

  1.  ss -tulnp|grep 80 
  2. tcp    LISTEN     411    511       *:80                    *:*                   users:(("nginx",pid=22913,fd=6),("nginx",pid=22912,fd=6),("nginx",pid=22911,fd=6)) 
  3. ss -tulnp|grep 80 
  4. tcp    LISTEN     512    511       *:80                    *:*                   users:(("nginx",pid=22913,fd=6),("nginx",pid=22912,fd=6),("nginx",pid=22911,fd=6)) 

當超過了 TCP 最大全連接隊列,服務端則會丟掉后續進來的 TCP 連接,丟掉的 TCP 連接的個數會被統計起來,我們可以使用 netstat -s 命令來查看:

  1. netstat -s|grep overflowed 
  2.    1233972 times the listen queue of a socket overflowed 

上面看到的 1233972 times ,表示全連接隊列溢出的次數,注意這個是累計值??梢愿魩酌腌妶绦邢?,如果這個數字一直在增加的話肯定全連接隊列滿了。

  1. netstat -s|grep overflowed 
  2.     1292022 times the listen queue of a socket overflowed 

從上面的模擬結果,可以得知,當服務端并發處理大量請求時,如果 TCP 全連接隊列過小,就容易溢出。發生 TCP 全連接隊列溢出的時候,后續的請求就會被丟棄,這樣就會出現服務端請求數量上不去的現象。

Linux 有個參數可以指定當 TCP 全連接隊列滿了會使用什么策略來回應客戶端

實際上,丟棄連接只是 Linux 的默認行為,我們還可以選擇向客戶端發送 RST 復位報文,告訴客戶端連接已經建立失敗。

  1. $ cat /proc/sys/net/ipv4/tcp_abort_on_overflow 

tcp_abort_on_overflow 共有兩個值分別是 0 和 1,其分別表示:

  • 0 :如果全連接隊列滿了,那么 server 扔掉 client 發過來的 ack ;
  • 1 :如果全連接隊列滿了,server 發送一個 reset 包給 client,表示廢掉這個握手過程和這個連接;

如果要想知道客戶端連接不上服務端,是不是服務端 TCP 全連接隊列滿的原因,那么可以把 tcp_abort_on_overflow 設置為 1,這時如果在客戶端異常中可以看到很多 connection reset by peer 的錯誤,那么就可以證明是由于服務端 TCP 全連接隊列溢出的問題。通常情況下,應當把 tcp_abort_on_overflow 設置為 0,因為這樣更有利于應對突發流量。所以,tcp_abort_on_overflow 設為 0 可以提高連接建立的成功率,只有你非常肯定 TCP 全連接隊列會長期溢出時,才能設置為 1 以盡快通知客戶端。

  1. sysctl -w net.ipv4.tcp_abort_on_overflow = 0 

如何增大 TCP 全連接隊列呢?

根據上面提到的TCP 全連接隊列的最大值取決于 somaxconn 和 backlog 之間的最小值,也就是 min(somaxconn, backlog)。我們現在調整somaxconn值:

  1. $ sysctl -w net.core.somaxconn=65535 

調整nginx配置:

  1. server { 
  2.     listen  80  backlog=65535; 
  3.     ... 

最后要重啟 Nginx 服務,因為只有重新調用 listen() 函數 TCP 全連接隊列才會重新初始化。服務端執行 ss 命令,查看 TCP 全連接隊列大小:

  1. $ ss -tulntp|grep 80 
  2. tcp    LISTEN     0       65535    *:80                    *:*                   users:(("nginx",pid=24212,fd=6),("nginx",pid=24211,fd=6),("nginx",pid=24210,fd=6)) 

從執行結果,可以發現 TCP 全連接最大值為 65535。

增大 TCP 全連接隊列后,繼續壓測

  1. ab -c 10000 -n 100000 http://172.16.0.20:80/ 
  2. This is ApacheBench, Version 2.3 <$Revision: 1430300 $> 
  3. Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 
  4. Licensed to The Apache Software Foundation, http://www.apache.org/ 
  5.  
  6. Benchmarking 172.16.0.20 (be patient) 
  7. Completed 10000 requests 
  8. Completed 20000 requests 
  9. Completed 30000 requests 
  10. Completed 40000 requests 
  11. Completed 50000 requests 
  12. Completed 60000 requests 
  13. Completed 70000 requests 
  14. Completed 80000 requests 
  15. Completed 90000 requests 
  16. Completed 100000 requests 
  17. Finished 100000 requests 
  18.  
  19.  
  20. Server Software:        nginx/1.20.1 
  21. Server Hostname:        172.16.0.20 
  22. Server Port:            80 
  23.  
  24. Document Path:          / 
  25. Document Length:        4833 bytes 
  26.  
  27. Concurrency Level:      10000 
  28. Time taken for tests:   2.844 seconds 
  29. Complete requests:      100000 
  30. Failed requests:        178364 
  31.    (Connect: 0, Receive: 0, Length: 89728, Exceptions: 88636) 
  32. Write errors:           0 
  33. Total transferred:      57592752 bytes 
  34. HTML transferred:       54922212 bytes 
  35. Requests per second:    35159.35 [#/sec] (mean) 
  36. Time per request:       284.419 [ms] (mean) 
  37. Time per request:       0.028 [ms] (mean, across all concurrent requests) 
  38. Transfer rate:          19774.64 [Kbytes/sec] received 
  39.  
  40. Connection Times (ms) 
  41.               min  mean[+/-sd] median   max 
  42. Connect:        0  130  18.3    130     172 
  43. Processing:    45  142  40.1    138     281 
  44. Waiting:        0   19  52.4      0     185 
  45. Total:        159  272  31.2    272     390 
  46.  
  47. Percentage of the requests served within a certain time (ms) 
  48.   50%    272 
  49.   66%    274 
  50.   75%    275 
  51.   80%    276 
  52.   90%    280 
  53.   95%    358 
  54.   98%    370 
  55.   99%    375 
  56.  100%    390 (longest request) 

服務端執行 ss 命令,查看 TCP 全連接隊列使用情況:

  1. $ ss -tulnp|grep 80 
  2. tcp    LISTEN     8      65535     *:80                    *:*                   users:(("nginx",pid=24212,fd=6),("nginx",pid=24211,fd=6),("nginx",pid=24210,fd=6)) 
  3. $ ss -tulnp|grep 80 
  4. tcp    LISTEN     352    65535     *:80                    *:*                   users:(("nginx",pid=24212,fd=6),("nginx",pid=24211,fd=6),("nginx",pid=24210,fd=6)) 
  5. $ ss -tulnp|grep 80 
  6. tcp    LISTEN     0      65535     *:80                    *:*                   users:(("nginx",pid=24212,fd=6),("nginx",pid=24211,fd=6),("nginx",pid=24210,fd=6)) 

從上面的執行結果,可以發現全連接隊列使用增長的很快,但是一直都沒有超過最大值,所以就不會溢出,那么 netstat -s 就不會有 TCP 全連接隊列溢出個數繼續增加:

  1. $ netstat -s|grep overflowed 
  2.     1540879 times the listen queue of a socket overflowed 
  3. $ netstat -s|grep overflowed 
  4.     1540879 times the listen queue of a socket overflowed 
  5. $ netstat -s|grep overflowed 
  6.     1540879 times the listen queue of a socket overflowed 
  7. $ netstat -s|grep overflowed 
  8.     1540879 times the listen queue of a socket overflowed 

說明 TCP 全連接隊列最大值從 512 增大到 65535 后,服務端抗住了 10 萬連接并發請求,也沒有發生全連接隊列溢出的現象了。如果持續不斷地有連接因為 TCP 全連接隊列溢出被丟棄,就應該調大 backlog 以及 somaxconn 參數。

TCP四次揮手

  • 第一次揮手:主動關閉方發送一個FIN,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方:我已經不會再給你發數據了(當然,在fin包之前發送出去的數據,如果沒有收到對應的ack確認報文,主動關閉方依然會重發這些數據),但此時主動關閉方還可以接受數據。
  • 第二次揮手:被動關閉方收到FIN包后,發送一個ACK給對方,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號)。
  • 第三次揮手:被動關閉方發送一個FIN,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,我的數據也發送完了,不會再給你發數據了。
  • 第四次揮手:主動關閉方收到FIN后,發送一個ACK給被動關閉方,確認序號為收到序號+1,至此,完成四次揮手。

互聯網中往往服務器才是主動關閉連接的一方。這是因為,HTTP 消息是單向傳輸協議,服務器接收完請求才能生成響應,發送完響應后就會立刻關閉 TCP 連接,這樣及時釋放了資源,能夠為更多的用戶服務。

四次揮手的狀態

我們來看斷開連接的時候的狀態時序圖:

其實四次揮手只涉及兩種報文: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 系統下等待的時間設為 2MSL,MSL 是 Maximum Segment Lifetime,報文最大生存時間,它是任何報文在網絡上存在的最長時間,超過這個時間報文將被丟棄。TIME_WAIT 狀態的連接才會徹底關閉。

當被動方收到 ACK 報文后,連接就會關閉。

主動方TIME_WAIT優化

大量處于 TIME_WAIT 狀態的連接,它們會占用大量內存和端口資源。這時,我們可以優化與 TIME_WAIT 狀態相關的內核選項,比如采取下面幾種措施。

  • 增大處于 TIME_WAIT 狀態的連接數量 net.ipv4.tcp_max_tw_buckets ,并增大連接跟蹤表的大小 net.netfilter.nf_conntrack_max。
  1. sysctl -w net.ipv4.tcp_max_tw_buckets=1048576 
  2. sysctl -w net.netfilter.nf_conntrack_max=1048576 
  • 減小FIN_WAIT2狀態的參數 net.ipv4.tcp_fin_timeout 的時間和減小TIME_WAIT 狀態的參數net.netfilter.nf_conntrack_tcp_timeout_time_wait的時間 ,讓系統盡快釋放它們所占用的資源。
  1. sysctl -w net.ipv4.tcp_fin_timeout=15 
  2. sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30 
  • 開啟端口復用 net.ipv4.tcp_tw_reuse。這樣,被 TIME_WAIT 狀態占用的端口,還能用到新建的連接中。
  1. sysctl -w net.ipv4.tcp_tw_reuse=1 
  • 增大本地端口的范圍 net.ipv4.ip_local_port_range 。這樣就可以支持更多連接,提高整體的并發能力。
  1. sysctl -w net.ipv4.ip_local_port_range="1024 65535" 
  • 增加最大文件描述符的數量。你可以使用 fs.nr_open 和 fs.file-max ,分別增大進程和系統的最大文件描述符數;或在應用程序的 systemd 配置文件中,配置 LimitNOFILE ,設置應用程序的最大文件描述符數。
  1. sysctl -w fs.nr_open=1048576 
  2. sysctl -w fs.file-max=1048576 

巨人的肩膀

[1] 系統性能調優必知必會.陶輝.極客時間.

[2] TCP/IP詳解卷二:實現

本文轉載自微信公眾號「 運維開發故事」,可以通過以下二維碼關注。轉載本文請聯系 運維開發故事公眾號。

【編輯推薦】

【責任編輯:姜華 TEL:(010)68476606】
責任編輯:姜華 來源: 運維開發故事
相關推薦

2024-01-12 08:23:11

TCPACK服務器

2023-10-24 15:22:09

TCPUDP

2015-10-13 09:42:52

TCP網絡協議

2019-06-12 11:26:37

TCP三次握手四次揮手

2020-02-17 10:10:43

TCP三次握手四次揮手

2021-05-18 12:27:40

TCP控制協議

2021-01-29 06:11:08

TCP通信三次握手

2019-02-01 09:38:16

2021-07-03 17:47:25

TCP控制協議

2015-11-09 09:58:56

2017-09-25 21:27:07

TCP協議數據鏈

2014-09-19 09:46:46

TCPIP

2023-10-28 09:07:57

TCP面試三次握手

2022-11-17 10:20:49

TCP三次握手四次揮手

2020-06-29 14:50:47

TCP狀態ACK

2021-05-28 09:08:20

TCP連接序列號

2025-05-20 08:38:03

2023-10-17 15:44:19

TCP四次揮手

2023-11-01 08:04:08

WiresharkTCP協議

2020-03-02 14:41:04

運維架構技術
點贊
收藏

51CTO技術棧公眾號

日韩精品资源| 天天av综合| 久久久久国产精品一区二区| 欧美日韩一区高清| 国产精品麻豆免费版| 黄免费在线观看| 国产精品探花视频| 日韩av中文字幕一区| 成人av电影免费在线播放| 亚洲图片制服诱惑| 亚洲精品国产suv一区88| 乱子伦一区二区三区| 亚洲精品一区二区三区中文字幕| 91免费国产在线观看| 久久69精品久久久久久国产越南| 日韩欧美在线播放视频| 狠狠躁夜夜躁av无码中文幕| 色婷婷色综合| 91福利视频久久久久| 国产伦精品一区二区三区在线| 日本高清不卡码| 成人高潮a毛片免费观看网站| 亚洲视频免费在线观看| 国产精品久久久久久久久久久久久 | 亚洲日穴在线视频| 免费久久久一本精品久久区| 久久影院一区二区| 经典三级久久| 中文无字幕一区二区三区 | 桃花岛tv亚洲品质| 99久久免费视频.com| 欧美—级高清免费播放| 熟妇女人妻丰满少妇中文字幕 | 久久中文字幕视频| 国产精品wwwww| 桃花色综合影院| 年轻的保姆91精品| 91九色最新地址| 成人在线国产视频| xxxx国产精品| 尹人成人综合网| 精品成人在线观看| 久久亚洲a v| 在线观看xxx| 玖玖在线精品| 中文字幕国内精品| 亚欧精品在线视频| 国产蜜臀av在线播放| 国产成人啪免费观看软件| 欧美大尺度激情区在线播放| 四虎永久免费观看| 樱花草涩涩www在线播放| 91视频xxxx| 国产精品精品软件视频| 国产成人三级一区二区在线观看一| 欧美精品18| 亚洲国产精品人人爽夜夜爽| 97成人在线观看视频| 搞黄视频在线观看| 久久黄色级2电影| 久久久国产精品亚洲一区| 韩国三级在线播放| 欧美经典一区| 日韩午夜在线观看视频| 成人中文字幕在线播放| 国产高清视频免费最新在线| 91网址在线看| 欧美18视频| 国产人成在线视频| 国产免费成人在线视频| 亚洲综合一区二区不卡| 国产成人无码一区二区三区在线| 蜜臀av免费一区二区三区| 欧美老年两性高潮| 99精品在线免费视频| 蜜臀久久精品| 亚洲欧美经典视频| 日本成人黄色| 日本精品久久久久久| 另类专区欧美蜜桃臀第一页| 国产日韩欧美在线观看| 国产黄色片在线免费观看| 久久99精品久久久久久欧洲站| 欧美亚洲国产一区二区三区va| 精品成在人线av无码免费看| 韩国精品一区| 国产精品成人一区二区三区夜夜夜| 国产精品v欧美精品v日韩| 夜夜躁日日躁狠狠久久av| 一区视频在线| 青草热久免费精品视频| 毛片a片免费观看| 久久国产亚洲| 色在人av网站天堂精品| 五月天综合激情| 国产综合色产| 俺去啦;欧美日韩| 亚洲第一页av| 久久久免费毛片| 亚洲视频网站在线观看| 亚洲香蕉中文网| 精品国产欧美| 亚洲精品久久视频| 激情图片中文字幕| 成人h在线观看| 欧美日韩亚洲一区二| 日本阿v视频在线观看| 成人勉费视频| 精品国产精品自拍| 日本国产中文字幕| 日韩欧美另类一区二区| 日韩一区二区三区在线观看| 极品人妻一区二区三区| 国产在线日韩| 国产精品一区专区欧美日韩| 中文字幕在线观看视频免费| 美女久久一区| 亚洲自拍偷拍第一页| 黄色在线观看网| 久久久美女艺术照精彩视频福利播放| 国产精品污www一区二区三区| 国产精品麻豆一区二区三区| 亚洲国产精品久久久久婷婷884| 久久最新免费视频| 欧美黄色激情| 一色桃子久久精品亚洲| 亚洲综合网中心| 日本激情在线观看| 亚洲精品中文字幕乱码三区| 久久精品网站视频| 国产一区在线电影| 日韩av在线最新| 欧美日韩在线国产| 久久精品噜噜噜成人av农村| 欧美日韩系列| 色三级在线观看| 日韩欧美一区二区三区久久| 国产成人无码一二三区视频| 伊人久久影院| 欧美另类xxx| 国产男女裸体做爰爽爽| 国产不卡一区视频| 国外成人免费视频| 毛片在线播放网站| 国产精品日日摸夜夜摸av| 久久天天东北熟女毛茸茸| 538视频在线| 在线视频观看一区| 善良的小姨在线| 久久精品国产大片免费观看| 欧美猛男性生活免费| 97久久人国产精品婷婷| 国产精品福利电影一区二区三区四区| 国产三级日本三级在线播放| 二区三区精品| 日韩精品久久久久久福利| 曰本女人与公拘交酡| 国产在线视视频有精品| 国产区一区二区三区| 午夜成年人在线免费视频| 福利微拍一区二区| 久久国产精品无码一级毛片 | 亚洲欧美日韩另类精品一区二区三区| 日本视频在线播放| 欧美日韩免费在线视频| 国产a级片视频| 黄色工厂这里只有精品| 国产精品嫩草在线观看| av人人综合网| 亚洲精品一区久久久久久| 激情五月激情综合| 一区免费视频| 免费看国产精品一二区视频| 成人自拍av| 久久天堂av综合合色| 精品人妻一区二区三区麻豆91 | 无码人妻精品一区二区三区9厂| 久久久久亚洲综合| 久久99爱视频| 久久97精品| 日韩av不卡在线| 亚洲女同志亚洲女同女播放| 午夜视频一区二区| theporn国产精品| 久久爱www成人| 国产免费观看久久黄| 日日夜夜天天综合入口| 亚洲精品一区中文字幕乱码| 一级黄色片网站| 久久精品视频在线免费观看| 高潮一区二区三区| 亚洲精品国产精品粉嫩| 午夜精品久久久99热福利| 一区两区小视频| 久久久精品国产免大香伊| 日本激情视频在线播放| 最近国产精品视频| 国产日韩一区在线| 黄色影院在线看| 在线播放日韩av| 波多野结衣视频在线观看| 亚洲欧美精品午睡沙发| 成人免费毛片糖心| 亚洲小说区图片区| 欧美一区免费视频| 中文无码日韩欧| 国产精品美乳一区二区免费| 男人天堂综合| 日韩欧美另类在线| 91porn在线视频| 久久日韩粉嫩一区二区三区| 男人的天堂99| 午夜精品影院| 97se国产在线视频| 牛牛电影国产一区二区| 日韩一区二区高清| 日韩经典在线观看| aaa欧美日韩| 992kp免费看片| 三级影片在线观看欧美日韩一区二区| www国产无套内射com| 成人中文视频| 成人观看高清在线观看免费| 日本激情视频在线观看| 亚洲人成免费电影| 人妻少妇一区二区三区| 91精品国产综合久久久久久 | 国产精品第七十二页| 91探花在线观看| 欧美日韩成人精品| 国产在线高清视频| 日韩欧美一区二区在线视频| 五月天中文字幕| 色八戒一区二区三区| 国产成人一区二区三区影院在线| 亚洲女同一区二区| 成人欧美一区二区三区黑人一 | 婷婷久久伊人| 日日狠狠久久| 久久精品成人一区二区三区| 国产精品一级伦理| 亚洲偷欧美偷国内偷| 视频二区在线| 亚洲精品永久免费| 三级在线观看| 欧美日韩成人在线一区| 精品乱码一区内射人妻无码 | 亚洲小说图片视频| 精品免费国产| 韩国精品主播一区二区在线观看| 日韩在线中文字| 亚洲国产精品视频在线| 色婷婷综合五月| 国产精品白嫩白嫩大学美女| 亚洲免费av高清| 免看一级a毛片一片成人不卡| 一区二区三区精品在线观看| 中文字幕av观看| 26uuu亚洲婷婷狠狠天堂| 大又大又粗又硬又爽少妇毛片 | 亚洲精品美女久久7777777| 欧美色网址大全| 中文字幕中文字幕99| 日韩av网站在线免费观看| 欧美凹凸一区二区三区视频 | 三级在线免费观看| 午夜久久久久| 欧美黄色免费影院| 蜜臀久久99精品久久久久宅男| 白白操在线视频| 激情久久久久| 久章草在线视频| 卡一卡二国产精品| 美女被爆操网站| 日韩成人dvd| 免费看欧美一级片| 9久re热视频在线精品| 自拍偷拍99| 午夜国产一区| 男人操女人免费软件| 奇米777欧美一区二区| 99视频在线免费播放| 欧美伊人久久| 老太脱裤子让老头玩xxxxx| 天堂在线一区二区| 国产高清999| 99re成人在线| 欧美xxxxx精品| 国产高清一区日本| 一级国产黄色片| 不卡av在线免费观看| 熟女少妇一区二区三区| 综合色中文字幕| 黄色大片网站在线观看| 欧美挠脚心视频网站| 天堂中文字幕av| 精品国产成人系列| 韩国精品视频| 久久99久久99精品免观看粉嫩 | 一本高清dvd不卡在线观看| 91九色蝌蚪91por成人| 亚洲国产成人精品一区二区| 国产男女猛烈无遮挡| 国产视频亚洲精品| 国产乱色在线观看| 日产日韩在线亚洲欧美| 6080成人| 一级做a爰片久久| 性伦欧美刺激片在线观看| 日韩欧美国产综合在线| 日本不卡一二三区黄网| 亚洲av人人澡人人爽人人夜夜| 国产精品青草综合久久久久99| 91久久国产视频| 日韩一区二区电影| 天堂中文8资源在线8| 欧美专区福利在线| 国产精品xxxav免费视频| 一本久久a久久精品vr综合| 性欧美暴力猛交另类hd| 久久无码专区国产精品s| 中文字幕综合网| 波多野结衣视频网址| 亚洲精品久久久久| 69av成人| 国产精品免费一区二区| 中文字幕一区二区av| 久草视频国产在线| 国产在线播放一区三区四| 在线观看免费小视频| 亚洲欧美自拍偷拍色图| 毛片在线免费播放| 亚洲九九九在线观看| www.在线播放| 久久国产精品久久精品| 久久天天久久| caoporn国产精品免费公开| 超碰97成人| 中文字幕乱码免费| 狠狠色丁香久久婷婷综合丁香| 手机精品视频在线| 国产精品久久久久毛片软件| 波多野结衣人妻| 一区二区在线视频播放| 亚洲深夜视频| 精品中文字幕一区| 亚洲影音先锋| 欧美bbbbb性bbbbb视频| 欧美午夜精品久久久久久浪潮| 午夜性色福利视频| 欧美一区二区三区免费观看| 91大神在线观看线路一区| 91色p视频在线| 四虎影视精品| 日韩免费一级视频| 久久久久久久久久美女| 国产性生活视频| 中文国产成人精品| 欧美视频精品| 天天想你在线观看完整版电影免费| 国产一区二区三区黄视频 | 91成人免费在线视频| 国产二区在线播放| 国产在线视频91| 中文字幕午夜精品一区二区三区| 91人妻一区二区| 欧美特级www| 成人午夜影视| 亚洲精品欧美一区二区三区| 极品av少妇一区二区| 毛茸茸多毛bbb毛多视频| 在线视频国产一区| av香蕉成人| 热99精品只有里视频精品| 精品一区亚洲| 爱豆国产剧免费观看大全剧苏畅 | 伊人再见免费在线观看高清版 | 国产精品免费一区二区三区观看| 日韩视频不卡| 1024手机在线观看你懂的| 欧美人与禽zozo性伦| 日皮视频在线观看| 欧洲一区二区日韩在线视频观看免费 | 黄色a级三级三级三级| 亚洲福利视频三区| 国产高清自拍视频在线观看| 91视频国产高清| 国产欧美91| 蜜桃色一区二区三区| 欧美日韩在线免费| 麻豆av在线免费看| 国精产品99永久一区一区| 久久国产视频网| 欧美日韩综合在线观看| 中文字幕在线成人| 久久夜色电影| 午夜一级免费视频| 欧美视频在线免费| 日韩精品卡一| 亚洲日本精品|