1.数据通信模式
可以根据数据的传输方式对数据通信进行分类,数据通信有三种模式:单播、广播和多播。单播描述了一条信息从一个点发送到另一个点的通信方式。在单播通信模型中,仅有一个发送方和一个接收方。基于网络协议的TCP 传输(如http、smtp、ftp 和telnet)支持单播传输模式。广播通信是一条信息从一个点发送到所有其他点的通信模型。该模型中,仍有一个发送方,但信息将发送到所有与其连接的接收方,也可能没有接收器。地址解析协议ARP 使用广播技术向所有计算机发送地址解析查询。多播描述了将一条信息从一个或多个点发送到一组其他点的通信方式。在此模型中,可能有一个或多个发送者,发送信息被分发给多个接收者。
多播和广播之间的主要区别是为接收者提供了选择加入选项,想要接收数据的接收方应该注册以获得对发送方的访问权,该注册过程将通知网络感兴趣的主题并选择要接收的数据,否则,接收者永远不会接收到该数据。单播、广播和多播发送数据包的方式如图13-17所示:
图13-17 通信方式
2.多播举例
要在Contiki 操作系统项目中使用IPv6 多播,首先应该将多播模块添加到项目中,可以在项目Makefile文件中添加如下语句:
MODULES+=os/net/ipv6/multicast
还需在Contiki 操作系统项目上激活RPL 经典路由,可以将如下语句添加到Makefile文件中完成:
MAKE_ROUTING=MAKE_ROUTING_RPL_CLASSIC
为了测试,本节使用来自Contiki 操作系统中的Multicast 项目,该项目保存在examples/ipv6/multicast/文件夹下。该多播项目至少需要三个节点:一个节点上运行sink.c程序;一个节点上运行root.c程序;一个节点上运行interme⁃diate.c程序。通常,sink.c程序将侦听来自root.c的输入消息。在侦听到该消息之前,sink.c 程序应该通过调用join_mcast_group()函数来加入现有的多播组,该程序侦听端口为3001,join_mcast_group()函数的代码如下:
(www.xing528.com)
主线程中调用该函数的代码如下:
root.c程序将每秒发送一条UDP消息,这是通过调用uip_udp_packet_send()函数完成的,该函数代码如下:
运行intermediate.c 程序的节点不加入现有的多播组,由于已经为RPL 经典路由激活了intermediate.c程序,因此该程序可以转发任何多播消息。
3.Cooja仿真实现
图13-18 IPv6多播
本节建立如图13-18 的网络,网络中有8 个节点,节点运行sink.c 程序,节点2、节点7 和节点8 运行intermediate.c 程序,即仅仅承担路由器角色,节点3、节点4、节点5 和节点6 运行root.c 程序,当程序运行时在如图13-19 所示的无线消息窗口中能够观察到消息的传输。
图13-19 IPv6多播运行
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。