linux 高性能读书笔记之通用socket地址
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,####socket网络编程接口socket的地址是结构体sockaddr代码如下struct sockaddr{sa_family_t sa_family;char sa_data[14];}sa_
千家信息网最后更新 2025年02月06日linux 高性能读书笔记之通用socket地址
####socket网络编程接口
socket的地址是结构体sockaddr
代码如下
struct sockaddr{
sa_family_t sa_family;
char sa_data[14];
}
sa_family 成员是地址族类型(sa_family_t)变量。
地址族类型通常与协议族类型对应
1.二者对应表
协议族 | 地址表 | 描述 |
---|---|---|
PF_UNIX | AF_UNIX | UNIX本地域协议族 |
PF_INET | AF_INET | TCP/IPv4协议族 |
PF_INET6 | AF_INET6 | TCP/IPv6协议族 |
二者定义在bits/socket.h头文件,值一样,所以二者经常混用
sa_data成员用于存放socket地址值
但是不同的协议族的地址值具有不同的含义和长度
2.协议族及其地址值 | 协议族 | 地址值含义和长度 |
---|---|---|
PF_UNIX | 文件的路径名,长度可达108字节 |
协议族 | 地址值含义和长度 |
---|---|
PF_INET | 16bit 端口号和32bit IPv4地址 |
PF_UNIX | 文件的路径名,长度可达108字节 |
PF_INET6 | 16bit 端口号,32bit流标识,128bitIPv6地址,32bit范围ID,共26字节 |
問題:14字节的sa_data无法容纳多数协议族的地址值,因此linux定义了新的通用socket地址结构体
struct sockaddr_storage{
sa_family_t sa_family unsigned long int __sa_align; char __ss_padding[128-sizeof(__ss_align)];
}
ssalign:用于内存对齐
3.专用socket地址
问题: 上述通用结构体很不好用,设置与获取IP地址和端口号需要执行繁琐的位操作。
解决:linux为各个协议族提供了专门的socket地址结构体
3.1
UNIX本地域协议族:
struct sockaddr_un{
sa_family_t sin_family; //地址族AF_UNIX
char sun_path[108]; // 文件路径名
} TCP/IP协议族有了两个专用 struct socketaddr_in{ sa_family_t sin_family; //地址族AF_INET u_int16_t sin_port; //端口号,要用网络字节序表示 struct in_addr sin_addr; //Ipv4地址结构体 } struct in_addr{ u_int32_t s_addr;//IPv4地址,要用网络字节序表示 } struct socketaddr_in6{ sa_family_t sin6_family; //地址族AF_INET u_int16_t sin6_port; //端口号,要用网络字节序表示 u_int32_t sin6_flowinfo; //流信息,设置为0 struct in6_addr sin6_addr; //Ipv6地址结构体 u_int32_t sin6_scope_id; //scope_id实验用 } struct in6_addr{ unsigned char sa_addr[16];//IPv6地址,要用网络字节序表示 } 使用说明:所有专用地址类型的变量在实际使用中都需要转化为通用socket地址类型sockaddr(强制转换) 原因:所有的socket变成接口使用的地址参数的类型为sockaddr 4.IP地址转换函数 IPv4:点分十进制字符串 IPv6:16进制字符串 in_addr_t inet_addr (const char * strptr); int inet_aton(const char * cp, struct in_addr * inp); char * inet_ntoa(struct in_addr in);
地址
字节
类型
结构
口号
网络
长度
文件
含义
路径
路径名
专用
不同
变量
字符
字符串
成员
接口
繁琐
不好
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
商城软件开发外包公司哪个好
公司通常如何监控自己的网络安全
550元一个月的服务器
网络安全竞赛怎么获得
社会网络安全绘画
云之翼服务器YS266
网络安全班会ppt课件大学
iptv 服务器架构
网络安全周频道
网络安全教育800字演讲稿
吉林语音网络技术服务
pdms如何调用服务器项目
深圳服务器电源哪家有卖
生活中的网络安全隐患有哪些
深圳软件开发有限公司多少个
中小学家庭健康教育与网络安全
浪潮服务器研究成功
软件开发与设计人才
网络安全法相关法律
数据库字段混淆
滨州包装管理软件开发公司
陕西政务服务器云空间
利用网络技术加强价格监管
漫画网络安全无小事
阿里云服务器漏洞
软件开发项目验收清单
进军工厂软件开发怎么样
服务器 压力
网络安全逻辑框架
网络显示服务器走丢怎么弄