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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux协议栈劫持,Linux系统优化之TCP协议栈优化-基本篇1

發(fā)布時間:2024/7/23 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux协议栈劫持,Linux系统优化之TCP协议栈优化-基本篇1 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

因為在做爬蟲分布式系統(tǒng)的過程中,涉及到了一些linux系統(tǒng)優(yōu)化方面的知識,所以來總結(jié)一下,我們會對linux的不同模塊做相關(guān)的基本優(yōu)化,這篇文章主要講述的是關(guān)于tcp協(xié)議棧的參數(shù)優(yōu)化。

1.機器環(huán)境

Linux EOS01 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

CentOS release 6.4 (Final)

2.具體實施

2.1 由于每臺機器的文件描述符都是處于默認(rèn)的1024的標(biāo)準(zhǔn)值,對于高并發(fā)的系統(tǒng)來說,很容易達到瓶頸,因此我們需要重定文件描述符數(shù)量,可以采用ansible對各個服務(wù)器批量設(shè)置。

vi /etc/security/limits.conf

* soft nofile 65535

* hard nofile 65535

* soft nproc 65535

* hard nproc 65535

2.2 關(guān)于我們對于系統(tǒng)tcp協(xié)議棧的參數(shù)設(shè)置

vi /etc/sysctl.conf

net.ipv4.tcp_fin_timeout=10

net.ipv4.tcp_syncookies=1

#開啟重用。允許將TIME-WAIT sockets 重新用于新的TCP 連接

net.ipv4.tcp_tw_reuse=1

#啟用timewait 快速回收

net.ipv4.tcp_tw_recycle=1

net.ipv4.ip_local_port_range=1024 65000

net.ipv4.tcp_max_syn_backlog=8192

net.ipv4.tcp_max_tw_buckets=5000

net.ipv4.tcp_timestamps = 0

#每300秒 探測一次tcp連接是否空閑,一共探測2次,每次間隔15秒

net.ipv4.tcp_keepalive_intvl = 15

net.ipv4.tcp_keepalive_probes = 2

net.ipv4.tcp_keepalive_time = 300

然后執(zhí)行 /sbin/sysctl -p 讓參數(shù)生效

具體的參數(shù)含義可以參考如下:

1. fs.file-max

最大可以打開的文件描述符數(shù)量,注意是整個系統(tǒng)。

在服務(wù)器中,我們知道每創(chuàng)建一個連接,系統(tǒng)就會打開一個文件描述符,所以,文件描述符打開的最大數(shù)量也決定了我們的最大連接數(shù)

select在高并發(fā)情況下被取代的原因也是文件描述符打開的最大值,雖然它可以修改但一般不建議這么做,詳情可見unp select部分。

2.net.ipv4.tcp_max_syn_backlog

Tcp syn隊列的最大長度,在進行系統(tǒng)調(diào)用connect時會發(fā)生Tcp的三次握手,server內(nèi)核會為Tcp維護兩個隊列,Syn隊列和Accept隊列,Syn隊列是指存放完成第一次握手的連接,Accept隊列是存放完成整個Tcp三次握手的連接,修改net.ipv4.tcp_max_syn_backlog使之增大可以接受更多的網(wǎng)絡(luò)連接。

注意此參數(shù)過大可能遭遇到Syn flood攻擊,即對方發(fā)送多個Syn報文端填充滿Syn隊列,使server無法繼續(xù)接受其他連接

我們看下 man 手冊上是如何說的:

The behavior of the backlog argument on TCP sockets changed with Linux 2.2. Now it specifies the queue length for com‐ pletely established sockets waiting to be accepted, instead of the number of incomplete connection requests. The maximum length of the queue for incomplete sockets can be set using /proc/sys/net/ipv4/tcp_max_syn_backlog. When syncookies are enabled there is no logical maximum length and this setting is ignored. See tcp(7) for more information. If the backlog argument is greater than the value in /proc/sys/net/core/somaxconn, then it is silently truncated to that value; the default value in this file is 128. In kernels before 2.4.25, this limit was a hard coded value, SOMAXCONN, with the value 128.

自 Linux 內(nèi)核 2.2 版本以后,backlog 為已完成連接隊列的最大值,未完成連接隊列大小以 /proc/sys/net/ipv4/tcp_max_syn_backlog 確定,但是已連接隊列大小受 SOMAXCONN 限制,為 min(backlog, SOMAXCONN)

3.net.ipv4.tcp_syncookies

修改此參數(shù)可以有效的防范上面所說的syn flood攻擊

原理:在Tcp服務(wù)器收到Tcp Syn包并返回Tcp Syn+ack包時,不專門分配一個數(shù)據(jù)區(qū),而是根據(jù)這個Syn包計算出一個cookie值。在收到Tcp ack包時,Tcp服務(wù)器在根據(jù)那個cookie值檢查這個Tcp ack包的合法性。如果合法,再分配專門的數(shù)據(jù)區(qū)進行處理未來的TCP連接。

默認(rèn)為0,1表示開啟

4.net.ipv4.tcp_keepalive_time

Tcp keepalive心跳包機制,用于檢測連接是否已斷開,我們可以修改默認(rèn)時間來間斷心跳包發(fā)送的頻率。

keepalive一般是服務(wù)器對客戶端進行發(fā)送查看客戶端是否在線,因為服務(wù)器為客戶端分配一定的資源,但是Tcp 的keepalive機制很有爭議,因為它們可耗費一定的帶寬。

Tcp keepalive詳情見Tcp/ip詳解卷1 第23章

5.net.ipv4.tcp_tw_reuse

我的上一篇文章中寫到了time_wait狀態(tài),大量處于time_wait狀態(tài)是很浪費資源的,它們占用server的描述符等。

修改此參數(shù),允許重用處于time_wait的socket。

默認(rèn)為0,1表示開啟

6.net.ipv4.tcp_tw_recycle

也是針對time_wait狀態(tài)的,該參數(shù)表示快速回收處于time_wait的socket。

默認(rèn)為0,1表示開啟

7.net.ipv4.tcp_fin_timeout

修改time_wait狀的存在時間,默認(rèn)的2MSL

注意:time_wait存在且生存時間為2MSL是有原因的,見我上一篇博客為什么會有time_wait狀態(tài)的存在,所以修改它有一定的風(fēng)險,還是根據(jù)具體的情況來分析。

8.net.ipv4.tcp_max_tw_buckets

所允許存在time_wait狀態(tài)的最大數(shù)值,超過則立刻被清楚并且警告。

9.net.ipv4.ip_local_port_range

表示對外連接的端口范圍。

10.somaxconn

前面說了Syn隊列的最大長度限制,somaxconn參數(shù)決定Accept隊列長度,在listen函數(shù)調(diào)用時backlog參數(shù)即決定Accept隊列的長度,該參數(shù)太小也會限制最大并發(fā)連接數(shù),因為同一時間完成3次握手的連接數(shù)量太小,server處理連接速度也就越慢。服務(wù)器端調(diào)用accept函數(shù)實際上就是從已連接Accept隊列中取走完成三次握手的連接。

Accept隊列和Syn隊列是listen函數(shù)完成創(chuàng)建維護的。

/proc/sys/net/core/somaxconn修改

3. 參考資料

總結(jié)

以上是生活随笔為你收集整理的linux协议栈劫持,Linux系统优化之TCP协议栈优化-基本篇1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。