sockaddr_tipc分析

python:socket --- 底层网络接口 阅读详情

如果你对TIPC不了解,请参考https://www.kernel.org/doc/ols/2004/ols2004v2-pages-61-70.pdf,以及http://tipc.sourceforge.net(访问可能存在问题)。

TIPC协议使用的套接字地址为struct sockaddr_tipc类型。

在ubuntu 10.04下的/usr/include/linux/tipc.h文件中,我们可以找到struct sockaddr_tipc的定义。

182 struct sockaddr_tipc {
183         unsigned short family;
184         unsigned char  addrtype;
185         signed   char  scope;
186         union {
187                 struct tipc_portid id;
188                 struct tipc_name_seq nameseq;
189                 struct {
190                         struct tipc_name name;
191                         __u32 domain; /* 0: own zone */
192                 } name;
193         } addr;
194 };
和其他套接字类似,family指明了地址使用的协议簇。

addrtype指明了地址类型,addrtype取值如下:

177 #define TIPC_ADDR_NAMESEQ       1
178 #define TIPC_ADDR_MCAST         1
179 #define TIPC_ADDR_NAME          2
180 #define TIPC_ADDR_ID            3

如果取值类型为TIPC_ADDR_NAMESEQ,那么在union addr中需要对nameseq赋值。struct tipc_name_seq定义如下。

 56 struct tipc_name_seq {
 57         __u32 type;
 58         __u32 lower;
 59         __u32 upper;
 60 };
struct tipc_name_seq的lower、upper看起来像是表示一个范围,确实如此,它们表示了一个服务所在的范围。TIPC地址以不同的服务划分,不同节点之间的服务可以相同,为了区分这些服务,服务还对应instance(下文会有说明),而struct tipc_name_seq 的lower、upper正是指明了服务的范围,所以你可以认为struct tipc_name_seqname为发消息时寻找符合要求的服务而存在。

如果说TIPC_ADDR_NAMESEQ为发送消息时寻找服务而存在,那么TIPC_ADDR_NAME就是为绑定服务而存在。struct tipc_name的结构如下:

 51 struct tipc_name {
 52         __u32 type;
 53         __u32 instance;
 54 };
和struct tipc_name_seq中的type一样,struct tipc_name中的type指明了服务类型。

而instance则是该服务区别于其他服务的标识,和上文struct tipc_name_seq的lower、upper对应。

而TIPC_ADDR_MCAST和TIPC_ADDR_ID有什么作用呢?

从字面意思上看TIPC_ADDR_MCAST表明该地址为多播地址,上文中struct tipc_name_seq的lower、upper最多只能让对应同一服务的若干个节点接收消息,而多播应该是和服务无关吧(TIPC_ADDR_MCAST没有用过,也没有了解)。

TIPC_ADDR_ID更是没有了解。

struct tipc_portid的定义如下:

 46 struct tipc_portid {
 47         __u32 ref;
 48         __u32 node;
 49 };

node指明了节点地址,但ref的含义是什么呢,它和struct tipc_name_seq以及struct tipc_name中的type有联系吗,我不知道。

通过tipc-config查看节点信息时可以看到对应于struct tipc_portid的ref,node信息。例如在没有tipc用户程序启动时,运行 tipc-config -nt可以得到如下信息:

Type       Lower      Upper      Port Identity              Publication
-------------------------------- -------------------------- ------------------
0          16781313   16781313   <1.1.1:2111340545>         2111340546 zone
1          1          1          <1.1.1:2111381507>         2111381508 node

由上可以看到,type=0的节点的地址为<1.1.1>,ref为2111340545,type=1的节点的地址为<1.1.1>,ref为2111381507。

注意:值为0-63的type为TIPC保留type,不能被用户程序使用,type=0为配置服务类型(configuration service name type),type=1为拓扑服务类型(topology service name type)。

在struct sockaddr_tipc中我们还遗漏了一个元素,即domain,与struct tipc_name name共同组成struct name的domain。domain的取值范围如下:

 96 #define TIPC_ZONE_SCOPE         1
 97 #define TIPC_CLUSTER_SCOPE      2
 98 #define TIPC_NODE_SCOPE         3
三者的区别请参考 https://www.kernel.org/doc/ols/2004/ols2004v2-pages-61-70.pdf

在TIPC协议中,一台主机为一个节点,一个节点的地址是固定的,初次使用insmod安装tipc.ko后,可以通过tipc-config配置节点地址,但配置过后就不能再更改了,如果需要更改需要通过rmmod移除tipc.ko,然后再修改。

TIPC集群通信学习和和配置详解总结 立即下载

相关推荐

集群服务器通信协议:TIPC简介

主要介绍了集群服务器通信协议:TIPC简介,本文讲解了TIPC协议简介、TIPC协议设计假设、TIPC与INET域socket区别、TIPC的其他的特性等内容,需要的朋友可以参考下

【TIPC】一、介绍

