Linux网路合同栈是按照TCP/IP模型来实现的,TCP/IP模型由应用层、传输层、网络层和网路插口层redhat linux,共四层组成,每一层都有各自的职责。

linux网络带宽怎么看_linux如何查看带宽使用率_linux查看网络带宽

应用程序要发送数据包时,一般是通过socket插口,于是才会发生调用,把应用层的数据拷贝到内核里的socket层,接着由网路合同栈从上到下逐层处理后,最后才能送到网卡发送出去。

而对于接收网路包时,同样也要经过网路合同逐层处理,不过处理的方向与发送数据时是相反的,也就是从下到上的逐层处理,最后才送到应用程序。

网路的速率常常跟用户体验是挂钩的,那我们又该用哪些指标来评判Linux的网路性能呢?以及怎样剖析网路问题呢?

性能指标有什么?

一般是以4个指标来评判网路的性能,分别是带宽、延时、吞吐率、PPS(PacketPerSecond),它们表示的意义如下:

其实,不仅以上这四种基本的指标linux查看网络带宽,还有一些其他常用的性能指标,例如:

你可能会问了,怎么观测这种性能指标呢?不急,继续往下看。

网路配置怎么看?

要想晓得网路的配置和状态,我们可以使用ifconfig或则ip来查看。

这两个功能都差不多,不过它们属于不同的软件包,ifconfig属于net-tools软件包,ip属于iproute2软件包,我的印象中net-tools软件包没有人继续维护了,而iproute2软件包是有开发者仍然在维护,所以更推荐你使用ip工具。

学因而用,那就来使用这两个,来查看网口eth0的配置等信息:

其实这两个命令输出的格式不尽相同,并且输出的内容基本相同,例如都包含了IP地址、子网网段、MAC地址、网关地址、MTU大小、网口的状态以及网路包收发的统计信息,下边就来谈谈这种信息,它们都与网路性能有一定的关系。

第一,网口的联接状态标志。虽然也就是表示对应的网口是否联接到交换机或路由器等设备,假如ifconfig输出中看见有RUNNING,或则ip输出中有LOWER_UP,则说明化学网路是连通的,假如看不到linux多线程,则表示网口没有接网线。

第二,MTU大小。默认值是1500字节,其作用主要是限制网路包的大小,假若IP层有一个数据报要传,但是网路包的宽度比链路层的MTU还大,这么IP层就须要进行分片,即把数据报分成若干片,这样每一片就都大于MTU。事实上,每位网路的链路层MTU可能会不一样,所以你可能须要调大或则调小MTU的数值。

第三,网口的IP地址、子网网段、MAC地址、网关地址。这种信息必需要配置正确,网路功能能够正常工作。

第四,网路包收发的统计信息。一般有网路收发的字节数、包数、错误数以及丢包情况的信息,假如TX(发送)和RX(接收)部份中errors、dropped、overruns、carrier以及collisions等指标不为0时,则说明网路发送或则接收出问题了,这种出错统计信息的指标意义如下:

ifconfig和ip命令只显示的是网口的配置以及收发数据包的统计信息,而看不到合同栈里的信息,那接出来就来瞧瞧怎样查看合同栈里的信息。

socket信息怎样查看?

我们可以使用netstat或则ss,这两个命令查看socket、网络合同栈、网口以及路由表的信息。

尽管netstat与ss命令查看的信息都差不多,而且假如在生产环境中要查看这类信息的时侯,尽量不要使用netstat命令,由于它的性能不好,在系统比较忙碌的情况下,假如频繁使用netstat命令则会对性能的开支雪上加霜,所以更推荐你使用性能更好的ss命令。

从下边这张图,你可以听到这两个命令的输出内容:

linux网络带宽怎么看_linux如何查看带宽使用率_linux查看网络带宽

