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));