netstat

netstat能干什么

首先尝试一下man netstat,其描述原话是

netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships

所以它只是一个Print命令,也就是说显示某些信息,并不能修改配置文件。在显示信息方面,它是个多面手,如:网络连接信息,路由表信息,接口信息,其他(几乎没用过)。下面分开说。

  1. 网络连接信息
    输入netstat命令即可查看,其结果(部分输出截图)如下,其每个字段的意义在第二部分解释。


    网络连接信息
  2. 路由表信息
    输入netstat -r,其输出结果如下

    路由表信息

  3. 接口信息
    输入netstat -i,其输出结果如下:

    接口信息

netstat常见参数选项

对于打印接口信息,其效果等价于命令ifconfig,主要用来查看主机有几个网卡,其IP地址,子网掩码,MAC地址等。

对于打印路由表信息,其效果等价于route命令,主要用来查看主机的出口路由地址等。如果要添加或删除路由条目,那只能用route来操作。其输出结果中着重注意Flags这一列,其代表的含义如下:

Flags Possible flags include
U (route is up)
H (target is a host)
G (use gateway)
R (reinstate route for dynamic routing)
D (dynamically installed by daemon or redirect)
M (modified from routing daemon or redirect)
A (installed by addrconf)
C (cache entry)
! (reject route)

打印网络连接信息才是netstat的主业,所以其参数也比较多。

  1. 从协议类型来看,主要有一下几种

-t : tcp,仅显示tcp协议的连接,且不包含listen状态的,如需要加上-l
-u : udp,仅显示udp协议
-w : raw,不常用
-a : 显示所有类型的连接

  1. 从通用性来看,有如下几个参数选项

-n : 用数字形式显示端口,IP地址,而不是显示字符串形式的hostname
-c : 持续显示,每秒刷新一次
-s : 输出统计信息,如收发了多少TCP包,UDP包等
-p : 显示连接是由那个进程建立的,及其进程号

输出字段解析

输出字段解析

Proto : 自然只的是协议类型
Recv-Q : 远端发来的还未被本机应用层接收的数据大小
Send-Q : 本机应用层发送的还未被对方ACK的数据大小
Local Address : 本地套接字
Foreign Adress : 远端套接字
State : 连接的状态
** ESTABLISHED:连接已建立,三次握手完成
** SYN_SENT:连接发起的主动方,发送SYN包后的状态
** SYN_RECV:连接发起的被动放,收到SYN包后,回复SYN,ACK包后的状态
** FIN_WAIT1:主动断开方,发送FIN包后的状态
** CLOSE_WAIT:收到FIN包后的一方,回复ACK给对方后的状态
** FIN_WAIT2:主动断开方,收到对方回复的ACK包后的状态
** TIME_WAIT:主动断开方,收到对方FIN包的状态
** LAST_ACK:被动断开方无需在传递数据,发送FIN包后的状态
** TIME_WAIT:主动断开方收到对方FIN包后,给出ACK后状态,等待2MSL后进入CLOSING
** CLOSE:该连接已经断开
** LISTEN:监听套接字,被动放调用listen函数后的状态
PID/Program name : 该连接隶属于的进程名及其进程号

TCP状态转换图

netstat是怎么做到的

Linux系统中一切皆文件,这些信息都存在文件中,这些文件路径如下:

/etc/services -- The services translation file
/proc -- Mount point for the proc filesystem, which gives access to kernel status information via the following files.
/proc/net/dev -- device information
/proc/net/raw -- raw socket information
/proc/net/tcp -- TCP socket information
/proc/net/udp -- UDP socket information
/proc/net/udplite -- UDPLite socket information
/proc/net/igmp -- IGMP multicast information
/proc/net/unix -- Unix domain socket information
/proc/net/ipx -- IPX socket information
/proc/net/ax25 -- AX25 socket information
/proc/net/appletalk -- DDP (appletalk) socket information
/proc/net/nr -- NET/ROM socket information
/proc/net/route -- IP routing information
/proc/net/ax25_route -- AX25 routing information
/proc/net/ipx_route -- IPX routing information
/proc/net/nr_nodes -- NET/ROM nodelist
/proc/net/nr_neigh -- NET/ROM neighbours
/proc/net/ip_masquerade -- masqueraded connections
/proc/net/snmp -- statistics

有了这些文件,netstat命令做的只是从这些文件中提取相关的信息进行显示而已。

你可能感兴趣的:(netstat)