网络分析系列--性能测试中的基本网络知识

目录

 Linux 网络路栈

网络数据包的发送流程:

        1.应用程序调用socket接口发送网络包.

        2.网络协议栈从socket发送缓冲区中,取出数据包,再按照TCP/IP栈,从上到下逐层处

        理,比如:传输层和网络层,分别为数据包增加TCP头和IP头,执行路由查找确认下一

        步的IP,并按照MTU大小(MTU:最大传输单元,linux默认1500)进行分片.

        3.分片后的网络包,再送到网络接口层,进行物理地址寻址,以找到下一步的MAC地

        址,然后添加帧头和帧尾,放到发包队列中.这些都完成后会有软终端通知驱动程序:

        发包队列中有新的帧需要发送.

        4.驱动程序通过DMA(direct memory access直接存储器访问),从发包队列中对出

        网络帧,并通过物理网卡把它发送出去.

网络数据包接收流程:

        1.当一个网络帧到达网卡后,网卡会通过DMA方式,把这个网络包放到收包队列中,然

        后通过硬中断,告诉中断处理程序收到了新的网络包.

        2.网卡中断处理程序会为网络帧分配内核数据结构(sk_buff),并将其拷贝到sk_buff

        缓冲区中,然后再通过软中断,通知内核收到了新的网络帧.

        3.内核协议栈从缓冲区中取出网络帧,并通过网络协议栈,从下到上逐层处理这个网

        络帧,比如:

                1.在链路层检查报文的合法性,找出上层协议的类型(ipv4还是ipv6),再去掉帧

                头帧尾,交给

                网络层.

                2.网络层取出IP头,判断网络包下一步的走向,比如是交给上层处理还是继续转

                发.当网络层确认这个包是发送给本机后,就会取出上层协议的类型(比如是

                TCP还是UDP),去掉IP头再交给传输层处理.

                3.传输层取出TCP头或UDP头后,根据<源ip,源端口,目的IP,目的端口>作为标

                识,找出对应的socket,并把数据拷贝到socket的接收缓冲区中.

                4.应用程序使用socket接口,读取到新接收到的数据.

网络性能指标:

        网络通常用带宽,吞吐量,延时,PPS(packet per second)等指标来衡量性能.

        1.带宽:表示链路的最大传输速率,单位通常为b/s(比特/秒).

        2.吞吐量:单位时间内成功传输的数据量,单位通常为b/s或者字节/s.吞吐量受带宽限

        制,而吞吐量/带宽,就是该网络的使用率.

        3.延时:从网络请求发出后,一直到收到远端响应,所需要的时间延迟.

        4.PPS:packet per second以网络包为单位的传输速率,PPS用来评估网络的转发

        能力,比如硬件交换机,通常可以达到线性转发(即PPS可以达到或接近理论最大值).

        5.除了上面的指标,网络可用性(网络能否正常通信),并发连接数(TCP连接数量),丢

        包率(丢包百分比),重传率(重新传输的网络包比例)也是常用的性能指标.

网络瓶颈排查工具

netstat -nlp(ss -nlp):展示套接字的状态,接收队列,发送队列

netstat -s(ss -s):按照每个协议分类进行统计

sar:监控网络吞吐和PPS,CPU,内存,I/O等.

 ethtool ens33 | grep Speed:查看网卡速率

ping:测试远程主机联通性和延时


OSI七层模型和TCP/IP五层模型的对比如下,我们现在用的是五层协议模型:

        应用层:负责为应用程序提供统一接口.

        表示层:负责把数据转换成接收系统兼容的格式.

        会话层:负责维护计算机之间的通信连接.

        传输层:负责对数据加工,形成数据包.

        网络层:负责数据的路由转发.

        数据链路层:负责MAC寻址,错误帧检测.

        物理层:负责在网络中传输数据帧.

 Linux 网络路栈

        网络包在每一层的处理逻辑,都取决于各层采用的网络协议:在应用层,一个REST API的应用,可以使用HTTP协议,把它需要传输的json数据封装到HTTP协议中,然后向下传输给TCP.

网卡:发送和接收网络数据包的基本设备.做性能测试时要准备较好的网卡,例如千兆,万兆网卡.

