3. netstat -tnl 查看 8080 8009 這2個端口,若是打開了,證實CentOS系統的tomcat正常運行。
13. 防火牆
(1) 重啓後永久性生效:
開啓:chkconfig iptables on
關閉:chkconfig iptables off
(2) 即時生效,重啓後失效:
service iptables status 查看防火牆狀態; /etc/init.d/iptables status 會獲得一系列信息,說明防火牆開着。
service iptables stop 關閉; /etc/rc.d/init.d/iptables stop 關閉防火牆
service iptables start 開啓
開啓相關端口:
修改/etc/sysconfig/iptables 文件,添加如下內容:
-A RH-Firewall-1-INPUT -m state ——state NEW -m tcp -p tcp ——dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state ——state NEW -m tcp -p tcp ——dport 22 -j ACCEPT
14. rpm
安裝程序: rpm -ivh 以.rpm結尾的程序包
卸載: rpm -e 程序全名,例如查看telnet程序全名:rpm -qa|grep telnet
TCP鏈接的KEEPALIVE
1、關於keepalive的內核參數
tcp_keepalive_time - INTEGER
在鏈接被標記爲須要keepalive後,最後數據被髮送和第一個keepalive探測包的間隔.
默認值: 2hours.
tcp_keepalive_probes - INTEGER
在決定鏈接被斷掉,通知應用層前,發送keepalive探測包的次數.
默認值: 9.
tcp_keepalive_intvl - INTEGER
在keepalive探測包開始後,探測包每隔多長時間發送一次.
默認值: 75s
根據上述參數來看,若是一個client發送一個標記爲keepalive的包後,若是斷開了
服務端須要7200s+9*75s=7875s後,鏈接才釋放掉。
2、 TIME_WAIT 的處理
根據TCP協議,主動發起關閉的一方,會進入TIME_WAIT狀態(TCP實現必須可靠地終止鏈接的兩個方向(全雙工關閉)),持續2*MSL(Max Segment Lifetime),缺省爲240秒. 爲何 TIME_WAIT 狀態須要保持 2MSL 這麼長的時間?
TIME_WAIT的等待時間爲2MSL,即最大段生存時間.若是 TIME_WAIT 狀態保持時間不足夠長(好比小於2MSL),第一個鏈接就正常終止了。第二個擁有相同相關五元組的鏈接出現(由於鏈接終止前發起的一方可能須要重發 ACK,因此停留在該狀態的時間必須爲MSL的2倍。),而第一個鏈接的重複報文到達,干擾了第二個鏈接。TCP實現必須防止某個鏈接的重複報文在鏈接終 止後出現,因此讓TIME_WAIT態保持時間足夠長(2MSL),鏈接相應方向上的TCP報文要麼徹底響應完畢,要麼被丟棄。創建第二個鏈接的時候,不 會混淆。
注:MSL(最大分段生存期)指明TCP報文在Internet上最長生存時間,每一個具體的TCP實現都必須選擇一個肯定的MSL值。RFC 1122建議是2分鐘,但BSD傳統實現採用了30秒。TIME_WAIT 狀態最大保持時間是2 * MSL,也就是1-4分鐘。
有關內核級別的keepalive和time_wait的優化調整
vi /etc/sysctl
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_fin_timeout = 30
net.core.netdev_max_backlog =8096
修改完記的使用sysctl -p 讓它生效
以上參數的註解
/proc/sys/net/ipv4/tcp_tw_reuse
該文件表示是否容許從新應用處於TIME-WAIT狀態的socket用於新的TCP鏈接。
/proc/sys/net/ipv4/tcp_tw_recycle
recyse是加速TIME-WAIT sockets回收
對tcp_tw_reuse和tcp_tw_recycle的修改,可能會出現.warning, got duplicate tcp line warning, got BOGUS tcp line.上面這二個參數指的是存在這兩個徹底同樣的TCP鏈接,這會發生在一個鏈接被迅速的斷開而且從新鏈接的狀況,並且使用的端口和地址相同。但基本 上這樣的事情不會發生,不管如何,使能上述設置會增長重現機會。這個提示不會有人和危害,並且也不會下降系統性能,目前正在進行工做
/proc/sys/net/ipv4/tcp_keepalive_time
表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時
/proc/sys/net/ipv4/tcp_fin_timeout 最佳值和BSD同樣爲30
fin_wait1狀態是在發起端主動要求關閉tcp鏈接,而且主動發送fin之後,等待接收端回覆ack時候的狀態。對於本端斷開的socket鏈接,TCP保持在FIN-WAIT-2狀態的時間。對方可能會斷開鏈接或一直不結束鏈接或不可預料的進程死亡。
/proc/sys/net/core/netdev_max_backlog
該文件指定了,在接口接收數據包的速率比內核處理這些包的速率快時,容許送到隊列的數據包的最大數目
3、 進行處理
Linux系統中TCP是面向鏈接的,在實際應用中一般都須要檢測鏈接是否還可用.若是不可用,可分爲:
a. 鏈接的對端正常關閉.
b. 鏈接的對端非正常關閉,這包括對端設備掉電,程序崩潰,網絡被中斷等.這種狀況是不能也沒法通知對端的,因此鏈接會一直存在,浪費國家的資源.
TCP協議棧有個keepalive的屬性,能夠主動探測socket是否可用,不過這個屬性的默認值很大.
全局設置可更改/etc/sysctl.conf,加上:
net.ipv4.tcp_keepalive_intvl = 20
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_time = 60
在程序中設置以下:
int keepAlive = 1; // 開啓keepalive屬性
int keepIdle = 60; // 如該鏈接在60秒內沒有任何數據往來,則進行探測
int keepInterval = 5; // 探測時發包的時間間隔爲5 秒
int keepCount = 3; // 探測嘗試的次數.若是第1次探測包就收到響應了,則後2次的再也不發.
setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));