我是靠谱客的博主 务实硬币,最近开发中收集的这篇文章主要介绍多播套接字选项分析一、IP_ADD_MEMBERSHIP、IPV6_JOIN_GROUP和MCAST_JOIN_GROUP二、IP_DROP_MEMBERSHIP、IPV6_LEAVE_GROUP和MCAST_LEAVE_GROUP三、IP_BLOCK_SOURCE和MCAST_BLOCK_SOURCE四、IP_UNBLOCK_SOURCE和MCAST_UNBLOCK_SOURCE五、IP_ADD_SOURCE_MEMBERSHIP和MCAST_JOIN_SOURCE_GROUP六、IP_DRO,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、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

最后

以上就是务实硬币为你收集整理的多播套接字选项分析一、IP_ADD_MEMBERSHIP、IPV6_JOIN_GROUP和MCAST_JOIN_GROUP二、IP_DROP_MEMBERSHIP、IPV6_LEAVE_GROUP和MCAST_LEAVE_GROUP三、IP_BLOCK_SOURCE和MCAST_BLOCK_SOURCE四、IP_UNBLOCK_SOURCE和MCAST_UNBLOCK_SOURCE五、IP_ADD_SOURCE_MEMBERSHIP和MCAST_JOIN_SOURCE_GROUP六、IP_DRO的全部内容,希望文章能够帮你解决多播套接字选项分析一、IP_ADD_MEMBERSHIP、IPV6_JOIN_GROUP和MCAST_JOIN_GROUP二、IP_DROP_MEMBERSHIP、IPV6_LEAVE_GROUP和MCAST_LEAVE_GROUP三、IP_BLOCK_SOURCE和MCAST_BLOCK_SOURCE四、IP_UNBLOCK_SOURCE和MCAST_UNBLOCK_SOURCE五、IP_ADD_SOURCE_MEMBERSHIP和MCAST_JOIN_SOURCE_GROUP六、IP_DRO所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部