网络性能配置

前言

今天我们来看看哪些命令可以很好的帮助我们分析自己的网络。

常见性能指标

对于网络来说,对于非专业人士来说,其评判标准就是简单的网速快还是慢,不过这已经可以很好的评价一个网络了,但是我们还希望对这个网速快还是慢进行一个量化的评估,于是就有了下面这些指标。

包括

  • 带宽
  • 时延
  • 吞吐率
  • 转发率

上面这四个可以说是最常见的评价指标,除此之外,我们还可以看到一些其它的评价指标:

  • 网络可用性
  • 丢包率
  • 并发连接数
  • 重传率

查看网络配置

查看当前的网络配置,一般有ifconfigip两个工具,老铁们说实话,本人只用过ifconfig,不过这个工具似乎没有人维护了,所以可以使用ip工具。

下面是一个使用ip的一个命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
❯ ip -s addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1432 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:c3:bc:42 brd ff:ff:ff:ff:ff:ff
    inet 172.21.157.203/20 brd 172.21.159.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fec3:bc42/64 scope link 
       valid_lft forever preferred_lft forever
    RX:  bytes packets errors dropped  missed   mcast           
         74574      67      0       0       0       0 
    TX:  bytes packets errors dropped carrier collsns           
          9546      76      0       0       0       0 

确实,ip的输出格式要比ifconfig要好一些。LOWER_UP表示网络正常接通

下面的RXTX表示的是发送和接受的字节数,后面是一些错误信息,可以看到当前没有error,说明目前没有什么问题。

查看socket的信息

我们可以ss或者netstat工具来查看socket的一些信息,输入ss -lntp

1
2
3
4
5
6
7
8
~ > ss -lntp
State     Recv-Q    Send-Q       Local Address:Port         Peer Address:Port    Process                            
LISTEN    0         151              127.0.0.1:3306              0.0.0.0:*                                          
LISTEN    0         511              127.0.0.1:38953             0.0.0.0:*        users:(("node",pid=410,fd=21))    
LISTEN    0         511                0.0.0.0:80                0.0.0.0:*                                          
LISTEN    0         4096            127.0.0.54:53                0.0.0.0:*                                          
LISTEN    0         511                0.0.0.0:6379              0.0.0.0:*                                          
LISTEN    0         70               127.0.0.1:33060             0.0.0.0:*       

其中,-l参数表示查看处于listen状态的socketn表示不显示名字,而是以数字的方式进行显示,t表示查看tcpp表示显示对应的进程信息。

tcp协议栈中,我们知道tcp的建立需要三次握手,即

  • 客户端发送syn码,表示建立连接
  • 服务端发送syn+ack表示收到信息
  • 客户端发送ack表示收到信息

经过三次握手,客户端与服务端就建立好了连接。而内核是怎么维护这个信息的呢?内核会把这个连接过程分为两个队列,一个是全连接队列,一个是半连接队列。

在收到客户端发送的syn码后,你可以理解为内核把这个socket放在了半连接队列里面,而收到客户端的ack信息后,表示三次握手结束,这个时候就可以把socket放到全连接队列里面,然后从半连接队列里面删除这个socket,然后当进程调用accept的时候,就会把这个socket从全连接队列里面取出来,用来下一次的使用。

此时,我们就可以对 Recv-Q Send-Q进行解释了,在还未三次握手前,即这两个队列表示缓冲区还未被读取的字节数和未被发送的字节数;建立连接后,表示已经收到的字节数和发送的字节数。

总结

我们了解到了一些常见性能指标和查看网络配置的一些工具,除此之外,还学到了内核对tcp的连接管理方法,即在三次握手期间,维护全连接队列和半连接队列来进行socket的维护。

Licensed under CC BY-NC-SA 4.0
花有重开日,人无再少年
使用 Hugo 构建
主题 StackJimmy 设计