UNIX网络编程之几种套接字地址结构说明

Unix网络编程(一):套接字地址结构 1. 简介在ubuntu下写socket程序时,经常会看到那几个sockaddr的struct, 总是反应不过来它们的区别是什么,因此需要整理并归纳一下这些结构。2. 特定IP协议的套接字地址结构1. IPv4套接字地址结构struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family; //这是套接的协议族,sin 阅读详情
UNIX几种套按字的结构说明

1. IPv4定义的套接字结构,头文件<netinet/in.h>

通常称为英特网套接字地址结构,定义如下
struct in_addr
{
   //32 bit地IP4地址,使用网络字节序,故使用时要调用htonl函数或
   //类似函数将其转换为网络字节序
   in_addr_t s_addr;                 
};
struct sockaddr_in
{
   uint8_t          sin_len;     //结构体长度,占1个字节,unsigned 8-bit
   sa_family_t      sin_family;  //一般固定为AF_INET
   in_port_t        sin_port;    //端口号,一般服务端需要指定,客户端自动分配
   struct in_addr   sin_addr;    //IPv4地址,占4字节,为网络字节序
   char             sin_zero[8];
};
以上结构中,编程时只关注三个字段:sin_family、sin_port、sin_addr
其中sin_port和sin_addr要转换为网络字节序。
2. 通用套接字结构
在实现套接字接口函数的时候,这时候ANSI C标准还没有出来,向函数传递任何参数的类型还不是void*,
如何将套接字地址作为函数参数传递,同时又要兼容各种不同的套接字地址,在1982年的时候采用的一种办法,
就是定义一个通用套接字地址结构struct sockaddr,可以认为struct sockaddr_in结构只是Internet地址结构,
而struct sockaddr还兼容其它地址结构。
定义如下:
struct sockaddr
{
   uint8_t       sa_len;
   sa_family_t   sa_family;
   char          sa_data[14];
};
可以看到,两个结构大小完全一样,做了对齐处理,这就是为何网络编程的时候,调用有地址结构
的函数时,总是要将地址转化为(struct sockaddr*)地址类型,从而消除警告。
3. IPv6地址结构
struct in6_addr
{
   uint8_t s6_addr[16];  //128 bit,使用网络字节序
};
struct sockaddr_in6
{
  uint8_t          sin6_len;   
  sa_family_t      sin6_family;
  in_port_t        sin6_port;
  uint32_t         sin6_flowinfo;
  struct_in6_addr  sin6_addr;
  uint32_t         sin6_scope_id;
};

4. 新的通用套接字地址结构,同样是在IPv6中定义
struct sockaddr_storage
{
     uint8_t          ss_len;
     sa_family_t      ss_family;
};
5. Unix域套接字结构  
头文件<sys/un.h>  
struct sockaddr_un  
{  
    sa_family_t sun_family;/*AF_LOCAL*/  
    char sun_path[104];//路径名字符串  
};  
6 数据链路套接字地址  
头文件 <net/if_dl.h>  
struct sockaddr_dl  
{  
    uint8_t sdl_len;  
    sa_family_t sdl_family;//AF_LINK  
    uint16_t sdl_index;//>0,????  
    uint8_t sdl_type;//IFT_ETHER,ect.????  
    uint8_t sdl_nlen;//接口名称长度  
    uint8_t sdl_alen;//链路层地址长度  
    uint8_t sdl_slen;//链路层selector长度。??  
    char sdl_data[12];//接口名字(从sdl_data[0]开始)和链路层地址(从sdl_data[sdl_nlen]开始)  
};  
UNIX网络编程笔记(11)—UNIX域套接字 UNIX域套接字简介 阅读详情

相关推荐

ERA5数据驱动WRFV4.4实战:单层嵌套配置与关键报错排查指南

本文详细介绍了使用ERA5再分析数据驱动WRFV4.4模式进行单层嵌套模拟的完整实战流程。内容涵盖从数据精准下载、WPS前处理配置、WRF核心参数设置到高频报错的深度排查与解决方案,旨在帮助初学者在有限服务器资源下,高效完成WRF模拟并规避常见陷阱。

q5r6s7的博客 770

UNIX网络编程(6)--套接字地址结构、通用套接字地址结构

#include /**IPV4套接字地址结构**/ struct in_addr { in_addr s_addr;//32位IPV4地址,这是无符号整数,网络字节序 }; /*POSIX只关注sin_family,sin_port,sin_addr,所有网络套接字地质结构都至少16字节*/ struct sockaddr_in { uint8_t sin_len

技术斋 1722

别再手动转格式了!用Java+LibreOffice命令行实现Word批量转PDF(附Docker部署避坑指南)

本文详细介绍了如何利用Java和LibreOffice命令行实现企业级Word批量转PDF的自动化解决方案,包括多线程优化、Docker化部署及常见问题排查。通过代码示例和实战经验,帮助开发者高效处理文档转换需求,提升工作效率并避免常见陷阱。

552

套接字地址结构

