前言
今天我们来看看哪些命令可以很好的帮助我们分析自己的网络。
常见性能指标
对于网络来说,对于非专业人士来说,其评判标准就是简单的网速快还是慢,不过这已经可以很好的评价一个网络了,但是我们还希望对这个网速快还是慢进行一个量化的评估,于是就有了下面这些指标。
包括
- 带宽
- 时延
- 吞吐率
- 转发率
上面这四个可以说是最常见的评价指标,除此之外,我们还可以看到一些其它的评价指标:
- 网络可用性
- 丢包率
- 并发连接数
- 重传率
查看网络配置
查看当前的网络配置,一般有ifconfig和ip两个工具,老铁们说实话,本人只用过ifconfig,不过这个工具似乎没有人维护了,所以可以使用ip工具。
下面是一个使用ip的一个命令
|  |  | 
确实,ip的输出格式要比ifconfig要好一些。LOWER_UP表示网络正常接通
下面的RX和TX表示的是发送和接受的字节数,后面是一些错误信息,可以看到当前没有error,说明目前没有什么问题。
查看socket的信息
我们可以ss或者netstat工具来查看socket的一些信息,输入ss -lntp
|  |  | 
其中,-l参数表示查看处于listen状态的socket,n表示不显示名字,而是以数字的方式进行显示,t表示查看tcp,p表示显示对应的进程信息。
在tcp协议栈中,我们知道tcp的建立需要三次握手,即
- 客户端发送syn码,表示建立连接
- 服务端发送syn+ack表示收到信息
- 客户端发送ack表示收到信息
经过三次握手,客户端与服务端就建立好了连接。而内核是怎么维护这个信息的呢?内核会把这个连接过程分为两个队列,一个是全连接队列,一个是半连接队列。
在收到客户端发送的syn码后,你可以理解为内核把这个socket放在了半连接队列里面,而收到客户端的ack信息后,表示三次握手结束,这个时候就可以把socket放到全连接队列里面,然后从半连接队列里面删除这个socket,然后当进程调用accept的时候,就会把这个socket从全连接队列里面取出来,用来下一次的使用。
此时,我们就可以对 Recv-Q 和 Send-Q进行解释了,在还未三次握手前,即这两个队列表示缓冲区还未被读取的字节数和未被发送的字节数;建立连接后,表示已经收到的字节数和发送的字节数。
总结
我们了解到了一些常见性能指标和查看网络配置的一些工具,除此之外,还学到了内核对tcp的连接管理方法,即在三次握手期间,维护全连接队列和半连接队列来进行socket的维护。