设备发现 #
我们传统的 Web Services 服务调用的模式都是这样的:客户端在设计时就预先知道目标服务的地址(IP 地址或者域名),客户端基于这个地址进行服务调用。
那如果客户端预先不知道目标服务的地址该怎么办?
WS-Discovery(全称为 Web Services Dynamic Discovery)标准就是用于解决该问题的,遵循该标准,客户端预先不知道目标服务地址的情况下,可以动态地探测到可用的目标服务,以便进行服务调用。这个过程就是「设备发现」的过程。
WS-Discovery 模式 #
WS-Discovery 定义了两种模式:Ad hoc 模式和 Managed 模式。
Ad hoc 模式 #
- Ad hoc 模式:客户端以多播 (multicast) 的形式往多播组 (multicast group) 发送一个 Probe(探测)消息搜寻目标服务,在该探测消息中,包含相应的搜寻条件。如果目标服务满足该条件,则直接将响应 ProbeMatch 消息(服务自身相关的信息,包括地址)回复给客户端。
Message Exchanges in an ad hoc mode.
Message exchanges in an ad hoc mode in the presence of a Discovery Proxy.
Managed 模式 #
- Managed 模式:即代理模式。Ad hoc 模式有个局限性,只能局限于一个较小的网络。Managed 模式就是为了解决这个问题的,在 Managed 模式下,一个维护所有可用目标服务的中心发现代理(Discovery Proxy)被建立起来,客户端只需要将探测消息发送到该发现代理就可以得到相应的目标服务信息。
Message exchanges in a managed mode.
官方技术规范:http://docs.oasis-open.org/ws-dd/discovery/1.1/os/wsdd-discovery-1.1-spec-os.html
传输方式 #
TCP/IP 有三种传输方式:单播 (Unicast)、多播 (Multicast) 和广播 (Broadcast),在 IPv6 领域还有另一种方式:任播 (Anycast)。
单播 Unicast #
单播 (Unicast):一对一,双向通信,目的地址是对方主机地址。网络上绝大部分的数据都是以单播的形式传输的。如收发邮件、浏览网页等。
多播 Multicast #
多播 (Multicast):也叫组播,一对多,单向通信,目的地址是多播地址,主机可以通过 IGMP 协议请求加入或退出某个多播组 (multicast group),数据只会转发给有需要(已加入组)的主机,不影响其他不需要(未加入组)的主机。如网上视频会议、网上视频点播、IPTV 等。
多播地址(Multicast Address)有很多,各个行业都不一样,IPC 摄像头用的是 239.255.255.250
(端口 3702
)。
多播地址的范围和分类可以见官方 IANA(互联网地址分配机构) 的说明:IPv4 Multicast Address Space Registry。
WS-Discovery 协议用到了多播。
广播 Broadcast #
广播 (Broadcast):一对所有,单向通信,目的地址是广播地址,整个网络中所有主机均可以收到(不管你是否需要),如 ARP 地址解析、GARP 数据包等。广播会被限制在局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
IPC 搜索实现 #
实现 socket 编程(UDP),通过 sendto
往多播地址发送探测消息(Probe
),再使用 recvfrom
接收 IPC 的应答消息(ProbeMatch
)
组播 IP 地址 #
组播也是一种 IP 包,也有源 IP 地址,目的 IP 地址,
- 源 IP 地址为组播源的服务器 IP 地址,
- 目的地址为一个特殊的 IP 地址,
- 它位于
224.0.0.0
-239.255.255.255
中,- 由于 224.0.0.0/24 用于本地链路,即一跳的组播,
- 239.0.0.0/8 为私有组播地址,
- 所以实际的可用于在互联网上组播地址是
225.0.0.0/8
-238.0.0.0/8
参考:
叶王 © 2013-2024 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。