多播套接字选项分析

来源:互联网 发布:vb.net chart拖动放大 编辑:程序博客网 时间:2024/04/28 06:09

一、IP_ADD_MEMBERSHIP、IPV6_JOIN_GROUP和MCAST_JOIN_GROUP

在一个指定的本地接口上面添加一个不限源的多播组。我们将会有以下三个结构来表示添加和离开多播组

struct ip_mreq{struct in_addr imr_multiaddr;   /*ipv4 class D multicast addr*/struct in_addr imr_interface;   /* ipv4 addr of local interface*/};struct ip_mreq{struct in6_addr ipv6imr_multiaddr;   /*ipv6 multicast addr*/unsigned int ipv6mr_interface  /*interface index, or 0*/};struct group_req{unsigned int gr_interface;    /*interface index, or 0*/struct sockaddr_storage gr_group;    /*ipv6 or ipv4 multicast addr*/};

分析如下:

1)、一个套接字可以多次加入多个多播组, 但是多播组的地址必须不同,又或者是在不同接口上的同一个多播地址。

2)、在MCAST_JOIN_GROUP中, 我们支持IPv4和IPv6, 其中sockaddr_storage支持存放在系统当中的任何类型的地址。

3)、如果指定的IPv4中的地址是INADDR_ANY或者IPv6值为0的索引,那么内核将会自动选择一个本地的接口。

4)、大多数的实现实现允许套接字上加入多播组的次数是有限的 。 ipv4的这个限制是常值IP_MAX_MEMBERSHIPS。


二、IP_DROP_MEMBERSHIP、IPV6_LEAVE_GROUP和MCAST_LEAVE_GROUP

离开指定本地接口的一个不限源的多播组

1)、如果未指定本地接口(IPV4和INADDR_ANY或者IPV6为0的接口索引),那么将会抹除首个匹配的多播组成员关系。

2)、当相应的套接字关闭又或者是(因显示关闭《close》,又或者是进程终止), 那么多播组和套接字的成员关系将会自动抹除

3)、单个主机上多个套接字加入相同的多播组,这样, 单个套接字的抹除并影响其他成员之间的关系



三、IP_BLOCK_SOURCE和MCAST_BLOCK_SOURCE

对于一个所指定本地接口上已存在的一个不限源的多播组, 在本套接字上阻塞接受来之某个源的多播分组。

struct ip_mreq_source{struct in_addr imr_multiaddr;// ipv4 class D multicast addr.struct in_addr imr_sourceaddr;  //ipv4 source addr.struct in_addr imr_interface;   // ipv4 addr of local interface.};struct group_source_req{unsigned int gsr_interface;    //interface index, or 0.struct sockaddr_storage gsr_group;    // ipv4 or ipv6 multicast addr.struct sockaddr_storage gsr_source;   // ipv4 or ipv6 source addr.};
分析:

1)、如果加入同一个多播组的所有套接字堵塞同一个源, 那么主机系统可以通知路由器无须分流。

2)、该套接字选项可用于忽略譬如说来子无赖发送进程的分组流通。

3)、源堵塞请求修改已存在的组成员关系,因此必须使用IP_ADD_MEMBERSHIP, IPV6_ADDR_MEMBERSHIP, MCAST_JOIN_GROUP在相应的接口上加入对应的多播分组。

四、IP_UNBLOCK_SOURCE和MCAST_UNBLOCK_SOURCE

开通先前被堵塞的源

1)、 如果本指定本地接口(也就是对于ipv4的INADDR_ANY, 又或者是与协议无关的api为0的索引), 那么将会开通首个匹配的被堵塞源

五、IP_ADD_SOURCE_MEMBERSHIP和MCAST_JOIN_SOURCE_GROUP

在一个指定的本地接口上加入一个特定于源的多播组。

1)、特定于源的多播组加入绝不允许使用IP_ADD_MEMBERSHIP, IPV6_ADDR_MEMBERSHIP, MCAST_JOIN_GROUP加入多播组

2)、如果指定的IPv4中的地址是INADDR_ANY或者IPv6值为0的索引,那么内核将会自动选择一个本地的接口。


六、IP_DROP_SOURCE_MEMBERSHIP和MCAST_LEAVE_SOURCE_GROUP

在指定的本地接口上离开一个特定于源的多播组

1)、如果未指定本地接口(IPV4和INADDR_ANY或者IPV6为0的接口索引),那么将会抹除首个匹配的特定于源的多播组成员关系。

2)、当相应的套接字关闭又或者是(因显示关闭《close》,又或者是进程终止), 那么特定于源的多播组和套接字的成员关系将会自动抹除

3)、单个主机上多个套接字加入相同的特定于源的多播组,这样,单个套接字的抹除并影响其他套接字的关系。


七、IP_MULTICAST_IF和IPV6_MULTICAST_IF

指定通过本套接字发的多播数据报的外出接口。

1)、ipv4版本, 有in_addr决定, 而ipv6将会由某个接口索引指定。

2)、ipv4位INADDR_ANY或者ipv6为0的接口索引, 那么先前通过本套接字指定的任何接口都将会被抹除, 系统改为每次发送套接字的外出接口。

3)、每次需要区分当进程加入多播组时的指定本地接口。


八、IP_MULTICAST_TTL和IPV6_MULTICAST_HPOS

给外出的多播数据报设置iPv4的TTL或者ipv6的跳限。

1)、如果为设定, 将或自动默认为1

原创粉丝点击