可以发觉,输出的内容都差不多,例如都包含了socket的状态(State)、接收队列(Recv-Q)、发送队列(Send-Q)、本地地址(LocalAddress)、远端地址(ForeignAddress)、进程PID和进程名称(PID/Programname)等。

接收队列(Recv-Q)和发送队列(Send-Q)比较特殊,在不同的socket状态。它们表示的含意是不同的。

当socket状态处于Established时:

而当socket状态处于Listen时:

在TCP三次握手过程中,当服务器收到顾客端的SYN包后,内核会把该联接储存到半联接队列,之后再向顾客端发送SYN+ACK包,接着顾客端会返回ACK,服务端收到第三次握手的ACK后,内核会把联接从半联接队列移除,之后创建新的完全的联接,并将其降低到全联接队列,等待进程调用accept()函数时把联接取下来。

linux查看网络带宽_linux如何查看带宽使用率_linux网络带宽怎么看

也就说,全联接队列指的是服务器与顾客端完了TCP三次握手后,还没有被accept()系统调用拿走联接的队列。

那对于合同栈的统计信息,仍然还是使用netstat或ss,它们查看统计信息的命令如下:

ss命令输出的统计信息相比netsat比较少,ss只显示早已联接(estab)、关闭(closed)、孤儿(orphaned)socket等简略统计。

而netstat则有更详尽的网路合同栈信息,例如里面显示了TCP合同的主动联接(activeconnectionsopenings)、被动联接(passiveconnectionopenings)、失败重试(failedconnectionattempts)、发送(segmentssendout)和接收(segmentsreceived)的分段数目等各类信息。

网路吞吐率和PPS怎么查看?

可以使用sar命令当前网路的吞吐率和PPS,用法是给sar降低-n参数就可以查看网路的统计信息,例如

例如,我通过sar命令获取了网口的统计信息:

它们的涵义:

对于带宽,我们可以使用ethtool命令来查询,它的单位一般是Gb/s或则Mb/s,不过注意这儿大写字母b,表示比特而不是字节。我们一般提及的万兆网卡、万兆网卡等,单位也都是比特(bit)。如下你可以看见,eth0网卡就是一个百兆网卡:

$ ethtool eth0 | grep Speed
  Speed: 1000Mb/s

连通性和延时怎么查看?

要测试本机与远程主机的连通性和延时,一般是使用ping命令,它是基于ICMP合同的,工作在网路层。

例如,假若要测试本机到192.168.12.20IP地址的连通性和延时:

显示的内容主要包含icmp_seq(ICMP序列号)、TTL(生存时间linux查看网络带宽,或则跳数)以及time(往返延时),但是最后会汇总本次测试的情况,若果网路没有丢包,packetloss的比率就是0。

不过,须要注意的是,ping不通服务器并不代表HTTP恳求也不通,由于有的服务器的防火墙是会禁用ICMP合同的。

工具总结

性能指标

工具

说明

吞吐量(BPS)

sar

nethogs

iftop

分别可以查看网路插口、进程以及IP地址的网路吞吐量

PPS

sar

/proc/net/dev

查看网路插口的PPS

联接数

netstat

linux如何查看带宽使用率_linux网络带宽怎么看_linux查看网络带宽

ss

查看网路联接数

延后

ping

hping3

通过ICMP、TCP等测试网路延后

联接跟踪数

conntrack

查看和管理联接跟踪状况

路由

mtr

route

traceroute

查看路由并测试链路信息

DNS

dig

linux网络带宽怎么看_linux查看网络带宽_linux如何查看带宽使用率

nslookup

排查DNS解析问题

防火墙和NAT

iptables

配置和管理防火墙及NAT规则

网卡功能

ethtool

查看和配置网路插口的功能

抓包

tcpdump

wireshark

ngrep

抓包剖析网路流量

内核合同栈跟踪

bcc

systemtap

动态跟踪内核合同栈的行为

本文原创地址://gulass.cn/lwlxyzdxnzbf.html编辑:刘遄,审核员:暂无