一、概述
透明进程间通信(Transparent Inter-process Communication, TIPC) 是一种用于进程间通信的网络通信协议,原本是为集群间通信特别设计的。它允许设计人员能够创建可以和其它应用快速可靠地通信应用,无须考虑在其它需要通信的应用在集群环境中的位置。
特点:网路中服务位置透明,自动发现机制,可靠性,标准套接字接口的支持,无连接,有链接,多播。
在linux vxworks 可用这个协议,用C或者C++的运用中能创建AF-TIPC的SOCKET套接字来使用TIPC协议
二.TIPC模块的编译
1. TIPC 的网路功能是采用模块的形式在内核实现的,模块为tipc.ko
Linux
| ---include
| | -----linux |----tipc.h
| | |----tipc_config.h
| |
| | -----net -----tipc|----tipc.h
| |---tipc_plugin_if.h
| | ---tipc_plugin_msg.h
| | ---tipc_plugin_pert.h
|
| |-----konfig makefile
| ----net-----tipc |-----tipc_acldr.c
| -----tipc_user_reg.c
| -----tipc_user_reg.h
2.下载源文件,并将之替换掉当前内核中的对应位置的TIPC源文件
3.在linux源目录运行 make menuconfig 配置TIPC的参数
4.使用make modules M=net/tipc 编译tipc模块,若编译正确将在/usr/src/linux/net/tipc目录中生成tipc-*.ko 内核模块文件
5.安装 有以下命令:
1. lsmod |grep tipc
2.modinfo tipc.ko (查看新tipc文件内核版本)
3.rmmod tipc-* (删除系统中的版本)
4.insmod tipc.ko (插入新的TIPC版本)
三.接收发送
1.发送端实例
Struct sockaddr_tipc server_addr;
Int sd = socket (AF_TIPC, SOCK_RDM, 0);
Server.addr.family = AF_TIPC;
Server.addr.assrtype = TIPC_ADDR_NAME;
Server.addr.addr.name.type = type; //TIPC
Server.addr.addr.name.name.instance = port;
Server.addr.addr.name.domain = 0;
Char buf[40] = {“hello world”};
If (0>sendto (sd buf,strlen(buf)+1,0, (struct sockaddr*)&server_addr, sizeof(server_addr)))
{
Perror(“client:failed send”);
Exit(1);
}
接受端实例:
Struct sockaddr_tipc server_addr;
Int sd = socket (AF_TIPC, SOCK_RDM, 0);
Server.addr.family = AF_TIPC;
Server.addr.assrtype = TIPC_ADDR_NAME;
Server.addr.addr.name.type = type; //TIPC
Server.addr.addr.name.name.instance = port;
Server.addr.addr.name.domain = 0;
If (0 != bind(sd,(struct sockaddr*)&server_addr, sizeof(server_addr)))
{
Printf (“failed to bind ”);
Eixt(1);
}
If(0>=recvfrom(sd, Inbuf, sizeof(inbuf), 0, (strruct sockaddr*)&client_addr, &alen))
{
Peeror(“unexepected message”;
}
Printf(“sever:message receiived”, inbuf);
四.网络拓扑
TIPC网络地址是和整个物理结点相关联的,地址模式映射到逻辑网络拓扑。
一个域包括4096个集群(cluster),一个集群包括4096个结点(node).
TIPC采用5级分层网络: netnode, zone , cluster,node,slave node 0 zone内部每个node 可以互相通信。Networks则逻辑隔离
TIPC运用程序可以发送长1—66000字节长的消息,它的协议栈负责报文的分片和重组
Node A Node B
------------- -------------
| TIPC | | TIPC |
| Application | | Application |
|-------------| |-------------|
| | | |
| TIPC |TIPC address TIPC address| TIPC |
| | | |
|-------------| |-------------|
| L2 Bearer |Bearer address \/ Bearer address| L2 Bearer |
| Service | /\ | Service |
------------- -------------
| |
|---------------- Bearer Transport ----------------|
TIPC网络是由单个的处理单元或节点组成. 网络节点是严格分层的, 规则如下:
节点一般是按照邻近关系分组, TIPC的通信质量随着节点距离增加而下降, 在一个典型的TIPC网络中, 同一cluster中的节点间通信最频繁, 其次是同一zone而不同cluster的节点, 而不同zone中的节点基本没有通信.
TIPC网络中的每个节点都有一个由zone ID, cluster ID和node ID组成的地址, 一般标记为
------------------------------------------------------ ----------
| Zone <1> | | Zone <2> |
| ----------------------- ---------------------- | | |
| | Cluster <1.1> | | Cluster <1.2> | | | |
| | | | | | | |
| | ------- | | ------- ------- | | | |
| | | | | | | | | | | | | |
| | | Node | | | | Node +--+ Node | | | | |
| | |<1.1.1>| ------- | | |<1.2.1>| |<1.2.2>| | | | |
| | | +---+ | | | | | | | | | | |
| | ---+--- | Node | |--| --+---- ------- | | | |
| | | |<1.1.3>| | | | | | | |
| | ---+--- | | | | --+-- | | | |
| | | +---+ | | | |Seco.| | | | |
| | | Node | ------- | | |<1.2.| | | | |
| | |<1.1.2>| | | |3333>| | | | |
| | | | | | ----- | | | |
| | ------- | | | | | |
| ----------------------- ---------------------- | | |
| | | |
----------------------------------------------------- ----------
典型的TIPC网络拓扑图
注意:
五.Port标识
Port 是TIPC网络协议的通信标识,具有网络唯一性,由运用程序创建port时由TIPC自动生成。
Port ID 典型标识是
Port ID属于TIPC网络通信的物理地址标识, 用于TIPC协议消息通信的内部路由。
六.Port name (功能地址)
Port name 形式 a{type, instance} #名字
B{type, lower, bound} #名字序列
Port name 和port ID 的映射是由TIPC的port 发布关联的,当应用bind指定的port name 时,TIPC自动生成关联port ID ,并在指定的网络区域发布。
七.消息发送
若node结点在本地,则直接挂消息到目的port队列,若非本地结点,则由可用的链路发到目的结点。
message是TIPC节点端口间信息交换的基本单元. TIPC中有2种基本消息:
每个TIPC消息都包含消息头部和数据2部分, 消息头部的格式和用户相关, 大小从6个字到11字(word)不等(TIPC支持头部将来最大扩展到60字节). 头部是以网络字节序编码的32字节整形存储的.
八.常创建发消息失败的原因
a.长度大于66000字节,返回EINVAL;
b.TIPC用的内存不是使用的低端的内存,返回ENOMEM;
C.目的port链路阻塞,且发送端不期望阻塞,返回ELINKCONG;
d.基于有链接的链路对应的目的的port阻塞,且发送端不期望阻塞;