TIPC作为一个内核模块实现,存在于所有主要的Linux发行版中。它可以配置为通过UDP或直接通过以太网传输消息。消息传递是顺序保证、无丢失和流控制的。延迟时间比任何其他已知协议都要短,而最大吞吐量与TCP相当。 Cluster wide IPC service Have you ever wished you had the convenience of Unix Domain Sockets even when transmitting data between cluster no...

weixin_39094034的博客 3758

ms17-010 永恒之蓝漏洞利用+抓包分析过程

一、实验环境: 1、攻击机:Kali 1)攻击工具:msf 2)分析工具:wireshark 3)IP地址:192.168.204.157(自动获得) 2、靶 机:Windows7 1)版本:SP1 2)开启网络共享(SMB协议) 3)关闭防火墙 4)IP地址:192.168.204.150(自动获得) 3、网卡连接方式:Vmnet8(NAT) 二、实验步骤: ...

qq_41976183的博客 6947

【TIPC】八、TIPC Programmer‘s Guide

目录 1. TIPC FUNDAMENTALS1.1. CLUSTER1.2. ADDRESSING1.3. MESSAGING1.4. SERVICE TRACKING2. SOCKET API2.1. STRUCTURES2.2. ROUTINES2.3. EXAMPLES3. LIBTIPC C API3.1....

weixin_39094034的博客 2033

S32K144 ADC硬件触发实战:PDB模块配置与DMA传输全流程解析

本文详细解析了S32K144微控制器中ADC硬件触发的全流程实现。通过配置PDB模块产生精确的定时触发信号,并联动DMA实现转换数据的自动搬运,构建了一个无需CPU干预的高效、低抖动数据采集系统。文章深入讲解了时钟配置、模块初始化、DMA引擎搭建及实战调试技巧,为汽车电子和工业控制应用提供了可靠的解决方案。

weixin_29174141的博客 226

Python爬虫实战:用Selenium+ChromeDriver批量抓取政府网站政策文件(附完整代码)

本文详细介绍了使用Python的Selenium和ChromeDriver进行政府网站政策文件批量抓取的实战技巧。从环境配置、动态页面元素定位到分页机制破解和反爬虫策略,提供了完整的解决方案和代码示例,帮助开发者高效获取结构化政策数据。

weixin_42531710的博客 266

TIPC协议的地址分析

