Messaging
Datagram messaging
Unicast, anycast or multicast,取决于使用的地址类型、-套接字地址、服务地址或服务范围。
如果有多个套接字与给定的服务地址匹配,则以循环方式选择目标。
- 可靠的节点间传输。
- 接收socket 缓冲过载保护
- 没有端到端的流控制,因此消息仍然可能被接收套接字拒绝。
- 根据发送套接字的配置,被拒绝的消息可能会被丢弃或返回给发送方。
- 如果返回,消息将被截断并带有错误代码。
Connections
通过使用服务地址或套接字地址建立连接
- 使用数据传输信息的单向设置(也称为“0-RTT”)
- 或传统的TCP样式设置
- 面向流或消息。
- 用于套接字接收缓冲区溢出保护的端到端流控制。
- 没有套接字级别的序列号,确认或重传,-链路层负责。
如果对等方不可用,连接立即中断。
- Leverages link level heartbeats and kernel/socket cleanup functionality.
- No socket level “keepalive” heartbeats needed.
Communication Groups(通信组)
通信组可以描述为无代理消息总线实例。这样的实例是用户创建的,-第一个加入成员套接字隐式地创建组。此功能可从Linux 4.14获得。
- 套接字通过指示服务地址来加入组,-地址类型字段用作组标识,地址实例字段用作成员标识。
- 组已关闭,-成员只能与同一组中的其他套接字交换消息。
- 每个成员套接字有两个地址:一个由系统绑定的套接字地址和一个服务地址(group:member tuple)由用户绑定。这两个地址都传递给消息接收用户。
- 成员套接字可以选择性地为用户提供其他组成员的加入/离开事件,利用绑定表的服务跟踪功能。
- 成员套接字可以选择性地接收其自己的选播/多播/广播消息的环回副本。
在一个组中,有四种不同的传输模式可用。
- 当发送方指示一个套接字地址作为目标时进行单播。
- 当发送方将服务地址指示为目的地时的选播。如果有多个匹配的目的地,将通过循环选择一个,但也要考虑目的地的负载,这可以从目的地的播发窗口中推断出来。
- 当发送方指示一个服务范围作为目的地时进行多播。如果有多个匹配的目的地,则所有目的地都将收到已发送邮件的副本。
- 当发送方使用没有目标地址的send()原语时广播。所有成员套接字(无论成员实例编号如何)都将接收消息的副本。
- 广播和多播都在可能和有利的情况下利用以太网广播/UDP多播。
即使在不同的传输模式之间,也能保证交付和顺序。除此之外,这意味着所有消息都必须服从端到端流控制。
- 由于目标缓冲区溢出,消息永远不会被丢弃。
- 相同的机制覆盖所有传输模式。
- 点对点和点对多点:“滑动窗口”算法。
- 多点对点:“协调滑动窗口”算法,TIPC独有。