1. 程式人生 > >TCP/IP 參數配置詳解

TCP/IP 參數配置詳解

time 支持 ack over 個數 col all tro onf

了解LINUX TCP/IP的參數配置是網絡性能調優的前提,但是要清楚的記得這幾十個參數也不容易,為了方便下次查看,所以查找了linux的manual手冊和網上的資料。主要列出了“/proc/sys/net/ipv4”下面的參數。

1.IP 參數

ip_always_defrag: 在LINUX早期的版本中出現,現在已經沒有了,就不作說明了。

ip_autoconfig:這個沒有文檔說明。

ip_default_ttl (整數; 默認值:64; since Linux 2.2):這個是IP數據報的最大生存周期, 默認為64,每經過一個路由器減1,直到為0,數據包丟掉。可以針對每個socket進行設置。

ip_dynaddr (布爾; 默認值: 0(disabled); since Linux 2.0.31):開啟動態的socket IP 地址,可以偽裝網口的地址為新的IP 地址,主要用於撥號上網。 0 表示disable, 1表示enable,2表示開啟冗余模式。

ip_forward (布爾; 默認值:disabled; since Linux 1.2):開啟IP地址的轉發功能,也可以針對每個網口進行設置, (目標地址不可達的數據報,不會轉發)。

ip_local_port_range (since Linux 2.2):這個文件包含了兩個數值用來表示本地端口的取值範圍,如果在這範圍的臨時端口號用完,系統會出錯。這個端口區間不會和偽造的端口產生沖突。但是任意選擇端口區間也是有問題的,一般要大於1024,最好是大於4096。這樣避免與公用的端口沖突,也會減小防火墻對其的影響。

ip_no_pmtu_disc (布爾; 默認值: disabled; since Linux 2.2):如果開啟功能,將不做路徑MTU探測功能。由於網絡防火墻可能丟包,路由器有故障,導致路徑MTU探測失敗。但是最好的辦法還是解決路由故障,而不是關掉這個功能,不做路徑MTU探測將導致網絡消耗過大。

ip_nonlocal_bind (布爾; 默認值: disabled; since Linux 2.4):如何開啟,將會允許socket綁定非本地的IP,這個有時非常有用,但是可能會導致上層應用程序錯誤。
ip6frag_time (整數; 默認值: 30): 保存IPV6 分片包在內存中的時間,以秒為單位。
ip6frag_secret_interval

(整數; 默認值: 600):重生IPV6分片包的hash secret 間隔時間,以秒為單位。
ipfrag_high_thresh (整數), ipfrag_low_thresh (整數):如果IP 分片隊列達到了ipfrag_high_thresh,這個隊列將會被減少為 ipfrag_low_thresh, 包含具有字節數的整數。

2.TCP 參數

tcp_abc(整數; 默認值: 0; Linux 2.6.15 to Linux 3.8): 控制適當字節數,定義在RFC 3465, ABC是一種針對部分確認應答減慢增長擁塞窗口(cwnd)的方法。可能的值有 0: 每個確認應答增加擁塞窗口(cwnd)(沒有開啟ABC) 1: 每一個最大傳輸段應答增加擁塞窗口一次。 2:允許增加擁塞控制窗口兩次,如果應答是為了補償延時應答的針對兩個段的應答。

tcp_abort_on_overflow (布爾; 默認值: disabled; since Linux 2.4): 如果監聽服務太慢並且不能持續接收服務,將開啟重連。 這意味著如果發生突發溢出,這個連接將會被恢復。開啟這個選項僅當你確信這個監聽守護進程不能被調整到更快的接收服務。開啟這個選項將傷害到客戶端。
tcp_adv_win_scale (整數; 默認值: 2; since Linux 2.4):如果tcp_adv_win_scale大於0, 計算緩沖區大小為bytes/2^tcp_adv_win_scale, 如果tcp_adv_win_scale小於等於0,計算緩沖區bytes-bytes/2^(-tcp_adv_win_scale)。 socket 接收緩存空間是在應用程序和內核之間分享的, TCP維護部分緩存作為TCP窗口,這個接收窗口大小被用於通告連接對端。剩下的緩存空間作為應用程序緩存,用於隔離網絡的調度和應用程序延遲.tcp_adv_win_scale默認值是2,表明了應用程序的緩存占總緩存的1/4。

