linux內核網絡參數全解析(一)

本文收錄在我的博客  http://www.sskywatcher.com/blog/

Chapter 1. 如何設置參數

linux內核的網絡參數可以有倆個不同的方法設置. 第一個方法是通過現在大多數linux發行版默認安裝的 sysctl 工具. 另一個方法就是利用 /proc文件系統,這個方法應該是自從有了/proc文件系統以來所有的linux內核都支持的. 使用sysctl命令迴避使用/proc文件系統更復雜一些,這取決於你自己的使用習慣. 

1.1. 使用 sysctl 工具 

sysctl工具可以通過命令行來設置參數, 也可以通過配置文件來設置一個包含大量參數的集合. sysctl可以通過過命令行一次設置多個參數, 可以用來列出所有參數以及他們的當前值. 可以通過下列命令嘗試列出所有參數: sysctl -a 這將會列出所有參數以及他們的值,參數和值通過"="符號分隔. 實際上你會看到大量的參數列表, 但絕大多數與網絡無關.另外note一下'.'號,sysctl工具中, 將變量的"/" 用"."來代替用來分隔參數的層級。 如果你想查看某個指定的參數,參考下列命令: sysctl net.ipv4.tcp_sack 如果你想要通過sysctl工具設置一個制定的參數,需要指定 -w 選項以及你要制定的參數名稱,參數名稱後需要跟上新的值。參考下列實例: sysctl -w net.ipv4.tcp_sack=0 如果你想導入配置文件, 使用下列命令: sysctl -p 這條命令將導入 /etc/sysctl.conf 文件中中所有的參數配置. 如果不想使用默認的配置文件, 需要使用如下命令實例來指定你自己的配置文件: sysctl -p /etc/testsysctl.conf 下面給出一個sysctl配置文件的示例: # This is a comment net.ipv4.ip_forward = 0 net.ipv4.conf.all.rp_filter = 1 kernel.sysrq = 0

1.2. 使用 /proc

使用/proc文件系統是設置linux內核所有網絡參數的好方法, 使用bash中的echo和cat命令即可完成對指定參數的設置或者查看。 首先需要了解的是,/proc/sys/中列出的所有參數都可以修改用以改變系統的默認行爲. 我們感興趣的和網絡有關的參數全部位 於/proc/sys/net/ipv4目錄中. 使用下列命令器換到目標目錄: cd /proc/sys/net/ipv4 使用下列命令查看所有支持修改和查看的參數 ls 查看指定的參數值,你需要使用cat命令來插隊對應的文件,例如: [root@cnetos ipv4]$ cat ip_forward 0 [root@centos ipv4]$ 修改指定的參數參考如下方法: [root@centos ipv4]# echo "1" > ip_forward [root@centos ipv4]# 修改參數的值需要操作者擁有root權限. 否則會返回報錯信息: [root@centos ipv4]$ echo "1" > ip_forward bash: ip_forward: Permission denied [root@centos ipv4]$

Chapter 2. IPv4參數手冊

2.1. ip_autoconfig

2.2. ip_default_ttl

內核在封裝出口IP報文時填寫的默認TTL值. TTL代表一個IP報文在互聯上上被drop之前的存活時間. 當ip報文經過一個router, firewall, computer等等TTL都會減1. ip_default_ttl額初始默認值爲64, 這是一個相對比較恰當的值. 該參數的取值範圍是0-255,直接 設爲255是一個粗魯的行爲,直接設爲0則會導致數據包根本無法離開本機.除非你要去的目的中間要經 過很多跳,默認設置可能會導致超時,否則不應該修改該值。現在看來,還沒有一個保溫在網絡上的 路徑達到30跳以上, 所以並沒什麼修改默認值的必要.將TTL設置爲255被認爲是一個非常魯莽的行爲, 因爲這會導致一個報文在互聯網上存活極長的時間。如果圖中的2個router上存在小故障, 這個報文可 能會被來回反覆傳播很長的一段時間, 無端消耗掉帶寬資源。正常情況下,不要將該值設置爲100或以上。

2.3. ip_dynaddr

ip_dynaddr參數主要用來允許修復一些動態地址帶來的問題.通常用於使用撥號連接的情況。啓用該功能 可以使系統能夠立即改變IP包的源地址爲該IP地址,同時中斷原有的TCP對話而用新地址重新發出一個syn 請求包,開始新的TCP對話。在使用IP欺騙時,該參數可以立即改變地址僞裝爲新的IP地址。 這個參數值是一個整型數,但是隻有3個有效的狀態,分別是: 0, 1 , 2. 0 默認值,關閉該功能; 1 打開該功能。 任何非 0或1的值表示打開該功能並進入詳情模式,該模式使用debug日誌來記錄接口的變化以幫助定位問題。

