<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ls /proc &#187; netstat</title>
	<atom:link href="http://www.lsproc.com/blog/tag/netstat/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lsproc.com/blog</link>
	<description>lsproc.com</description>
	<lastBuildDate>Fri, 21 May 2010 14:29:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>如何关闭time_wait连接</title>
		<link>http://www.lsproc.com/blog/close_timewait_connection/</link>
		<comments>http://www.lsproc.com/blog/close_timewait_connection/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 16:35:58 +0000</pubDate>
		<dc:creator>lostsnow</dc:creator>
				<category><![CDATA[Linux&Webserver]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[netstat]]></category>
		<category><![CDATA[time_wait]]></category>

		<guid isPermaLink="false">http://www.lostk.com/blog/close_timewait_connection/</guid>
		<description><![CDATA[转载时请标明文章原始出处和作者信息, 作者: lostsnow.http://www.lsproc.com/blog/close_timewait_connection/ 结合netstat和awk命令来统计网络连接数 From: http://hi.baidu.com/thinkinginlamp/blog/item/afbcab64b1ad81f3f6365453.html netstat -n &#124; awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}' 会得到类似下面的结果，具体数字会有所不同： LAST_ACK 1 SYN_RECV 14 ESTABLISHED 79 FIN_WAIT1 28 FIN_WAIT2 3 CLOSING 5 TIME_WAIT 1669 状态：描述 CLOSED：无连接是活动的或正在进行 LISTEN：服务器在等待进入呼叫 SYN_RECV：一个连接请求已经到达，等待确认 SYN_SENT：应用已经开始，打开一个连接 ESTABLISHED：正常数据传输状态 FIN_WAIT1：应用说它已经完成 FIN_WAIT2：另一边已同意释放 ITMED_WAIT：等待所有分组死掉 CLOSING：两边同时尝试关闭 TIME_WAIT：另一边已初始化一个释放 LAST_ACK：等待所有分组死掉 也就是说，这条命令可以把当前系统的网络连接状态分类汇总。 下面解释一下为啥要这样写： 一个简单的管道符连接了netstat和awk命令。 ------------------------------------------------------------------ 先来看看netstat： netstat -n Active Internet connections [...]]]></description>
			<content:encoded><![CDATA[<p>转载时请标明文章原始出处和作者信息, 作者: <a href="http://www.lsproc.com/blog/">lostsnow</a>.<br /><a href="http://www.lsproc.com/blog/close_timewait_connection/">http://www.lsproc.com/blog/close_timewait_connection/</a></p>
<p>结合netstat和awk命令来统计网络连接数<br />
From: <a href="http://hi.baidu.com/thinkinginlamp/blog/item/afbcab64b1ad81f3f6365453.html">http://hi.baidu.com/thinkinginlamp/blog/item/afbcab64b1ad81f3f6365453.html</a></p>
<p><code>netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'</code></p>
<p>会得到类似下面的结果，具体数字会有所不同：</p>
<blockquote><p>LAST_ACK         1<br />
SYN_RECV         14<br />
ESTABLISHED      79<br />
FIN_WAIT1        28<br />
FIN_WAIT2        3<br />
CLOSING          5<br />
TIME_WAIT        1669</p></blockquote>
<p>状态：描述<br />
CLOSED：无连接是活动的或正在进行<br />
LISTEN：服务器在等待进入呼叫<br />
SYN_RECV：一个连接请求已经到达，等待确认<br />
SYN_SENT：应用已经开始，打开一个连接<br />
ESTABLISHED：正常数据传输状态<br />
FIN_WAIT1：应用说它已经完成<br />
FIN_WAIT2：另一边已同意释放<br />
ITMED_WAIT：等待所有分组死掉<br />
CLOSING：两边同时尝试关闭<br />
TIME_WAIT：另一边已初始化一个释放<br />
LAST_ACK：等待所有分组死掉</p>
<p>也就是说，这条命令可以把当前系统的网络连接状态分类汇总。</p>
<p>下面解释一下为啥要这样写：</p>
<p>一个简单的管道符连接了netstat和awk命令。</p>
<p>------------------------------------------------------------------</p>
<p>先来看看netstat：</p>
<p><strong>netstat -n</strong></p>
<p>Active Internet connections (w/o servers)<br />
Proto Recv-Q Send-Q Local Address           Foreign Address         State<br />
tcp        0      0 123.123.123.123:80      234.234.234.234:12345   TIME_WAIT</p>
<p>你实际执行这条命令的时候，可能会得到成千上万条类似上面的记录，不过我们就拿其中的一条就足够了。</p>
<p>------------------------------------------------------------------</p>
<p>再来看看awk：</p>
<p><strong>/^tcp/</strong><br />
滤出tcp开头的记录，屏蔽udp, socket等无关记录。</p>
<p><strong>state[]</strong><br />
相当于定义了一个名叫state的数组</p>
<p><strong>NF</strong><br />
表示记录的字段数，如上所示的记录，NF等于6</p>
<p><strong>$NF</strong><br />
表示某个字段的值，如上所示的记录，$NF也就是$6，表示第6个字段的值，也就是TIME_WAIT</p>
<p><strong>state[$NF]</strong><br />
表示数组元素的值，如上所示的记录，就是state[TIME_WAIT]状态的连接数</p>
<p><strong>++state[$NF]</strong><br />
表示把某个数加一，如上所示的记录，就是把state[TIME_WAIT]状态的连接数加一</p>
<p><strong>END</strong><br />
表示在最后阶段要执行的命令</p>
<p><strong>for(key in state)</strong><br />
遍历数组</p>
<p><strong>print key,"\t",state[key]</strong><br />
打印数组的键和值，中间用\t制表符分割，美化一下。</p>
<p>如发现系统存在大量TIME_WAIT状态的连接，通过调整内核参数解决，<br />
<code>vim /etc/sysctl.conf</code><br />
编辑文件，加入以下内容：</p>
<pre class="brush: bash">net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30</pre>
<p>然后执行 <code>/sbin/sysctl -p</code> 让参数生效。</p>
<p><strong>net.ipv4.tcp_syncookies = 1</strong> 表示开启SYN Cookies。当出现SYN等待队列溢出时，启用cookies来处理，可防范少量SYN攻击，默认为0，表示关闭；<br />
<strong>net.ipv4.tcp_tw_reuse = 1</strong> 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接，默认为0，表示关闭；<br />
<strong>net.ipv4.tcp_tw_recycle = 1</strong> 表示开启TCP连接中TIME-WAIT sockets的快速回收，默认为0，表示关闭。<br />
<strong>net.ipv4.tcp_fin_timeout</strong> 修改系統默认的 TIMEOUT 时间</p>
<p>下面附上TIME_WAIT状态的意义：</p>
<p>客户端与服务器端建立TCP/IP连接后关闭SOCKET后，服务器端连接的端口<br />
状态为TIME_WAIT</p>
<p>是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢？<br />
有没有什么情况使主动关闭的socket直接进入CLOSED状态呢？</p>
<p>主动关闭的一方在发送最后一个 ack 后<br />
就会进入 TIME_WAIT 状态 停留2MSL（max segment lifetime）时间<br />
这个是TCP/IP必不可少的，也就是“解决”不了的。</p>
<p>也就是TCP/IP设计者本来是这么设计的<br />
主要有两个原因<br />
1。防止上一次连接中的包，迷路后重新出现，影响新连接<br />
（经过2MSL，上一次连接中所有的重复包都会消失）<br />
2。可靠的关闭TCP连接<br />
在主动关闭方发送的最后一个 ack(fin) ，有可能丢失，这时被动方会重新发<br />
fin, 如果这时主动方处于 CLOSED 状态 ，就会响应 rst 而不是 ack。所以<br />
主动方要处于 TIME_WAIT 状态，而不能是 CLOSED 。</p>
<p>TIME_WAIT 并不会占用很大资源的，除非受到攻击。</p>
<p>还有，如果一方 send 或 recv 超时，就会直接进入 CLOSED 状态</p>
<p>继续阅读:<br />
<a href="http://blog.s135.com/read.php/269.htm">查看Apache并发请求数及其TCP连接状态</a><br />
<a href="http://www.pgsqldb.org/mwiki/index.php/Linux_%E5%8F%8D_DDOS%E7%9A%84%E5%87%A0%E4%B8%AA%E8%AE%BE%E7%BD%AE">Linux 反 DDOS的几个设置</a>
<p>-- EOF --</p>
<h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>2008-03-18 -- <a href="http://www.lsproc.com/blog/configure_lamp/" title="lamp 相关配置 [Debian]">lamp 相关配置 [Debian]</a> (2)</li><li>2010-01-15 -- <a href="http://www.lsproc.com/blog/bash_if_parameters/" title="bash if条件判断参数">bash if条件判断参数</a> (0)</li><li>2010-01-09 -- <a href="http://www.lsproc.com/blog/linux_timeline/" title="linux timeline">linux timeline</a> (2)</li><li>2008-12-16 -- <a href="http://www.lsproc.com/blog/linux_webserver_cmd/" title="Webserver 维护常用命令">Webserver 维护常用命令</a> (9)</li><li>2008-11-10 -- <a href="http://www.lsproc.com/blog/useful_linux_command/" title="一些 linux 命令">一些 linux 命令</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.lsproc.com/blog/close_timewait_connection/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
