/proc/sys/net/ipv4/
/proc/sys/net/ipv4/存放著TCP參數(shù)的文件,目錄中的內(nèi)容用來添加網(wǎng)絡設置,在其中的許多設置,可以用來阻止對系統(tǒng)的攻擊,或用來設置系統(tǒng)的路由功能。
tcp_syn_retries客戶端發(fā)起SYN連接,如果超時會進行重傳,重傳的次數(shù)
接著我們使用sysctl net.ipv4.tcp_syn_retries=2把這個參數(shù)修改為2測試一下
接著我們來驗證一下,我們?nèi)sh一臺不存在的主機,因為ssh也是基于tcp
通過wireshark抓包可以看到,果然重傳了2個數(shù)據(jù)包
net.ipv4.tcp_window_scaling啟用或關閉窗口擴大因子選項
net.ipv4.tcp_sack啟用或關閉選擇確認(Selective Acknowledgement, SACK)選項
名稱 | 默認值 | 建議值 | 描述 |
---|---|---|---|
tcpsyn_retries | 5 | 1 | 對于一個新建連接,內(nèi)核要發(fā)送多少個SYN連接請求才決定放棄。不應該大于255,默認值是5,對應于180毫秒左右時間。(對于大負載而物理通信良好的網(wǎng)絡來說,這個值偏高,可以修改為2。這個值僅僅是針對對外的連接,對進來的連接,是由tcp_retries1決定) |
tcp_synack_retries | 5 | 1 | 對于遠端的連接請求SYN,內(nèi)核會發(fā)送SYN+ACK數(shù)據(jù)包,以確認收到上一個SYN連接請求包。這是所謂的三次握手機制的第二個步驟。這里決定內(nèi)核再放棄之前所發(fā)送出的SYN+ACK數(shù)目。不應該大于255,默認值是5,對應于180秒左右時間。 |
tcp_keepalive_time | 7200 | 600 | TCP發(fā)送keepalive探測消息的間隔時間(秒),用于確認TCP連接是否有效。防止兩邊建立連接但不發(fā)送數(shù)據(jù)的攻擊。 |
tcp_keepalive_probes | 9 | 3 | TCP發(fā)送keepalive探測消息的間隔時間(秒),用于確認TCP連接是否有效。 |
tcp_keepalive_intvl | 74 | 15 | 探測消息未獲得響應時,重發(fā)該消息的間隔時間(秒)。默認值為75秒。(對于普通應用來說,這個值有一些偏大,可以根據(jù)需要改小.特別是web類服務器需要改小該值,15是個比較合適的值) |
tcp_retries1 | 3 | 3 | 放棄回應一個TCP連接請求前﹐需要進行多少次重試。RFC 規(guī)定最低的數(shù)值是3 |
tcp_retries2 | 15 | 5 | 在丟棄激活(已建立通訊狀況)的TCP連接之前﹐需要進行多少次重試。默認值為15,根據(jù)RTO的值來決定,相當于13-30分鐘(RFC1122規(guī)定,必須大于100秒) (這個值根據(jù)目前的網(wǎng)絡設置,可以適當?shù)馗男?我的網(wǎng)絡內(nèi)修改為了5) |
tcp_orphan_retries | 7 | 3 | 在近端丟棄TCP連接之前﹐要進行多少次重試。默認值是7個﹐相當于 50秒 - 16分鐘﹐視 RTO 而定。如果您的系統(tǒng)是負載很大的web服務器﹐那么也許需要降低該值,這類 sockets 可能會耗費大量的資源。另外參的考tcp_max_orphans。 |
tcp_fin_timeout | 60 | 2 | 對于本端斷開的socket連接,TCP保持在FIN-WAIT-2狀態(tài)的時間。對方可能會斷開連接或一直不結(jié)束連接或不可預料的進程死亡。默認值為60秒 |
tcp_max_tw_buckets | 180000 | 36000 | 系統(tǒng)在同時所處理的最大timewait sockets數(shù)目。如果超過此數(shù)的話,time-wait socket會被立即砍除并且顯示警告信息。之所以要設定這個限制﹐純粹為了抵御那些簡單的DoS攻擊﹐不過﹐如果網(wǎng)絡條件需要比默認值更多﹐則可以提高它(或許還要增加內(nèi)存)。(事實上做NAT的時候最好可以適當?shù)卦黾釉撝? |
tcp_tw_recycle | 0 | 1 | 打開快速TIME-WAIT sockets回收。除非得到技術(shù)專家的建議或要求﹐請不要隨意修改這個值。(做NAT的時候,建議打開它) |
tcp_tw_reuse | 0 | 1 | 表示是否允許重新應用處于TIME-WAIT狀態(tài)的socket用于新的TCP連接(這個對快速重啟動某些服務,而啟動后提示端口已經(jīng)被使用的情形非常有幫助) |
tcp_max_orphans | 8192 | 32768 | 系統(tǒng)所能處理不屬于任何進程的TCP sockets最大數(shù)量。假如超過這個數(shù)量,那么不屬于任何進程的連接會被立即reset,并同時顯示警告信息。之所以要設定這個限制,純粹為了抵御那些簡單的DoS攻擊,千萬不要依賴這個或是人為的降低這個限制。如果內(nèi)存大更應該增加這個值。(這個值Redhat AS版本中設置為32768,但是很多防火墻修改的時候,建議該值修改為2000) |
tcp_abort_on_overflow | 0 | 0 | 當守護進程太忙而不能接受新的連接,就象對方發(fā)送reset消息,默認值是false。這意味著當溢出的原因是因為一個偶然的猝發(fā),那么連接將恢復狀態(tài)。只有在你確信守護進程真的不能完成連接請求時才打開該選項,該選項會影響客戶的使用。(對待已經(jīng)滿載的sendmail,apache這類服務的時候,這個可以很快讓客戶端終止連接,可以給予服務程序處理已有連接的緩沖機會,所以很多防火墻上推薦打開它) |
tcp_synookies | 0 | 1 | 只有在內(nèi)核編譯時選擇了CONFIG_SYNCOOKIES時才會發(fā)生作用。當出現(xiàn)syn等候隊列出現(xiàn)溢出時象對方發(fā)送syncookies。目的是為了防止syn flood攻擊。 |
tcp_stdurg | 0 | 0 | 使用TCP urg pointer字段中的主機請求解釋功能。大部份的主機都使用老舊的 BSD解釋,因此如果您在 Linux 打開它,或會導致不能和它們正確溝通。 |
tcp_max_syn_backlog | 1024 | 16384 | 對于那些依然還未獲得客戶端確認的連接請求,需要保存在隊列中最大數(shù)目。對于超過 128Mb 內(nèi)存的系統(tǒng),默認值是1024,低于 128Mb 的則為 128。如果服務器經(jīng)常出現(xiàn)過載,可以嘗試增加這個數(shù)字。假如您將此值設為大于 1024,最好修改include/net/tcp.h里面的TCP_SYNQ_HSIZE,以保持TCP_SYNQ_HSIZE*16(SYN Flood攻擊利用TCP協(xié)議散布握手的缺陷,偽造虛假源IP地址發(fā)送大量TCP-SYN半打開連接到目標系統(tǒng),最終導致目標系統(tǒng)Socket隊列資源耗盡而無法接受新的連接。為了應付這種攻擊,現(xiàn)代Unix系統(tǒng)中普遍采用多連接隊列處理的方式來緩沖(而不是解決)這種攻擊,是用一個基本隊列處理正常的完全連接應用(Connect()和Accept() ),是用另一個隊列單獨存放半打開連接。這種雙隊列處理方式和其他一些系統(tǒng)內(nèi)核措施(例如Syn-Cookies/Caches)聯(lián)合應用時,能夠比較有效的緩解小規(guī)模的SYN Flood攻擊(事實證明) |
tcp_window_scaling | 1 | 1 | 該文件表示設置tcp/ip會話的滑動窗口大小是否可變。參數(shù)值為布爾值,為1時表示可變,為0時表示不可變。tcp/ip通常使用的窗口最大可達到65535字節(jié),對于高速網(wǎng)絡,該值可能太小,這時候如果啟用了該功能,可以使tcp/ip滑動窗口大小增大數(shù)個數(shù)量級,從而提高數(shù)據(jù)傳輸?shù)哪芰?RFC 1323)。 |
tcp_timestamps | 1 | 1 | Timestamps用在其它一些東西中,可以防范那些偽造的sequence號碼。一條1G的寬帶線路或許會重遇到帶out-of-line數(shù)值的舊sequence 號碼(假如它是由于上次產(chǎn)生的)。Timestamp會讓它知道這是個 ‘舊封包’。(該文件表示是否啟用以一種比超時重發(fā)更精確的方法(RFC 1323)來啟用對RTT的計算;為了實現(xiàn)更好的性能應該啟用這個選項。) |
tcp_sack | 1 | 1 | 使用Selective ACK,它可以用來查找特定的遺失的數(shù)據(jù)報— 因此有助于快速恢復狀態(tài)。該文件表示是否啟用有選擇的應答(Selective Acknowledgment),這可以通過有選擇地應答亂序接收到的報文來提高性能,這樣可以讓發(fā)送者只發(fā)送丟失的報文段。對于廣域網(wǎng)通信來說這個選項應該啟用,但是這會增加對 CPU 的占用。 |
tcp_fack | 1 | 1 | 打開FACK擁塞避免和快速重傳功能。注意,當tcp_sack設置為0的時候,這個值即使設置為1也無效,這個是TCP連接靠譜的核心功能 |
tcp_dsack | 1 | 1 | 允許TCP發(fā)送”兩個完全相同”的SACK。 |
tcp_ecn | 0 | 0 | TCP的直接擁塞通告功能。 |
tcp_reordering | 3 | 6 | TCP流中重排序的數(shù)據(jù)報最大數(shù)量。一般有看到推薦把這個數(shù)值略微調(diào)整大一些 |
tcp_retans_collapse | 1 | 0 | 對于某些有bug的打印機提供針對其bug的兼容性。一般不需要這個支持,可以關閉它 |
tcp_wmem:mindefaultmax | 4096 16384 131072 | 8192 131072 16777216 | 發(fā)送緩存設置。min:為TCP socket預留用于發(fā)送緩沖的內(nèi)存最小值。每個tcp socket都可以在建議以后都可以使用它。默認值為4096(4K)。default:為TCP socket預留用于發(fā)送緩沖的內(nèi)存數(shù)量,默認情況下該值會影響其它協(xié)議使用的net.core.wmem_default值,一般要低于net.core.wmem_default的值。默認值為16384(16K)。max: 用于TCP socket發(fā)送緩沖的內(nèi)存最大值。該值不會影響net.core.wmem_max,”靜態(tài)”選擇參數(shù)SO_SNDBUF則不受該值影響。默認值為131072(128K)。對于服務器而言,增加這個參數(shù)的值對于發(fā)送數(shù)據(jù)很有幫助 |
tcprmem:mindefaultmax | 4096 87380 174760 | 32768 131072 16777216 | 接收緩存設置。同tcp_wmem |
tcp_mem:mindefaultmax | 根據(jù)內(nèi)存計算 | 786432 1048576 1572864 | low:當TCP使用了低于該值的內(nèi)存頁面數(shù)時,TCP不會考慮釋放內(nèi)存。即低于此值沒有內(nèi)存壓力。(理想情況下,這個值應與指定給 tcp_wmem 的第 2 個值相匹配 - 這第 2 個值表明,最大頁面大小乘以最大并發(fā)請求數(shù)除以頁大小 (131072 300 / 4096)。)pressure:當TCP使用了超過該值的內(nèi)存頁面數(shù)量時,TCP試圖穩(wěn)定其內(nèi)存使用,進入pressure模式,當內(nèi)存消耗低于low值時則退出pressure狀態(tài)。(理想情況下這個值應該是 TCP 可以使用的總緩沖區(qū)大小的最大值 (204800 300 / 4096)。)high:允許所有tcp sockets用于排隊緩沖數(shù)據(jù)報的頁面量。(如果超過這個值,TCP 連接將被拒絕,這就是為什么不要令其過于保守 (512000 *300 / 4096) 的原因了。在這種情況下,提供的價值很大,它能處理很多連接,是所預期的 2.5 倍;或者使現(xiàn)有連接能夠傳輸 2.5 倍的數(shù)據(jù)。 |
tcp_app_win | 31 | 31 | 保留max(window/2^tcp_app_win, mss)數(shù)量的窗口由于應用緩沖。當為0時表示不需要緩沖。 |
tcp_adv_win_scale | 2 | 2 | 計算緩沖開銷。 |
tcp_low_latency | 0 | 0 | 允許 TCP/IP 棧適應在高吞吐量情況下低延時的情況;這個選項一般情形是的禁用。 |
tcp_westwood | 0 | 0 | 啟用發(fā)送者端的擁塞控制算法,它可以維護對吞吐量的評估,并試圖對帶寬的整體利用情況進行優(yōu)化;對于 WAN 通信來說應該啟用這個選項。 |
tcp_bic | 0 | 0 | 為快速長距離網(wǎng)絡啟用Binary Increase Congestion;這樣可以更好地利用以 GB 速度進行操作的鏈接;對于 WAN 通信應該啟用這個選項。 |
ip_forward | 0 | 1 | NAT必須開啟IP轉(zhuǎn)發(fā)支持,把該值寫1 |
ip_local_port_range:minmax | 32768 61000 | 1024 65000 | 表示用于向外連接的端口范圍,默認比較小,這個范圍同樣會間接用于NAT表規(guī)模。 |
ip_conntrack_max | 65535 | 65535 | 系統(tǒng)支持的最大ipv4連接數(shù),默認65536(事實上這也是理論最大值),同時這個值和你的內(nèi)存大小有關,1G以上內(nèi)存這個值都是默認65536 |
/proc/sys/net/core/
/proc/sys/net/core/目錄中包括許多設置用來控制Linux內(nèi)核與網(wǎng)絡層的交互,即當網(wǎng)絡有什么動作時,內(nèi)核做出什么樣的相應反應。
名稱 | 默認值 | 建議值 | 描述 |
---|---|---|---|
netdev_max_backlog | 1024 | 16384 | 每個網(wǎng)絡接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時,允許送到隊列的數(shù)據(jù)包的最大數(shù)目,對重負載服務器而言,該值需要調(diào)高一點。 |
somaxconn | 128 | 16384 | 用來限制監(jiān)聽隊列最大數(shù)據(jù)包的數(shù)量,超過這個數(shù)量就會導致鏈接超時或者觸發(fā)重傳機制。web應用中l(wèi)isten函數(shù)的backlog默認會給我們內(nèi)核參數(shù)的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認為511,所以有必要調(diào)整這個值。對繁忙的服務器,增加該值有助于網(wǎng)絡性能 |
wmem_default | 129024 | 129024 | 默認的發(fā)送窗口大小(字節(jié)) |
rmem_default | 129024 | 129024 | 默認的接收窗口大小(字節(jié)) |
rmem_max | 129024 | 873200 | 最大的TCP數(shù)據(jù)接收緩沖(字節(jié)) |
wmem_max | 129024 | 873200 | 最大的TCP數(shù)據(jù)發(fā)送緩沖(字節(jié)) |
/proc/sys/net/netfilter/是對netfilter的參數(shù)配置,具體可以參照Linux內(nèi)核文檔
修改內(nèi)核參數(shù)的方法
使用echo value方式直接追加到文件中。如echo "1" > /proc/sys/net/ipv4/tcp_syn_retries,但是這種方式設備重啟后,會恢復成默認值。
把參數(shù)添加到/etc/sysctl.conf中,然后執(zhí)行sysctl -p使參數(shù)生效。這種方式是永久有效的。
使用systcl命令進行修改,例如修改SYN重傳次數(shù)sysctl net.ipv4.tcp_syn_retries=n
查看Linux系統(tǒng)的統(tǒng)計信息
下面的eth0換成需要查看的網(wǎng)卡
sys/class/net/eth0/statistics/rx_packets 收到的數(shù)據(jù)包數(shù)量 | |
sys/class/net/eth0/statistics/tx_packets 傳輸?shù)臄?shù)據(jù)包數(shù)量 | |
sys/class/net/eth0/statistics/rx_bytes 接收的字節(jié)數(shù) | |
sys/class/net/eth0/statistics/tx_bytes 傳輸?shù)淖止?jié)數(shù) | |
sys/class/net/eth0/statistics/rx_dropped 收包時丟棄的數(shù)據(jù)包 | |
sys/class/net/eth0/statistics/tx_dropped 發(fā)包時丟棄的數(shù)據(jù)包 | |
復制代碼 |
Linux網(wǎng)卡的參數(shù)可以在/sys/class/net/進入對應網(wǎng)卡目錄去查看,比如網(wǎng)卡的MAC地址,速率(speed),MTU等等
鏈接:https://www.cnblogs.com/pgyLang/p/16360102.html
-
內(nèi)核
+關注
關注
3文章
1380瀏覽量
40359 -
Linux
+關注
關注
87文章
11336瀏覽量
210097 -
TCP
+關注
關注
8文章
1377瀏覽量
79183
原文標題:Linux TCP內(nèi)核參數(shù)設置與調(diào)優(yōu)(詳細)!
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論