UNP学习 多播
一、概述
单播地址标识单个接口,广播地址标识子网上的所有接口,多播地址标识一组接口。
单播和广播是编址方案的两个极端,多播的目的就在于提供一种折衷的方案。
二、多播地址
我们必须区分IPv4多播地址和IPv6多播地址。
IPv4
D类地址是多播地址,从244.0.0.0到239.255.255.255是多播地址。D类地址的低28位构成了多播组ID,而整个32位地址则称为组地址。
下面是几个特殊的IPv4多播地址:
- 224.0.0.1是一个所有主机组,子网上所有具有多播能力的主机必须在所有具有多播能力的接口上加入该组。
- 224.0.0.2是一个所有路由器组,所有多播路由器必须在所有具有多播能力的接口加入该组
- 介于224.0.0.0到224.0.0.255间的地址称为链路局部地址。用于保留低级拓扑发现和维护协议。
IPv6多播地址
IPv6多播地址的高序字节值为ff,组地址的低序32位拷贝到以太网地址的低序32位。以太网的高序2字节值为33:33.
以太网地址第一字节的低序2位表明该地址是一个本地管理组地址。本地管理意味着不能保证地址的唯一性,可能有除IPv6外的其他协议族共享同一网络并使用同样的以太网地址高序2字节值。
4位多播标志用于区分众所周知多播组和临时多播组。该字段的高3为保留。IPv6多播地址还包含一个4位的范围字段。
IPv6多播地址:
- ff02::1是一个所有节点组。子网上的具有多播能力的所有主机必须在具有多播能力的所有接口上加入该组。
- ff02::2是一个所有路由器组。所有子网上的多播路由器必须在具有多播能力的所有接口上加入该组。
多播地址的范围:
1:节点局部即局部于节点
2:链路局部即局部于链路
3:网点局部即局部于网点
8:组织局部即局部于组织
14:全球(global)
三、局域网上多播和广播的比较
四、广域网上的多播
五、多播套接口选项
多播的API支持仅需要5个新的套接口选项

