一、概述

单播地址标识单个接口,广播地址标识子网上的所有接口,多播地址标识一组接口。

单播和广播是编址方案的两个极端,多播的目的就在于提供一种折衷的方案。

二、多播地址

我们必须区分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学习 多播的更多相关文章

  1. UNP学习笔记(第十五章 UNIX域协议)

    UNIX域协议是在单个主机上执行客户/服务器通信的一种方法 使用UNIX域套接字有以下3个理由: 1.UNIX域套接字往往比通信两端位于同一个主机的TCP套接字快出一倍 2.UNIX域套接字可用于在同 ...

  2. UNP学习笔记(第十四章 高级I/O函数)

    本章讨论我们笼统地归为“高级I/O”的各个函数和技术 套接字超时 有3种方法在涉及套接字的I/O操作上设置超时 1.调用alarm,它在指定超时时期满时产生SIGALRM信号 2.在select中阻塞 ...

  3. 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 ...

  4. UNP学习笔记(第五章 TCP客户/服务程序实例)

    我们将在本章使用前一章中介绍的基本函数编写一个完整的TCP客户/服务器程序实例 这个简单得例子是执行如下步骤的一个回射服务器: TCP回射服务器程序 #include "unp.h" ...

  5. UNP学习 广播

    一.概述 虽然UDP支持各种形式的地址,但TCP只支持单播地址. 上图要点是: IPv4对多播的支持是可选的,而IPv6则时必须的. IPv6没有提供对广播的支持:当使用广播的IPv4应用程序一直到I ...

  6. unp学习笔记——Chapter1

    1.发现网络拓扑的几个重要的命令 (1).netstat -i 提供网络接口的信息.我们还指定-n 标志以输出数值地址,而不是试图把它们反向解析成名字.netstat -r 展示路由表. dzhwen ...

  7. UNP学习总结(二)

    本文是UNP复习系列的第二篇,主要包括了以下几个内容 UNIX系统下5种I/O模型 阻塞.非阻塞,同步.异步 epoll函数用例 一.Unix下的五种可用I/O模型 阻塞式I/O模型 阻塞式I/O是最 ...

  8. UNP学习总结(一)

    本文主要为对UNP第五章部分内容的实验和总结. UNP第五章对一个echo服务器和客户端在各种连接状态下的表现做了详细的分析,包括了: 正常启动和终止: accept返回前连接中止: 服务器进程终止: ...

  9. UNP学习笔记(第三十章 客户/服务器程序设计范式)

    TCP测试用客户程序 #include "unp.h" #define MAXN 16384 /* max # bytes to request from server */ in ...

随机推荐

  1. 【TCP】tcp协议通信中io

    阻塞IO recv,接收数据,若没有,将阻塞, 当对方发数据来后,linux内核缓冲区得到数据, 内核数据复制到recv()调用所在的用户空间, 阻塞解除,进行下一步处理, 非阻塞IO 轮询调用rec ...

  2. jenkins的安装与使用

    以前用过hudson,前段时间听以前同事说,他现在搞jenkins,zookeeper...,现在的项目 也是手动的,所以我也就搞了一个jenkins.期间也遇到好多问题,主要是自己水平不够,网上的都 ...

  3. linux 下启动tomcat 时没有执行权限

    原因: 没有权限 解决 : chmod 777 *.sh Linux下启动tomcat

  4. php关键字static使用

    php中static关键字使用: 情景1:静态变量 使用static关键字定义静态变量 静态变量:只存在于函数作用域内,也就是说,静态变量只存活在栈中.一般的函数内变量在函数结束后会释放,比如局部变量 ...

  5. centos7.4 搭建lnmp

    系统:阿里云 centos7.4 Php:PHP 7.1.13 (cli) Mysql:mysql5.7 Nginx:nginx/1.12.2 一.更新centos7 yum源 cp /etc/yum ...

  6. 【GDAL】GDAL栅格数据结构学习笔记(一): 关于Metadata

    在维护一段代码时看到前任程序员写的获取栅格数据的CellSize的功能,竟然在知道GDAL的情况下去调用AE的接口来解算,觉得费解. 原来的思路是使用AE的Raster对象读取出Raster的文件大小 ...

  7. python3 zip 与tf.data.Data.zip的用法

    ###python自带的zip函数 与 tf.data.Dataset.zip函数 功能用法相似 ''' zip([iterator1,iterator2,]) 将可迭代对象中对应的元素打包成一个元祖 ...

  8. ubuntu中下载pycharm并添加到桌面

    方法一:下载Pycharm与安装 下载地址:https://www.jetbrains.com/pycharm/ Pycharm专业版和社区版对大多数人来说差别不大,区别如下: 我们下载Linux的社 ...

  9. [心得]Ubuntu無法ssh登入

    裝好ssh後,發覺無法用root登入,可是sshd_config接正確. 後來發現原因在於,Ubuntu沒有root帳號,但是可以透過sudo -s拿到root權限. su root 密碼怎樣打也行不 ...

  10. 帮助_NOI导刊2010提高(03)

    题目描述 Bubu的书架乱成一团了!帮他一下吧! 他的书架上一共有n本书.我们定义混乱值是连续相同高度书本的段数.例如,如果书的高度是30,30,31,31,32,那么混乱值为3,30,32,32,3 ...