发布时间:2013-01-18 19:30:41
前面我们已经讲到了加入一个组播组的IP选项IP_ADD_MEMBERSHIP,关于组播的IP选项,除了这个,还有总共四个,它们分别是 IP_DROP_MEMBERSHIP,IP_MULTICAST_IF,IP_MULTICAST_TTL,IP_MULTICAST_LOOP,下面 分别一一介绍。 IP_DROP_MEMBERSHIP表示退出一个组播组,该选项最终会调用内核函数myip_mc_leave_group。该函数首先拿到结构体 struct in_device,取走要离开的组的源过滤机制,即从in_device->mc_list中找到对......【阅读全文】
发布时间:2013-01-18 19:30:35
我们还是以发送UDP的组播数据为例。其实发送一个UDP的组播数据报跟发送一个单播UDP数据报的差别并不大。 首先是在myudp_sendmsg函数中,如果发送接口的源地址没有确定,并且目的地址是组播地址的话,则源地址使用 inet_sock->mc_addr。而发送接口的源地址首先是通过inet_sock->saddr来确定的,如果发现 inet_sock->saddr为零,才会采用inet_sock->mc_addr的值。 通过前面的文章,我们可以了解到bind系统调用的......【阅读全文】
发布时间:2013-01-18 19:30:31
前面一篇文章中提到的两个示例程序,它们虽然对外发送了组播数据报,但它们实际上调用的是协议栈中的单播发送的代码。一般情况下,它们不会有什么问题,但是它们不是标准的组播程序,下面我们看看协议栈究竟是如何发送组播数据报的。 我们还是以发送UDP的组播数据报为例。前面已经讲过,IP选项IP_MULTICAST_IF确定组播发送的接口,在通过系统调用设置该选项时,参数只 需要一个本地网络接口的IP地址即可,myudp_sendmsg函数在发送组播数据报时,会以该选项设定的IP地址作为输出路由查询的源地址。 ......【阅读全文】
发布时间:2013-01-18 19:30:27
前面讲到过,UDP socket和RAW socket上的connect调用的原理是相当简单的,它所做的操作只是通过路由规则和路由表等一些信息,在struct socket结构中填入一些有关对端服务器的信息,这样,以后向对端发送数据报时,就不需要每次进行路由查询等操作以确定对端地址信息和本地发送接口,应 用程序也就不需要每次传入对端地址信息(可以使用send而不使用sendto)。这也就是为什么UDP被称为无连接的协议。 但TCP socket上的connect系统调用就相对比较复杂了,下面我们逐步探索tcp socket上的conn......【阅读全文】