❶ 如何修改系統tcp參數
一、查看linux系統內核方法:
1.uname -a
2.uname -r
3.cat /proc/version
二、linux下tcp相關參數的設置
1.tcp相關參數存放文件
1)在/proc/sys/net/ipv4目錄下,文件以參數名命名。
2)/etc/sysctl.sys中
2.修改方法
procfs interface和sysctl interface
1)可以直接修改/proc/sys/net/ipv4目錄下的參數文件中的值,但是這種方法在重啟後失效。
echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time
sysctl -w \
> net.ipv4.tcp_keepalive_time=600 \
> net.ipv4.tcp_keepalive_intvl=60 \
> net.ipv4.tcp_keepalive_probes=20
2)系統重啟後從/etc/sysctl.sys中讀取相應數據初始化/proc/sys/net/ipv4目錄下的對應文件內容,要想在重啟後生效,可通過修改sysctl.conf文件中的內容變數名與文件名對應比如:/proc/sys/net/ipv4/tcp_retries2 對應變數名為net.ipv4.tcp_retries2 = 10
3)在syscrl.conf中重啟後才能生效,如果想不重啟生效需要運行sysctl -p命令
三、linux下相關參數的查看
1. cat /proc/sys/net/ipv4/tcp_keepalive_time(tcp_keepalive_intvl..)
2. # sysctl \
> net.ipv4.tcp_keepalive_time \
> net.ipv4.tcp_keepalive_intvl \
> net.ipv4.tcp_keepalive_probes
3. sysctl -a顯示/proc/sys下的內容
4. sysctl -p 顯示/etc/sysctl.conf文件中的內容
❷ linux tcp keepalive 如何 設置 參數
對
於一個已經建立的tcp連接。如果在keepalive_time時間內雙方沒有任何的數據包傳輸,則開啟keepalive功能的一端將發送
keepalive數據包,若沒有收到應答,則每隔keepalive_intvl時間再發送該數據包,發送keepalive_probes次。一直沒有
收到應答,則發送rst包關閉連接。若收到應答,則將計時器清零。
❸ linux中的網路配置。。
一.安裝和配置網路設備
在安裝linux時,如果你有網卡,安裝程序將會提示你給出tcp/ip網路的配置參數,如本機的 ip地址,預設網關的ip地址,DNS的ip地址等等.根據這些配置參數,安裝程序將會自動把網卡(linux系統首先要支持)驅動程序編譯到內核中去.但是我們一定要了解載入網卡驅動程序的過程,那麼在以後改變網卡,使用多個網卡的時候我們就會很容易的操作.網卡的驅動程序是作為模塊載入到內核中去的,所有linux支持的網卡驅動程序都是存放在目錄/lib/moles/(linux版本號)/net/ ,例如inter的82559系列10/100M自適應的引導網卡的驅動程序是eepro100.o,3COM的3C509 ISA網卡的驅動程序是3C509.o,DLINK的pci 10網卡的驅動程序是via-rhine.o,NE2000兼容性網卡的驅動程序是ne2k-pci.o和ne.o.在了解了這些基本的驅動程序之後,我們就可以通過修改模塊配置文件來更換網卡或者增加網卡.
1. 修改/etc/conf.moles 文件
這個配置文件是載入模塊的重要參數文件,大家先看一個範例文件
#/etc/conf.moles
alias eth0 eepro100
alias eth1 eepro100
這個文件是一個裝有兩塊inter 82559系列網卡的linux系統中的conf.moles中的內容.alias命令表明以太口(如eth0)所具有的驅動程序的名稱,alias eth0 eepro100說明在零號乙太網口所要載入的驅動程序是eepro100.o.那麼在使用命令 modprobe eth0的時候,系統將自動將eepro100.o載入到內核中.對於pci的網卡來說,由於系統會自動找到網卡的io地址和中斷號,所以沒有必要在conf.moles中使用選項options來指定網卡的io地址和中斷號.但是對應於ISA網卡,則必須要在conf.moles中指定硬體的io地址或中斷號, 如下所示,表明了一塊NE的ISA網卡的conf.moles文件.
alias eth0 ne
options ne io=0x300 irq=5
在修改完conf.moles文件之後,就可以使用命令來載入模塊,例如要插入inter的第二塊網卡:
#insmod /lib/moles/2.2.14/net/eepro100.o
這樣就可以在以太口載入模塊eepro100.o.同時,還可以使用命令來查看當前載入的模塊信息:
[root@ice /etc]# lsmod
Mole Size Used by
eepro100 15652 2 (autoclean)
返回結果的含義是當前載入的模塊是eepro100,大小是15652個位元組,使用者兩個,方式是自動清除.
2. 修改/etc/lilo.conf文件
在一些比較新的linux版本中,由於操作系統自動檢測所有相關的硬體,所以此時不必修改/etc/lilo.conf文件.但是對於ISA網卡和老的版本,為了在系統初始化中對新加的網卡進行初始化,可以修改lilo.conf文件.在/etc/lilo.conf文件中增加如下命令:
append="ether=5,0x240,eth0 ether=7,0x300,eth1"
這條命令的含義是eth0的io地址是0x240,中斷是5,eth1的io地址是0x300,中斷是7.
實際上,這條語句來自在系統引導影像文件時傳遞的參數,
LILO: linux ether=5,0x240,eth0 ether=7,0x300,eth1
這種方法也同樣能夠使linux系統配置好兩個網卡.類似的,在使用三個以上網卡的時候,也可以依照同樣的方法.
在配置好網卡之後,就應該配置TCP/IP的參數,在一般情況下,在安裝linux系統的同時就會提示你配置網路參數.但是之後如果我們想要修改網路設置,可以使用如下的命令:
#ifconfig eth0 A.B.C.D netmask E.F.G.H
A.B.C.D 是eth0的IP地址,E.F.G.H是網路掩碼.
其實,在linux系統中我們可以給一塊網卡設置多個ip地址,例如下面的命令:
#ifconfig eth0:1 202.112.11.218 netmask 255.255.255.192
然後,使用命令#ifconfig -a 就可以看到所有的網路介面的界面:
eth0 Link encap:Ethernet HWaddr 00:90:27:58:AF:1A
inet addr:202.112.13.204 Bcast:202.112.13.255 Mask:255.255.255.192
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:435510 errors:0 dropped:0 overruns:0 frame:2
TX packets:538988 errors:0 dropped:0 overruns:0 carrier:0
collisions:318683 txqueuelen:100
Interrupt:10 Base address:0xc000
eth0:1 Link encap:Ethernet HWaddr 00:90:27:58:AF:1A
inet addr:202.112.11.218 Bcast:202.112.11.255 Mask:255.255.255.192
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:10 Base address:0xc000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:2055 errors:0 dropped:0 overruns:0 frame:0
TX packets:2055 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
我們看到網路介面有三個,eth0 , eth0:1,lo,eth0是真實的乙太網絡介面,eth0:1和eth0是同一塊網卡,只不過綁定了另外的一個地址,lo是會送地址。eth0和eth0:1可以使用不同網段的ip地址,這在同一個物理網段卻使用不同的網路地址的時候十分有用。
另外,網卡有一種模式是混雜模式(prosimc),在這個模式下,網卡將會接收網路中所有的數據包,一些linux下的網路監聽工具例如tcpmp,snort等等都是把網卡設置為混雜模式.
ifconfig命令可以在本次運行的時間內改變網卡的ip地址,但是如果系統重新啟動,linux仍然按照原來的默認的設置啟動網路介面。這時候,可以使用netconfig或netconf命令來重新設置默認網路參數。netconfig 命令是重新配置基本的tcp/ip參數,參數包括是否配置為動態獲得ip地址(dhcpd和bootp),網卡的ip地址,網路掩碼,預設網關和首選的域名伺服器地址。netconf命令可以詳細的配置所有網路的參數,分為客戶端任務,伺服器端任務和其他的配置三個部分,在客戶端的配置中,主要包括基本主機的配置(主機名,有效域名,網路別名,對應相應網卡的ip地址,網路掩碼,網路設備名,網路設備的內核驅動程序),DNS地址配置,預設網關的地址配置,NIS地址配置,ipx介面配置,ppp/slip的配置等等。在伺服器端配置中,主要包括NFS的配置,DNS的配置,ApacheWebServer配置,Samba的配置和Wu-ftpd的配置。在其他的配置選項中,一個是關於/etc/hosts文件中的主機配置,一個是關於/etc/networks文件中的網路配置信息,最後是關於使用linuxconf配置的信息。
在linuxconf命令下,同樣也可以配置網路信息,但是大家可以發現,linuxconf程序是調用netconf來進行網路配置的。
另外,在/etc/sysconfig/network-scripts目錄下存放著系統關於網路的配置文件,範例如下:
:<br><br>
ifcfg-eth0* ifdown-post* ifup-aliases* ifup-ppp*
ifcfg-eth1* ifdown-ppp* ifup-ipx* ifup-routes*
ifcfg-lo* ifdown-sl* ifup-plip* ifup-sl*
ifdown@ ifup@ ifup-post* network-functions
ifcfg-eth0是以太口eth0的配置信息,它的內容如下:
DEVICE="eth0" /*指明網路設備名稱*/
IPADDR="202.112.13.204" /*指明網路設備的ip地址*/
NETMASK="255.255.255.192" /*指明網路掩碼*/
NETWORK=202.112.13.192 /*指明網路地址*/
BROADCAST=202.112.13.255 /*指明廣播地址*/
ONBOOT="yes" /*指明在系統啟動時是否激活網卡*/
BOOTPROTO="none" /*指明是否使用bootp協議*/
所以,我們也可以修改這個文件來進行linux下網路參數的改變。[/SIZE]
--------------------------------------------------------------------------------
二 網路服務的配置
在這一部分,我們並不是詳細的介紹具體的網路伺服器(DNS,FTP,WWW,SENDMAIL)的配置(那將是巨大的篇幅),而是介紹一下與linux網路服務的配置相關的文件.
1. LILO的配置文件
在linux系統中,有一個系統引導程序,那就是lilo(linux loadin),利用lilo可以實現多操作系統的選擇啟動.它的配置文件是/etc/lilo.conf.在這個配置文件中,lilo的配置參數主要分為兩個部分,一個是全局配置參數,包括設置啟動設備等等.另一個是局部配置參數,包括每個引導影像文件的配置參數.在這里我就不詳細介紹每個參數,特別的僅僅說明兩個重要的參數:password和restricted選項,password選項為每個引導的影像文件加入口令保護.
我們都知道,在linux系統中有一個運行模式是單用戶模式,在這個模式下,用戶是以超級用戶的身份登錄到linux系統中.人們可以通過在lilo引導的時候加入參數(linux single 或linux init 0)就可以不需要口令直接進入單用戶模式的超級用戶環境中,這將是十分危險的.所以在lilo.conf中增加了password的配置選項來為每個影像文件增加口令保護.
你可以在全局模式中使用password選項(對所有影像文件都加入相同的口令),或者為每個單獨的影像文件加入口令.這樣一來,在每次系統啟動時,都會要求用戶輸入口令.也許你覺得每次都要輸入口令很麻煩,可以使用restricted選項,它可以使lilo僅僅在linux啟動時輸入了參數(例如 linux single)的時候才會檢驗密碼.這兩個選項可以極大的增加系統的安全性,建議在lilo.conf文件中設置它們.
由於password在/etc/lilo.conf文件是以明文存放的,所以必須要將/etc/lilo.conf文件的屬性改為僅僅root可讀(0400).
另外,在lilo的早期版本中,存在著引導扇區必須存放到前1024柱面的限制,在lilo的2.51版本中已經突破了這個限制,同時引導界面也變成了圖形界面更加直觀.將最新版本下載解壓後,使用命令make" 後,使用命令make install即可完成安裝.注意: 物理安全才是最基本的安全,即使在lilo.conf中增加了口令保護,如果沒有物理安全,惡意闖入者可以使用啟動軟盤啟動linux系統.
2. 域名服務的配置文件
(1)/etc/HOSTNAME 在這個文件中保存著linux系統的主機名和域名.範例文件
ice.xanet.e.cn
這個文件表明了主機名ice,域名是xanet.e.cn
(2)/etc/hosts和/etc/networks文件 在域名服務系統中,有著主機表機制,/etc/hosts和/etc/networks就是主機表發展而來在/etc/hosts中存放著你不需要DNS系統查詢而得的主機ip地址和主機名的對應,下面是一個範例文件:
# ip 地址 主機名 別名
127.0.0.1 localhosts loopback
202.117.1.13 www.xjtu.e.cn www
202.117.1.24 ftp.xjtu.e.cn ftp
在/etc/networks 中,存放著網路ip地址和網路名稱的一一對應.它的文件格式和/etc/hosts是類似的
(3)/etc/resolv.conf 這個文件是DNS域名解析器的主要配置文件,它的格式十分簡單,每一行由一個主關鍵字組成./etc/resolv.conf的關鍵字主要有:
domain 指明預設的本地域名,
search 指明了一系列查找主機名的時候搜索的域名列表,
nameserver 指明了在進行域名解析時域名伺服器的ip地址.下面給出一個範例文件:
#/etc/resolv.conf
domain xjtu.e.cn
search xjtu.e.cn e.cn
nameserver 202.117.0.20
nameserver 202.117.1.9
(4)/etc/host.conf 在系統中同時存在著DNS域名解析和/etc/hosts的主機表機制時,由文件/etc/host.conf來說明了解析器的查詢順序.範例文件如下:
#/etc/host.conf
order hosts,bind #解析器查詢順序是文件/etc/hosts,然後是DNS
multi on #允許主機擁有多個ip地址
nospoof on #禁止ip地址欺騙
3. DHCP的配置文件
/etc/dhcpd.conf是DHCPD的配置文件,我們可以通過在/etc/dhcpd.conf文件中的配置來實現在區域網中動態分配ip地址,一台linux主機設置為dhcpd伺服器,通過鑒別網卡的MAC地址來動態的分配ip地址.範例文件如下:
option domain-name "chinapub.com";
use-host-decl-names off;
subnet 210.27.48.0 netmask 255.255.255.192
{
filename "/tmp/image";
host dial_server
{
hardware ethernet 00:02:b3:11:f2:30;
fixed-address 210.27.48.8;
filename "/tmp/image";
}
}
在這個文件中,最主要的是通過設置的硬體地址來鑒別區域網中的主機,並分配給它指定的ip地址,hardware ethernet 00:02:b3:11:f2:30指定要動態分配ip的主機得網卡的MAC地址,fixed-address 210.27.48.8指定分配其ip地址。filename "/tmp/image"是通過tftp服務,主機所要得到的影像文件,可以通過得到的影像文件來引導主機啟動。
4. 超級守候進程inetd的配置
在linux系統中有一個超級守候進程inetd,inetd監聽由文件/etc/services指定的服務的埠,inetd根據網路連接請求,調用相應的服務進程來相應請求.在這里有兩個文件十分重要,/etc/inetd.conf和/etc/services,文件/etc/services定義linu系統中所有服務的名稱,協議類型,服務的埠等等信息,/etc/inetd.conf是inetd的配置文件,由它來指定那些服務可以由inetd來監聽,以及相應的服務進程的調用命令.首先介紹一下/etc/services文件,/etc/services文件是一個服務名和服務埠對應的資料庫文件,如下面所示:/etc/services文件
(實際上,以上僅僅是/etc/services的一部分,限於篇幅沒有全部寫出)
在這個文件中,為了安全考慮,我們可以修改一些常用服務的埠地址,例如我們可以把telnet服務的埠地址改為52323,www的埠改為8080,ftp埠地址改為2121等等,這樣僅僅需要在應用程序中修改相應的埠即可.這樣可以提高系統的安全性.
/etc/inetd.conf文件是inetd的配置文件, 首先要了解一下linux伺服器到底要提供哪些服務。一個很好的原則是" 禁止所有不需要的服務",這樣黑客就少了一些攻擊系統的機會./etc/inetd.conf範例文件
大家看到的這個文件已經修改過的文件,除了telnet 和ftp服務,其他所有的服務都被禁止了.在修改了/etc/inetd.conf之後,使用命令kill -HUP (inetd的進程號),使inetd重新讀取配置文件並重新啟動即可.
5. ip route的配置
利用linux,一台普通的微機也可以實現高性價比的路由器.首先讓我們了解一下linux的查看路由信息的命令:
[root@ice /etc]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
202.112.13.204 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
202.117.48.43 0.0.0.0 255.255.255.255 UH 0 0 0 eth1
202.112.13.192 202.112.13.204 255.255.255.192 UG 0 0 0 eth0
202.112.13.192 0.0.0.0 255.255.255.192 U 0 0 0 eth0
202.117.48.0 202.117.48.43 255.255.255.0 UG 0 0 0 eth1
202.117.48.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 202.117.48.1 0.0.0.0 UG 0 0 0 eth1
命令netstat -r n 得到輸出結果和route -n是一樣的.它們操作的都是linux 內核的路由表.
命令cat /proc/net/route的輸出結果是以十六進製表示的路由表.
[root@ice /etc]# cat /proc/net/route
Iface Destination Gateway Flags RefCnt Use Metric Mask
eth0 CC0D70CA 00000000 0005 0 0 0 FFFFFFF
eth1 2B3075CA 00000000 0005 0 0 0 FFFFFFF
eth0 C00D70CA CC0D70CA 0003 0 0 0 C0FFFFF
eth0 C00D70CA 00000000 0001 0 0 0 C0FFFFF
eth1 003075CA 2B3075CA 0003 0 0 0 00FFFFF
eth1 003075CA 00000000 0001 0 0 0 00FFFFF
lo 0000007F 00000000 0001 0 0 0 000000F
eth1 00000000 013075CA 0003 0 0 0 0000000
通過計算可以知道,下面的這個路由表(十六進制)和前面的路由表(十進制)是一致的.
我們還可以通過命令route add (del )來操作路由表,增加和刪除路由信息.
除了上面的靜態路由,linux還可以通過routed來實現rip協議的動態路由.我們只需要打開linux的路由轉發功能,在/proc/sys/net/ipv4/ip_forward文件中增加一個字元1.
三.網路的安全設置
在這一部分,再次強調一定要修改/etc/inetd.conf,安全的策略是禁止所有不需要的服務.除此之外,還有以下幾個文件和網路安全相關.
(1)./etc/ftpusers ftp服務是一個不太安全的服務,所以/etc/ftpusers限定了不允許通過ftp訪問linux主機的用戶列表.當一個ftp請求傳送到ftpd,ftpd首先檢查用戶名,如果用戶名在/etc/ftpusers中,則ftpd將不會允許該用戶繼續連接.範例文件如下:
# /etc/ftpusers - users not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
nadmin
(2)/etc/securetty 在linux系統中,總共有六個終端控制台,我們可以在/etc/securetty中設置哪個終端允許root登錄,所有其他沒有寫入文件中的終端都不允許root登錄.範例文件如下:
# /etc/securetty - tty's on which root is allowed to login
tty1
tty2
tty3
tty4
(3)tcpd的控制登錄文件/etc/hosts.allow和/etc/hosts.deny
在tcpd服務進程中,通過在/etc/hosts.allow和/etc/hosts.deny中的訪問控制規則來控制外部對linux主機的訪問.它們的格式都是
service-list : hosts-list [ : command]
服務進程的名稱 : 主機列表 可選,當規則滿足時的操作
在主機表中可以使用域名或ip地址,ALL表示匹配所有項,EXCEPT表示除了某些項, PARANOID表示當ip地址和域名不匹配時(域名偽裝)匹配該項.
範例文件如下:
#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
ALL : 202.112.13.0/255.255.255.0
ftpd: 202.117.13.196
in.telnetd: 202.117.48.33
ALL : 127.0.0.1
在這個文件中,網段202.112.13.0/24可以訪問linux系統中所有的網路服務,主機202.117.13.196隻能訪問ftpd服務,主機202.117.48.33隻能訪問telnetd服務.本機自身可以訪問所有網路服務.
在/etc/hosts.deny文件中禁止所有其他情況:
#/etc/hosts.deny
ALL : DENY : spawn (/usr/bin/finger -lp @%h | /bin/mail -s "Port Denial noted in %d-%h" root)
在/etc/hosts.allow中,定義了在所有其他情況下,linux所應該執行的操作.spawn選項允許linux系統在匹配規則中執行指定的shell命令,在我們的例子中,linux系統在發現無授權的訪問時,將會發送給超級用戶一封主題是"Port Denial noted in %d-%h"的郵件,在這里,我們先要介紹一下allow和deny文件中的變數擴展.
(4)/etc/issue和/etc/issue.net
在我們登錄linux系統中的時候,我們常常可以看到我們linux系統的版本號等敏感信息.在如今的網路攻擊行為中,許多黑客首先要收集目標系統的信息,版本號等就是十分重要的信息,所以在linux系統中一般要把這些信息隱藏起來./etc/issue和/etc/issue.net就是存放這些信息的文件.我們可以修改這些文件來隱藏版本信息.
另外,在每次linux重新啟動的時候,都會在腳本/etc/rc.d/rc.local中再次覆蓋上面那兩個文件./etc/rc.d/rc.local文件的範例如下:
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
if [ -f /etc/redhat-release ]; then
R=$(cat /etc/redhat-release)
arch=$(uname -m)
a="a"
case "_$arch" in
_a*) a="an";;
_i*) a="an";;
esac
NUMPROC=`egrep -c "^cpu[0-9]+" /proc/stat`
if [ "$NUMPROC" -gt "1" ]; then
SMP="$NUMPROC-processor "
if [ "$NUMPROC" = "8" -o "$NUMPROC" = "11" ]; then
a="an"
else
a="a"
fi
fi
# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
#echo "" > /etc/issue
#echo "$R" >> /etc/issue
# echo "Kernel $(uname -r) on $a $SMP$(uname -m)" >> /etc/issue
cp -f /etc/issue /etc/issue.net
echo >> /etc/issue
在文件中黑體的部分就是得到系統版本信息的地方.一定要將他們注釋掉.
(5)其他配置
在普通微機中,都可以通過ctl+alt+del三鍵的組合來重新啟動linux.這樣是十分不安全的,所以要在/etc/inittab文件中注釋該功能:
# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
❹ linux內核優化參數
cat >> /etc/sysctl.conf << EOF
# kernel optimization
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
EOF # 《Linux就該這么學》
將上面的內核參數加入/etc/sysctl.conf文件中,執行如下命令使之生效:
sysctl -p
❺ 在Linux系統中訪問網路,需要進行哪些TCP/IP屬性參數的配置
Linux在命令行模式下設置IP沒有圖形化界面來的方便,只需要記住修改2個文件就能完成設置。
需要root許可權
先修改IP地址,使用Vim文本編輯
vim /etc/sysconfig/network-scripts/ifcfg-eth0 <eth0隻是網卡號,如有多塊網卡(或網卡號不為eth0),請找到對應的文件後修改>
將ifcfg-eth0的內容按以下方式改寫
DEVICE="eth0" <網卡號,和ifcfg-eth0對應就可以>
HWADDR="08:00:27:1C:81:0A" <網卡的MAC地址>
ONBOOT="yes" <是否啟用連接>
BOOTPROTO=none <手動設置IP選擇none,自動獲取選dhcp>
IPADDR=192.168.1.100 <設定本網卡IP地址>
NETMASK=255.255.255.0 <子網掩碼>
GATEWAY=192.168.1.254 <網關地址>
後保存
剛修改了IP、子網掩碼、網關,還缺DNS
vim /etc/resolv.conf
在文件中填入以下內容
DNS 192.168.1.1 <『192.168.1.1』改成你自己需要的DNS地址即可>
可以設定多個DNS主機地址
修改完成後重啟網路服務
/etc/init.d/network restart
驗證IP是否正確設置,查看本地IP、子網掩碼、網關
ifconfig
驗證DNS是否正確設置
❻ linux下怎麼設置tcp
Socket的send函數在執行時報EAGAIN的錯誤 當客戶通過Socket提供的send函數發送大的數據包時,就可能返回一個EGGAIN的錯誤。該錯誤產生的原因是由於send 函數中的size變數大小超過了tcp_sendspace的值。tcp_sendspace定義了應用在調用send之前能夠在kernel中緩存的數據量。當應用程序在socket中設置了O_NDELAY或者O_NONBLOCK屬性後,如果發送緩存被占滿,send就會返回EAGAIN的錯誤。 為了消除該錯誤,有三種方法可以選擇: 1.調大tcp_sendspace,使之大於send中的size參數 ---no -p -o tcp_sendspace=65536 2.在調用send前,在setsockopt函數中為SNDBUF設置更大的值 3.使用write替代send,因為write沒有設置O_NDELAY或者O_NONBLOCK 1. tcp 收發緩沖區默認值 [root@qljt core]# cat /proc/sys/net/ipv4/tcp_rmem 4096 87380 4161536 87380 :tcp接收緩沖區的默認值 [root@qljt core]# cat /proc/sys/net/ipv4/tcp_wmem 4096 16384 4161536 16384 : tcp 發送緩沖區的默認值 2. tcp 或udp收發緩沖區最大值 [root@qljt core]# cat /proc/sys/net/core/rmem_max 131071 131071:tcp 或 udp 接收緩沖區最大可設置值的一半。 也就是說調用 setsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 時rcv_size 如果超過 131071,那麼 getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 去到的值就等於 131071 * 2 = 262142 [root@qljt core]# cat /proc/sys/net/core/wmem_max 131071 131071:tcp 或 udp 發送緩沖區最大可設置值得一半。 跟上面同一個道理 3. udp收發緩沖區默認值 [root@qljt core]# cat /proc/sys/net/core/rmem_default 111616:udp接收緩沖區的默認值 [root@qljt core]# cat /proc/sys/net/core/wmem_default 111616 111616:udp發送緩沖區的默認值 . tcp 或udp收發緩沖區最小值 tcp 或udp接收緩沖區的最小值為 256 bytes,由內核的宏決定; tcp 或udp發送緩沖區的最小值為 2048 bytes,由內核的宏決定 setsockopt設置socket狀態 1.closesocket(一般不會立即關閉而經歷TIME_WAIT的過程)後想繼續重用該socket: BOOL bReuseaddr=TRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 2. 如果要已經處於連接狀態的soket在調用closesocket後強制關閉,不經歷TIME_WAIT的過程: BOOL bDontLinger = FALSE; setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL)); 3.在send(),recv()過程中有時由於網路狀況等原因,發收不能預期進行,而設置收發時限: int nNetTimeout=1000;//1秒 //發送時限 setsockopt(socket,SOL_S0CKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int)); //接收時限 setsockopt(socket,SOL_S0CKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int)); 4.在send()的時候,返回的是實際發送出去的位元組(同步)或發送到socket緩沖區的位元組(非同步);系統默認的狀態發送和接收一次為8688位元組(約為8.5K);在實際的過程中發送數據 和接收數據量比較大,可以設置socket緩沖區,而避免了send(),recv()不斷的循環收發: // 接收緩沖區 int nRecvBuf=32*1024;//設置為32K setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); //發送緩沖區 int nSendBuf=32*1024;//設置為32K setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); 5. 如果在發送數據的時,希望不經歷由系統緩沖區到socket緩沖區的拷貝而影響程序的性能: int nZero=0; setsockopt(socket,SOL_S0CKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero)); 6.同上在recv()完成上述功能(默認情況是將socket緩沖區的內容拷貝到系統緩沖區): int nZero=0; setsockopt(socket,SOL_S0CKET,SO_RCVBUF,(char *)&nZero,sizeof(int)); 7.一般在發送UDP數據報的時候,希望該socket發送的數據具有廣播特性: BOOL bBroadcast=TRUE; setsockopt(s,SOL_SOCKET,SO_BROADCAST,(const char*)&bBroadcast,sizeof(BOOL)); 8.在client連接伺服器過程中,如果處於非阻塞模式下的socket在connect()的過程中可以設置connect()延時,直到accpet()被呼叫(本函數設置只有在非阻塞的過程中有顯著的 作用,在阻塞的函數調用中作用不大) BOOL bConditionalAccept=TRUE; setsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&bConditionalAccept,sizeof(BOOL)); 9.如果在發送數據的過程中(send()沒有完成,還有數據沒發送)而調用了closesocket(),以前我們一般採取的措施是"從容關閉"shutdown(s,SD_BOTH),但是數據是肯定丟失了,如何設置讓程序滿足具體應用的要求(即讓沒發完的數據發送出去後在關閉socket)? struct linger { u_short l_onoff; u_short l_linger; }; linger m_sLinger; m_sLinger.l_onoff=1;//(在closesocket()調用,但是還有數據沒發送完畢的時候容許逗留) // 如果m_sLinger.l_onoff=0;則功能和2.)作用相同; m_sLinger.l_linger=5;//(容許逗留的時間為5秒) setsockopt(s,SOL_SOCKET,SO_LINGER,(const char*)&m_sLinger,sizeof(linger)); 設置套介面的選項。 #include <winsock.h> int PASCAL FAR setsockopt( SOCKET s, int level, int optname, const char FAR* optval, int optlen); s:標識一個套介面的描述字。 level:選項定義的層次;目前僅支持SOL_SOCKET和IPPROTO_TCP層次。 optname:需設置的選項。 optval:指針,指向存放選項值的緩沖區。 optlen:optval緩沖區的長度。 注釋: setsockopt()函數用於任意類型、任意狀態套介面的設置選項值。盡管在不同協議層上存在選項,但本函數僅定義了最高的「套介面」層次上的選項。選項影響套介面的操作,諸如加急數據是否在普通數據流中接收,廣播數據是否可以從套介面發送等等。 有兩種套介面的選項:一種是布爾型選項,允許或禁止一種特性;另一種是整形或結構選項。允許一個布爾型選項,則將optval指向非零整形數;禁止一個選項optval指向一個等於零的整形數。對於布爾型選項,optlen應等於sizeof(int);對其他選項,optval指向包含所需選項的整形數或結構,而optlen則為整形數或結構的長度。SO_LINGER選項用於控制下述情況的行動:套介面上有排隊的待發送數據,且 closesocket()調用已執行。參見closesocket()函數中關於SO_LINGER選項對closesocket()語義的影響。應用程序通過創建一個linger結構來設置相應的操作特性: struct linger { int l_onoff; int l_linger; }; 為了允許SO_LINGER,應用程序應將l_onoff設為非零,將l_linger設為零或需要的超時值(以秒為單位),然後調用setsockopt()。為了允許SO_DONTLINGER(亦即禁止SO_LINGER),l_onoff應設為零,然後調用setsockopt()。 預設條件下,一個套介面不能與一個已在使用中的本地地址捆綁(參見bind())。但有時會需要「重用」地址。因為每一個連接都由本地地址和遠端地址的組合唯一確定,所以只要遠端地址不同,兩個套介面與一個地址捆綁並無大礙。為了通知WINDOWS套介面實現不要因為一個地址已被一個套介面使用就不讓它與另一個套介面捆綁,應用程序可在bind()調用前先設置SO_REUSEADDR選項。請注意僅在bind()調用時該選項才被解釋;故此無需(但也無害)將一個不會共用地址的套介面設置該選項,或者在bind()對這個或其他套介面無影響情況下設置或清除這一選項。 一個應用程序可以通過打開SO_KEEPALIVE選項,使得WINDOWS套介面實現在TCP連接情況下允許使用「保持活動」包。一個WINDOWS套介面實現並不是必需支持「保持活動」,但是如果支持的話,具體的語義將與實現有關,應遵守RFC1122「Internet主機要求-通訊層」中第 4.2.3.6節的規范。如果有關連接由於「保持活動」而失效,則進行中的任何對該套介面的調用都將以WSAENETRESET錯誤返回,後續的任何調用將以WSAENOTCONN錯誤返回。 TCP_NODELAY選項禁止Nagle演算法。Nagle演算法通過將未確認的數據存入緩沖區直到蓄足一個包一起發送的方法,來減少主機發送的零碎小數據包的數目。但對於某些應用來說,這種演算法將降低系統性能。所以TCP_NODELAY可用來將此演算法關閉。應用程序編寫者只有在確切了解它的效果並確實需要的情況下,才設置TCP_NODELAY選項,因為設置後對網路性能有明顯的負面影響。TCP_NODELAY是唯一使用IPPROTO_TCP層的選項,其他所有選項都使用SOL_SOCKET層。 如果設置了SO_DEBUG選項,WINDOWS套介面供應商被鼓勵(但不是必需)提供輸出相應的調試信息。但產生調試信息的機制以及調試信息的形式已超出本規范的討論范圍。 setsockopt()支持下列選項。其中「類型」表明optval所指數據的類型。 選項 類型 意義 SO_BROADCAST BOOL 允許套介面傳送廣播信息。 SO_DEBUG BOOL 記錄調試信息。 SO_DONTLINER BOOL 不要因為數據未發送就阻塞關閉操作。設置本選項相當於將SO_LINGER的l_onoff元素置為零。 SO_DONTROUTE BOOL 禁止選徑;直接傳送。 SO_KEEPALIVE BOOL 發送「保持活動」包。 SO_LINGER struct linger FAR* 如關閉時有未發送數據,則逗留。 SO_OOBINLINE BOOL 在常規數據流中接收帶外數據。 SO_RCVBUF int 為接收確定緩沖區大小。 SO_REUSEADDR BOOL 允許套介面和一個已在使用中的地址捆綁(參見bind())。 SO_SNDBUF int 指定發送緩沖區大小。 TCP_NODELAY BOOL 禁止發送合並的Nagle演算法。 setsockopt()不支持的BSD選項有: 選項名 類型 意義 SO_ACCEPTCONN BOOL 套介面在監聽。 SO_ERROR int 獲取錯誤狀態並清除。 SO_RCVLOWAT int 接收低級水印。 SO_RCVTIMEO int 接收超時。 SO_SNDLOWAT int 發送低級水印。 SO_SNDTIMEO int 發送超時。 SO_TYPE int 套介面類型。 IP_OPTIONS 在IP頭中設置選項。 返回值: 若無錯誤發生,setsockopt()返回0。否則的話,返回SOCKET_ERROR錯誤,應用程序可通過WSAGetLastError()獲取相應錯誤代碼。 錯誤代碼: WSANOTINITIALISED:在使用此API之前應首先成功地調用WSAStartup()。 WSAENETDOWN:WINDOWS套介面實現檢測到網路子系統失效。 WSAEFAULT:optval不是進程地址空間中的一個有效部分。 WSAEINPROGRESS:一個阻塞的WINDOWS套介面調用正在運行中。 WSAEINVAL:level值非法,或optval中的信息非法。 WSAENETRESET:當SO_KEEPALIVE設置後連接超時。 WSAENOPROTOOPT:未知或不支持選項。其中,SOCK_STREAM類型的套介面不支持SO_BROADCAST選項,SOCK_DGRAM 類型的套介面不支持SO_DONTLINGER 、SO_KEEPALIVE、SO_LINGER和SO_OOBINLINE選項。 WSAENOTCONN:當設置SO_KEEPALIVE後連接被復位。 WSAENOTSOCK:描述字不是一個套介面。
❼ 一般優化linux的內核,需要優化什麼參數
首先要知道一點所有的TCP/IP的參數修改是臨時的,因為它們都位於/PROC/SYS/NET目錄下,如果想使參數長期保存,可以通過編輯/ETC/SYSCTL.CONF文件來實現,這里不做詳細說明,只針對Linux的TCPIP內核參數優化列舉相關參數:
1、為自動調優定義socket使用的內存
2、默認的TCP數據接收窗口大小(位元組)
3、最大的TCP數據接收窗口
4、默認的TCP發送窗口大小
5、最大的TCP數據發送窗口
6、在每個網路介面接收數據包的速率比內核處理這些包速率快時,允許送到隊列的數據包最大數目
7、定義了系統中每一個埠最大的監聽隊列長度
8、探測消息未獲得相應時,重發該消息的間隔時間
9、在認定tcp連接失效之前,最多發送多少個keepalive探測消息等。
❽ linux為每個tcp分配多少內存還有Windows為每個tcp分配多少內存
下面這些是在網上找到的,可以參考一下:
操作系統:CentOS
查看TCP能使用的內存:
shell>cat /proc/sys/net/ipv4/tcp_mem
1528416 2037888 3056832
這三個值就是TCP可使用內存的大小,單位是頁,每個頁是4K的大小。
這三個值分別代表
Low:1528416 (1528416 *4/1024/1024大概6g)
Pressure:2037888 (2037888 *4/1024/1024大概8g)
High:3056832(3056832*4/1024/1024大概12g)
這個也是系統裝後的默認取值,也就是說最大有12個g(75%的內存)可以用作TCP連接,這三個量也同時代表了三個閥值,TCP的使用小於第二個值時kernel不會有任何提示操作,當大於第二個值時進入壓力模式,當高於第三個值時將不接受新的TCP連接,同時會報出「Out of socket memory」或者「TCP:too many of orphaned sockets」。
TCP讀緩存大小:
shell>cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 4194304
單位是位元組:第一個是最小值4K,第二個是默認值85K,第三個是最大值4M,這個可以在sysctl.conf中net.ipv4.tcp_rmem中進行調整。
TCP寫緩存大小:
shell>cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304
單位是位元組:第一個是最小值4K,第二個是默認值16K,第三個是最大值4M,這個可以在sysctl.conf中net.ipv4.tcp_wmem中進行調整。
一個TCP在三次握手建立連接後,最小的內存消耗在8K(讀4K+寫4K)左右,默認的內存消耗在101K(讀85K+寫16K)左右,最大的內存消耗在(讀4M+寫4M)8M左右,按照系統TCP的全局控制,有12個g可用作內存緩存,假設按照最小的讀寫緩存計算,一個TCP連接佔用8K內存,那麼系統能承受最大的並發為 12*1024*1024/8 = 157萬,假設按照默認的讀寫緩存計算,一個TCP連接佔用101K內存,那麼系統能承受最大的並發為 12*1024*1024/101 = 12萬,假設按照最大的讀寫緩存計算,一個TCP連接佔用8M內存,那麼系統能承受最大的並發為 12*1024/8 = 1536。
❾ 一般優化linux的內核,需要優化什麼參數
方法只對擁有大量TIME_WAIT狀態的連接導致系統資源消耗有效,如果不是這種情況下,效果可能不明顯。可以使用netstat命令去查TIME_WAIT狀態的連接狀態,輸入下面的組合命令,查看當前TCP連接的狀態和對應的連接數量:
#netstat -n | awk 『/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}』
這個命令會輸出類似下面的結果:
LAST_ACK 16
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18098
我們只用關心TIME_WAIT的個數,在這里可以看到,有18000多個TIME_WAIT,這樣就佔用了18000多個埠。要知道埠的數量只有65535個,佔用一個少一個,會嚴重的影響到後繼的新連接。這種情況下,我們就有必要調整下Linux的TCP內核參數,讓系統更快的釋放TIME_WAIT連接。
用vim打開配置文件:#vim /etc/sysctl.conf
在這個文件中,加入下面的幾行內容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
輸入下面的命令,讓內核參數生效:#sysctl -p
簡單的說明上面的參數的含義:
net.ipv4.tcp_syncookies = 1
#表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,默認為0,表示關閉;
net.ipv4.tcp_tw_reuse = 1
#表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1
#表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉;
net.ipv4.tcp_fin_timeout
#修改系統默認的 TIMEOUT 時間。
在經過這樣的調整之後,除了會進一步提升伺服器的負載能力之外,還能夠防禦小流量程度的DoS、CC和SYN攻擊。
此外,如果你的連接數本身就很多,我們可以再優化一下TCP的可使用埠范圍,進一步提升伺服器的並發能力。依然是往上面的參數文件中,加入下面這些配置:
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
#這幾個參數,建議只在流量非常大的伺服器上開啟,會有顯著的效果。一般的流量小的伺服器上,沒有必要去設置這幾個參數。
net.ipv4.tcp_keepalive_time = 1200
#表示當keepalive起用的時候,TCP發送keepalive消息的頻度。預設是2小時,改為20分鍾。
net.ipv4.ip_local_port_range = 10000 65000
#表示用於向外連接的埠范圍。預設情況下很小:32768到61000,改為10000到65000。(注意:這里不要將最低值設的太低,否則可能會佔用掉正常的埠!)
net.ipv4.tcp_max_syn_backlog = 8192
#表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網路連接數。
net.ipv4.tcp_max_tw_buckets = 6000
#表示系統同時保持TIME_WAIT的最大數量,如果超過這個數字,TIME_WAIT將立刻被清除並列印警告信息。默 認為180000,改為6000。對於Apache、Nginx等伺服器,上幾行的參數可以很好地減少TIME_WAIT套接字數量,但是對於Squid,效果卻不大。此項參數可以控制TIME_WAIT的最大數量,避免Squid伺服器被大量的TIME_WAIT拖死。
內核其他TCP參數說明:
net.ipv4.tcp_max_syn_backlog = 65536
#記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有128M內存的系統而言,預設值是1024,小內存的系統則是128。
net.core.netdev_max_backlog = 32768
#每個網路介面接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
net.core.somaxconn = 32768
#web應用中listen函數的backlog默認會給我們內核參數的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認為511,所以有必要調整這個值。
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216 #最大socket讀buffer,可參考的優化值:873200
net.core.wmem_max = 16777216 #最大socket寫buffer,可參考的優化值:873200
net.ipv4.tcp_timestsmps = 0
#時間戳可以避免序列號的卷繞。一個1Gbps的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種「異常」的數據包。這里需要將其關掉。
net.ipv4.tcp_synack_retries = 2
#為了打開對端的連接,內核需要發送一個SYN並附帶一個回應前面一個SYN的ACK。也就是所謂三次握手中的第二次握手。這個設置決定了內核放棄連接之前發送SYN+ACK包的數量。
net.ipv4.tcp_syn_retries = 2
#在內核放棄建立連接之前發送SYN包的數量。
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1
# 開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接。
net.ipv4.tcp_wmem = 8192 436600 873200
# TCP寫buffer,可參考的優化值: 8192 436600 873200
net.ipv4.tcp_rmem = 32768 436600 873200
# TCP讀buffer,可參考的優化值: 32768 436600 873200
net.ipv4.tcp_mem = 94500000 91500000 92700000
# 同樣有3個值,意思是:
net.ipv4.tcp_mem[0]:低於此值,TCP沒有內存壓力。
net.ipv4.tcp_mem[1]:在此值下,進入內存壓力階段。
net.ipv4.tcp_mem[2]:高於此值,TCP拒絕分配socket。
上述內存單位是頁,而不是位元組。可參考的優化值是:786432 1048576 1572864
net.ipv4.tcp_max_orphans = 3276800
#系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。
如果超過這個數字,連接將即刻被復位並列印出警告信息。
這個限制僅僅是為了防止簡單的DoS攻擊,不能過分依靠它或者人為地減小這個值,
更應該增加這個值(如果增加了內存之後)。
net.ipv4.tcp_fin_timeout = 30
#如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。對端可以出錯並永遠不關閉連接,甚至意外當機。預設值是60秒。2.2 內核的通常值是180秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕載的WEB伺服器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2的危險性比FIN-WAIT-1要小,因為它最多隻能吃掉1.5K內存,但是它們的生存期長些。
深入學習linux看下《linux就該這么學》