sockaddr_in详细讲解
IPV4套接口地址结构通常也称为”网际套接字地址结构“,它以"sockaddr_in"命名,定义在头文件
<netinet/in.h>中
struct sockaddr_in{
uint8_t sin_len; //整个sockaddr_in结构体的长度
sa_family_t sin_family; //指定地址家族,AF_INET使用的是ipv4协议
in_port_t sin_port; //端口
struct in_addr sin_addr; //ipv4地址
char sin_zero[8]; //不使用设置为0
}
查看详细信息 man 7 ip
in_addr{
uint32_t s_addr; //无符号32位整数 必须为网络字节序
}
通用的地址结构
struct sockaddr{
uint8_t sin_len; //整个sockaddr的长度
sa_family_t sin_family; //指定该地址家族
char sa_data[14]; //由sin_family决定它的形式
}
为什么要有通用地址结构?因为不仅有tcp/ip协议,还有unix域协议。
小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端。
大端法(Big-Endian)就是高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端。
我们知道网络上的数据流是字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节?也就是说,当接收端收到第一个字节的时候,它是将这个字节作为高位还是低位来处理呢?
网络字节序定义:收到的第一个字节被当作高位看待,这就要求发送端发送的第一个字节应当是高位。而在发送端发送数据时,发送的第一个字节是该数字在内存中起始地址对应的字节。可见多字节数值在发送前,在内存中数值应该以大端法存放。
网络字节序说是大端字节序。