首页 > 代码库 > Linux 网络编程详解一

Linux 网络编程详解一

IPv4套接字地址结构
struct sockaddr_in
{
    uint8_t sinlen;(4个字节)
    sa_family_t sin_family;(4个字节)
    in_port_t sin_port;(2个字节)
    struct in_addr sin_addr;(4个字节)
    char sin_zero[8];
};
sin_len:整个sockaddr_in结构体的长度,部分Linux内核版本没有该成员
sin_family:指定该地址家族,一般设置为AF_INET(使用TCP,UDP协议)
sin_port:端口
sin_addr:IPv4的地址
sin_zero:暂不使用,一般将其设置为0

通用地址结构
struct sockaddr
{
    uint8_t sin_len;(4个字节)
    sa_family_t sin_family;(4个字节)
    char sa_data[14];
};
sin_len:整个sockaddr结构的长度
sin_family:指定该地址家族
sa_data:由sin_family决定它的形式

结论:struct sockaddr_in与struct sockaddr结构大小相同
字节序
大端字节序
--最高有效位存储与最低内存地址处,最低有效位存储于最高内存地址处

小端字节序
--最高有效位存储于最高内存地址处,最低有效位存储于最低内存地址处

主机字节序
--不同主机有不同的字节序,如x86小端字节序,,Motorola 6800为大端字节序

网络字节序
--网络字节序规定为大端字节序

字节序说明:一个int类型变量254存储在内存中,如果变量的百位存储于内存地址条上的低地址处,
个位存储于内存地址条上的高地址处(即变量存储序列和内存地址序列相反)这就是大端字节序,反之则是小端字节序。
各个主机的字节序是不同的,但是在网络中传输,必须要一个统一的字节序,这就是网络字节序。

 

Linux 网络编程详解一