linux 高性能读书笔记之通用socket地址
发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,####socket网络编程接口socket的地址是结构体sockaddr代码如下struct sockaddr{sa_family_t sa_family;char sa_data[14];}sa_
千家信息网最后更新 2024年09月21日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安全错误
数据库的锁怎样保障安全
中国网络技术协会会长
软件开发工作总结400字
成都栋格互联网科技有限公司
ibm 系列服务器
软件开发基本模型有什么
java软件开发工信部考试
信誉可靠的数据库分布式方案
网络安全周布展准备
云服务器上软件开发
Gilabci导致服务器错误
数据库自动化学习网站
尚米网络技术有限公司面试
2010数据库文件去掉密码
vps服务器1元
高青进销存erp软件开发
软件开发最吃香的职位
河南软件开发服务好的商家
网络安全在我身边心得
电脑服务器主板支持多少cpu
wow一直显示正在登陆服务器
关于创业公司的软件开发
鲜花商城app软件开发
中国移动 网络安全处郑处长
重庆计算机网络安全专业
数据库安全审计大数据
达梦数据库与mysql性能
数据库连接函数的封装
广西飞鸽网络技术
杭州双路机架服务器供应价格
一般财务软件开发