大多数套接字函数都需要一个指向套接字地址结构的指针作为参数。每个协议族都定义了它自己的套接字地址结构。这些结构的名字均以sockaddr_开头,并以对应每个协议族的唯一后缀结尾。 1、IPv4套接字地址结构 IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在头文件中。图1给出了它的POSIX定义:   struct in_addr {   in_a

sturdygrass的专栏 1296

linux 内核vxlan收发包流程

1.vxlan口收包处理流程 前面几章详细介绍了vxlan接口的使用,而且已经知道vxlan是 MAC IN UDP中的封装,因此,在解封装之前,一切按照原有流程走,在此复习一下内核收发包流程(驱动层的数据处理这次不再解析,直接从__netif_receive_skb_core开始) #物理网卡处理中断,触发softirq i40e_intr └─napi_schedule_irqoff #i40e softirq把包放到per cpu backlog,触发softirq i40e_napi_p

魏言华的博客 3826

网格聚类 Grid Clustering/Grid-based Clustering

本文主要简单介绍了网格聚类的基本概念,优缺点,应用场景,建模时的注意事项,评价指标,实现方法,python示例和模型参数等。

JasonH2021的博客 4828

第三章 套接字编程(1) - 套接字地址结构

套接字地址结构 1. IPv4套接字地址结构    IPv4套接字地址结构通常称为“网际套接字地址结构”,它以sockadd_in命名,定义在 头文件中。    struct in_addr{        in_addr_t s_addr;     /*32位IPv4地址,网络字节序*/    };        struct sockaddr_in{         ui

sunnet的专栏 930

麒麟V10等保三级配置实战:从auditd规则到PAM锁定的可信基线构建

Linux安全基线是信息系统可信运行的基础能力,其核心在于身份鉴别、访问控制与安全审计三大机制的协同落地。在国产化信创环境中,麒麟V10作为深度适配飞腾/鲲鹏平台的操作系统,其等保三级合规并非简单套用CentOS加固脚本,而是需围绕内核审计(auditd)、可插拔认证模块(PAM)及国产安全增强机制(如kysec)进行精细化编排。技术价值体现在将抽象条款(如GB/T 22239-2019中6.1.2、6.3.3条)转化为可验证的命令行操作,确保登录失败可锁定、关键行为可追溯、时间偏差不致日志失效。典型应用场

weixin_29969209的博客 599

《UNIX网络编程 卷1:套接字联网API》学习笔记——套接字编程简介

UNIX网络编程——套接字编程简介概述套接字地址结构IPv4 套接字地址结构通用套接字地址结构IPv6 套接字地址结构新的通用套接字地址结构套接字地址结构的比较值-结果参数字节排序函数字节操纵函数inet_aton、inet_addr 和 inet_ntoa 函数inet_pton 和 inet_ntop 函数 概述 套接字地址结构可以在两个方向上传递:从进程到内核和从内核到进程。 地址转换函数在地址的文本表达和它们存放在套接字地址结构中的二进制值之间进行转换。 套接字地址结构 大多数套接字函数都需要一个

weixin_45243288的博客 1731

某瓜数据app 获取达人直播商品信息接口 Sign

某瓜数据app 获取达人直播商品列表接口 Sign

自成背后的博客 6039

第五章-AllData集成DataSophon作为数据平台功能

🔥🔥 AllData大数据产品是可定义数据中台,以数据平台为底座,以数据中台为桥梁,以机器学习平台为中层框架,以大模型应用为上游产品,提供全链路数字化解决方案。全新会员商业版 X 微信群:https://docs.qq.com/doc/DVHlkSEtvVXVCdEFo

AllDataDC的博客 1638

《网络编程》Unix 域套接字

Unix 域套接字是一种客户端和服务器在单主机上的 IPC 方法。Unix 域套接字不执行协议处理,不需要添加或删除网络报头,无需验证和,不产生顺序号,无需发送确认报文,比因特网域套接字的效率更高。Unix 域套接字提供字节流(类似于 TCP)和数据报(类似于 UDP)两种接口,UNIX域数据报服务是可靠的,既不会丢失消息也不会传递出错。UNIX域套接字是套接字和管道之间的混合物。

关注校招求职,微信号:job_campus 2058

英伟达 Jetson AGX Thor 官方入门教程(一)系统U盘安装

NVIDIA Jetson AGX Thor开发套件快速安装指南 本指南详细介绍了NVIDIA Jetson AGX Thor开发套件的安装流程。该套件搭载T5000 SoM,为物理AI和机器人应用提供强大支持。安装过程采用全新的JetPack 7.0方案,通过USB闪存盘即可完成BSP(Jetson Linux)安装,无需依赖Ubuntu主机。指南包含硬件开箱说明、两种配置模式(带显示器/无显示器)、详细的ISO镜像下载和USB制作步骤(推荐使用Balena Etcher工具),以及首次启动后的初始设置流

机器人控制与仿真应用 2869

⟅UNIX网络编程⟆⦔套接字地址结构

数据类型 数据类型 说明 头文件 int8_t 带符号8位整数 <sys/types.h> uint8_t 无符号8位整数 <sys/types.h> int16_t 带符号16位整数 <sys/types.h> uint16_t 无符号16位整数 <sys/...

o0o 369

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

《UNIX网络编程卷1:套接字联网API》第3章 套接字编程简介

网络通信的基石套接字地址结构是网络编程的核心数据结构,定义了通信实体的网络标识与端口信息。不同协议族(如IPv4、IPv6、Unix域)拥有独立的地址结构,但均通过通用结构实现类型统一。

SEU123WW的博客 892

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【Linux网络编程】常见 Socket 地址结构

【Linux网络编程】常见 Socket 地址结构 【1】IPv4套接字地址结构 struct sockaddr_in { sa_family_t sin_family; /* AF_INET */ in_port_t sin_port; /* 端口号 */ struct in_addr sin_addr...

CopperSun 技术博客 1083

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

套接字地址结构及大小端笔记

《unix网络编程》第三章笔记 每个协议族都定义了自己的套接字地址结构。这些结构体的名字均以sockaddr_开头,并以对应每个协议族的唯一后缀结尾。 IPV4套接字地址结构,以sockaddr_in命名,定义在头文件中 struct in_addr { in_addr_t s_addr;// uint32_t IPV4 address, network byte ordered }

1219

Unix网络编程【1】-套接字地址结构

声明:本博客参考自《UNIX网络编程卷1》 1.套接口地址结构 1.1 IPv4套接口地址结构 #include<netinet/in.h> struct in_addr{ in_addr_t s_addr; }; struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family...

qq_37981695的博客 334

《UNIX网络编程卷1:套接字联网API》第8章:基本UDP套接字编程深度解析

UDP作为轻量级传输协议,在实时性要求高的场景中具有不可替代的价值。通过本章的系统学习,我们不仅掌握了UDP编程的基础方法,还深入理解了广播/多播、可靠性增强等高级特性。建议读者结合示例代码进行实践,并尝试在真实项目中应用性能优化技巧。下章将深入探讨原始套接字与网络嗅探技术,敬请期待!

SEU123WW的博客 1283

【UNIX网络编程卷1】 第3章 套接字编程简介

3.2 套接字地址结构 大多数套接字函数都需要一个指向套接字地址结构的指针作为参数。每个协议族都定义自己的套接字地址结构,名字均以sockaddr_开头,并以对应每个协议族的唯一后缀结尾。 3.2.1 IPv4套接字地址结构 以sockaddr_in命名,定义在<netinet/in.h>头文件中。定义如下: struct in_addr { in_addr_t s_addr; /*...

无夜之凛冬的博客 339

《UNIX网络编程卷1:套接字联网API》第7章:套接字选项深度解析

本文详细讲解第7章套接字选项,并配有详细源码实战,助你掌握网络编程中socket套接字选项的使用。

SEU123WW的博客 1273

UNIX网络编程学习笔记:套接字编程简介

第三章 套接字编程简介 大多数套接字函数都需要一个指向套接字地址结构的指针作为参数。每个协议族都定义了它的套接字地址结构。这些结构的名字均已sockaddr_开头,并以对应的唯一后缀结束。 1.套接字地址结构 IPv4套接字结构 IPv4套接字地址结构通常称为“网际套接字地址结构”,它以sockaddr_in命名,定义在&lt;netinnet/in.h&gt;头文件中。 以下是网际(I...

weixin_41811826的博客 264

linux socket结构,【Linux网络编程】常见 Socket 地址结构

【Linux网络编程】常见 Socket 地址结构【1】IPv4套接字地址结构struct sockaddr_in {sa_family_t sin_family; /* AF_INET */in_port_t sin_port; /* 端口号 */struct in_addr sin_addr; /* 网络地址 *...

weixin_42300956的博客 350

UNIX网络编程笔记:基本TCP套接字编程

所有客户和服务器都从调用socket开始,它返回一个套接字描述符。客户随后调用connect,服务器则调用bind、listen和accept。套接字通常使用标准的close函数关闭,不过我们将看到使用shutdown函数关闭套接字的另一种方法,我们还要查看SO_LINGER套接字选项对于关闭套接字的影响。大多数TCP服务器是并发的,它们为每个待处理的客户连接调用fork派生一个子进程。我们将看到,大多数UDP服务器却是迭代的。

梅见十柒的博客 1618

Unix/Linux套接字整理(一)--地址结构

前言 读过《UNIX网络编程》的同学都知道,这本书详细介绍了套接字的方方面面,并且给出了每一个结构体、 系统API的实现代码文件。不过技术不断发展,操作系统的内核也不断更新,书中描述相关地址结构体,和 具体实现源文件有时候对不上。 鉴于此,本文基于书上描述,结合linux操作系统进行相关笔记记录,用于阅读的时候,方便查找。 依赖: 书籍《UNIX网络编程》(卷一) 版本3 操作系统平台:Centos8 【Linux Centos 3.10.0-1160.49.1.el7.x86_64】 如果特别说明,本文

后端技术交流 361
上一篇: UNIX网络编程之简易客户端与服务端
下一篇: UNIX网络编程之字节序及转换
ComputerInBook
博客等级 码龄19年 1168粉丝 464原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值