源地址: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 4941 Magical Forest

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4941 Magical Forest Description There is a forest can ...

  2. spring 中的两个DaoSupport类的使用对比

    可以利用NamedParameterJdbcDaoSupport 已经封装的NamedParameterJdbcTemplate方便的进行sql中参数的初始化工作. 相对于JdbcDaoSupport ...

  3. Android开发遇到的异常及解决办法

    Android开发遇到的错误及解决方法1. Unable to resolve target 'android-7' 解决方案: 修改工程目录下的default.properties文件里的内容tar ...

  4. 记录bigdesk中ElasticSearch的性能参数

    定时采集bigdesk中的Elasticsearch性能参数,并保存到数据库或ELK,以便于进行长期监控. 基于python脚本实现,脚本如下: #coding=gbk import httplibi ...

  5. c++ 性能

    http://blog.sina.com.cn/s/blog_4a471ff601013vud.html http://www.linuxidc.com/Linux/2015-06/118874.ht ...

  6. Linux下如何使CP命令不提示覆盖

    在Linux下使用CP命令,经常会提示是否覆盖,如果是太批量的文件覆盖,老是这么提示,会很烦的.那如何解决这个问题呢? 我们先来看一下原因吧! 一般我们使用的命令是cp -rf sourcefile ...

  7. [超简洁]EasyQ框架-应对WEB高并发业务(秒杀、抽奖)等业务

    背景介绍 这几年一直在摸索一种框架,足够简单,又能应付很多高并发高性能的需求.研究过一些框架思想如DDD DCI,也实践过CQRS框架. 但是总觉得复杂度高,门槛也高,自己学都吃力,如果团队新人更难接 ...

  8. 关于如何将Excel数据导入到SQL Server中

    面对大量的Excel数据我们可能会非常苦恼,如果一条一条的插入到数据库:不仅会耗大量的时间,而且还可能会发生错误,现在我来说一下如何导入数据! 1.准备工作 首先要在Excel中建立数据表对应的数据字 ...

  9. STL之map

    参见http://www.cplusplus.com/reference/map/map/ template < class Key,                               ...

  10. Android -- 经验分享(二)

    目录                                                                                   自定义两个View进行画图,让 ...