美文网首页
监控网络

监控网络

作者: wayyyy | 来源:发表于2020-07-19 22:40 被阅读0次

Linux 网络收发流程

网络包的接收

当一个网络帧到达网卡后,网卡会通过 DMA 方式,把这个网络包放到收包队列中;然后通过硬中断,告诉中断处理程序已经收到了网络包。

网卡中断处理程序会为网络帧分配内核数据结构(sk_buff),并将其拷贝到 sk_buff 缓冲区中;然后再通过软中断,通知内核收到了新的网络帧。

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

  • 在链路层检查报文的合法性,找出上层协议的类型(比如 IPv4 还是 IPv6),再去掉帧头、帧尾,然后交给网络层。
  • 网络层取出 IP 头,判断网络包下一步的走向,比如是交给上层处理还是转发。当网络层确认这个包是要发送到本机后,就会取出上层协议的类型(比如 TCP 还是 UDP),去掉 IP 头,再交给传输层处理。
  • 传输层取出 TCP 头或者 UDP 头后,根据 < 源 IP、源端口、目的 IP、目的端口 > 四元组作为标识,找出对应的 Socket,并把数据拷贝到 Socket 的接收缓存中。
image.png
网络包的发送

应用程序调用 Socket API(比如 sendmsg)发送网络包。由于这是一个系统调用,所以会陷入到内核态的套接字层中。套接字层会把数据包放到 Socket 发送缓冲区中。

网络协议栈从 Socket 发送缓冲区中,取出数据包;再按照 TCP/IP 栈,从上到下逐层处理。比如,传输层和网络层,分别为其增加 TCP 头和 IP 头,执行路由查找确认下一跳的 IP,并按照 MTU 大小进行分片。

分片后的网络包,再送到网络接口层,进行物理地址寻址,以找到下一跳的 MAC 地址。然后添加帧头和帧尾,放到发包队列中。这一切完成后,会有软中断通知驱动程序:发包队列中有新的网络帧需要发送。

最后,驱动程序通过 DMA ,从发包队列中读出网络帧,并通过物理网卡把它发送出去。


性能指标

带宽
吞吐量
延时
PPS

是 Packet Per Second(包 / 秒)的缩写,表示以网络包为单位的传输速率。PPS 通常用来评估网络的转发能力


测量TCP带宽

  • 服务端开启监听

    nc -l [server_port]
    
  • 客户端发送数据

    dd if=/dev/zero bs=1MB count=1000 | nc [server_ip] [server_port]
    

查看网卡速度

ethtool 网卡接口
7304940-023aae37d72611de.png

sar 命令

给 sar 增加 -n 参数就可以查看网络的统计信息,比如网络接口(DEV)、网络接口错误(EDEV)、TCP、UDP、ICMP 等等

sar -n DEV 1 1 
image.png
  • rxpck/s txpck/s 每秒钟 接收/发送 的数据包
  • rxKB/s txkB/s 每秒钟接受/发送的数据包大小,单位为KB
  • %ifutil 是网络接口的使用率,即半双工模式下为 (rxkB/s+txkB/s)/Bandwidth,而全双工模式下为 max(rxkB/s, txkB/s)/Bandwidth。
统计socket连接信息
sar -n SOCK 1 1
image.png
  • totsck 当前被使用的socket总数
  • tcpsck 当前正在被使用的TCP的socket总数
  • udpsck 当前正在被使用的UDP的socket总数
  • rawsck 当前正在被使用于RAW的skcket总数
  • if-frag 当前的IP分片的数目
  • tcp-tw TCP套接字中处于TIME-WAIT状态的连接数量

查看套接字发送和接收缓冲区大小

  • 发送缓冲区
    /proc/sys/net/ipv4/tcp_wmem

    min:为TCP socket预留用于发送缓冲的内存最小值。每个tcp socket都可以在建议以后都可以使用它。默认值为4096(4K)。
    default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem_default 值,一般要低于net.core.wmem_default的值。默认值为16384(16K)。
    max: 用于TCP socket发送缓冲的内存最大值。该值不会影响net.core.wmem_max,"静态"选择参数SO_SNDBUF则不受该值影响。默认值为131072(128K)。(对于服务器而言,增加这个参数的值对于发送数据很有帮助,在我的网络环境中,修改为了51200 131072 204800)

  • 接收缓冲区
    /proc/sys/net/ipv4/tcp_rmem


相关文章

  • 远程视频监控的实现

    远程视频监控,也称远程网络监控,是指监控者不在监控摄像头或其他摄像采集设备周围,通过网络远距离查看现场监控视频的场...

  • 网络监控

    中国拥有世界上最复杂的网络环境,除去中国电信,中国联通,中国移动三大主流运营商,还有几千的二三级小运营商,中国目前...

  • 网络监控

    本文的意义 利用苹果原生的类Reachability,实时监控网络的状态 利用框架AFNetworking实时监控...

  • 网络监控

    1.在网络应用中,需要对用户设备的网络状态进行实时监控,目的是让用户了解自己的网络状态,防止一些误会(比如怪应用无...

  • 监控网络

    Linux 网络收发流程 网络包的接收 当一个网络帧到达网卡后,网卡会通过 DMA 方式,把这个网络包放到收包队列...

  • OpManager网络性能监控

    网络性能监控 OpManager – 综合、方便、可定制的ITOM网络性能监控软件 OpManager提供综合的网...

  • 分分钟拯救监控知识体系

    分分钟拯救监控知识体系5.1 硬件监控5.2 系统监控5.3 应用监控5.4 网络监控5.5 流量分析5.6 日志...

  • AFN监控网络状态注意

    AFNetworkReachabilityManager监控网络状态时,一定要用sharedManager开始监控...

  • iOS 网络监控

    iOS 网络监控 前言 最近公司业务需要,对网络进行监控,本文主要记录下在网络流量监控实现过程中遇到的一些问题的解...

  • 基于C++的TCP/UDP网络监控工具

    VC++ TCP/UDP网络监控工具(源代码),可监控各个网络连接的状态,可监控到目标协议的源IP地址、目的IP地...

网友评论

      本文标题:监控网络

      本文链接:https://www.haomeiwen.com/subject/ajkrkktx.html