TIPC协议使用的套接字地址为struct sockaddr_tipc类型: [cpp] view plaincopy struct sockaddr_tipc {           unsigned short family;           unsigned char  addrtype;           signed   char 

cf200820082009的专栏 1042

告别‘Duang’的一声:手把手解决RK3588开发板PCIe初始化卡死问题(DTS修改实战)

本文详细介绍了解决RK3588开发板PCIe初始化卡死问题的完整过程,包括问题诊断、DTS文件修改及编译烧写步骤。通过禁用未使用的PCIe硬件资源,有效解决了启动卡死问题,为嵌入式开发者提供了实用的调试方法和经验总结。

weixin_30753873的博客 216

Linux 内核源码分析---套接字

学习记录

学习记录 1383

YOLO26改进策略【YOLO和Mamba】| CVPR 2025:EfficientViM 压缩隐藏状态空间进行通道混合、单头设计减少内存操作,提升目标检测效率与精度

本文记录的是利用模块优化的目标检测网络模型。EfficientViM Block(基于隐藏状态混合器的状态空间对偶性模块) 的设计旨在,提升特征提取效率,同时兼顾全局依赖捕捉与局部细节保留。本文将深入研究的原理,并将其应用到中,通过重构特征提取流程、减少内存绑定操作、融合多阶段特征,增强模型在资源受限环境下的检测性能与速度。EfficientViM: Efficient Vision Mamba with Hidden State Mixer based State Space DualityEfficie

Limiiiing的博客 399

【Halcon 】Halcon 实战:如何为 XLD 模板添加极性信息以提升匹配精度?

本文介绍了Halcon中为XLD轮廓模板添加极性信息的实用技巧。通过先以"ignore_local_polarity"模式创建模板,首次匹配获得位置后,使用set_shape_model_metric运算符结合真实图像为模板注入极性信息(边缘明暗方向)。这种方法弥补了XLD模板初始不支持极性的缺陷,可显著提升后续匹配的精度和抗干扰能力。实验显示,添加极性信息后的模板匹配效果明显优于无极性的匹配结果。该技术特别适用于基于手动绘制或处理后的XLD轮廓创建模板的场景。

songhuangong123的博客 751

tinyhttpd学习笔记(二)socket相关知识

tinyhttpd学习笔记(一)编译错误及运行结果:http://blog.csdn.net/gqb1226/article/details/46844887   该篇博客开始分析相关代码.   一,结构体 sockaddr_in          该结构体的定义在netinet/in.h中定义         short int sin_family;

GQB1226的专栏 969

OWASP-ZAP扫描器的使用

目录 OWASP-ZAP 更新 代理 目录扫描 主动扫描(Active Scan) 扫描结果 生成报告 OWASP-ZAP OWASP Zed攻击代理(ZAP)是世界上最受欢迎的免费安全审计工具之一,由数百名国际志愿者积极维护。它可以帮助你在开发和测试应用程序时自动查找Web应用程序中的安全漏洞。 也可以说ZAP是一个中间人代理。它能够获取你对Web应用程序发出的所有请求以...

谢公子的博客 2万+

Linux-网络编程

网络编程 一、网络基础 1.1-OSI参考模型与TCP/IP参考模型 1.2-TCP/IP协议族 TCP/IP 实际上是一个一起工作的通信家族,为网际数据通信提供通路。为讨论方便可将 TCP/IP 协议组大体上分为三部分: 1.Internet 协议(IP) 2.传输控制协议(TCP)和用户数据报文协议(UDP) 3.处于TCP 和UDP 之上的一组协议专门开发的应用程序。它们包括:TELNE...

wengmq的博客 397

APP爬虫:Airtest的使用和爬取实战详解

Airtest是一个跨平台的自动化测试工具,主要用于移动应用和游戏的UI自动化测试。它支持图像识别、触摸操作、文本输入等功能,能够模拟真实用户的操作行为。此外,Airtest还具备强大的日志记录和报告生成功能,方便开发者进行调试和分析。图像识别:通过截图匹配元素,无需依赖 UI 层次结构。跨平台支持:支持 Android、iOS 和 Windows 应用。简单易用:提供 IDE 和脚本录制功能,降低使用门槛。

数据知道的博客 9619

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Socket的基本操作

socket的基本操作:(1)socket()函数: (2)bind()函数: (3)listen(),connect()函数; (4)accept()函数; (5)socket中的发送与接收函数: (6)close()函数: (7)服务器上调用socket函数: (8)客户端调用socket函数: (9)IP地址转换函数:inet_pton, inet_ntop, inet_add

S1mplify的博客 598

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

tipc协议详解

TIPC协议和实现解析 1, TIPC简介TIPC是爱立信公司提出的一种透明进程间通信协议, 主要适用于高可用(HAL)和动态集群环境. 该软件当前主要由风河(windriver)公司在维护, 主要支持Linux, Solaris 和 VxWorks三种操作系统, 从Linux内核2.6.34开始支持TIPC的最新版本2.0, 不过还有很多协议设计的功能没有实现. 在可信网络环境下, TCP/IP

1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

TIPC协议和实现解析

1TIPC简介 TIPC是爱立信公司提出的透明进程间通信协议,主要用于高可用(HA)和集群系统中。它允许设计人员能够创建可以和其它应用快速可靠地通信应用,无须考虑在其它需要通信的应用在集群环境中的位置。 在可信网络环境下,TCP/IP协议的很多操作是冗余的,例如三次握手,增加了应用程序的通信时间,不利于对时间响应要求比较高的应用,比如处理集群成员节点由于重启,down机等各种原因导致的增加和减少。 TIPC针对可信网络环境,减少了建立通信连接的步骤和寻址目标地址的操作...

sy_123a的专栏 5204

tipc编程

TIPC是爱立信的某个工程师弄出来的,后来开源了。这段时间我琢磨了一下,觉得这个玩意还真不错。TIPC是Transparent Interprocess Communication的缩写,即是进程间通信的一种协议,之所以冠之以Transparent,透明的,因为它发布了一层更为简洁实用的框架,让使用的人不再需要知道某个进程运行在哪一台机子上,就能够和与这个进程通信。TIPC本质上是用socket实

5827

TIPC协议

1. 简介 TIPC是爱立信开源的透明进程通信协议,一般用于集群系统中。 虽然TIPC是基于socket实现的,但是与一般的socket还有所区别。平时我们使用socket,无论是TCP也好,UDP也好,用来标识一对socket的通信,无非是用两个socket的IP地址和端口号。比如使用UDP的socket,要发送一个datagram到另一个socket,需要指定对端的地址,这个地址是由对端设备的IP和端口号组成的。Socket是在内核中进行管理,当内核检测到socket有数据可读时,就会通知拥有这个so

张幺幺的博客——学习记录 1137

TIPC协议及示例

一、概述 透明进程间通信(Transparent Inter-process Communication, TIPC)是一种用于进程间通信的网络通信协议,原本是为集群间通信特别设计的。它允许设计人员能够创建可以和其它应用快速可靠地通信应用,无须考虑在其它需要通信的应用在集群环境中的位置。 特点:网路中服务位置透明,自动发现机制,可靠性,标准套接字接口的支持,无连接,有链接,多播。 在lin...

$好记性还是要多记录$ 8972

socket通讯原理及例程(一看就懂

来源:https://blog.csdn.net/jiushimanya/article/details/82684525 里面有疑问或者不正确的地方可以给我留言对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问: 什么是TCP/IP、UDP? Socket在哪里呢? Socket是什么呢? 你会使用它们吗...

weixin_30617695的博客 809
上一篇: gsoap的使用
下一篇: vmware下网络配置
henujava
博客等级 码龄17年 5粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值