IP组播和分布式系统组通信
IP组播和分布式系统组通信
(Risun, 2004-6-17)
在分布式系统中,经常会出项从一台主机(或进程)向网络上所有或者部分主机(或进程)发送消息的情况(例如:……)。显然,可以通过在发送断分别向每一台主机发送消息来实现这个需求,这样造成网络上大量重复数据流。在这种情况下,通常采用广播和组播。IP广播和组播只适用于UDP数据的传输(TCP数据流的传输需要端到端的连接)。
IP广播和组播
网络数据过虑流程
图1:接受数据帧时协议栈的过虑流程

Card interface检测数据帧,如果mac地址吻和-通常本卡地址或者broadcast地址,或者配置接受的multicast地址,接受数据帧,如果CRC检测正确,数据帧交给device driver;
Device driver根据相应的协议type将数据交给IP层或其他协议层;
IP检测数据包的源地址和目标地址,将数据包传到上层(tcp/udp);
UDP层检测数据包的端口发送到相应的进程或丢弃。对于broadcast数据包,对此数据包不感兴趣的主机通常在udp层才能因为不能找到接受端口而丢弃数据包;multicast数据包一般在device driver层,有的甚至能够在card interface层就被丢弃,省略了很多不必要的开销。
Broadcast 的ip地址和mac地址
IP地址:
Limited Broadcast:255.255.255.255,用于局域网内的广播,路由器不会转发这样的数据包;
Net-directed Broadcast:netid.255.255.255,用于向特定网络内的广播,一般的路由器需要转发数据包;
SubNet-directed Broadcast:netid.subnetid+all hosted as 1,用于特定子网内的广播;
Mac地址:
Broadcast的mac地址为:ff:ff:ff:ff:ff:ff。(可以把它看作一特殊的multicast地址)
Multicast的地址
IP地址:
Multicast group:同一个multicast group内的主机可以接受发到此group的数据包。每个group有一个ip,主机可以选择加入一个和多个group中。
Multicast group的地址:

图2
Mac地址:
用于ip multicast 的mac地址范围:01:00:5e:00:00:00-01:00:5e:7f:ff:ff;
multicast group address到mac地址的转化如下图3:
从这个转化可以看出,可能出现一个mac地址对应多个ip address的情况,这要求在IP进行相应的数据过虑。
组通信
组播的消息提供了构造具有下列特征的分布式系统的基础结构,
1 基于复制服务的容错
每一个客户请求被组播到组的每一个成员服务器,执行相同的操作;
2 在自发网络中找到发现服务器
3 通过复制的数据获得更好的性能
数据副本保存在客户机,每次数据修改时,新的值被组播到所有管理数据副本的进程
4 事件通知的传播
基本组播:
组播原语,B-multicast(g,m);对应的传递原语,B-deliver(g,m)。与IP组播不同,它保证只要组播进程不崩溃,组内的真确进程一定会传递消息。
实现方式:
1 可靠的一对一通信
B-multicast:对于任意进程p属于组g, send(p,m);
进程B-deliver时,执行receive(m)。
2 利用IP组播实现
(考虑)
可靠组播
R-multicast(g,m),R-deliver(m)。
可靠组播和基本组播的不同在于:可靠组播要求对于组内的任一个正确进程deliver消息m,则组内的其他正确进程必然deliver消息m。B-multicast时进程出现故障时,即违反此规则。
由此,可靠组播的性质如下:
完整性:一个正确的进程P deliver一个消息m至多一次,P属于group(m),m由sender(m)提供给一个组播操作;
有效性:如果一个正确进程multicast 一个消息m,那么它终将deliver 消息m;
协定:如果一个正确的进程deliver一个消息m,那么group(m)中的其他正确进程终将deliver消息m。
用B-mulitcast实现可靠组播
关键一点就是实现R-multicast的协定性质,要求每个进程在R-deliver一个消息m之前B-multicast这个消息。
用IP组播实现可靠组播
组合使用IP组播、捎带确认、否定确认法。
每个进程p对于它属于的组g维持一个顺序数Sgp,表示它发送消息的顺序数,从0开始,还记录了Rgq,即它最近deliver的来自进程q并且发送到组g的消息的顺序数,算法的详细描述见【1】Page-331。
有序组播
对于组播消息具有顺序要求,基本可分为以下几种及其组合:
FIFO排序,如果几个进程multicast(g,m)之后multicast(g,m’),那么任何正确进程在deliver 消息m’之前deliver 消息m;
因果排序,如果multicast(g,m) -> multicast(g,m’),其中 ->是发生在先关系窃只有g的成员之间发送的消息引起,那么任何deliver m’的正确进程将在m’之间deliver m;
全排序,如果一个正确的进程在deliver m’前deliver m,那么任何其他deliver m’的正确进程将在m’之前deliver m。
相应的实现算法描述参见【1】Page-335-338
【1】 分布式系统概念与设计,金蓓鸿 译 机械工业出版社 2004, 01
【2】 TCP/IP Illustrated, Volume 1:The Protocols, W.Richard Stevens 机械工业出版社 2002,01
posted on 2004-06-21 00:05 哲学 艺术 程序 人生 阅读(2492) 评论(0) 收藏 举报
浙公网安备 33010602011771号