2.4. ip_forward

The ip_forward用於控制是否開IP轉發功能。 我們可以打開該功能,讓pc的不同接口之間可以互相轉發數據包, 像防火牆或者路由器一樣工作。對於NAT 、防火牆、路由轉發、地址僞裝等等這類需要將報文發送到另一個網絡 的應用來說,這是一個非常重要的參數。 該參數的值爲boolen類型。 可接受的值爲0、1。 0 表示不啓用爲默認值; 1 表示啓用。 注意,這是一個非常特殊的參數,如果修改該參數的設置,將會重置所有的相關配置參數至默認狀態,想要關注 完整的精確狀態列表, 請查詢 RFC1122(主機)和RFC1812(路由器)。

2.5. ip_local_port_range

該參數爲兩個整型值,指定內核作爲客戶端建立連接時使用的本地端口號範圍。 默認值取決於你機器的物理內存。 當物理內存大於128M字節時, 默認端口範圍爲32768-61000. 如果物理內存小於138Mbytes,那麼默認範圍是 1024-4999,甚至更小一些。這個數字範圍決定了本地系統到其他外部系統的同時激活的不支持TCP時間戳擴展的連 接數量。如果你使能了tcp_tw_recycle(默認使能),那麼1024-4999的端口範圍主鉤子每秒2000個到外部系統的 支持時間戳的連接。這對於大多數人已經夠用了。

2.6. ip_no_pmtu_disc

使能ip_no_pmtu_disc參數時將禁用路徑MTU發現功能.對於大多數情況是沒問題的,單有些情況下可能會導致連接失敗. 所以默認設置爲關閉該參數。如果你發現了一那些類似的問題,你需要關閉該參數並且設置本地MTU爲一個可行的值。 請注意MTU和PMTU是兩個不同的概念。 MTU 告訴內核發送報文最大的傳輸單元值, 但是並非真跳鏈路上的最大傳輸單 元. PMTU發現功能嘗試發現到達特定主機的最大傳輸單元,這個值包含了所有中途的設備。 boolen類型 FALSE(0) 不啓用,默認值; TRUE(1) 啓用,即關閉路徑MTU發現

2.7. ip_nonlocal_bind

ip_nonlocal_bind 參數用來控制是否允許本地進程是可以綁定到非本地的IP地址. 在一些我們希望特定的應用或者程序 能夠監聽非本地IP地址的場景下非常有用, 比如嗅探其他特定自己的流量以確認一些不好的行爲。這個參數可能導致一些 應用異常。 boolean類型: 0 關閉該功能,默認值; 1 開啓。

2.8. ipfrag_high_thresh

ipfrag_high_thresh參數用來設置內核中可用來做IP分段重組的最大內存值。當達到該最大邊界時, 負責分段重組的handler將會丟棄 所有待處理的ip分段,直到佔用的內存恢復到最小邊界值。這意味着所有在此期間受到的分段都需要被重傳。 這是一個整形值, 整型值的範圍爲:0到2147483647,單位爲字節(bytes)。 默認值爲262144字節或者256kbytes, 大多數情況下該默認值可以滿足需求。 2.1.9. ipfrag_low_thresh This option has a lot to do with the ipfrag_high_thresh option. 這個值決定了可以再次開啓IP分段報文重組的內存邊界值。 總的來說就是,我們的分段重組的handler擁有一個隊列,隨着越來越多的報文在隊列中等待重組,這個隊列變得越來越長, 當這 個長度增長到ipfrag_high_thresh邊界值的時候,分段handler就會停止入隊更多的ip分段,直到該隊列長度迴歸到ipfrag_low_thresh。 這個措施可以有效防禦一種利用系統大量的分段報文來使系統過載導致異常終止的DOS攻擊。 integer類型,取值區間:0到2147483647單位爲字節(bytes); 預設默認值:196608 bytes或者192 kilobytes,該值必須小於ipfrag_high_thresh,否則將是非法的。

2.10. ipfrag_time

ipfrag_time參數用來配置一個IP分段可以在分段handler中保留的時間,單位爲秒(seconds)。這指的是ip分段已經被重組並且可能已 經被髮送到其他主機或者下一層之後不能再被重組的時間間隔。 integer類型,單位爲秒(seconds)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章