Play Open
Loading • Please wait • Loading • Please wait • Loading • Please wait • Loading • Please wait • Loading • Please wait • Loading • Please wait •

Linux如何查看某个进程收发包的数量

工作中定位排查一些问题,记录在此,积累经验。

背景简述

有两台机器之间网络不佳,影响上面的主从服务同步。使用ping命令简单测试之后发现,同一AZ(可用区)下的时延竟然有100多ms,正常情况下应该在1ms以内。

之前没遇到过这样的情况,联系网络组的同事,通过监控发现两台机器的pps(Packet Per Second)很高,超过限制,被限流了,所以这两台机器之间的时延很大。

那怎么找到造成pps升高的进程呢?

实操小结

使用iftop -P命令,可以看到机器上各个端口之间的流量情况,可以定位到对应的进程,但是看不到每个端口之间发送的包的数量;使用sar -n DEV 1命令,可以看到机器上总的收发包的量,但是不能定位具体是哪个进程导致的;

google,baidu了很久,都没有找到能够直接统计每个进程收发包数量的工具,很尴尬,,,

学习整理

然后询问公司大佬同事,自己再上网查了资料,简单总结如下:

TCP

使用tcp协议进行传输时,除了前面封装的tcp头部数据,后面真正的数据部分可以填充很多内容,所以认为tcp的数据包是没有边界的;

MTU和MMS

物理链路中并不能传输任意大小的数据包,所以就有网络接口配置的最大传输单元(MTU),规定了最大的 IP 包大小。一旦网络包超过 MTU 的大小,就会在网络层分片,以保证分片后的 IP 包不大于 MTU 值。在我们最常用的以太网中,MTU 默认值是 1500(这也是 Linux 的默认值)

而TCP的单个数据报的最大消息长度,称为 MSS(Max Segment Size)

TCP在建立连接的过程中, 通信双方会进行MSS协商。 (最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度)

MSS协商的过程:

双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值然后双方得知对方的MSS值之后, 选择较小的作为最终MSS (MSS=MTU-20字节TCP报头-20字节IP报头,那么在以太网环境下,MSS值一般就是1500-20-20=1460字节)

MSS和MTU的关系

如何查看机器的MMS值呢?

用tcpdump工具在Linux抓包后,用wireshark打开进行分析,在SYN包如下地方找到了该机器的MMS值:

正是 1460 字节

所以 每个进程收发包的个数=每个进程收发的流量(bits)/MMS值 (1460)?

验证

其实到这已经满足我们要找出发包数量最多的进程的需求了,即看收发的流量大小,因为收发包数量的多少跟流量是成正比的。

但是为了验证MTU和MSS在实际中的效果,在机器上执行sar -n DEV 1 1获取到如下输出:

10:03:01 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s

10:03:02 PM lo 82.65 82.65 19.14 19.14 0.00 0.00 0.00

10:03:02 PM eth0 47719.39 41940.82 8141.14 6878.60 0.00 0.00 0.00

各字段含义如下:

IFACE:LAN接口rxpck/s:每秒钟接收的数据包(单位为 个数)txpck/s:每秒钟发送的数据包rxbyt/s:每秒钟接收的字节数(单位为 kB)txbyt/s:每秒钟发送的字节数rxcmp/s:每秒钟接收的压缩数据包txcmp/s:每秒钟发送的压缩数据包rxmcst/s:每秒钟接收的多播数据包

按照刚才了解到的:

收或发包的数量 = 收或发流量(bits)/MTU(1500)

验证:

收包数量 收包流量/MTU

rxkB/s rxkB/s / 1500

47719.39 8141.14 * 1000 * 8(kB转换) / 1500 = 43419.41 好像有点不太对,,,

8141.14 * 1000 * 8 / 47719.39 = 1364 ??

6878.60 * 1000 * 8 / 41940.82 = 1312.06 ??

这样简单的计算之后并不是刚好等于我们预料中的值,不过也差不了很多,应该是有一些关键的细节没有掌握,没有考虑进去,等网络和Linux相关的知识再掌握的深入一些,应该就有更多的思路了。

写下此博客记录自己的学习思考过程,欢迎大佬评论指导~

参考:

Linux网络流量实时监控ifstat iftop命令详解 https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858923.html

数据链路层之以太网、MAC、MTU详解 https://blog.csdn.net/baidu_37964071/article/details/80487582

TCP/IP协议:最大报文段长度(MSS)是如何确定的 https://blog.csdn.net/xiaofei0859/article/details/51052848

tcp/ip https://www.cnblogs.com/xiaolincoding/p/12638546.html

tcp/ip https://www.cnblogs.com/edisonchou/p/5987827.html

OSI参考模型——数据链路层详解 https://blog.csdn.net/jeffleo/article/details/53932693

Linux下查看与修改mtu值 https://www.cnblogs.com/wjoyxt/p/6873714.html

Copyright © 2088 足球小将世界杯_1999年美国女足世界杯 - omaili.com All Rights Reserved.
友情链接