集群通信TIPC协议
一、 安装测试
1. TIPC内核模块安装
modprobe 利用depmod创建的依赖文件来自动加载相关的模块
insmod 向正在运行的内核加载模块
lsmod 显示当前加载的内核模块信息/proc/modules
rmmod 从当前运行的内核中卸载内核模块
depmod 处理可加载内核模块的依赖关系
/proc/kallsyms 内核符号和模块符号表的信息
例如TIPC内核模块而言,直接用
root # modprobe tipc
就可以将tipc模块加载到内核
(当然,这里的TIPC模块是Linux已经支持的)
2. 配置TIPC
参考文档:Linux TIPC 1.7 User's Guide
配置网络: root# tipc-config -netid=1234 -addr=1.1.8 -be=eth:eth0
远程管理: root# tipc-config -dest=1.1.9 -n
禁用远程管理: root# tipc-config -mng=disable
3. 通信测试
可以参考:tipc-config包中的demo
参考文档: Linux TIPC 2.0 Programmer's Guide
1. TIPC网络结构
网络地址:<Zone, Cluster, Node> 255.4095.4095
网络ID:TIPC网络还使用网络ID,这允许多个逻辑网络使用相同的物理媒介(例如,相同的以太网网线),并且不会相互干扰,因为每个节点仅仅识别来自相同网络ID节点的流量。
当物理链接(如以太网)建立好了之后,TIPC会自动建立连接来和网络中其它节点通信。
注意:
- TIPC网络地址不像IP网络地址,在TIPC中每个节点仅有一个网络地址,即使节点有多个网络接口。
- 网络管理员会分配网络地址和网络ID,程序员没必要关注到这些内容。
- 网络管理员会配置好每个节点的网络接口。
2. 消息传送概览
TIPC应用程序在端点间(端口)通过交换数据单元(消息)进行通信。
从应用程序的角度,一个消息就是从1~66000字节长的字符串,内部结构由应用程序决定,一个端口是一个实体可以以连接或无连接的方式发送和接收消息。
注意点
- TIPC网络包含的节点可能运行在不同的CPU类型上,或者使用不同的操作系统,应用程序必须保证他们的消息格式的一致性。在一些情况下,可能需要大小端转换或者强制使得消息域固定大小。
- 一些相同的条件,阻止发送消息的条件可能也会使得阻止返回消息。
3. TIPC寻址
网络地址: <Z.C.N> <8bit, 12bit, 12bit>
端口ID: <Z.C.N:ref> ref也是32位整数
端口名称:虽然可以使用TIPC端口发送消息,通常情况下,使用功能性地址,而不使用发送端口来知晓目的地址的物理位置,这就简化了通信,尤其是服务端口动态创建、删除或重新定位的时候,或者多个端口提供服务的时候。在TIPC中功能地址的基本单元就是端口名称。指定为{type, instance},大小为{32bit, 32bit}。
不像端口ID,端口名称在TIPC网络中可以不唯一,应用程序可以给一个端口名称分配多个端口,多个端口名称可以分配给一个端口。
端口名称序列:用于指定范围内相似的端口名称,{type, lower bound, upper bound},每个域大小32bit。
一些限制:
- type值0~63被TIPC保留
- 端口名称和名称序列被服务端口使用,而不是客户端口。
- 端口名称序列不能重叠。但不同节点上的重叠名称序列是可以的。
注意点:
- 程序员不得不担心选择TIPC名称和名称序列。
- 在TIPC网络中好的名称(或名称序列)与IP网络中广为人知的端口号一样。
- 应用程序必须使用与其他应用程序没有冲突的TIPC名称(或名称序列)
结合了一些有意思的特点,一些非常独特,来达到整体目标:
(1) 整个集群从通信的角度来看是单个计算机
(2) 能使得应用可以跟踪、适应拓扑变化
(3) 进程通信的透明性,网络拓扑由内核模块TIPC维护
三、 TIPC2.0协议规范
参考文档:TIPC 2.0 Protocol Specification
主要内容是协议的细节,包括为什么提出该协议,与TCP,SCTP等协议相比的优点,以及对消息格式的定义和所有所提供的功能:基于port的通信,名称表,链路,广播链路,邻居检测,拓扑服务,配置服务,安全考虑,IANA(The Internet Assigned Numbers Authority)考虑。