Linux TCP協議使用的變量

Linux /proc/sys/net/ipv4/* 變量

TCP變量:
somaxconn - INTEGER
    listen()的backlog參數的上限,在用戶態爲SOMAXCONN。默認是128。也可參考TCP socket調優的tcp_max_syn_backlog參數。
    
tcp_abort_on_overflow - BOOLEAN
    若是監聽服務太慢以至於不能接受新的鏈接了,就重置他們。默認值是FALSE。這意味着若是是由於一個burst而發生的溢出,鏈接能夠恢復。只有在你很是肯定的監聽服務端接受鏈接不能調整得更快的狀況下,可使能這個選項。使能這個選項可能會危害你服務器上的客戶端。
    
tcp_adv_win_scale - INTEGER
    以bytes/2^tcp_adv_win_scale統計緩衝區開銷。
    (if tcp_adv_win_scale > 0) 或者 bytes-bytes/2^(-tcp_adv_win_scale),
    若是它小於0。
    取值範圍在[-31,31],默認爲1。
    
tcp_allowed_congestion_control - STRING
    顯示/設置非特權進程的擁塞控制選項的可用性。這屬於tcp_available_congestion_control的一個子集。
    默認是reno和默認設置tcp_congestion_control。
    
tcp_app_win - INTEGER
    預留應用程序緩衝區窗口,爲max(window/2^tcp_app_win, mss)的大小。
    0 是特殊含義,表示不預留任何空間。
    默認值是31。
    
tcp_autocorking - BOOLEAN
    使能TCP自動抑制:
    當應用程序接二連三的調用小字節數write()/sendmsg()的系統調用,TCP會嘗試僅可能的合併這些小的寫操做,來下降發包的數量。這是在流裏面至少有一個優先級報文在端口隊列或者設備傳輸隊列排隊的狀況下完成的。應用程序在知道如何或什麼時候須要取消socket抑制的狀況下,可使用TCP_CORK選項來優化。
    默認值是1。

tcp_available_congestion_control - STRING
    顯示可用的已註冊的擁塞控制選項。更多擁塞控制算法模塊能夠用,可是沒有加載。
    
tcp_base_mss - INTEGER
    search_low的初始值,在封包層的路徑mtu探測時使用。若是使能了MTU探測,就這個值就是這個鏈接上的MSS。
    
tcp_congestion_control - STRING
    設置新鏈接的擁塞控制算法。算法"reno"一般能夠用,可是基於內核的配置也會附加額外可用的選項。默認是設置內核配置的那部分。
    對於passive鏈接,是繼承了監聽者的擁塞控制選項。
    可參考 setsockopt(listenfd, SOL_TCP, TCP_CONGESTION, "name" ...)
    
tcp_dsack - BOOLEAN
    運行TCP發送"duplicate" SACKs。
    
tcp_early_retrans - INTEGER
    使能ER(早期重傳),按照RFC5827。 當等待發送的數據的數量很小和沒有以前未發送的數據要被髮送時(好比使用了傳輸限制),ER會下降觸發快速重傳的閥值(門檻),一樣,控制TLP(Tail loss probe,尾部丟棄檢測)的使用,能夠將因爲尾部丟棄引發的RTOs事件轉化爲快速恢復(draft-dukkipati-tcpm-tcp-loss-probe-01)。
    可能的取值:
        0 禁止ER
        1 使能ER
        2 使能ER可是依照1/4的RTT值來延遲快速恢復和快速重傳。
        3 使能延遲的ER和TLP
    默認值是3。
    
tcp_ecn - INTEGER
    若是內核檢測到ECN(顯式擁塞通告)鏈接做弊,就會回退到 non-ECN。當前實現的是RFC3168, section 6.1.1.1描述的回退,可是也爲未來作了保留,實現額外的檢測機制。若是tcp_ecn或者每條路由的ECN設置未使能,這個值是無效的。
    默認是1.(fallback enabled)
    
tcp_fack - BOOLEAN
    使能FACK擁塞避免和快速重傳。
    若是tcp_sack沒有使能,這個值也是無效的。
    
tcp_fin_timeout - INTEGER
    一個孤立鏈接(沒有任何應用程序使用的鏈接)在FIN_WAIT_2狀態到鏈接終止的停留時間。當一個非孤立鏈接有一個徹底有效的"receive only"狀態時,一個處於FIN_WAIT_2狀態的孤立鏈接不會永遠等待遠端來關閉它的鏈接。
    默認是60秒。
    
tcp_frto - INTEGER
    使能RFC5682定義的轉發RTO-Recovery (F-RTO)(恢復時間?)。
    F-RTO是TCP重傳超時裏一個強制恢復算法。它在那種RTT波動很大的網絡(無線網絡)很是有用。F-RTO是隻修改發送端。它對對端沒有任何要求。
    默認是使用一個非0值表示使能,0表示禁止。
    
tcp_invalid_ratelimit - INTEGER
    限制已有鏈接爲了響應收到的無效TCP報文發送重複ack的速率,無效的緣由以下:
    (a)大於窗口的序列號
    (b)大於窗口的ACK序列號
    (c)PAWS(檢查重疊序列號)檢查失敗
    這個能減輕簡單的"ack loop"的DoS攻擊,那些懷有惡意的中間網絡設備能經過重寫TCP頭部字段引發每一個終端都認爲其餘人在發送無效的TCP分段,從而引起每一端(收發)都在發送由於無效分段形成的重複ACK。
    
    0 表示取消對無效分段發送重複ACK的速率限制;其餘值表示發送重複ACK的間隔,單位是毫秒。
    默認值是 500 (milliseconds)。
    
tcp_keepalive_time - INTEGER
    小心跳使能的時候,TCP發送心跳消息的頻率。
    默認值是2小時。
    
tcp_keepalive_probes - INTEGER
    TCP判斷一個鏈接已經斷開的心跳探測包數。
    默認是9。
    
tcp_keepalive_intvl - INTEGER
    心跳探測包的發送頻率。在探測開始後,經過乘以tcp_keepalive_probes獲得殺死不響應鏈接的時間。
    默認值是75秒。
    鏈接會在約11分鐘的重試以後終止。
    
tcp_l3mdev_accept - BOOLEAN
    使能子socket繼承L3主設備索引。使能這個選項容許一個'global'監聽的socket能夠穿越L3 master 域(好比VRFs)鏈接到繼承綁定到原始報文的L3域的監聽socket的socket。只有當內核編譯配置了CONFIG_NET_L3_MASTER_DEV選項纔有效。
    
tcp_low_latency - BOOLEAN
    如何設置這個變量,相對於高吞吐量而言,TCP協議棧會更喜歡低延遲。默認的是,這個選項是沒有設置的,這意味着更高的吞吐量是受歡迎的。可是,舉個栗子,在計算機集羣應用裏,更須要的是低延遲。
    默認是0。
    
tcp_max_orphans - INTEGER
    系統中那些沒有隸屬於任何用戶文件句柄的TCP socket的最大數目。若是這個數目被超過,孤立socket鏈接就會當即被重置而且打印出警告。這個限制的存在僅僅是爲了防止簡單DoS攻擊,你不能依賴這個或者人爲的下降這個限制,相反,你甚至須要增長這個限制(這個得在你增長了內存的狀況下)。
    若是網絡條件容許大於這個默認值,調整網絡服務爲linger,而且殺死這樣的狀態的鏈接。
    讓咱們重複一遍:每個孤立鏈接要吃掉約64K的內存。這個內存是不能swap的。
    
tcp_max_syn_backlog - INTEGER
    推薦的鏈接請求的最大數目,這些鏈接是沒有接收到客戶端的ack的鏈接。
    對於內存小的機器,最小值是128,而且它能夠隨着內存的比例增長。
    若是服務器遭受超負荷之苦,嘗試提升這個值。
    
tcp_max_tw_buckets - INTEGER
    系統同時保持的處於timewait的socket的最大數目。若是超過了這個數目,那麼這些time-wait socket會立刻被釋放並打印警告信息。這個限制的存在僅僅是爲了防止簡單DoS攻擊,你不能人爲的下降這個限制,相反,你甚至須要增長這個限制(這個得在你增長了內存的狀況下),若是網絡條件要求大於這個值的話。
    
tcp_mem - vector of 3 INTEGERs: min, pressure, max
    min:低於這個數目的頁的話,TCP不會有吃內存的煩惱。
    pressure:若是經過TCP分配的內存數量超過了這個值,TCP會減輕它的內存消耗和進入內存pressure模式,直到內存消耗下降到min。
    max:全部TCP sockets隊列容許的頁數目。
    
    默認是在boot階段的可用內存計算的
    
tcp_min_rtt_wlen - INTEGER
    跟蹤最低RTT的窗口化最小過濾器的長度。
    一個更小的窗口使得一個流能更快的得到新的(更高的)最低RTT當它移動到一個更長的路徑上(好比由於流量工程)。一個更長的窗口使得過濾器對RTT膨脹(好比短暫的擁塞)是更加具備抵抗力的。單位是秒。
    默認是300秒
   
tcp_moderate_rcvbuf - BOOLEAN
    若是設置這個變量,TCP會執行接收緩衝區的自動調節,嘗試自動的匹配這個要求能容納所有吞吐量的緩衝區大小,這個不能比tcp_rmem[2]更大。
    默認是使能的。
    
tcp_mtu_probing - INTEGER
    控制TCP封包層路徑MTU發現。有3個值:
    0 - 禁止
    1 - 默認禁止,當ICMP黑洞檢測是會啓用
    2 - 老是啓用,使用tcp_base_mss做爲初始MSS。
    
tcp_probe_interval - INTEGER
    控制TCP封包層路徑MTU發現重探測的頻率。按照RFC4821,默認是每10分鐘從新探測一次。
    
tcp_probe_threshold - INTEGER
    控制TCP封包層路徑MTU發現探測中止條件,是按照搜索範圍寬度的字節數來決定的、
    默認是8字節。
    
tcp_no_metrics_save - BOOLEAN
    默認的是,當鏈接關閉時,TCP在路由緩存裏保存各類鏈接的度量,這樣未來創建的鏈接能夠是這些做爲初始條件。一般,這能提高總體性能。若是設置了這個變量,TCP就不會緩存這些待關閉鏈接的度量了。
    
tcp_orphan_retries - INTEGER
    這個值影響一個本地關閉的TCP鏈接的超時時間,當RTO重傳仍沒收到ACK時。
    更多詳情參考 tcp_retries2
    
    默認值是8。
    若是你的機器運行了一個web服務器,你應該考慮下降這個值,由於socket消耗了大量的資源。linux

 

tcp_recovery - INTEGER
    這個值是一個啓用各類各樣的實驗性的丟包恢復特徵的位圖。
    RACK:0x1 表示對於丟包重傳和尾丟棄的快速檢測啓用RACK丟包檢測。
    
    默認是 0x1.
    
tcp_reordering - INTEGER
    TCP流的報文初始再排序級別。
    TCP協議棧能在初始值和tcp_max_reordering之間動態調整流重排序級別。
    默認是3.
    
tcp_max_reordering - INTEGER
    TCP流的報文初始再排序的最大級別。
    300是一個相對公平的值。若是使用負載均衡(像網卡bonding rr模式)的話,你能夠增長這個值。
    默認是300
    
tcp_retrans_collapse - BOOLEAN
    在某些TCP協議棧重傳嘗試發送更大的報文。    
    
tcp_retries1 - INTEGER
    這個值影響因爲某些錯誤引發的沒有ACK的RTO重傳和上報這些錯誤給網路層的時間。
    RFC 1122推薦至少3次重傳,這是個默認值。
    
tcp_retries2 - INTEGER
    這個值影響當RTO重傳仍沒收到ACK的TCP鏈接的超時時間。
    給定一個值N,假定一個TCP鏈接帶有TCP_RTO_MIN的初始RTO的指數值會重傳N次,在第(N+1)個RTO時殺死這個鏈接。
    
    默認值是15,生成一個假想的超時時間是924.6秒,和一個有效超時的下限。
    當超過這個假設的超時時間,TCP會在第一個RTO就會超時。
    
    RFC1122推薦至少超時時間有100秒,至關於這個值等於8.
    
tcp_rfc1337 - BOOLEAN
    若是設置了這個變量,TCP協議棧按照RFC1337運行。若是沒有設置,就不保證按RFC運行了,可是阻止TCP TIME_WAIT。
    默認是0.    web

 

tcp_rmem - vector of 3 INTEGERs: min, default, max算法

  min:  TCP sockets使用的接收緩衝區的最小大小。這個大小是對每一個TCP socket都有保障的,即便在內存調節減壓的時候。windows

  默認是1個頁。緩存

 

  default:TCP sockets使用的接收緩衝區的初始大小。這個值在其餘協議使用以前會重寫net.core.rmem_default這個字段。安全

  默認是87380字節。這個值tcp_adv_win_scale的窗口默認大小爲65535和tcp_app_win:0,並小於默認的tcp_app_win。服務器

 

  max:TCP sockets使用的接收緩衝區,容許自動選擇接收者的最大大小。這個值不會重寫net.core.rmem_max的內容。調用setsockopt()並使用SO_RCVBUF能夠禁止自動調節socket的接收緩衝區大小,這種狀況下這個值會被忽略。cookie

  默認是在87380B 和 6MB之間,依賴RAM的大小。網絡

 

tcp_sack - BOOLEANapp

  啓用選擇性的ACK,SACK. 須要注意的是隻有收到失序的分組時纔會可能會發送SACK,TCP的ACK仍是創建在累積確認的基礎上的。

 

tcp_slow_start_after_idle - BOOLEAN

  若是設置了該變量,TCP支持RFC2861和會使得擁塞窗口在一個空閒期會超時。空閒期的定義是基於當前RTO。若是沒有設置,擁塞窗口就不會在空閒以後超時。

  默認值是1.

 

tcp_stdurg - BOOLEAN

  利用主機要求解釋TCP緊急指針字段。大多數主機使用比較老的BSD聲明,所以若是打開這個開關,在linux上你可能不能正確的跟他們通訊。

  默認是:false

 

tcp_synack_retries - INTEGER

  對於一個被動的TCP鏈接試圖被重傳的SYNACK的次數。這個值不該該大於255。默認值是5,這對應於31秒直到重傳伴隨着1秒的當前初始RTO。對於一個被動的TCP鏈接的最後的超時將會在63秒以後發生。

 

tcp_syncookies - BOOLEAN    只有在內核編譯的時候開啓了CONFIG_SYN_COOKIES選項纔有效。當一個socket的syn backlog 隊列溢出的時候會發出syncookies。這個主要是針對防範'SYN flood attack'。    默認是1.    注意,syncookies是一個退化的設備。    它不能在那些基於正常鏈接創建速率形成高負載的服務器上使用。若是你在日誌裏發現SYN  flood警告,但經過調查研究是因爲負載過多的正常鏈接形成的,你應該去調整其餘參數直到警告消失。        syncookies嚴重違反了TCP協議,不容許使用TCP擴展,能致使一些服務嚴重退化(如SMTP relaying),不是那麼明顯看的出來的,可是你的客戶端和中繼會告訴你。若是你在日誌看到了SYN flooding告警,但不是真的泛洪了,那就是你的服務器嚴重配置錯了。        若是你想測試syncookies的影響,你可設置這個值爲2.    tcp_fastopen - INTEGER    啓用TCP Fast Open(RFC7413)在opening SYN報文發送和接收數據。    客戶端上默認值0x1是啓用。客戶端應該使用設置了MSG_FASTOPEN的sendmsg和sendto,而不是使用connect在SYN裏發送數據。        在服務端默認值是0x2不啓用。而後不論是用另一個值0x400來啓用全部監聽者或者經過TCP_FASTOPEN選項來啓用單獨的監聽者,該選項的是syn-data backlog的長度。        這些值(bitmap)以下:    0x1 : 在客戶端,啓用客戶端在opening SYN時發送數據。    0x2 : 在服務端,啓用服務端支持,容許在一個SYN報文裏接收數據並在3次握手完成以前傳遞給應用程序。    0x4 : 在客戶端,無論cookie能不能用和沒有cookie選項的狀況下,都在opening SYN裏發送數據。        0x200 : 在服務端,接收任何cookie選項描述的data-in-syn w/o     0x400 : 在服務端,默認啓用全部監聽者去支持Fast Open,不須要用顯式的TCP_FASTOPEN socket選項。        默認是0x1。    注意,其餘的客戶端和服務端特性只有在基本的支持(0x1和0x2)各自啓用了纔有做用。    tcp_syn_retries - INTEGER    一個試圖重傳的活動TCP鏈接的初始SYNs次數。這個值不該該大於127.默認值是6,相對於上一次具備1秒初始RTO的重傳間隔63秒。具備最終超時的活動TCP鏈接的嘗試會在127秒後發生。    tcp_timestamps - INTEGER    啓用RFC1323裏定義的時間戳。    0 : 禁止    1 : 啓用RFC1323裏定義的時間戳,並對每一個鏈接使用隨機的偏移量而不是使用當前時間。    2 : 和1同樣,可是沒有隨機偏移。    默認是1.    tcp_min_tso_segs - INTEGER    每一個TSO幀的分段個數。    自從linux-3.12開始,TCP就自動定義TSO幀的大小,依據於流的速率,取代了以前64Kbytes報文填充的作法。對於一些特定的用法,它不能強制TCP去構建大的TSO幀。注意,若是可用的窗口過小的話,TCP協議棧可能會分割過大的TSO報文。    默認值是2.    tcp_pacing_ss_ratio - INTEGER    TCP協議棧會按照當前速率的比例來設置sk->sk_pacing_rate的值。(current_rate = cwnd * mss / srtt)。若是TCP是慢啓動的話,tcp_pacing_ss_ratio用來使TCP探測更大的速率,假定CWND是其餘RTT的2倍。    默認值是200.    tcp_pacing_ca_ratio - INTEGER    TCP協議棧會按照當前速率的比例來設置sk->sk_pacing_rate的值。(current_rate = cwnd * mss / srtt)。若是TCP處於擁塞避免時期,tcp_pacing_ca_ratio用來使TCP探測更大的吞吐量。    默認值是120.    tcp_tso_win_divisor - INTEGER    這個控制一個TSO幀消耗的擁塞窗口的比例。這個參數的設置是在突發性和構建更大的TSO幀之間作選擇。    默認是3.    tcp_tw_recycle - BOOLEAN    使能快速回收TIME-WAIT的sockets。默認值是0。在沒有技術專家的建議或要求下不要改變這個值。    tcp_tw_reuse - BOOLEAN    從協議安全的視角容許新的鏈接重用TIME-WAIT的sockets。默認值是0.在沒有技術專家的建議或要求下不要改變這個值。    tcp_window_scaling - BOOLEAN    啓用RFC1323定義的窗口縮放。    tcp_wmem - vector of 3 INTEGERs: min, default, max    min:預留給TCP socket發送緩衝區的內存數量。每一個TCP socket在建立後都有權使用。    默認是1page。        default:TCP socket使用的發送緩衝區的初始大小。這個值會重寫其餘協議使用的字段net.core.wmem_default。它一般會小於net.core.wmem_default。    默認是16K。        max:TCP socket發送緩衝區容許自動調整的內存最大數量。這個值不會重寫net.core.wmem_max。調用setsockopt()設置SO_SNDBUF會禁止自動調整socket的發送緩衝區大小,在這種狀況下這個值是被忽略的。    默認是64K和4MB之間,依賴RAM的大小。    tcp_notsent_lowat - UNSIGNED INTEGER    因爲TCP_NOTSENT_LOWAT socket選項,TCP socket能夠控制它的寫隊列裏未發送的字節的數量。 若是未發送的字節數低於一個socket設置的值,而且它的寫隊列沒有滿,poll()/select()/epoll()上報POLLOUT事件。即便達到了這個限制,sendmsg()也不會添加新的緩衝區。        這個全局變量控制socket未發包數據的數量並不使用TCP_NOTSENT_LOWAT。對於這些sockets,對全局變量的修改會當即生效。        默認是UINT_MAX(0xFFFFFFFF)    tcp_workaround_signed_windows - BOOLEAN    若是設置了這個變量,假定沒有收到窗口伸縮選項,意味着遠程TCP已經斷開並把窗口設置爲負數。若是沒設置,即便沒有收到窗口伸縮選項,也不會認爲遠程TCP已經斷開。    默認是0.    tcp_thin_linear_timeouts - BOOLEAN    啓用對於thin streams的線性超時的動態觸發。若是設置了,經過檢查超時重傳去決定這個流是否是細的(傳輸中少於4個包)。若是一個流被發現是細的,在指數補償以前,完成6個線性超時。這個改進了那些非聚合的細流的重傳延時,一般發現是基於時間的。    默認是0。    tcp_thin_dupack - BOOLEAN    啓用在細流的一個dupACK以後的重傳動態觸發。若是設置了,會在基於收到一個dupACK的檢查來決定一個是否是細流(傳輸中少於4個包)。若是發現一個流是細的,那麼在接收到第一個dupACK就會重傳數據。    這個改進了那些非聚合的細流的重傳延時,一般發現是基於時間的。    默認是0。    tcp_limit_output_bytes - INTEGER    控制每一個tcp socket的TCP小隊列限制。    TCP 大塊發送者趨向於發送過程當中增長報文直到它收到丟失通告。在自動調整SNDBUF的狀況下,會在本機的qdisc/device裏入隊大量的報文,對於典型的pfifo_fast qdiscs,這會損害其餘流的時延。        tcp_limit_output_bytes 會限制qdisc/device裏的字節數來人爲下降RTT/cwnd和下降緩衝區膨脹。    默認是262144.    tcp_challenge_ack_limit - INTEGER    限制每秒發送的挑戰ACK的數目,就像RFC5961裏推薦的同樣,增長tcp的健壯性來封堵 In-Window Attacks。    默認是100.

相關文章
相關標籤/搜索