0001 .. SPDX-License-Identifier: GPL-2.0
0002
0003 =================
0004 Linux Kernel TIPC
0005 =================
0006
0007 Introduction
0008 ============
0009
0010 TIPC (Transparent Inter Process Communication) is a protocol that is specially
0011 designed for intra-cluster communication. It can be configured to transmit
0012 messages either on UDP or directly across Ethernet. Message delivery is
0013 sequence guaranteed, loss free and flow controlled. Latency times are shorter
0014 than with any other known protocol, while maximal throughput is comparable to
0015 that of TCP.
0016
0017 TIPC Features
0018 -------------
0019
0020 - Cluster wide IPC service
0021
0022 Have you ever wished you had the convenience of Unix Domain Sockets even when
0023 transmitting data between cluster nodes? Where you yourself determine the
0024 addresses you want to bind to and use? Where you don't have to perform DNS
0025 lookups and worry about IP addresses? Where you don't have to start timers
0026 to monitor the continuous existence of peer sockets? And yet without the
0027 downsides of that socket type, such as the risk of lingering inodes?
0028
0029 Welcome to the Transparent Inter Process Communication service, TIPC in short,
0030 which gives you all of this, and a lot more.
0031
0032 - Service Addressing
0033
0034 A fundamental concept in TIPC is that of Service Addressing which makes it
0035 possible for a programmer to chose his own address, bind it to a server
0036 socket and let client programs use only that address for sending messages.
0037
0038 - Service Tracking
0039
0040 A client wanting to wait for the availability of a server, uses the Service
0041 Tracking mechanism to subscribe for binding and unbinding/close events for
0042 sockets with the associated service address.
0043
0044 The service tracking mechanism can also be used for Cluster Topology Tracking,
0045 i.e., subscribing for availability/non-availability of cluster nodes.
0046
0047 Likewise, the service tracking mechanism can be used for Cluster Connectivity
0048 Tracking, i.e., subscribing for up/down events for individual links between
0049 cluster nodes.
0050
0051 - Transmission Modes
0052
0053 Using a service address, a client can send datagram messages to a server socket.
0054
0055 Using the same address type, it can establish a connection towards an accepting
0056 server socket.
0057
0058 It can also use a service address to create and join a Communication Group,
0059 which is the TIPC manifestation of a brokerless message bus.
0060
0061 Multicast with very good performance and scalability is available both in
0062 datagram mode and in communication group mode.
0063
0064 - Inter Node Links
0065
0066 Communication between any two nodes in a cluster is maintained by one or two
0067 Inter Node Links, which both guarantee data traffic integrity and monitor
0068 the peer node's availability.
0069
0070 - Cluster Scalability
0071
0072 By applying the Overlapping Ring Monitoring algorithm on the inter node links
0073 it is possible to scale TIPC clusters up to 1000 nodes with a maintained
0074 neighbor failure discovery time of 1-2 seconds. For smaller clusters this
0075 time can be made much shorter.
0076
0077 - Neighbor Discovery
0078
0079 Neighbor Node Discovery in the cluster is done by Ethernet broadcast or UDP
0080 multicast, when any of those services are available. If not, configured peer
0081 IP addresses can be used.
0082
0083 - Configuration
0084
0085 When running TIPC in single node mode no configuration whatsoever is needed.
0086 When running in cluster mode TIPC must as a minimum be given a node address
0087 (before Linux 4.17) and told which interface to attach to. The "tipc"
0088 configuration tool makes is possible to add and maintain many more
0089 configuration parameters.
0090
0091 - Performance
0092
0093 TIPC message transfer latency times are better than in any other known protocol.
0094 Maximal byte throughput for inter-node connections is still somewhat lower than
0095 for TCP, while they are superior for intra-node and inter-container throughput
0096 on the same host.
0097
0098 - Language Support
0099
0100 The TIPC user API has support for C, Python, Perl, Ruby, D and Go.
0101
0102 More Information
0103 ----------------
0104
0105 - How to set up TIPC:
0106
0107 http://tipc.io/getting_started.html
0108
0109 - How to program with TIPC:
0110
0111 http://tipc.io/programming.html
0112
0113 - How to contribute to TIPC:
0114
0115 - http://tipc.io/contacts.html
0116
0117 - More details about TIPC specification:
0118
0119 http://tipc.io/protocol.html
0120
0121
0122 Implementation
0123 ==============
0124
0125 TIPC is implemented as a kernel module in net/tipc/ directory.
0126
0127 TIPC Base Types
0128 ---------------
0129
0130 .. kernel-doc:: net/tipc/subscr.h
0131 :internal:
0132
0133 .. kernel-doc:: net/tipc/bearer.h
0134 :internal:
0135
0136 .. kernel-doc:: net/tipc/name_table.h
0137 :internal:
0138
0139 .. kernel-doc:: net/tipc/name_distr.h
0140 :internal:
0141
0142 .. kernel-doc:: net/tipc/bcast.c
0143 :internal:
0144
0145 TIPC Bearer Interfaces
0146 ----------------------
0147
0148 .. kernel-doc:: net/tipc/bearer.c
0149 :internal:
0150
0151 .. kernel-doc:: net/tipc/udp_media.c
0152 :internal:
0153
0154 TIPC Crypto Interfaces
0155 ----------------------
0156
0157 .. kernel-doc:: net/tipc/crypto.c
0158 :internal:
0159
0160 TIPC Discoverer Interfaces
0161 --------------------------
0162
0163 .. kernel-doc:: net/tipc/discover.c
0164 :internal:
0165
0166 TIPC Link Interfaces
0167 --------------------
0168
0169 .. kernel-doc:: net/tipc/link.c
0170 :internal:
0171
0172 TIPC msg Interfaces
0173 -------------------
0174
0175 .. kernel-doc:: net/tipc/msg.c
0176 :internal:
0177
0178 TIPC Name Interfaces
0179 --------------------
0180
0181 .. kernel-doc:: net/tipc/name_table.c
0182 :internal:
0183
0184 .. kernel-doc:: net/tipc/name_distr.c
0185 :internal:
0186
0187 TIPC Node Management Interfaces
0188 -------------------------------
0189
0190 .. kernel-doc:: net/tipc/node.c
0191 :internal:
0192
0193 TIPC Socket Interfaces
0194 ----------------------
0195
0196 .. kernel-doc:: net/tipc/socket.c
0197 :internal:
0198
0199 TIPC Network Topology Interfaces
0200 --------------------------------
0201
0202 .. kernel-doc:: net/tipc/subscr.c
0203 :internal:
0204
0205 TIPC Server Interfaces
0206 ----------------------
0207
0208 .. kernel-doc:: net/tipc/topsrv.c
0209 :internal:
0210
0211 TIPC Trace Interfaces
0212 ---------------------
0213
0214 .. kernel-doc:: net/tipc/trace.c
0215 :internal: