源地址:http://yuanmuqiuyu2000.blog.sohu.com/140904942.html

使用ACE框架写了个组播简单的测试工具,但是测试过程中,总是发现udp校验和出错的信息。代码如下:

#include "ace/SOCK_Dgram_Mcast.h"
#include "ace/Log_Msg.h"

int main()
{
        ACE_SOCK_Dgram_Mcast mcast;
        ACE_INET_Addr        srv_addr("224.0.0.9:520");

if (mcast.open(srv_addr, "eth0", 1) == -1)
        {
                ACE_ERROR_RETURN((LM_ERROR, "%p"), -1);
        }

mcast.join(srv_addr);

// 进行RIP2协议测试

char peer0_2[] = {
0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
0xc0, 0xa8, 0x6f, 0x00, 0xff, 0xff, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00,
0xc0, 0xa8, 0x03, 0x00, 0xff, 0xff, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 };

while(1)
        {
                if (mcast.send(peer0_2,sizeof(peer0_2)) == -1)
                {
                        ACE_ERROR_RETURN((LM_ERROR, "%p"), -1);
                }

ACE_OS::sleep(5);
        }

return 0;
}

使用wireshark抓包分析校验和出错:

Checksum: 0xa3ae [incorrect, should be 0x84dd (maybe caused by "UDP checksum offload"?)]

问题根源为网卡设置上除了问题:

#ethtool -k eth0

# ethtool -k  eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: off

scatter-gather: on
tcp segmentation offload: on

全部关闭方法:

#ethtool -K  eth0 rx off           #K为大写

#ethtool -K eth0 tx off

#ethtool -K eth0 sg off

#ethool -K eth0 tso off

# ethtool -k  eth0
Offload parameters for eth0:
rx-checksumming: off
tx-checksumming: off
scatter-gather: off

tcp segmentation offload: off

问题解决!

另外ethtool还可以设置网卡的自适应速率等参数,前不久就遇到过一个很奇怪的事情,交换机和主机进行连接的时候,中间加上一个HUB就可以实现正常通信,但是两者直接直接连接通信不正常,丢包现象严重。最后查找出问题根源为两个设备的网口都为1000M自适应的,由于中间某个设备的网卡在1000M状态下的驱动程序有问题,导致收报的时候出错,从而出现丢包严重。但是中间加入HUB后,设备都与HUB进行协商,从而使设备的网卡速率都下降为了100M,能正常通信。

使用ethtool可以方便地来查看网卡的状态,速率等诸多信息:

#ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Half 1000baseT/Full 
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Half 1000baseT/Full 
        Advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: g
        Current message level: 0x000000ff (255)
        Link detected: yes

可以通过命令来设置网卡速率自协商等选项

ethtool -s DEVNAME \
                [ speed 10|100|1000 ] \
                [ duplex half|full ]    \
                [ port tp|aui|bnc|mii|fibre ] \
                [ autoneg on|off ] \
                [ phyad %d ] \
                [ xcvr internal|external ] \
                [ wol p|u|m|b|a|g|s|d... ] \
                [ sopass %x:%x:%x:%x:%x:%x ] \
                [ msglvl %d ]

oute add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

[转载] ACE 组播校验和出错问题解决的更多相关文章

  1. Android App用MulticastSocket监听组播,为什么连接到不同路由、在不同手机上跑,有的能收到有的收不到

    ---------------------------!! 转载请注明出处 !!-----------------------   一个项目,利用wifi组播在局域网内发现设备.却发现在有的路由器上能 ...

  2. Android开发:组播(多播)与广播

    近期由于需要编写能够使同一局域网中的Android客户端与PC端进行自动匹配通信功能的程序,学习并试验了JAVA组播与广播的内容,记录一些理解如下: 一.组播(多播) 背景知识:组播使用UDP对一定范 ...

  3. Android设备一对多录屏直播--(UDP组播连接,Tcp传输)

    原文:https://blog.csdn.net/sunmmer123/article/details/82734245 近期需要学习流媒体知识,做一个Android设备相互投屏Demo,因此找到了这 ...

  4. 组播协议——IGMP v2报文头介绍

    TYPE:占一个字节,其值有:0x16.0x12.0x17三种类型. Max Resp Time:最大响应时间,占一个字节. Checksum:校验和,占两个字节. Group address:组播地 ...

  5. vxlan vs GRE(三层组播和二层组播如何对应起来)

    www.huawei.com/ilink/cnenterprise/download/HW_401028 http://feisky.xyz/sdn/basic/vxlan.html 华为的vxlan ...

  6. IP组播

    1  IP组播基础 IP组播技术有效地解决了单点发送.多点接收的问题.组播源只发送一份数据,被传递的信息在距组播源尽可能远的网络节点才开始被复制和分发,并且只发送给需要该信息的接收者.  说明: 本章 ...

  7. 《TCP/IP 详解 卷1:协议》第 9 章:广播和本地组播(IGMP 和 MLD)

    我已经懒了,卷一已经是去年年底看完的,但怎么说卷一的坑开了就要填完啊-- 广播和本地组播(IGMP 和 MLD) 引言 有 4 种 IP 地址,单播(unicast).任播(anycast).组播(m ...

  8. ffmpeg笔记——UDP组播接收总结

    ffmpeg在avformat_open_input里面已经实现了UDP的协议,所以只需要设置好参数,将url传递进去就可以了. 和打开文件的方式基本一样: 01 AVCodecContext *pV ...

  9. 组播___IGMP

    一.基本概念: 1.协议概述: 是运行在主机和与主机直连的路由器之间,其实现的功能是双向的:一方面,主机通过IGMP通知路由器希望接收某个特定组播组的信息:另一方面,路由器通过IGMP周期性地查询局域 ...

随机推荐

  1. hdu 5224 Tom and paper

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5224 Tom and paper Description There is a piece of pa ...

  2. iOS学习之C语言函数

    一.函数的定义 返回值类型 函数名(参数类型 参数名, ...) { 功能语句; return 返回值; } 按照返回值和参数划分: 第一种: 无返回值 无参 void sayHello() { pr ...

  3. 项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

    上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客咱们继续讲解MySQL集群的相关内容,同时针对上一篇遗留的问题提出一个解决方案. 1.单管理节点 ...

  4. vimium

    安装在chrome上的一个插件,可以实现chrome无鼠标无键盘操作. 事实上vimium就是提供了一系列的快捷键列表,所以只要熟悉了这些快捷键就可以方便使用了. 要查看快捷键列表,打开chrome, ...

  5. unity2d之2d帧动画创建

    在2d游戏中帧动画的应用是非常广泛的,那么如何在unity中创建一个帧动画,主要是下面几个步骤. 原文地址  :http://blog.csdn.net/dingkun520wy/article/de ...

  6. DF与EF的区别

    DF:专有文件 EF:基本文件 1.EF没有文件名,只有FID(文件标识符) 2.DF有文件名,又有FID,因此COS可以根据文件名来访问DF

  7. 老叶观点:MySQL开发规范之我见

    来源:http://ourmysql.com/archives/1396 大多数MySQL规范在网上也都能找得到相关的分享,在这里要分享的是老叶个人认为比较重要的,或者容易被忽视的,以及容易被混淆的一 ...

  8. Android -- 资源使用和总结经验分享

    颜色资源                                                                                       颜色XML文件格式 ...

  9. C语言编写的随机产生四则运算测试题

    题目:编写一个四则运算测试题的程序,要求每道题都要随机产生 解题思路: 1.编写测试题,且为30道,就要用到循环函数,因此想到用for()函数 2.随机产生两个数,就想到用rand()函数. 注:1. ...

  10. 团队作业index

    <head><meta http-equiv="Content-Type" content="text/html; charset=gb2312&quo ...