网络数据包的发送流程:

        1.应用程序调用socket接口发送网络包.

        2.网络协议栈从socket发送缓冲区中,取出数据包,再按照TCP/IP栈,从上到下逐层处

        理,比如:传输层和网络层,分别为数据包增加TCP头和IP头,执行路由查找确认下一

        步的IP,并按照MTU大小(MTU:最大传输单元,linux默认1500)进行分片.

        3.分片后的网络包,再送到网络接口层,进行物理地址寻址,以找到下一步的MAC地

        址,然后添加帧头和帧尾,放到发包队列中.这些都完成后会有软终端通知驱动程序:

        发包队列中有新的帧需要发送.

        4.驱动程序通过DMA(direct memory access直接存储器访问),从发包队列中对出

        网络帧,并通过物理网卡把它发送出去.

网络数据包接收流程:

        1.当一个网络帧到达网卡后,网卡会通过DMA方式,把这个网络包放到收包队列中,然

        后通过硬中断,告诉中断处理程序收到了新的网络包.

        2.网卡中断处理程序会为网络帧分配内核数据结构(sk_buff),并将其拷贝到sk_buff

        缓冲区中,然后再通过软中断,通知内核收到了新的网络帧.

        3.内核协议栈从缓冲区中取出网络帧,并通过网络协议栈,从下到上逐层处理这个网

        络帧,比如:

                1.在链路层检查报文的合法性,找出上层协议的类型(ipv4还是ipv6),再去掉帧

                头帧尾,交给

                网络层.

                2.网络层取出IP头,判断网络包下一步的走向,比如是交给上层处理还是继续转

                发.当网络层确认这个包是发送给本机后,就会取出上层协议的类型(比如是

                TCP还是UDP),去掉IP头再交给传输层处理.

                3.传输层取出TCP头或UDP头后,根据<源ip,源端口,目的IP,目的端口>作为标

                识,找出对应的socket,并把数据拷贝到socket的接收缓冲区中.

                4.应用程序使用socket接口,读取到新接收到的数据.

数据进入TCP/IP协议栈时的封装过程如下:

网络性能指标:

        网络通常用带宽,吞吐量,延时,PPS(packet per second)等指标来衡量性能.

        1.带宽:表示链路的最大传输速率,单位通常为b/s(比特/秒).

        2.吞吐量:单位时间内成功传输的数据量,单位通常为b/s或者字节/s.吞吐量受带宽限

        制,而吞吐量/带宽,就是该网络的使用率.

        3.延时:从网络请求发出后,一直到收到远端响应,所需要的时间延迟.

        4.PPS:packet per second以网络包为单位的传输速率,PPS用来评估网络的转发

        能力,比如硬件交换机,通常可以达到线性转发(即PPS可以达到或接近理论最大值).

        5.除了上面的指标,网络可用性(网络能否正常通信),并发连接数(TCP连接数量),丢

        包率(丢包百分比),重传率(重新传输的网络包比例)也是常用的性能指标.

errors;发生错误的数据包数量,比如检验错误,帧同步错误.

dropped:丢弃的数据包数量,比如数据包已经收到了,但因为内存不足等原因丢包.

overruns:超限数据包数,即网络I/O速度过快,导致队列中的数据包堆积满,来不及处理导致的丢包.

carrier:发生carrier错误的数据包数量,比如双工模式不匹配,物理电缆线路故障.

collisions:碰撞数据包数量.

网络瓶颈排查工具

netstat -nlp(ss -nlp):展示套接字的状态,接收队列,发送队列

Rec-Q:套接字缓存区中还没有被应用程序取走的字节数(即接收队列长度).

Send-Q:还没有被远端主机确认的字节数(发送队列长度)

Rec-Q(接收队列):和Send-Q(发送队列),正常时应该都是0,如果不为0,说明有网络包堆积情况.

netstat -s(ss -s):按照每个协议分类进行统计

sar:监控网络吞吐和PPS,CPU,内存,I/O等.

 ethtool ens33 | grep Speed:查看网卡速率

                        此处为千兆网卡 

ping:测试远程主机联通性和延时

Guess you like

Origin blog.csdn.net/qq_40132294/article/details/121504432