这两天被igmp proxy搞的焦头烂额,有时候工作,有时候又不工作。最后下了狠心,把代码翻出来啃了一遍,总算是找到了问题,简单的总结一下。

igmp proxy的原理其实就是通过在downstream的interface上接收igmp report,然后再从upstream的interface上广播出去;同时在router上添加对应的virtual interface(VIF)的路由信息(MFC)。最后,使得从upstream的interface收到的multicast包,能发送到downstream的interface对应的网络中去。

在标准的linux kernel实现中,MFC(multicast forward cache)表添加的时候是通过src ip和dest ip(也就是group ip)来产生一个hash值作为索引的。但由于igmp proxy必须对所有的src ip的multicast包进行处理(添加MFC entry),因此这个hash的方法就必须修改,比如在我的kernel中是通过dest ip和interface index来产生hash的。当然,也可以用别的,保持kernel和app对应就是了。

在测试的过程中,我发现可以使用的测试工具实在是太少了,只找到了一份微软的windows上的工具。为了方便以后的测试,我自己又写了一个。工具很简单,提供两个功能,一个发multicast udp包,一个收multicast udp包。需要注意的就是,在发包的时候必须通过设置IP_MULTICAST_TTL来修改ip包的ttl值,否则就会因为linux的默认ttl为1,跑到路由器就被丢掉了。还有就是,ethereal不可信,老是告诉我checksum错,其实又不错。

igmpproxy_IGMP proxy开发笔记 | 学步园相关推荐

  1. python中的wx_配置 Python的wxWidgets可视开发环境 | 学步园

    注:转载请注明出处 一.下载 Python 2.5.1 这一步是必须做的,下载 Python 语言的 SDK 下载地址(直接复制到迅雷):点击下载 下载完成后安装 Python 2.5.1,注意安装路 ...

  2. java vim ide_把VIM配置成IDE开发环境 | 学步园

    VIM常用命令 VIM命令图 VIM键盘布局图 VIM键盘布局英文 VIM键盘布局中文 将VIM配置成IDE(通过 VIM基本插件 和VIM配置文件) Ubuntu14下我的VIM IDE配置的效果图 ...

  3. matlab写出函数表达式,matlab 由状态空间表达式求传递函数 笔记 | 学步园

    1 内容 有一个两输入两输出线性系统 ,求该系统的传递函数表达式子. 2 求解 2.1 相关函数 状态空间表达式的传递函数用ss2tf函数来求解 函数原型 [b,a] = ss2tf(A,B,C,D, ...

  4. java jce配置_配置jce开发环境 | 学步园

    虽然JDK1.4将java安全包包含在核心库中,但如果不对jce进行配置,也没办法使用jce进行开发. 首先从sun网上下载jce1.2.2(我在网上看到的都是下载一个包,没用sun默认的),然后把解 ...

  5. java构造字符缓冲区_java学习笔记 | 学步园

    一.数组 类型[] 名称=new 类型[长度] 二.字符串2.1字符串类Stringjava.lang.StringString 名称=new String("xxxx")=&qu ...

  6. protobuf java_ProtoBuf for java使用笔记 | 学步园

    三.新建项目ProtobufDemo.包名:com.protobufdemo.protobuf. 四.把上面的jar包跟exe放到工程目录下.新建文件夹:proto.在其下新建文件:msg.proto ...

  7. oracle查询数据库日志大小,Oracle的日志缓冲区大小查询方法———学习笔记 | 学步园...

    日志缓冲区Log_buffer是Oracle专门用于存入重做日志的内存区域. 数据库启动时,可以看到: SQL> startup ORACLE 例程已经启动. Total System Glob ...

  8. 安卓开发笔记——打造属于自己的博客园APP(一)

    最近事情比较多,博客更新又落下了,平时有个习惯,喜欢睡前看看博客园里博友的文章,但一直感觉APP市场上下载下来的博客园客户端用起来并不是很舒服,近来发现博客园也有对外开放的数据接口,所以打算自己写个博 ...

  9. Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境

    引言 简单介绍一下Cordova的来历,Cordova的前身叫PhoneGap,自被Adobe收购后交由Apache管理,并将其核心功能开源改名为Cordova.它能让你使用HTML5轻松调用本地AP ...

最新文章

  1. css中图片整合的使用,CSS Sprites:图片整合技术详细案例
  2. 【数理知识】《积分变换与场论》王振老师-第3章-矢量与矢量空间
  3. 中print中加f_Python3中的格式化输出
  4. 软件工程敏捷开发01
  5. 成绩记录薄系统C语言,成绩记录簿C语言版.doc
  6. spring-boot ffmpeg 搭建一个音频转码服务
  7. 三、RabbitMQ消息发布时的权衡
  8. JSK-337 汽水瓶【数学+模拟】
  9. [转载] 递归函数python基例_python递归函数详解 python 递归函数使用装饰器
  10. Android BroadcastReceiver(二)
  11. Python3 发票导出XML转Excel
  12. c语言退格键ascii码,【回车键的ASCII码是多少】
  13. mac pdf去水印_Acrobat XI PRO/DC 2019 PDF编辑转换器去水印 WIN/MAC
  14. 用hook android 微信,【第一篇】【安卓微信】HOOK微信发消息,当HOOK遇上HOOK。
  15. 英语语法最终珍藏版笔记-1英语动词的时态
  16. tig只看某个作者的提交
  17. JNDI-Injection-With-LDAP-Unserialize
  18. Flutter 制霸全平台?这事儿我看有戏。
  19. 计算机编程语言排行榜—TIOBE世界编程语言排行榜(2020年3月份最新版)
  20. Hibernate @SequenceGenerator的注解介绍

热门文章

  1. 怎么禁用html5,如何禁用HTML5视频标签?
  2. Windows Azure Storage (3) Windows Azure Storage Service存储服务之Blob详解(中)
  3. 路由信息协议工作原理
  4. 利用Jquery将表单序列化成JS对象
  5. 【送书福利】第一次送书活动(总共10本)
  6. css的几种垂直水平居中方法
  7. requirej入门(一)
  8. spring扩展点之二:spring中关于bean初始化、销毁等使用汇总,ApplicationContextAware将ApplicationContext注入...
  9. HDU 2577 How to Type
  10. 又一次摔MFC坑里了