tcp_allowed_congestion_control(字符串; 默認值: see text; since Linux 2.4.20):顯示/設置可用的擁塞控制算法選項非特權的進程(請參閱TCP_CONGESTION)。列表中的項目是由空格分隔並由換行符終止。該列表是列在其中的一個子集tcp_available_congestion_control。這個列表的默認值是“reno”加上默認設置tcp_congestion_control。

tcp_autocorking (布爾; 默認值: enabled; since Linux 3.14): 如果選項開啟,內核為了減少發送包的數量,會嘗試盡可能多的合並小的寫入。至少一個數據包在Qdisc或設備傳輸隊列等待,才能進行合並。應用程序也可以通過在socket中設置TCP_CORK來優化自己的行為。
tcp_available_congestion_control (字符串; read-only; since Linux2.4.20): 這是一個註冊的擁塞控制算法列表,每一項是被空格分隔並由換行符終止。這個列表是tcp_allowed_congestion_control的限制集,更多的算法會被當作模塊可用,但是不會被加載進去。
tcp_app_win (整數; 默認值: 31; since Linux 2.4):該變量定義了多少TCP窗口字節被用於做緩存開銷。最大值為(window/2^tcp_app_win, mss), 0表示沒有保留。
tcp_base_mss (整數; 默認值: 512; since Linux 2.6.17):search_low的初始值, 被用於MTU路徑探測,如果MTU路徑探測開啟,這個初始MSS將被連接使用。

tcp_bic (布爾; 默認值: disabled; Linux 2.4.27/2.6.6 to 2.6.13):開啟BIC TCP擁塞控制算法。BIC-TCP的提出者們發現了TCP擁塞窗口調整的一個本質:那就是找到最適合當前網絡的一個發送窗口,為了找到這個窗口值,TCP采取的方式是(擁塞避免階段)每RTT加1,緩慢上升,丟包時下降一半,接著再來慢慢上升。BIC-TCP的提出者們看穿了事情的本質,其實這就是一個搜索的過程,而TCP的搜索方式類似於逐個遍歷搜索方法,可以認為這個值是在1和一個比較大的數(large_window)之間,既然在這個區間內需要搜索一個最佳值,那麽顯然最好的方式就是二分搜索思想。BIC-TCP就是基於這樣一個二分思想的:當出現丟包的時候,說明最佳窗口值應該比這個值小,那麽BIC就把此時的cwnd設置為max_win,把乘法減小後的值設置為min_win,然後BIC就開始在這兩者之間執行二分思想--每次跳到max_win和min_win的中點。

tcp_bic_low_window (整數; 默認值: 14; Linux 2.4.27/2.6.6 to 2.6.13):設置BIC TCP開啟擁塞窗口閾值,低於這個閾值BIC TCP的行為將和其他TCP reno一樣。
tcp_bic_fast_convergence (布爾; 默認值: enabled; Linux 2.4.27/2.6.6 to 2.6.13):強制BIC TCP更快地響應擁塞的變化窗口。允許兩個流共享相同的連接匯聚更快。
tcp_congestion_control (字符串; 默認值: see text; since Linux 2.4.13): 設置默認的被用於新的連接的擁塞控制算法,默認算法“reno”將一直存在,其他的算法需要依賴於內核配置,對於這個文件的默認值是內核配置的一部分。
tcp_dma_copybreak (整數; 默認值: 4096; since Linux 2.6.24):更低限制的socket的讀取大小(byte為單位)可能被轉至DMA拷貝引擎,如果在系統內核設置了CONFIG_NET_DMA選項。
tcp_dsack (布爾; 默認值: enabled; since Linux 2.4):支持RFC2883中的重復SACK特性。
tcp_ecn (整數; 默認值: see below; since Linux 2.4):開啟RFC3168的顯式擁塞通知

未完待續。。。。

TCP/IP 參數配置詳解