前言:

有关于网络问题,又是笔者另一个薄弱知识点。

应该说是理论知识不够扎实,每次理论学的差不多的时候,由于缺乏实战,一段时间之后,又忘记的差不多了。

每次重复这种情况还是蛮尴尬的,所以理论结合实战才是学习网络知识的最佳途径。

本文主要介绍如何通过命令来了解当前机器的网络配置,而对于网络方面的监控,究竟有哪些指标可供使用。

1.机器网络配置

所谓网络配置,实际最简单的就是当前机器的IP地址,当然还有别的重要信息。

我们通过ifconfig命令可以了解到

root@93de58bae514:/# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 1317563  bytes 72471955 (72.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1649969  bytes 89099310 (89.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

物理网卡eth0 MTU=1500

当前机器ip地址为 172.17.0.2 MAC地址为02:42:ac:11:00:02

RX(Receiver接收包) 上述示例中:接收总包数1317563,接收总bytes为72.4 MB,发生错误的包、丢包数量为0

TX(Transmit发送包) 上述示例中:发送总包数1649969,发送总bytes为89.0 MB,发送错误的包、丢包数量为0

errors 发生错误的数据包数,如校验错误、帧同步错误等;
dropped 丢弃的包数量,数据包已经收到了Ring Buffer,但由于内存不足等原因丢包;
overruns 超限数据包,即网络I/O速度过快,导致Ring Buffer中的数据包来不及处理而导致的丢包;
carrier 表示carrier错误的数据包数,比如双工模式不匹配,物理电缆出线问题等;
collisions 碰撞数据包数

2.查看套接字信息

ifconfig从全局角度展示了当前机器(网络)的基本信息。

但是当我们分析某个套接字、网络栈等信息时,还是需要使用netstat命令来展示

root@91230cc467cc:/usr/local/tomcat# netstat -nlp             
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      1/qemu-x86_64   
tcp        0      0 0.0.0.0:8009            0.0.0.0:*               LISTEN      1/qemu-x86_64   
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1/qemu-x86_64   
Active UNIX domain sockets (only servers)

展示目前在监听的端口信息

套接字状态

Recv-Q

Send-Q

Established

接收队列长度(套接字缓冲还没有被应用程序取走的字节数)

发送队列长度(还没有被远端主机确认的字节数)

Listening

syn backlog(半连接队列长度)当前值

syn backlog(半连接队列长度)最大值

3.性能指标

这里算是比较重要的了,一般来排查问题时,都是观察各种性能指标是否异常来推断具体问题点。

3.1 带宽

在计算机网络中,带宽用来表示网络通信线路传输数据的最大能力。

我们计算机常用的网卡 100M、1000M就是带宽的意思(这里的单位为Mb 即比特/秒,如果要换算成byte,还需要除以8)

3.2 吞吐量

类似于磁盘I/O吞吐量,表示单位时间内通过某个网络或接口的数据量,包括上传和下载的数据量。

吞吐量受限与带宽。

吞吐量/带宽=网络使用率。

3.3 时延

表示从网络请求发出后,一直到接收到响应,所需时间。

时延是一个很重要的性能指标,总时延=发送时延+传播时延+排队时间+处理时延。


3.4 PPS

Packet Per Second的缩写,即每秒发送包数量

PPS通常用来评估网络的转发能力

4.网络性能指标监控

既然上述有哪些多性能指标,哪些命令可以监控呢?

4.1 sar命令

root@e05fc0c9b15c:/# sar -n DEV 3
Linux 5.10.76-linuxkit (e05fc0c9b15c) 03/18/22 _aarch64_ (4 CPU)

15:01:21        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
15:01:24           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
15:01:24        tunl0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
15:01:24      ip6tnl0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
15:01:24         eth0   3767.67   2209.00    250.45    149.82      0.00      0.00      0.00      0.02

rxpck/s 和 txpck/s分别表示接收和发送的PPS(加在一起就是总PPS)

rxkB/s 和 txkB/s分别表示接收和发送的吞吐量(加在一起就是总吞吐量)

%ifutil表示网络接口使用率

4.2 带宽查看

查看某个网卡的带宽,可以直接通过ethtool命令查看

root@93de58bae514:/# ethtool eth0 | grep Speed
Cannot get wake-on-lan settings: Operation not permitted
	Speed: 10000Mb/s

这里的Mb/s,是以bit为单位的

可以看出就是我们常说的万兆网卡

4.3 时延查看

连接某个ip的时延,最简单的方式就是通过ping命令来查看

root@93de58bae514:/# ping www.baidu.com
PING www.a.shifen.com (36.152.44.96) 56(84) bytes of data.
64 bytes from 36.152.44.96 (36.152.44.96): icmp_seq=1 ttl=37 time=14.9 ms
64 bytes from 36.152.44.96 (36.152.44.96): icmp_seq=2 ttl=37 time=18.2 ms
64 bytes from 36.152.44.96 (36.152.44.96): icmp_seq=3 ttl=37 time=18.1 ms
64 bytes from 36.152.44.96 (36.152.44.96): icmp_seq=4 ttl=37 time=18.4 ms
64 bytes from 36.152.44.96 (36.152.44.96): icmp_seq=5 ttl=37 time=18.3 ms
^C
--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4014ms
rtt min/avg/max/mdev = 14.999/17.650/18.419/1.329 ms

笔者在这里ping以下百度的域名

可以看出这个域名是通的,具体ip为36.152.44.96

而平均时延为17ms

总结:

通过sar 、ping等命令我们可以很好的观察到网络性能相关指标。

多实战,多去用。