精品欧美一区二区三区在线观看 _久久久久国色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在线免费| 日韩欧美亚洲v片| 精品午夜福利在线观看| 亚洲视频分类| 欧美日韩三级一区| 天堂8在线天堂资源bt| 欧美一区二区视频| 国精产品一区一区三区mba桃花 | 在线视频综合导航| 日本xxx免费| 欧美精品a∨在线观看不卡| 激情深爱一区二区| 欧美孕妇性xx| 欧美黄色一区二区三区| 精品美女久久久| 精品黑人一区二区三区久久| a在线观看免费视频| 6699嫩草久久久精品影院| 国产精品系列在线| 久久久综合香蕉尹人综合网| 国产福利视频导航| 久久成人麻豆午夜电影| 欧美亚洲免费电影| 免费视频网站www| 日韩精品永久网址| 亚洲欧美国产一本综合首页| www.四虎在线| 经典三级久久| 欧美日韩美少妇| 男人女人黄一级| 蜜桃麻豆av在线| 亚洲午夜久久久| 久久久天堂国产精品| 国产三级视频在线| 26uuu国产一区二区三区| 电影午夜精品一区二区三区| 136福利视频导航| 日韩国产一区二| 欧美一区二区色| 亚洲综合一二三| 影音先锋亚洲一区| 久久免费视频网| 免费麻豆国产一区二区三区四区| 888久久久| 久久视频在线播放| 国产大屁股喷水视频在线观看| 亚洲精品国产动漫| 亚洲第一色在线| 在线观看一区二区三区四区| 亚洲精品在线国产| 精品国产伦一区二区三区免费| 国产无遮挡猛进猛出免费软件 | 在线 丝袜 欧美 日韩 制服| 久久精品色播| 亚洲精品久久久久久下一站 | 久久中文亚洲字幕| 中文字幕亚洲综合久久| 日韩av片在线免费观看| 成人黄色小视频| 日韩在线精品视频| 日本一级片免费| 欧美国产激情| 国内揄拍国内精品| 亚洲黄色激情视频| 爽爽淫人综合网网站| 国产精品入口福利| 国产女人18毛片水真多| 国产成人高清在线| 精品国产乱码久久久久久蜜柚| 午夜18视频在线观看| 久久五月婷婷丁香社区| 天天综合狠狠精品| 国产在线激情| 亚洲国产精品久久人人爱蜜臀 | 四虎永久国产精品| 久久精品视频免费看| 一区二区三区四区视频精品免费 | 精品久久五月天| 中文乱码人妻一区二区三区视频| 国产精品午夜一区二区三区| 神马国产精品影院av| 精品自拍偷拍视频| 99国产精品久久久久久久| 日韩免费在线播放| 亚洲中文字幕在线观看| 国产·精品毛片| 六月婷婷久久| 欧美三级理伦电影| 午夜视频在线观看一区二区| 成人中文字幕av| 一区二区中文字幕在线观看| 亚洲精选中文字幕| 国产午夜手机精彩视频| 亚洲永久视频| 91美女片黄在线观看游戏| 少妇av在线播放| 中文字幕第一区二区| 激情五月婷婷六月| 高清在线一区| 亚洲精品国产精品国产自| 一级在线观看视频| 亚洲九九精品| 91久久久久久久一区二区| 视频在线不卡| 一区二区视频在线看| 青青草av网站| 欧美变态挠脚心| 久久久成人精品| 欧美精品一二三四区| 国产盗摄女厕一区二区三区 | 国产综合婷婷| 国产精品爽爽ⅴa在线观看| 亚洲精品一区二区口爆| 国产精品嫩草久久久久| 男人操女人逼免费视频| 欧美h版在线观看| 中文字幕在线看视频国产欧美在线看完整| 久久久国产精品黄毛片| 久久97超碰国产精品超碰| 欧美日韩精品免费观看视一区二区| 大片免费在线看视频| 欧美午夜精品久久久久久孕妇| free性中国hd国语露脸| 欧美精品三级| 亚洲自拍偷拍网址| 男人在线资源站| 欧美日韩在线免费视频| 成人在线一级片| 国产精品一二| 国产有色视频色综合| 久久久久黄久久免费漫画| 制服丝袜成人动漫| 很污很黄的网站| 人妖欧美一区二区| 日韩欧美三级电影| 欧美粗大gay| 亚洲欧美日韩久久久久久 | 色呦呦网站在线观看| 欧美麻豆精品久久久久久| 四虎成人免费影院| 免费在线观看精品| 亚洲一卡二卡三卡四卡无卡网站在线看 | av免费在线播放网站| 久久97久久97精品免视看秋霞| 欧美成年人视频| 国产又爽又黄免费软件| 中文字幕一区二区视频| 欧美一级小视频| 自拍视频亚洲| 国产精品香蕉视屏| 91破解版在线观看| 亚洲精品久久久久久下一站| 日本一区二区不卡在线| 成人黄色777网| 无码播放一区二区三区| 四虎影视精品| 国产精品久久99久久| 999在线视频| 在线不卡中文字幕| 校园春色 亚洲| 成人精品在线视频观看| 草草久久久无码国产专区| 欧美猛男同性videos| 国产日韩视频在线观看| av网站网址在线观看| 亚洲成人久久网| 日韩在线视频不卡| 中文字幕一区在线| 白丝校花扒腿让我c| 99精品视频免费观看视频| 欧美二区在线看| 亚洲国产91视频| 欧美精品成人91久久久久久久| 亚洲欧美日韩免费| 欧美专区日韩专区| 五月婷婷一区二区| 久久这里只有精品视频网| 色免费在线视频| 欧美日韩三级| 日韩国产高清一区| 日本免费精品| 欧美亚洲视频在线看网址| √天堂资源地址在线官网| 精品人伦一区二区色婷婷| 偷偷操不一样的久久| 国产精品嫩草99a| www.啪啪.com| 奇米在线7777在线精品 | 日韩高清不卡一区| 精品一区二区三区毛片| 综合亚洲色图| 91九色在线观看| 欧美日韩美女| 欧美激情免费视频| 国产福利在线看| 亚洲缚视频在线观看| 91成人一区二区三区| 欧美日韩国内自拍| 在线免费日韩av| 国产午夜精品福利| 中国特级黄色大片| 久久成人免费网| 久久精品视频91| 国产精品大片免费观看| 亚洲精品在线视频观看| 激情av综合| 亚洲精品日产aⅴ| 国产成人精品一区二三区在线观看| 欧美精品videosex牲欧美| 午夜伦理在线| 亚洲图中文字幕| 手机在线精品视频| 91精品国产综合久久久久| 无码人妻久久一区二区三区不卡| 一区二区三区在线影院| 福利视频第一页| 国产视频一区二区在线观看| 国产精品久久久久久久无码| 国产福利电影一区二区三区| 91视频这里只有精品| 麻豆一区二区三| 青青在线视频免费| 亚欧成人精品| 国产妇女馒头高清泬20p多| 亚洲综合小说| 国产免费色视频| 久久影院一区| 亚洲精品一区二区三| 国产亚洲一区| 日本一区二区三区在线视频| 日韩中文av| 久久久久一区二区三区| 久久悠悠精品综合网| 国产精品国产精品国产专区不卡| 精品国产鲁一鲁****| 91久久久久久久久| 免费观看亚洲天堂| 亚洲一区二区三区视频播放| 91成人福利社区| 国产一区二区色| 亚洲一区二区三区久久久| 91精品久久久久| 91国产一区| 91精品啪aⅴ在线观看国产| 亚洲网站三级| 444亚洲人体| 一级毛片精品毛片| 国产一级二级三级精品| 日韩美女国产精品| 蜜桃成人免费视频| 精品视频免费| 日本黄色a视频| 亚洲一区二区日韩| 欧美久久久久久久久久久久久久| 亚洲私拍自拍| 三级4级全黄60分钟| 免费在线一区观看| 性生活一级大片| 懂色av一区二区三区蜜臀| 欧美xxxxx精品| 久久久不卡网国产精品二区| 天天操天天干天天操天天干| 亚洲天堂成人网| 久久久久成人精品无码| 黑人巨大精品欧美一区免费视频| 国产又大又粗又爽| 欧美日韩久久一区二区| a在线观看视频| 日韩av最新在线| 成黄免费在线| 久久香蕉国产线看观看av| 福利网站在线观看| 国产成一区二区| 国产激情精品一区二区三区| 国产欧美亚洲日本| 不卡一区2区| 成人在线免费高清视频| 国产精品久久久久久模特| 国产一二三区av| 国产成人av电影免费在线观看| 波多野结衣福利| 1000部国产精品成人观看| 中文字幕第28页| 欧美系列日韩一区| 国产xxxx在线观看| 亚洲男人av电影| 在线黄色网页| 国产精品1234| 中文字幕一区二区三区中文字幕| 欧美激情第一页在线观看| 综合av在线| 欧美两根一起进3p做受视频| 国产精品一区免费视频| 插吧插吧综合网| 亚洲一区二区三区四区在线免费观看| 蜜臀精品一区二区三区| 亚洲成人av中文字幕| 在线观看二区| 欧美亚洲第一区| 97品白浆高清久久久久久| 亚洲一区高清| 久久伊人亚洲| 中文成人无字幕乱码精品区| 亚洲人精品午夜| 成人黄色免费网| 日韩精品在线视频观看| 青春草在线免费视频| 成人激情免费在线| 欧美色爱综合| 欧美 激情 在线| 北条麻妃国产九九精品视频| 国产精品免费人成网站酒店| 欧美在线视频全部完| 日本人妖在线| 久久免费视频在线观看| 蜜桃精品视频| 国产经典久久久| 狠狠色综合播放一区二区| 日韩福利在线视频| 91极品视觉盛宴| 青青草在线免费视频| 午夜精品美女自拍福到在线| 日韩精品一区二区三区中文 | 4438x亚洲最大成人网| 国产在线免费观看| 欧美一区二三区| 神马久久av| 国产精品无码av在线播放| 成人免费福利片| 国产在线欧美在线| 日韩女优电影在线观看| 91在线中文| 99伊人久久| 自拍欧美日韩| 欧美xxxx日本和非洲| 伊人色综合久久天天| 国产av一区二区三区| 久久成人精品视频| 大胆国模一区二区三区| 日本不卡一区二区三区四区| 久久91精品国产91久久小草| 99热这里只有精品4| 欧美男女性生活在线直播观看| 五月天婷婷在线视频| 国产精品夜间视频香蕉| 久久一本综合| 超碰在线免费av| 亚洲一区在线电影| 五月激情六月婷婷| 国产不卡视频在线| 成人精品视频| 欧美日韩理论片| 亚洲一二三四久久| 天天综合永久入口| 国产激情久久久久| 久久大综合网| 日本xxxx免费| 欧美日韩一区二区三区| 黄色在线观看网| 国产日韩精品电影| 午夜久久影院| 国产老熟女伦老熟妇露脸| 色综合久久久久久久| 午夜免费视频在线国产| 亚洲在线免费视频| 亚洲伦理精品| 秋霞网一区二区三区| 欧美一区二区三区喷汁尤物| hd国产人妖ts另类视频| 欧美日韩高清在线一区| 六月婷婷色综合| 久久久久无码国产精品不卡| 精品亚洲男同gayvideo网站| 日韩专区视频| 69sex久久精品国产麻豆| 久久久久久久网| 99久久久国产精品无码免费| 91豆花精品一区| 欧美成人直播| 中文字幕免费高清视频| 欧美丝袜丝nylons| 暧暧视频在线免费观看| 亚洲精品一区二区三区av| 成人免费毛片app| 中文字幕乱码视频| 久久免费福利视频| 国产精品久久久久9999赢消| 美女黄色一级视频| 欧美日韩你懂得| 人人草在线视频| 综合一区中文字幕| 97精品久久久午夜一区二区三区| 一级黄色大片免费观看| 78色国产精品| 国产精品成人a在线观看| 免费无码一区二区三区| 91精选在线观看| 久久久人成影片一区二区三区在哪下载| 精品免费久久久久久久| 国产精品久久午夜|