UDP组播调优

本文介绍了UDP组播调优的方法,包括基础信息、硬件层、操作系统层和应用程序的优化建议。排查丢包问题,如检查网卡、操作系统的错误统计,测试MTU值,确保组播配置正确。优化措施包含限制发送速率、丢包回补和双路数据热备。同时,检查交换机的igmp-snooping配置,调整KVM虚拟机的组播参数,增大socket缓冲区,以及关注组播包大小与MTU的匹配。提供了组播发送和接收的源码小工具以辅助测试。
摘要由CSDN通过智能技术生成

基础信息

  1. 排查UDP数据丢包命令
    1. 网卡层丢包:netstat -i -udp eth1
      • 查看RX-DRP项的值;
    2. 操作系统层丢包:cat /proc/net/snmp | grep -w Udp
      • 查看InErrors数据项的值是否增加;
  2. 测试网络传输mtu值
    • linux:ping -c 1 -M do -s 1400 www.baidu.com
    • windows:ping -f -l 1500 www.baidu.com
  3. 查看网卡带宽
    • linux:ethtool eth0
  4. UDP丢包改进建议:
    1. 组播发布端增加限流机制,发送数据流量尽量保证平滑;
    2. 增加丢包回补机制;
    3. 双路数据热备;
      1. 若要同时启用两路数据,需要保证两路数据组播包完全一致;
  5. 组播接收异常排查:

    1. 确认组播发送端 和 接收端,组播组的ip和端口是否一致; 确认配置的组播网卡地址是否正确;

    2. 检查防火墙;

    3. 组播接收服务器,抓包确认是否有收到udp数据包;
      tcpdump udp port 9990

  6. 华为交换机上做测试,确认不同vlan之间可以传输组播数据;

    1. ​​​​​​​但有一个限制,交换机上需要将各个vlan分为 组播vlan 和用户vlan,发送组播包的服务器必须在 组播vlan里面;即,组播数据只能由 组播vlan -》 用户vlan,不能由 用户vlan-》 组播vlan 或则 用户vlan -》 用户vlan

  7. 组播测试工具:

    1. 局域网服务器间带宽性能测试:iperf

      1. 如果tcp带宽性能远好于udp带宽性能,可以确认下组播包大小是否远小于MTU值;

    2. 组播发送和接收小工具源码,见文档尾部;

硬件层

  1. 防止交换机将组播包 处理为广播包,需要开启交换机 igmp-snooping 配置;
    1. 注意:需要整个局域网内部所有的交换机都开启 igmp-snooping,因为组播通讯的发布方和订阅方可能经过中间任意一台交换机;
    2. 参考指令:
      <SQ-ZHU-183.131.2.254>dis cu
      #
      igmp-snooping
      #
      vlan 370
       description INSIDE
       igmp-snooping enable
       igmp-snooping drop-unknown
       igmp-snooping querier
       igmp-snooping general-query source-ip 10.20.0.1
       igmp-snooping special-query source-ip 10.20.0

操作系统层

  1. kvm虚拟机,需要调整物理机组播参数:
    1. 开启igmp-snooping机制。若不开启,组播会被当作广播发往其上的所有虚拟机从而浪费带宽。

      echo 1 > /sys/class/net/br0/bridge/multicast_snooping

      echo 1 > /sys/class/net/br0/bridge/multicast_querier

    2. 注:默认情况下multicast_snooping为1,multicast_querier为0,这可能会产生组播发送一段时间后停止发送。

  2. 设置KVM虚拟机的网卡工作模式为virtio-net,并且启用vhost来提升虚拟网卡的性能。
    查看网卡工作模式:
    #ethtool -i eth0
    在宿主机中查看vhost使用情况:
    #grep  VHOST /boot/config-3.5.0
    #lsmod |grep vhost
  3. 增大虚拟网卡与虚拟网桥的发送队列长度,可以解决物理机到其上虚拟机之间的丢包情况。
    示例:
       ifconfig br0 txqueuelen 10000
       ifconfig vnet0 txqueuelen 10000
    
  4. 增大物理网卡驱动的缓冲区大小,可以解决物理网卡上丢包较多的问题。
    示例:
       ethtool -G eth0 rx 4096
    

应用程序

  1. 增大socket缓冲区。通过setsockopt设置SO_RCVBUF选项来增大套接字缓冲区,若超过系统的上限则要修改net.core.rmem_max内核参数,来调整上限值。

    1.  示例:       
      1. 调整系统缓冲区上限 
        sysctl -w net.core.rmem_max=1200000; 
        sysctl -p
        应用程序设置套接字缓冲区 
        int nBuffSize = 1200000; 
        setsockopt(m_fd, SOL_SOCKET, SO_RCVBUF, &nBuffSize, sizeof(nBuffSize))
  2. 单个组播包大小,尽量接近MTU值;
    1. 常规网络环境MTU为 1500,部分云服务器厂商,设置的系统
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值