通常用带宽、吞吐量、延时、PPS(Packet Per Second)等指标衡量网络性能
除了这些指标,网络的可用性(网络能否正常通信)、并发连接数(TCP连接数量)、丢包率(丢包百分比)、重传率(重新传输的网络包比率)等也是常用的指标
使用ifconfig、或者ip命令,来查看网络配置。
ip -s addr show dev ens33
使用netstat或者ss,来查看套接字、网络栈、网络接口以及路由表的信息。
PS:查询网络的连接信息ss比netstat查询速度更快
head -n 3 #表示只显示前面3行
-a(all):显示所有选项,默认不显示LISTEN相关
-t(tcp):仅显示tcp相关选项
-u(udp):仅显示udp相关选项
-n:表示显示数字地址和端口(而不是名字)
-l:仅列出有在LISTEN(监听)的服务状态
-p:显示建立相关连接的程序名
-r:显示路由信息,路由表
-e:显示拓展信息,例如uid等
-s:按各个协议进行统计
-c:每隔一个固定时间,执行该netstat命令
netstat -nlp | head -n 3
-l:表示只显示监听套接字
-t:表示只显示TCP套接字
-n:表示显示数字地址和端口(而不是名字)
-p:表示显示进程信息
ss -ltnp
netstat和ss的输出是类似的,都展示了套接字状态、接收队列、发送队列、本地ip和端口、远端ip和端口、进程PID和进程名称等。
其中接收队列(Recv-Q)和发送队列(Send-Q)需要特别关注,它们通常应该是0。当发现不为0时,说明有网络包的堆积产生。当然还需要注意,在不同套接字状态下,它们的含义不同:
当套接字处于连接状态(Established)时:
当套接字处于监听状态(Listening)时:
当服务端调用listen函数监听端口的时候,内核会为每个监听的socket创建两个队列:
半连接队列(syn queue):客户端发送SYN包,服务端收到后回复SYN+ACK后,服务端进入SYN_RCVD状态,这个时候的socket会放到半连接队列。
全连接队列(accept queue):当服务端收到客户端的ACK后,完成了TCP三次握手,socket会从半连接队列移出到全连接队列。当调用accpet函数的时候,会从全连接队列的头部返回可用socket给用户进程。
给sar增加-n参数就可以查看网络的统计信息,比如网络接口(DEV)、网络接口错误(EDEV)、TCP、UDP、ICMP等等。
sar -n DEV 1
此命令除了可以用于查看网卡的信息,还可以用来搜集如下服务的状态信息:
-A:所有报告的总和
-u:CPU使用率
-v:进程、I节点、文件和锁表状态
-d:硬盘的使用报告
-r:没有使用的内存页面和硬盘块
-g:串口I/O的情况
-b:缓冲区的使用情况
-a:文件的读写情况
-c:系统的调用情况
-R:进程的活动情况
-y:终端设备的活动情况
-w:系统的交换活动
ping命令是用于检测网络故障的常用命令,可以测试一台主机到另外一台主机的网络是否是连通的
ping [选项,如-i 2] [主机名称或IP地址]
telnet是TCP/IP协议族的一员,是网络远程登陆服务的标准协议,帮助用户在本地计算机上连接远程主机。
使用方式:
telnet IP PORT
和ssh的区别:端口区别,telnet是23,ssh是22;本质区别,telnet是明码传输,ssh是加密传输
验证服务器端口有没有开放
nc是NetCat的简称,在网络调试工具中享有“瑞士军刀”的美誉,此命令功能丰富、短小精悍、简单实用,被设计为一款易用的网络工具,可通过TCP/LJDP传输数据
参数:
-I:用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其他地址发起连接
-s:指定发送数据的源IP地址,适用于多网卡机
-u:指定nc使用UDP协议,默认为TCP
-v:输出交互或出错信息,新手调试尤为有用
-w:超时秒数
抓包,然后用wireshark分析
tcpdump是网络状况分析和跟踪工具,是可以用来抓包的实用命令,使用前需要对TCP/IP有所了解,因为过滤使用的信息都是TCP/IP格式
示例,抓取ens33的报文,抓取5条后退出
tcpdump -i ens33 -c 5
2. 文件操作
-w:输出结果到文件
-C:限制输入文件的大小,超出以后缀1等数字的方式递减。注意:单位是1000000字节
-W:指定输出文件的最大数量
-G:指定每N秒就重新输出到新文件,注意-w参数应基于strftime参数指定文件名
-r:读取一个抓包文件
-V:将待读取的多个文件名写入一个文件夹中,通过读取该文件同时读取多个文件
lsof是系统管理/安全的尤伯工具。将这个工具称之为lsof真实名副其实,因为它是指“列出打开文件(lists openfiles)”。而有一点要切记,在Unix中一切(包括网络套接字)都是文件。
查看帮助文档:lsof -h
lsof默认没有选项, 列出活跃进程的所有打开文件
-a : 结果进行“与”运算(而不是“或”)
-l : 在输出显示用户ID而不是用户名
-h : 获得帮助
-t : 仅获取进程ID
-U : 获取UNIX套接口地址
-F : 格式化输出结果,用于其它命令。可以通过多种方式格式化,如-F pcfn(用于进程id、命令名、文件描述符、文件名,并以空终止)
扫描一台主机打开的端口及端口提供的服务信息,通常用于查看本机有哪些端口对外提供服务,或者服务器有哪些端口对外开放
nmap -v -A localhost