精华内容
下载资源
问答
  • 主要给大家介绍了关于Linux模拟网络丢包与延迟的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Linux具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 1.目的 在互联网中,我们会向网络运营商申请指定额度的带宽。实际传输时,由于网络QoS达不...丢包率:由于网络拥塞,传输错误等造成的数据包丢失概率 延时:数据包发送到对端再返回到发送端的时长 延时抖动:衡量...

    1.目的

    在互联网中,我们会向网络运营商申请指定额度的带宽。实际传输时,由于网络QoS达不到要求,实际的传输带宽可能达不到标称值。本次测试在局域网环境中使用模拟工具模拟不同QoS下的网络条件,得出不同QoS网络下传输带宽

    2.网络QoS指标

    网络的QoS通常用以下指标衡量:

    • 丢包率:由于网络拥塞,传输错误等造成的数据包丢失概率
    • 延时:数据包发送到对端再返回到发送端的时长
    • 延时抖动:衡量延时变化的程度

    本次测试值模拟丢包率和延时与传输带宽的关系。

    注:本文中的丢包率指的是在传输速率小于最大传输带宽时的丢包率。

    3.测试方案

    本次测试分两个阶段进行:

    1. 在丢包率为0的情况下,测试不同延时下的传输速率;
    2. 调整丢包率与延时,测试不同延时与丢包率组合下的传输速率。

    4.测试环境

    测试使用两位服务器:

    Server A:10.10.168.151

    Server B:10.10.168.153

    两台Server之间通过千兆以太网连接(带宽为1000Mbps);

    两台服务器上部署iperf,用于向网络加流量,并统计传输速率;其中Server A上运行iperf server端(iperf -s),Server B上运行iperf client端(iperf -c 10.10.168.151 -t 100000 -i2)。数据流量方向是:server B → server A。iperf client端启动1分钟,统计1分钟内的平均传输速率作为一次测试的结果。

    在Server B上,使用tc 模拟不同QoS的网络环境。tc 可以在server的出口方向模拟延时和丢包的情况:

    添加延时:tc qdisc add dev enp0s25 root netem  delay 50ms

    添加丢包:tc qdisc add dev enp0s25 root netem  loss 3%

    添加延时与丢包:tc qdisc add dev enp0s25 root netem  delay 50ms loss 3%

    清空规则:tc qdisc del dev enp0s25 root

    查看规则:tc qdisc ls dev enp0s25

     

    5.测试结果

    5.1. 延时与传输速率的关系

    丢包设置为0,延时从1ms 变化到 5000ms,测试每一个延时下的传输速率。下表为测试结果:

    延时(ms)11020304050100150200250300350400500600800100015002000300040005000
    传输速度(Mbps)8548548087305524462261441108670595140302218.41210620.2

    延时在4000ms以内时,传输速率能在1Mbps以上。当延时到达5000ms时,传输速率下降到200kbps。延时越大,达到稳定传输速率的时间越长。

    注意:以上测试是在iperf采用默认的window size测试的结果;window size会影响到max cwnd和max rwnd,在延时比较大的时候,max wnd = MIN(max cwnd, max rwnd)决定了最终的传输速度;rate = max wnd/rtt;从测试的结果看,max cwnd比较小,这个值决定的传输速度;以300ms延时的测试点为例,通过-w参数增加发送端window size,传输速率可以提升到83Mbps,此时max rwnd决定了传输速度,此时,再通过-w参数增加接收端window size,传输速率可以到达450Mbps

    5.2. 延时、丢表率与传输速率的关系

    丢表率从1%-10%变化,延时从10ms变化到1000ms,测试每一个组合下的传输速率。当延时/丢包率增大时,传输速率会下降,当传输速率低于500kbps时,不再继续增大延时/丢包率。下表为测试结果:

    传输码率(kbps)延时(ms)
    501002003004005006008001000
    丢包率1%281015001130816904863848714355
    2%16701000693535504440   
    3%1480737479526341    
    4%1240585411317305    
    5%1070565432273     
    10%532318 96.5     

    通过上表可以绘制丢包/延时与传输速率的曲面图:

    X轴:延时(ms)

    Y轴:丢包率

    Z轴:传输速率(kbps)

    通过曲面图,可以找到传输速率要达到500kbps/1000kbps时,延时与丢包率需要满足的条件

     

    以上测试是单个客户端测试的结果。在Server B上启动多个客户端同时进行测试,只要总的传输速率不超过最大带宽限制,每个客户端的速率与单个客户端测试的结果相同。

    展开全文
  • Linux 丢包分析

    2020-12-01 10:08:13
    最近工作中遇到某个服务器应用程序 UDP 丢包,在排查过程中查阅了很多资料,总结出来这篇文章,供更多人参考。 在开始之前,我们先用一张图解释 linux 系统接收网络报文的过程。 首先网络报文通过物理网线发送到...

    最近工作中遇到某个服务器应用程序 UDP 丢包,在排查过程中查阅了很多资料,总结出来这篇文章,供更多人参考。

    在开始之前,我们先用一张图解释 linux 系统接收网络报文的过程。

    1. 首先网络报文通过物理网线发送到网卡
    2. 网络驱动程序会把网络中的报文读出来放到 ring buffer 中,这个过程使用 DMA(Direct Memory Access),不需要 CPU 参与
    3. 内核从 ring buffer 中读取报文进行处理,执行 IP 和 TCP/UDP 层的逻辑,最后把报文放到应用程序的 socket buffer 中
    4. 应用程序从 socket buffer 中读取报文进行处理

    在接收 UDP 报文的过程中,图中任何一个过程都可能会主动或者被动地把报文丢弃,因此丢包可能发生在网卡和驱动,也可能发生在系统和应用。

    之所以没有分析发送数据流程,一是因为发送流程和接收类似,只是方向相反;另外发送流程报文丢失的概率比接收小,只有在应用程序发送的报文速率大于内核和网卡处理速率时才会发生。

    本篇文章假定机器只有一个名字为 eth0 的 interface,如果有多个 interface 或者 interface 的名字不是 eth0,请按照实际情况进行分析。

    NOTE:文中出现的 RX(receive) 表示接收报文,TX(transmit) 表示发送报文。

    确认有 UDP 丢包发生

    要查看网卡是否有丢包,可以使用 ethtool -S eth0 查看,在输出中查找 bad 或者 drop 对应的字段是否有数据,在正常情况下,这些字段对应的数字应该都是 0。如果看到对应的数字在不断增长,就说明网卡有丢包。

    另外一个查看网卡丢包数据的命令是 ifconfig,它的输出中会有 RX(receive 接收报文)和 TX(transmit 发送报文)的统计数据:

    ~# ifconfig eth0
    ...
            RX packets 3553389376  bytes 2599862532475 (2.3 TiB)
            RX errors 0  dropped 1353  overruns 0  frame 0
            TX packets 3479495131  bytes 3205366800850 (2.9 TiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    ...
    

    此外,linux 系统也提供了各个网络协议的丢包信息,可以使用 netstat -s 命令查看,加上 --udp 可以只看 UDP 相关的报文数据:

    [root@holodesk02 GOD]# netstat -s -u
    IcmpMsg:
        InType0: 3
        InType3: 1719356
        InType8: 13
        InType11: 59
        OutType0: 13
        OutType3: 1737641
        OutType8: 10
        OutType11: 263
    Udp:
        517488890 packets received
        2487375 packets to unknown port received.
        47533568 packet receive errors
        147264581 packets sent
        12851135 receive buffer errors
        0 send buffer errors
    UdpLite:
    IpExt:
        OutMcastPkts: 696
        InBcastPkts: 2373968
        InOctets: 4954097451540
        OutOctets: 5538322535160
        OutMcastOctets: 79632
        InBcastOctets: 934783053
        InNoECTPkts: 5584838675
    

    对于上面的输出,关注下面的信息来查看 UDP 丢包的情况:

    • packet receive errors 不为空,并且在一直增长说明系统有 UDP 丢包
    • packets to unknown port received 表示系统接收到的 UDP 报文所在的目标端口没有应用在监听,一般是服务没有启动导致的,并不会造成严重的问题
    • receive buffer errors 表示因为 UDP 的接收缓存太小导致丢包的数量

    NOTE: 并不是丢包数量不为零就有问题,对于 UDP 来说,如果有少量的丢包很可能是预期的行为,比如丢包率(丢包数量/接收报文数量)在万分之一甚至更低。

    网卡或者驱动丢包

    之前讲过,如果 ethtool -S eth0 中有 rx_***_errors 那么很可能是网卡有问题,导致系统丢包,需要联系服务器或者网卡供应商进行处理。

    # ethtool -S eth0 | grep rx_ | grep errors
         rx_crc_errors: 0
         rx_missed_errors: 0
         rx_long_length_errors: 0
         rx_short_length_errors: 0
         rx_align_errors: 0
         rx_errors: 0
         rx_length_errors: 0
         rx_over_errors: 0
         rx_frame_errors: 0
         rx_fifo_errors: 0
    

    netstat -i 也会提供每个网卡的接发报文以及丢包的情况,正常情况下输出中 error 或者 drop 应该为 0。

    如果硬件或者驱动没有问题,一般网卡丢包是因为设置的缓存区(ring buffer)太小,可以使用 ethtool 命令查看和设置网卡的 ring buffer。

    ethtool -g 可以查看某个网卡的 ring buffer,比如下面的例子

    # ethtool -g eth0
    Ring parameters for eth0:
    Pre-set maximums:
    RX:        4096
    RX Mini:    0
    RX Jumbo:    0
    TX:        4096
    Current hardware settings:
    RX:        256
    RX Mini:    0
    RX Jumbo:    0
    TX:        256
    

    Pre-set 表示网卡最大的 ring buffer 值,可以使用 ethtool -G eth0 rx 8192 设置它的值。

    Linux 系统丢包

    linux 系统丢包的原因很多,常见的有:UDP 报文错误、防火墙、UDP buffer size 不足、系统负载过高等,这里对这些丢包原因进行分析。

    UDP 报文错误

    如果在传输过程中UDP 报文被修改,会导致 checksum 错误,或者长度错误,linux 在接收到 UDP 报文时会对此进行校验,一旦发明错误会把报文丢弃。

    如果希望 UDP 报文 checksum 及时有错也要发送给应用程序,可以在通过 socket 参数禁用 UDP checksum 检查:

    int disable = 1;
    setsockopt(sock_fd, SOL_SOCKET, SO_NO_CHECK, (void*)&disable, sizeof(disable)
    

    防火墙

    如果系统防火墙丢包,表现的行为一般是所有的 UDP 报文都无法正常接收,当然不排除防火墙只 drop 一部分报文的可能性。

    如果遇到丢包比率非常大的情况,请先检查防火墙规则,保证防火墙没有主动 drop UDP 报文。

    UDP buffer size 不足

    linux 系统在接收报文之后,会把报文保存到缓存区中。因为缓存区的大小是有限的,如果出现 UDP 报文过大(超过缓存区大小或者 MTU 大小)、接收到报文的速率太快,都可能导致 linux 因为缓存满而直接丢包的情况。

    在系统层面,linux 设置了 receive buffer 可以配置的最大值,可以在下面的文件中查看,一般是 linux 在启动的时候会根据内存大小设置一个初始值。

    • /proc/sys/net/core/rmem_max:允许设置的 receive buffer 最大值
    • /proc/sys/net/core/rmem_default:默认使用的 receive buffer 值
    • /proc/sys/net/core/wmem_max:允许设置的 send buffer 最大值
    • /proc/sys/net/core/wmem_dafault:默认使用的 send buffer 最大值

    但是这些初始值并不是为了应对大流量的 UDP 报文,如果应用程序接收和发送 UDP 报文非常多,需要讲这个值调大。可以使用 sysctl 命令让它立即生效:

    sysctl -w net.core.rmem_max=26214400 # 设置为 25M
    

    也可以修改 /etc/sysctl.conf 中对应的参数在下次启动时让参数保持生效。

    如果报文报文过大,可以在发送方对数据进行分割,保证每个报文的大小在 MTU 内。

    另外一个可以配置的参数是 netdev_max_backlog,它表示 linux 内核从网卡驱动中读取报文后可以缓存的报文数量,默认是 1000,可以调大这个值,比如设置成 2000:

    sudo sysctl -w net.core.netdev_max_backlog=2000
    

    系统负载过高

    系统 CPU、memory、IO 负载过高都有可能导致网络丢包,比如 CPU 如果负载过高,系统没有时间进行报文的 checksum 计算、复制内存等操作,从而导致网卡或者 socket buffer 出丢包;memory 负载过高,会应用程序处理过慢,无法及时处理报文;IO 负载过高,CPU 都用来响应 IO wait,没有时间处理缓存中的 UDP 报文。

    linux 系统本身就是相互关联的系统,任何一个组件出现问题都有可能影响到其他组件的正常运行。对于系统负载过高,要么是应用程序有问题,要么是系统不足。对于前者需要及时发现,debug 和修复;对于后者,也要及时发现并扩容。

    应用丢包

    上面提到系统的 UDP buffer size,调节的 sysctl 参数只是系统允许的最大值,每个应用程序在创建 socket 时需要设置自己 socket buffer size 的值。

    linux 系统会把接受到的报文放到 socket 的 buffer 中,应用程序从 buffer 中不断地读取报文。所以这里有两个和应用有关的因素会影响是否会丢包:socket buffer size 大小以及应用程序读取报文的速度。

    对于第一个问题,可以在应用程序初始化 socket 的时候设置 socket receive buffer 的大小,比如下面的代码把 socket buffer 设置为 20MB:

    uint64_t receive_buf_size = 20*1024*1024;  //20 MB
    setsockopt(socket_fd, SOL_SOCKET, SO_RCVBUF, &receive_buf_size, sizeof(receive_buf_size));
    

    如果不是自己编写和维护的程序,修改应用代码是件不好甚至不太可能的事情。很多应用程序会提供配置参数来调节这个值,请参考对应的官方文档;如果没有可用的配置参数,只能给程序的开发者提 issue 了。

    很明显,增加应用的 receive buffer 会减少丢包的可能性,但同时会导致应用使用更多的内存,所以需要谨慎使用。

    另外一个因素是应用读取 buffer 中报文的速度,对于应用程序来说,处理报文应该采取异步的方式

    包丢在什么地方

    想要详细了解 linux 系统在执行哪个函数时丢包的话,可以使用 dropwatch 工具,它监听系统丢包信息,并打印出丢包发生的函数地址:

    # dropwatch -l kas
    Initalizing kallsyms db
    dropwatch> start
    Enabling monitoring...
    Kernel monitoring activated.
    Issue Ctrl-C to stop monitoring
    
    1 drops at tcp_v4_do_rcv+cd (0xffffffff81799bad)
    10 drops at tcp_v4_rcv+80 (0xffffffff8179a620)
    1 drops at sk_stream_kill_queues+57 (0xffffffff81729ca7)
    4 drops at unix_release_sock+20e (0xffffffff817dc94e)
    1 drops at igmp_rcv+e1 (0xffffffff817b4c41)
    1 drops at igmp_rcv+e1 (0xffffffff817b4c41)
    

    通过这些信息,找到对应的内核代码处,就能知道内核在哪个步骤中把报文丢弃,以及大致的丢包原因。

    此外,还可以使用 linux perf 工具监听 kfree_skb(把网络报文丢弃时会调用该函数) 事件的发生:

    sudo perf record -g -a -e skb:kfree_skb
    sudo perf script
    

    关于 perf 命令的使用和解读,网上有很多文章可以参考。

    总结

    • UDP 本身就是无连接不可靠的协议,适用于报文偶尔丢失也不影响程序状态的场景,比如视频、音频、游戏、监控等。对报文可靠性要求比较高的应用不要使用 UDP,推荐直接使用 TCP。当然,也可以在应用层做重试、去重保证可靠性
    • 如果发现服务器丢包,首先通过监控查看系统负载是否过高,先想办法把负载降低再看丢包问题是否消失
    • 如果系统负载过高,UDP 丢包是没有有效解决方案的。如果是应用异常导致 CPU、memory、IO 过高,请及时定位异常应用并修复;如果是资源不够,监控应该能及时发现并快速扩容
    • 对于系统大量接收或者发送 UDP 报文的,可以通过调节系统和程序的 socket buffer size 来降低丢包的概率
    • 应用程序在处理 UDP 报文时,要采用异步方式,在两次接收报文之间不要有太多的处理逻辑

    参考资料

    展开全文
  • Linux 丢包分析可能的原因分析

    千次阅读 2019-03-31 17:56:08
    负载过大导致的的丢包 流量监控(每秒出入多少个报文(PPS)) 1)sar工具 yum install sysstat sar -n DEV 1 1000 表示监控所有设备接收报文和发送报文的情况。时间间隔为1S,重复1000次。 2)脚本 #!/bin/bash ##...

    有很多情况都会导致linux将报文丢弃。学习了一些常见的场景,作为知识储备。

    负载过大导致的的丢包

    流量监控(每秒出入多少个报文(PPS))
    1)sar工具
    yum install sysstat
    sar -n DEV 1 1000
    表示监控所有设备接收报文和发送报文的情况。时间间隔为1S,重复1000次。

    2)脚本

    #!/bin/bash
    ##name :PPS.sh
    ####
    #example: sh PPS.sh 10 
    ####
    INTERVAL="1"  # update interval in seconds
    if [ "$1" != "" ]
    then
        INTERVAL=$1
    fi
    
     
    while true
    do
        R1=$(cat /sys/devices/virtual/net/venet0/statistics/rx_packets)
        T1=$(cat /sys/devices/virtual/net/venet0/statistics/tx_packets)
        sleep $INTERVAL
        R2=$(cat /sys/devices/virtual/net/venet0/statistics/rx_packets)
        T2=$(cat /sys/devices/virtual/net/venet0/statistics/tx_packets)
        
        RX_TOTAL=$((T2 - T1))
        TX_TOTAL=$((R2 - R1))
        
        #
        TXPPS=$(( RX_TOTAL/ INTERVAL))
        RXPPS=$(( TX_TOTAL/ INTERVAL))
        echo "TXPPS: $TXPPS   RXPPS: $RXPPS" | tee /tmp/pps.log
    done
    

    可以通过find命令来查找文件位置:
    find / -name rx_pakcets

    但是,一般的虚拟机PPS达到多少才能认为负载非常大?没啥概念。
    网上看到有说服务器正常工作时可能也才几万。100万可能是单核linux机器的极限。
    自己没跑任何业务的小机器上,PPS一般都在个位数。

    rp_filter

    这个是我目前遇到过最多的情况了。
    现象表现为tcpdump可以抓到包,但是应用程序却无法收到。
    rp_filter的意思是反向路径校验。
    rp_filter - INTEGER
    0 - No source validation.
    1 - Strict mode as defined in RFC3704 Strict Reverse Path
    Each incoming packet is tested against the FIB and if the interface is not the best reverse path the packet check will fail. By default failed packets are discarded.
    2 - Loose mode as defined in RFC3704 Loose Reverse Path
    Each incoming packet’s source address is also tested against the FIB and if the source address is not reachable via any interface the packet check will fail.

    Current recommended practice in RFC3704 is to enable strict mode to prevent IP spoofing from DDos attacks. If using asymmetric routing or other complicated routing, then loose mode is recommended.

    The max value from conf/{all,interface}/rp_filter is used when doing source validation on the {interface}.
    Default value is 0. Note that some distributions enable it in startup scripts.

    只有在多网卡的机器上才可能出现这个问题。

    因为rp_filter校验不通过被丢弃的报文的数量,可以通过netstat -s | grep -i IPReversePathFilter 查看。
    发现在suse上有这个统计项,centos上没有。

    可以通过设置net.ipv4.conf.all.log_martians=1, 然后在操作系统日志/var/log/messages中查看到对应信息:
    martian source 222.73.xxx.255 from 222.73.xxx.173, on dev eth1
    ll header: ff:ff:ff:ff:ff:ff:00:15:17:13:33:66:08:00
    以上日志表示:
    222.73.xxx.255 目的ip
    222.73.xxx.173 源ip
    eth1 接收到报文的网卡
    ff:ff:ff:ff:ff:ff 源mac
    15:17:13:33:66 目的mac
    08:00 上层协议号(0800 IPv4, 08dd IPv6, 0806 arp packet)

    但是需要注意的是除了rp_filter校验不通过之外,源地址全0等其他情况也会导致会出现火星包日志。

    参考:
    https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

    3

    展开全文
  • Linux查看网络丢包的命令

    万次阅读 2019-10-12 10:55:28
    常见的测试丢包的命令 :ping 、mtr 、traceroute 、fping、ipconfig、nbtstat、route、arp iperf检测命令 UDP丢包和延迟测试 iperf3 -c 172.21.76.108 -u -b 100M -f M -i 3 iperf在单线程模式下的传输时间和...

    常见的测试丢包的命令 :ping 、mtr 、traceroute 、fping、ipconfig、iftop、tcpdump

    扩展
    一般在windows 来判断网络连通性用ping 和tracert,

    ping的话可以来判断丢包率,tracert可以用来跟踪路由,

    在Linux中有一个更好的网络连通性判断工具,结合了ping nslookup tracert 来判断网络的相关特性,这个命令就是mtr命令

    #mtr ip 
    
    # mtr -r -c 15 202.108.33.94
    
    FOCUS9097                         Snt: 15    Loss%  Last   Avg  Best  Wrst StDev
    220.181.61.252                                0.0%   1.9   3.4   1.8  12.9   3.1
    220.181.17.217                                0.0%   0.5   0.5   0.4   0.8   0.1
    -----------------------------------
    
    第一列:显示的是IP地址和本机域名,这点和tracert很像
    第二列:snt:10 设置每秒发送数据包的数量,默认值是10 可以通过参数 -c来指定。
    

    iperf检测命令

    UDP丢包和延迟测试

    iperf3 -c 172.21.76.108 -u -b 100M -f M -i 3
    

    iperf在单线程模式下的传输时间和传输速率iperf3 -c 172.21.76.108 -n 200000000 -i 5 -f M

    iperf使用多线程后的数据传输状态

    iperf3 -c 172.21.76.108 -n 200000000 -i 5 -P 2 -f M
    

    这里使用“-f”参数将输出结果都通过MBytes来显示,“-P”参数来设置多线程的数目

    iperf客户端通过“-F”参数指定文件来发送数据

    iperf3  -c 172.21.76.108 -F webdata.tar.bz -i 5 -t 20
    

    iperf客户端通过“-n”参数指定要传输的数据量

    iperf3  -c 172.21.76.108 -F webdata.tar.bz -i 5 -t 20
    

    iperf客户端通过“-n”参数指定要传输的数据量

    添加“-t”和“-i”参数后的iperf输出

    iperf3 -c 172.21.76.108 -t 20 -i 5
    

    输出状态的间隔变为每5秒钟一次,总共执行测试时间为20秒

    网络流量监控-IPtraf

    iptraf -i ens33
    

    在这里插入图片描述

    mtr命令查看网络丢包(线上常用)

    mtr

    mtr报告各列含义
    Loss%       表示在每一跳的丢包率
    Snt         每个中间设备收到的发送的报的数目(上图为400个包),MTR会同            时对所有中间节点发送ICMP包进行测试。
    Last        最后一个数据包往返时间(ms)
    Avg         数据包往返平均时间(ms)
    Best        数据包往返最小时间(ms)
    Wrst        数据包往返最大时间(ms)
    StDev       标准偏差。如果标准偏差越高,说明数据包在这个节点上的延时越           不相同
    
    输出参数的解释:
        Loss% – 丢包率,单位是”%”;
        Snt – sent包的数量
        Last – 最后一个包的延时
        Avg – 所有包的平均延时
        Best – 延时最小的包
        Wrst – 延时最大的包
        StDev – 标准偏差
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    使用ss命令查看网络性能

    在这里插入图片描述
    如果想要查看所有已建立的IPv4连接,则使用如下命令:

    #ss -t4 state established
    

    显示所有已经关闭的连接用如下命令:

    #ss -t4 state closed
    

    也可以使用ss命令显示本机同目标主机的所有连接信息:

    #ss dst XXX.XXX.XXX.XXX
    

    当然,也可以指示特定端口:

    #ss dst XXX.XXX.XXX.XXX:22
    

    查看是否网络攻击的命令

    查看所有80端口的连接数

    netstat -nat|grep -i  "80" |wc -l
    

    对连接的IP按连接数量进行排序

    netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n |grep -v '127.0.0.1\|Address\|servers)'
    

    查看TCP连接状态

    netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
    netstat -an | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}'
    netstat -an | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'
    netstat -an | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}'
    netstat -an |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn
    netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c
    

    查看80端口连接数最多的20个IP

    netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
    netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20
    

    用tcpdump嗅探80端口的访问看看谁最高

    tcpdump -i eth0 -tnn dst port 80 -c 1000
    

    查找较多time_wait连接

    netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
    

    查找较多的SYN连接

    netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
    

    tcping命令的使用方法(Linux中)

    在实际环境中很多交换机或者云服务器等为了防止来自互联网的批量扫描器或者ICMP FLOOD攻击,大多时候对外都设置了禁止ICMP传输的防火墙规则。然而运维人员需要了解本地与服务器中特定服务的连接情况,这便成了一个头疼的问题了,这里我们就需要用到一个冷门又好用的小工具就是tcping。

    tcping 59.36.100.206
    
    tcping www.fuwuqijia.com
    
    tcping -t www.fuwuqijia.com
    
    tcping -t 59.46.9.195 3389
    

    我们就针对tcping -t 59.46.9.195 3389进行说明,这个意思就是连续ping服务器59.36.100.195的3389端口,去掉-t就只发送默认的4次tcp包。

    扩展

    Windwos下网络查看命令

    一、Ping命令的详细用法

    在网络中ping是一个十分强大的TCP/IP工具。它的作用主要为:
    1、用来检测网络的连通情况和分析网络速度
    2、根据域名得到服务器IP
    3、根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量。

    ping的主要用法:
    在这里插入图片描述
    我们通常会用它来直接ping ip地址,来测试网络的连通情况。

    ping -t的用法

    不间断地Ping指定计算机,直到管理员中断。
    在这里插入图片描述

    二、ARP命令的使用

    arp是地址解析协议,其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。
    1、arp -a ,当你需要显示当期ip地址对应的mac地址时使用

    当你需要了解你网络中设备对应的mac地址时,你可以使用arp地址进行显示,这个有利于我们可以清楚了解到ip地址对应的mac地址是哪台设备。

    在命令提示符中输入“arp -a”并回车;自动在缓存中,读取IP地址和mac地址的对应关系表;

    三、tracert命令使用

    tracert是路由跟踪命令,用于确定 IP 数据包访问目标所采取的路径。

    在使用Tracert命令之前,我们先来简单地介绍一下它的语法。其中最简单也是最常用的命令格式为:

    例1、检测ip地址经过几个跃点
    在这里插入图片描述
    这里面是经过了两个跃点。

    例2:检测网址经过几个跃点
    在这里插入图片描述
    例3、“tracert -d baidu.com”代表不将IP地址解析到主机名称,

    如下图所示:
    在这里插入图片描述
    例4、“tracert -h 3 baidu.com”代表本次tracert搜索的最大跳数。

    输入3表示搜索在路由器跳转3次,如下图所示:
    在这里插入图片描述
    这个就是查跟设备最近的几个连接点的问题,通常在网络问题中,先要排除前端跟设备直接连接的最近的几个设备是否有故障,如果这几个近点跟踪可以正常互通,那么问题可能就出现在后端。

    例5、“tracert -w 6 baidu.com”代表tracert为每次回复所指定的毫秒数。
    在这里插入图片描述
    当网络很慢,或者很卡时,我们要检测是那个设备的反应速度比较慢,所以这里面可以设个标准值,例如上面是直接显示回复6ms以内的设备,超过6ms的设备不显示,就是反应比较慢的,这个数值可以根据情况设置。

    四、route命令用法

    上面我们已经了解了关于route命令的格式与参数意思,那么它们是如何使?我们起来看下。

    1、要显示 IP 路由表的完整内容,请键入:

    route print
    

    在这里插入图片描述
    2、要显示 IP 路由表中以 10. 开始的路由,请键入:

    route print 10.*
    

    3、要添加默认网关地址为 192.168.12.1 的默认路由,请键入:

    route add 0.0.0.0 mask 0.0.0.0 192.168.12.1
    

    4、要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1 的路由,请键入:

    route add 10.41.0.0 mask 255.255.0.0 10.27.0.1
    

    5、要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1 的永久路由,请键入:

    route -p add 10.41.0.0 mask 255.255.0.0 10.27.0.1
    

    6、要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1,跃点数为 7 的路由,请键入:

    route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 metric 7
    

    8、要删除目标为 10.41.0.0,子网掩码为 255.255.0.0 的路由,请键入:

    route delete 10.41.0.0 mask 255.255.0.0
    

    9、要删除 IP 路由表中以 10. 开始的所有路由,请键入:

    route delete 10.*
    

    10、要将目标为 10.41.0.0,子网掩码为 255.255.0.0 的路由的下一个跃点地址由 10.27.0.1 更改为 10.27.0.25,请键入:

    route change 10.41.0.0 mask 255.255.0.0 10.27.0.25
    

    参考连接 :

    Linux 命令行网络监控工具 : https://www.baidu.com/link?url=kQIN4YMVyvRjFw733ezpxPmbCcPtEDXwtL_SPRrsAKERS3hjrIhcUIOYp_RlJTaQ6S90XKhIYVAFkjIcNxn3iq&wd=&eqid=af4273b500003478000000065da17111

    除了ping,这三大命令也非常实用
    https://mp.weixin.qq.com/s/8CzY6EnTY9neTHYXw-rc4w

    linux mtr 命令详解
    https://blog.51cto.com/coolner/752078

    ping、arp、tracert三大命令详细用法,弄懂立马成大神
    https://mp.weixin.qq.com/s/wXK2Zpi2ZK-qq6GqZmmlkA

    https://baijiahao.baidu.com/s?id=1591189561493270586&wfr=spider&for=pc

    展开全文
  • am335x以太网配置说明 kernel采用的是4.14.97的版本。解决RMII模式丢包问题
  • Linux 模拟网络丢包和延迟命令

    千次阅读 2018-09-22 09:07:00
    在Ubuntu上使用 tc 和 netem命令组合模拟客户环境网络波动情况测试,如丢包和延迟, 1. 延迟设置 //延迟 300ms ± 100ms sudo tc qdisc add dev eth0 root netem delay 300ms 100ms sudo tc qdisc del dev eth0 ...
  • 如何分析linux tcp/ip 丢包问题

    千次阅读 2020-09-15 21:25:11
    通过dropwatch定位系统内核丢包 Finding out if/why a server is dropping packets github source coed: pavel-odintsov/drop_watch How to drop a packet in Linux in more ways than one 试试Linux下的ip命令...
  • linux 丢包排查思路简述概述网络包接收流程网络包发送流程丢包排查的思路tcp排查方法rdma排查方法网络工具汇总参考链接 概述 我们首先以tcp网络为例,谈谈linux系统如何收发网络包 在进行网络传输时,数据包就会...
  • linux丢包问题排查

    千次阅读 2019-11-15 11:06:27
    linux机器上面发现请求接口经常失败,通过查看系统日志发现经常丢失。 系统日志:tail -fn100 /var/log/messages 出现: Nov 15 11:06:08 www kernel: nf_conntrack: table full, dropping packet Nov 15 ...
  • 一台机器经常收到丢包的报警,先看看最底层的有没有问题: # ethtool eth2 | egrep 'Speed|Duplex'  Speed: 1000Mb/s  Duplex: Full # ethtool -S eth2 | grep crc  rx_crc_errors: 0 Speed, ...
  • Linux 网卡丢包严重

    千次阅读 2017-05-11 23:03:46
    找了一些国外的文章,可以通过ethtool来修改网卡的buffer size ,首先要网卡支持,我的服务器是是INTEL 的1000M网卡,我们看看ethtool说明  ...几个小时后,已经没有丢包增加的情况了
  • 【原】linux设置网络延迟/丢包操作

    千次阅读 2019-07-30 20:37:00
    1.tc方式 * 清除设备策略:tc qdisc del root dev eth2 2>/dev/null* 设置设备策略:tc qdisc add dev eth0 root netem loss 5% tc qdisc add dev eth2 root netem loss 5%tc qdisc add dev eth2 root netem ...
  • 一个简单的网络延迟和丢包监视器,在 Grafana 中有漂亮的图表! 零外部依赖! 安装 在本地复制此存储库,您有足够的空间托管收集的数据(一个GB应该足够!) 创建用于存储数据的目录(在克隆目录中): mkdir ...
  • 使用ifconfig命令,ifconfig是最常用的配置和查看网络接口信息的命令,服务器上执行此命令会得到类下文的内容,一下内容可看到多个设备和设备状态、信息。 # 不包括down状态的网卡 ifconfig #查看所有网卡的...
  • Linux ping丢包case

    千次阅读 2016-12-12 10:24:12
    ping 丢包
  • linux 模拟网络延迟、丢包

    千次阅读 2014-08-11 14:29:52
    linux 模拟网络延迟、丢包 一、netem 与 tc: netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块。该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽、传输延迟、...
  • 用ethtool 命令解决Linux 网卡丢包

    千次阅读 2019-01-25 09:36:39
    生产中有一台Linux设备并发比较大,droped包比较多,尤其是在跑游戏数据包的时候,存在严重的丢包现象,怀疑网卡性能不足,在更换设备前想能不有通过软件方法解决,通过网上一些资料显示,出现这种现象,也有可能是...
  • 一、消息收发流程图及丢包可能原因 1.在网卡收包后,环形缓冲区可能会因为溢出而丢包; 2.在链路层,可能会因为网络帧校验失败、QoS 等而丢包; 3.在 IP 层,可能会因为路由失败、组包大小超过 MTU 等而丢包; ...
  • Linux TC模拟网络延迟、丢包、乱序

    千次阅读 2020-05-24 21:32:47
    该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽、传输延迟、丢包等等情况。使用 Linux 2.6 (或以上) 版本内核的很多发行版Linux都开启了该内核功能,比如Fedora、Ubuntu、Redhat...
  • Linux服务器丢包故障的解决

    千次阅读 2020-12-10 11:31:13
    我们使用Linux作为服务器操作系统时,为了达到高并发处理能力,充分利用机器性能,经常会进行一些内核参数的调整优化,但不合理的调整常常也会引起意想不到的其他问题,本文就一次Linux服务器丢包故障的处理过程,...
  • 模拟网络丢包

    千次阅读 2018-07-04 16:39:06
    模拟网络丢包 Linux 模拟延迟 tc qdisc add dev eth0 root netem delay 1000ms 100ms 50% delay后面的3个参数,第一个就是设定固定的延迟时间,第二个是说延迟时间在±100ms波动,第三个是说这个延迟波动...
  • TC_QDisc 模拟网络丢包、延时、重复、损坏TC_QDisc 模拟网络丢包、延时、重复、损坏TC_QDisc 模拟网络丢包、延时、重复、损坏
  • 最近工作中遇到某个服务器应用程序 UDP 丢包,在排查过程中查阅了很多资料,总结出来这篇文章,供更多人参考。 在开始之前,我们先用一张图解释 linux 系统接收网络报文的过程。 首先网络报文通过物理网线发送到...
  • 该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽、传输延迟、丢包等等情况。使用 Linux 2.6 (或以上) 版本内核的很多发行版 Linux 都开启了该内核功能,比如 Fedora、Ubuntu、Redhat...
  • linux网络调试发包抓工具

    万次阅读 2019-05-06 19:27:00
    目录 1、发包工具 1.1 sendip 1.2 tcpreply 2、抓工具 ...5.linux网络编程 5.1、tcp 5.2、udp 1、发包工具 1.1 sendip Sendip是一个linux平台的命令行发数据包工具,目前(2018年2月)支持的...
  • linux中tcpdump-丢包分析

    千次阅读 2020-01-20 15:15:49
    通过tcpdump抓时,结束后tcpdump会给出如下统计信息:  1552 packets captured  1586 packets received by filter  34 packets dropped by kernel      其中“captured”的计数指的是应用层捕获到的数据,...
  • 屏蔽70-72网段到执行该命令的机器的 iptables -A INPUT -s 10.47.180.70 -j DROP 屏蔽70到执行该命令的机器的 iptables -A INPUT -s 10.47.180.70/72 -j ACCEPT 恢复70-72网段到执行该命令的机器的 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,825
精华内容 13,530
关键字:

linux网络丢包的原因

linux 订阅