本文首发于个人公众号 CloudDeveloper(ID: cloud_dev),专一于干货分享,号内有大量书籍和视频资源,后台回复 「1024」便可领取,欢迎你们关注,二维码文末能够扫。
这是 Linux 性能分析系列的第四篇,前三篇在这里:html
比较宽泛地讲,网络方向的性能分析既包括主机测的网络配置查看、监控,又包括网络链路上的包转发时延、吞吐量、带宽等指标分析。包括但不限于如下分析工具:服务器
本文先来看前面 7 个。网络
ping 发送 ICMP echo 数据包来探测网络的连通性,除了能直观地看出网络的连通情况外,还能得到本次链接的往返时间(RTT 时间),丢包状况,以及访问的域名所对应的 IP 地址(使用 DNS 域名解析),好比:dom
咱们 ping baidu.com,-c
参数指定发包数。能够看到,解析到了 baidu 的一台服务器 IP 地址为 220.181.112.244。RTT 时间的最小、平均、最大和算术平均差分别是 40.732ms、40.762ms、40.791ms 和 0.248。ssh
ifconfig 命令被用于配置和显示 Linux 内核中网络接口的统计信息。经过这些统计信息,咱们也可以进行必定的网络性能调优。socket
其中,RX/TX packets 是对接收/发送数据包的状况统计,包括错误的包,丢掉多少包等。RX/TX bytes 是接收/发送数据字节数统计。其他还有不少参数,就不一一述说了,性能调优时能够重点关注 MTU(最大传输单元) 和 txqueuelen(发送队列长度),好比能够用下面的命令来对这两个参数进行微调:tcp
ifconfig eth0 txqueuelen 2000 ifconfig eth0 mtu 1500
ifconfig 还经常使用来配置网口的地址,好比:
为网卡配置和删除IPv6地址:
ifconfig eth0 add 33ffe:3240:800:1005::2/64 #为网卡eth0配置IPv6地址 ifconfig eth0 del 33ffe:3240:800:1005::2/64 #为网卡eth0删除IPv6地址
修改MAC地址:
ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE
配置IP地址:
ifconfig eth0 192.168.2.10 ifconfig eth0 192.168.2.10 netmask 255.255.255.0 ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255
ip 命令用来显示或设置 Linux 主机的网络接口、路由、网络设备、策略路由和隧道等信息,是 Linux 下功能强大的网络配置工具,旨在替代 ifconfig 命令,以下显示 IP 命令的强大之处,功能涵盖到 ifconfig、netstat、route 三个命令。
netstat 能够查看整个 Linux 系统关于网络的状况,是一个集多钟网络工具于一身的组合工具。
经常使用的选项包括如下几个:
各参数组合使用实例以下:
总体上来看,输出结果包括两个部分:
接口信息包括网络接口名称(Iface)、MTU,以及一系列接收(RX-)和传输(TX-)的指标。其中 OK 表示传输成功的包,ERR 是错误包,DRP 是丢包,OVR 是超限包。
这些参数有助于咱们对网络收包状况进行分析,从而判断瓶颈所在。
能够看到,这条命令可以显示每一个协议详细的信息,这有助于咱们针对协议栈进行更细粒度的分析。
这条命令可以看到主机路由表的一个状况。固然查路由咱们也能够用 ip route 和 route 命令,这个命令显示的信息会更详细一些。
ifstat 主要用来监测主机网口的网络流量,经常使用的选项包括:
好比,经过如下命令统计主机全部网口某一段时间内的流量数据:
能够看出,分别统计了三个网口的流量数据,前面输出的时间戳,有助于咱们统计一段时间内各网口总的输入、输出流量。
netcat,简称 nc,命令简单,但功能强大,在排查网络故障时很是有用,所以它也在众多网络工具中有着“瑞士军刀”的美誉。
它主要被用来构建网络链接。能够以客户端和服务端的方式运行,当以服务端方式运行时,它负责监听某个端口并接受客户端的链接,所以能够用它来调试客户端程序;当以客户端方式运行时,它负责向服务端发起链接并收发数据,所以也能够用它来调试服务端程序,此时它有点像 Telnet 程序。
经常使用的选项包括如下几种:
下面举一个简单的例子,使用 nc 命令发送消息:
首先,启动服务端,用 nc -l 0.0.0.0 12345
监听端口 12345 上的全部链接。
而后,启动客户端,用 nc -p 1234 127.0.0.1 12345
使用 1234 端口链接服务器 127.0.0.1::12345。
接着就能够在两端互发数据了。这里只是抛砖引玉,更多例子你们能够多实践。
最后是 tcpdump,强大的网络抓包工具。虽然有 wireshark 这样更易使用的图形化抓包工具,但 tcpdump 仍然是网络排错的必备利器。
tcpdump 选项不少,我就不一一列举了,你们能够看文章末尾的引用来进一步了解。这里列举几种 tcpdump 经常使用的用法。
好比想要捕获主机 200.200.200.100 上全部收到和发出的全部数据包,使用:
tcpdump host 200.200.200.100
好比要捕获主机 200.200.200.1 和主机 200.200.200.2 或 200.200.200.3 的通讯,使用:
tcpdump host 200.200.200.1 and \(200.200.200.2 or \)
一样要捕获主机 200.200.200.1 除了和主机 200.200.200.2 以外全部主机通讯的 IP 包。使用:
tcpdump ip host 200.200.200.1 and ! 200.200.200.2
好比要捕获主机 200.200.200.1 接收或发出的 Telnet 包,使用:
tcpdump tcp port 23 host 200.200.200.1
好比捕获在端口 6666 上经过的包,使用:
tcpdump port 6666
好比捕获在网口 eth0 上经过的包,使用:
tcpdump -i eth0
下面仍是举个例子,抓取 TCP 三次握手的包:(具体抓包的过程请移步到个人公众号进一步了解,那里阅读体验好一点,谢谢。)
本文总结了几种初级的网络工具,基本的网络性能分析,经过组合以上几种工具,基本都能应付,但对于复杂的问题,以上工具可能就无能为力了。更多高阶的工具将在下文送上,敬请期待。
参考:
基础 http://kuring.me/post/linux_n...
讲 ip 和 ifconfig 很强大的一篇文章:
https://blog.csdn.net/freekin...
https://www.alibabacloud.com/...
性能之巅:Linux网络性能分析工具http://www.infoq.com/cn/artic...
抓包工具tcpdump用法说明 https://www.cnblogs.com/f-ck-...
https://www.shiyanlou.com/cou...
http://linuxtools-rst.readthe...
https://www.shiyanlou.com/cou...
个人公众号 CloudDeveloper(ID: cloud_dev),号内有大量书籍和视频资源,后台回复 「1024」便可领取,分享的内容包括但不限于云计算虚拟化、容器、OpenStack、K8S、雾计算、网络、工具、SDN、OVS、DPDK、Linux、Go、Python、C/C++编程技术等内容,欢迎你们关注。