Chinaunix首页 | 论坛 | 博客
  • 博客访问: 492770
  • 博文数量: 133
  • 博客积分: 1235
  • 博客等级: 少尉
  • 技术积分: 1201
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-08 19:59
文章分类

全部博文(133)

文章存档

2023年(12)

2022年(3)

2018年(2)

2017年(4)

2016年(4)

2015年(42)

2014年(1)

2013年(12)

2012年(16)

2011年(36)

2010年(1)

分类: 其他平台

2015-03-27 11:44:55

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

-a或--all:显示所有连线中的Socket;
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous:持续列出网络状态;
-C或--cache:显示路由器配置的快取信息;
-e或--extend:显示网络其他相关信息;
-F或--fib:显示FIB;
-g或--groups:显示多重广播功能群组组员名单;
-h或--help:在线帮助;
-i或--interfaces:显示网络界面信息表单;
-l或--listening:显示监控中的服务器的Socket;
-M或--masquerade:显示伪装的网络连线;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
-o或--timers:显示计时器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-r或--route:显示Routing Table;
-s或--statistice:显示网络工作信息统计表;
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-v或--verbose:显示指令执行过程;
-V或--version:显示版本信息;
-w或--raw:显示RAW传输协议的连线状况;
-x或--unix:此参数的效果和指定"-A unix"参数相同;
--ip或--inet:此参数的效果和指定"-A inet"参数相同。

列出所有端口 (包括监听和未监听的)
  netstat -a #列出所有端口
  netstat -at #列出所有tcp端口
  netstat -au #列出所有udp端口

列出所有处于监听状态的 Sockets    
  netstat -l #只显示监听端口
  netstat -lt #只列出所有监听 tcp 端口
  netstat -lu #只列出所有监听 udp 端口
 netstat -lx #只列出所有监听 UNIX 端口

显示每个协议的统计信息  
  netstat -s 显示所有端口的统计信息
  netstat -st 显示TCP端口的统计信息
  netstat -su 显示UDP端口的统计信息

在netstat输出中显示 PID 和进程名称
   netstat -pt
   netstat -nlpt

打印网络接口
  netstat -ie
Kernel Interface table
bond0     Link encap:Ethernet  HWaddr B4:B5:2F:6A:49:98  
          inet6 addr: fe80::b6b5:2fff:fe6a:4998/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:166612151 errors:0 dropped:0 overruns:0 frame:0
          TX packets:162958256 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:152708344719 (142.2 GiB)  TX bytes:120335885975 (112.0 GiB)


bond0.481 Link encap:Ethernet  HWaddr B4:B5:2F:6A:49:98  
          inet addr:204.225.213.95  Bcast:204.225.213.127  Mask:255.255.255.192
          inet6 addr: fe80::b6b5:2fff:fe6a:4998/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:9244751 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7430257 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1344619368 (1.2 GiB)  TX bytes:893764450 (852.3 MiB)


bond0.482 Link encap:Ethernet  HWaddr B4:B5:2F:6A:49:98  
          inet addr:10.50.4.95  Bcast:10.50.5.255  Mask:255.255.254.0
          inet6 addr: fe80::b6b5:2fff:fe6a:4998/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:145831996 errors:0 dropped:0 overruns:0 frame:0
          TX packets:155104299 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:148431951573 (138.2 GiB)  TX bytes:118998137265 (110.8 GiB)




执行netstat后,其输出结果为
Active Internet connections (w/o servers)
Proto   Recv-Q   Send-Q   Local Address    Foreign Address    State
tcp   0    2    210.34.6.89:telnet    210.34.6.96:2873     ESTABLISHED
tcp    296  0   210.34.6.89:1165   210.34.6.84:netbios-ssn   ESTABLISHED
tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED
tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE

Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 1 [ ] STREAM CONNECTED 16178 @000000dd
unix 1 [ ] STREAM CONNECTED 16176 @000000dc
unix 9 [ ] DGRAM 5292 /dev/log
unix 1 [ ] STREAM CONNECTED 16182 @000000df
其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到

查看并发请求数及其TCP连接状态命令:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
如:
 LAST_ACK 5
  SYN_RECV 30
  ESTABLISHED 1597
  FIN_WAIT1 51
  FIN_WAIT2 504
  TIME_WAIT 1057
  其中的
SYN_RECV表示正在等待处理的请求数;
ESTABLISHED表示正常数据传输状态;
TIME_WAIT表示处理完毕,等待超时结束的请求数。

 
状态:描述


  CLOSED:无连接是活动 的或正在进行

  LISTEN:服务器在等待进入呼叫

  SYN_RECV:一个连接请求已经到达,等待确认

  SYN_SENT:应用已经开始,打开一个连接

  ESTABLISHED:正常数据传输状态

  FIN_WAIT1:应用说它已经完成

  FIN_WAIT2:另一边已同意释放

  ITMED_WAIT:等待所有分组死掉

  CLOSING:两边同时尝试关闭

  TIME_WAIT:另一边已初始化一个释放

  LAST_ACK:等待所有分组死掉

如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
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
然后执行 /sbin/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 时间

下面附上TIME_WAIT状态的意义:

客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口
状态为TIME_WAIT

是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢?
有没有什么情况使主动关闭的socket直接进入CLOSED状态呢?

主动关闭的一方在发送最后一个 ack 后
就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间
这个是TCP/IP必不可少的,也就是“解决”不了的。

也就是TCP/IP设计者本来是这么设计的
主要有两个原因
1。防止上一次连接中的包,迷路后重新出现,影响新连接
(经过2MSL,上一次连接中所有的重复包都会消失)
2。可靠的关闭TCP连接
在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发
fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以
主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。

TIME_WAIT 并不会占用很大资源的,除非受到攻击。

还有,如果一方 send 或 recv 超时,就会直接进入 CLOSED 状态


阅读(1072) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~