linux的netstat命令详解
netstat : Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
netstat:输出网络链接状态,路由表,接口统计信息,伪装连接和多播成员资格
[[email protected] ~]# netstat |more
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.3.41.11:ssh static-10-12-9-120.n:54146 ESTABLISHED
udp 0 0 10.3.41.11:55321 192.168.128.111:domain ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 11790 @/org/freedesktop/hal/udev_event
unix 2 [ ] DGRAM 8904 @/org/kernel/udev/udevd
unix 10 [ ] DGRAM 11501 /dev/log
unix 3 [ ] STREAM CONNECTED 13038 /var/run/dbus/system_bus_socket
unix 3 [ ] STREAM CONNECTED 13037
输出含义:
Active Internet connections:有源TCP链接
Proto:显示链接的类型,一般分三种:TCP,UDP,UNIX
Recv-Q:接收队列
Send-Q:发送队列
local address:显示在本地哪个IP,哪个端口进行侦听
foreign address:接收哪个外部链接地址,哪个链接端口
state:显示socket状态(端口侦听状态)
Active UNIX domain socket:有源UNIX域套接口(用于主机内部通讯,速度达一倍之多)
RefCnt:显示连接到本套接口上的进程号
type:套接口类型
state:连接状态
Path:表示连接到套接口的其它进程使用的路径名
state各个状态详解:
listen:侦听状态,说明端口已开启
SYN_SENT:客户端想链接服务端,通过tcp发送SYN后,等待收到自身SYN的ACK
SYN_RECV:服务端收到客户端发送的链接请求,通过tcp发送自身的SYN和对方SYN的ACK,等待
接收自身的ACK
ESTABLISHED:当双方确认连接后,显示连接成功
FIN_WAIT1:某方主动关闭链接之后,向对方发送一个FIN并等待接受ACK
CLOSE_WAIT:被动关闭端收到FIN之后,向对方发送ACK已确认FIN请求,然后等待本地响应关闭
FIN_WAIT2:主动关闭端收到ACK后,进入该状态,等待被动关闭端发送FIN请求
LAST_ACK:被动关闭段一段时间后,接收到本地文件结束符的应用程序调用close而关闭链接,然后
通过自身TCP向对方发送FIN,等待对方的ACK
TIME_WAIT:主动关闭段接收到FIN后,通过自身TCP发送一个ACK,进入该状态,等待一段足够长
的时候以确保对方TCP接收到ACK,然后确认关闭链接
三次握手
第一次:客户端向服务端发送SYN,服务端收到后达成第一次握手
(client:SYN_SENT,server:LISTEN)
第二次:服务端向客户端发送SYN和ACK应答,客户端收到后达成第二次握手
(client:SYN_SENT,server:SYN_RECV)
第三次:客户端向服务断发送ACK应答,服务端收到后达成第三次握手
(client:ESTABLISHED,server:SYN_RECV)
四次挥手:
第一次:主动关闭端向被动关闭端发送FIN,被动关闭端收到后达成第一次挥手
(initiative:FIN_WAIT1,passive:ESTABLISHED)
第二次:被动关闭段向主动关闭端发送ACK,主动关闭端收到后达成第二次挥手
(initiative:FIN_WAIT1,passive:CLOSE_WAIT)
第三次:被动关闭端向主动关闭段发送FIN,主动关闭端收到后达成第三次挥手
(initiative:FIN_WAIT2,passive:LAST_ACK)
第四次:主动关闭端向被动关闭端发送ACK,被动关闭端收到后达成第四次挥手
(initiative:TIME_WAIT,passive:LAST_ACK)
握手流程:
客户端:listen > SYN_SENT > ESTABLISH
服务端:listen > SYN_RECV > ESTABLSH
挥手流程:
主动关闭端:ESTABLISH > FIN_WAIT1 > FIN_WAIT2 > TIME_WAIT > closed > listen
被动关闭端:ESTABLISH > CLOSE_WAIT > LAST_ACK > closed > listen
流程图:
local address的内容详解:
0.0.0.0:22表示侦听本地服务器(自身虚拟机)的所有IPv4地址
::::22表示侦听本地服务器所有ipv6的地址
netstat 命令参数
-a 列出所有状态的链接,包括侦听和链接
-n 禁止使用别名,以数字形式输出ip和端口
-t 只显示tcp的相关信息
-u 只显示udp的相关信息
-p 显示对应端口的相关程序的绝对路径
-l 只显示listen状态的链接信息
-c 每隔一段时间查询一次状态信息
-s 统计链接信息
-r 输出路由信息
-i 输出多播成员资格名单
-e 输出对应的user和inode