struct ip_mreq {
struct in_addr imr_multiaddr;
struct in_addr imr_interface;
};
struct ipv6_mreq {
struct in6_addr ipv6mr_multiaddr;
unsigned int ipv6mr_interface;
};
六、mcast_join和相关函数
#include "unp.h"
int mcast_join(int sockfd, const struct sockaddr * sa, socklen_t salen,
const char *ifname, u_int ifindex);
int mcast_leave(int sockfd, const struct sockaddr *sa, socklen-t salen);
int mcast_set_if(int sockfd, const char *ifname, u_int ifindex);
int mcast_set_loop(int sockfd, int flag);
int mcast_set_ttl(int sockfd, int ttl);
返回:成功0,出错-
int mcast_get_if(int sockfd);
返回:成功非负接口索引,出错-
int mcast_get_loop(int sockfd);
返回:成功当前回馈标志,出错-
int mcast_get_ttl(int sockfd);
返回:成功当前TTL或跳限,出错-
mcast_join函数加入一个多播组
mcast_leave离开一个多播组
mcast_set_if给外出多播数据报设置缺省的接口索引
mcast_set_loop设置回馈选项为1或0
UNP学习 多播的更多相关文章
- UNP学习笔记(第十五章 UNIX域协议)
UNIX域协议是在单个主机上执行客户/服务器通信的一种方法 使用UNIX域套接字有以下3个理由: 1.UNIX域套接字往往比通信两端位于同一个主机的TCP套接字快出一倍 2.UNIX域套接字可用于在同 ...
- UNP学习笔记(第十四章 高级I/O函数)
本章讨论我们笼统地归为“高级I/O”的各个函数和技术 套接字超时 有3种方法在涉及套接字的I/O操作上设置超时 1.调用alarm,它在指定超时时期满时产生SIGALRM信号 2.在select中阻塞 ...
- UNP学习笔记(第六章 I/O复用)
I/O模型 首先我们将查看UNIX下可用的5种I/O模型的基本区别: 1.阻塞式I/O 2.非阻塞式I/O 3.I/O复用(select和poll) 4.信号驱动式I/O(SIGIO) 5.异步I/O ...
- UNP学习笔记(第五章 TCP客户/服务程序实例)
我们将在本章使用前一章中介绍的基本函数编写一个完整的TCP客户/服务器程序实例 这个简单得例子是执行如下步骤的一个回射服务器: TCP回射服务器程序 #include "unp.h" ...
- UNP学习 广播
一.概述 虽然UDP支持各种形式的地址,但TCP只支持单播地址. 上图要点是: IPv4对多播的支持是可选的,而IPv6则时必须的. IPv6没有提供对广播的支持:当使用广播的IPv4应用程序一直到I ...
- unp学习笔记——Chapter1
1.发现网络拓扑的几个重要的命令 (1).netstat -i 提供网络接口的信息.我们还指定-n 标志以输出数值地址,而不是试图把它们反向解析成名字.netstat -r 展示路由表. dzhwen ...
- UNP学习总结(二)
本文是UNP复习系列的第二篇,主要包括了以下几个内容 UNIX系统下5种I/O模型 阻塞.非阻塞,同步.异步 epoll函数用例 一.Unix下的五种可用I/O模型 阻塞式I/O模型 阻塞式I/O是最 ...
- UNP学习总结(一)
本文主要为对UNP第五章部分内容的实验和总结. UNP第五章对一个echo服务器和客户端在各种连接状态下的表现做了详细的分析,包括了: 正常启动和终止: accept返回前连接中止: 服务器进程终止: ...
- UNP学习笔记(第三十章 客户/服务器程序设计范式)
TCP测试用客户程序 #include "unp.h" #define MAXN 16384 /* max # bytes to request from server */ in ...
随机推荐
- FMXUI ANDROID下连续按多次返回出现异常
在ANDROID下,按返回键后,默认是关闭当前Frame,但连接按返回键,会对当前Frame执行多次关闭动作,因为已经释放过对象,再次关闭会出现异常错误,解决办法:定义一个标识如FClosed: ...
- 操作数据库结构Sql语句
新建表: create table [表名] ( ,) PRIMARY KEY , ) default '默认值' null , [字段2] ntext null , [字段3] datetime, ...
- cf1278D——树的性质+并查集+线段树/DFS判环
昨天晚上本来想认真打一场的,,结果陪女朋友去了.. 回来之后看了看D,感觉有点思路,结果一直到现在才做出来 首先对所有线段按左端点排序,然后用并查集判所有边是否联通,即遍历每条边i,和前一条不覆盖它的 ...
- delphi 一个关于xml文件导入数据库的问题
function LoadXml(shortPath:string;var xmlobj: IXMLDOMDocument):boolean; var tmpXml:IXMLDOMDOCUMENT; ...
- Linux Bash Shell快速入门 (三)
forfor 循环结构与 C 语言中有所不同,在 BASH 中 for 循环的基本结构是: for $var in dostatmentsdone 其中 $var 是循环控制变量, 是 $var 需要 ...
- BUUCTF | CODE REVIEW 1 (反序列化,md5绕过)
<?php /** * Created by PhpStorm. * User: jinzhao * Date: 2019/10/6 * Time: 8:04 PM */ highlight_f ...
- element table 通过selection-change选中的索引删除
<el-table :row-class-name="tableRowClassName" @selection-change="handleSelectionCh ...
- ElasticSearch 简介概念及核心
1.ES是什么 ES是面向文档的Nosql,这意味着它可以存储整个对象或文档.然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索.在es中,你可以对文档(而非成行成列的数据)进行索 ...
- Java操作Redis小案例
1.下载jar包. http://download.csdn.net/detail/u011637069/9594840包含本案例全部代码和完整jar包. 2.连接到redis服务. package ...
- Hive SQL语法总结
Hive是一个数据仓库基础的应用工具,在Hadoop中用来处理结构化数据,它架构在Hadoop之上,通过SQL来对数据进行操作. Hive 查询操作过程严格遵守Hadoop MapReduce 的作业 ...