26字节序
网络通信
主机---主机
主机---服务器
主机---服务器---主机
主机--主机
主机---服务器
主机---服务器—主机
网络字节序 -- 使用大字节序
#include <arpa/inet.h>
主机序转网络序
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
网络序转主机序
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
网络通信的数据使用大字节序,但存储在主机上是小字节序
大字节序(大端):数据的高位保存在内存高位
小字节序(小端):数据的低位保存在内存高位
注意:大小字节序 由 CPU 决定,和 操作系统无关,所以我们的个人PC 一般是 X86
CPU : 小字节序
PPC 型 CPU: 大字节序
例子:
小字节序: int x = 0x12345678
它在内存里面存储方式: 0x78 0x56 0x34 0x12
char *pArr;
pArr = (char*)&x;
pArr[0] = 0x78
pArr[1] = 0x56
pArr[2] = 0x34
pArr[3] = 0x12
解析:
pArr , pArr+1 都是地址,那个大?
--> pArr 对应的是内存的低端(相对pArr+1), pArr+1对应的内存的高端
--> int x, 数据的低位存在低端内存, 高位存在高端内存
--> x 占 4个字节,这四个字节的地址分别是 pArr, pArr+1,pArr+2,pArr+3
--> pArr 这个字节的内存存的是 x 的低位,也就是 0x78
--> pArr+3 这个字节的内存存的是 x 的高位,也就是 0x12
我们malloc一片内存
char *pBuf = (char*)malloc(256) = (分配的地址为)0xFFFF1000
& (pBuf[0]) = 0xFFFF1000 数据的高位,放在内存的地位
& (pBuf[1]) = 0xFFFF1000 + 1
网络字节序: 使用大字节序
TCP 通信: 面向连接的,可靠的通信方式
--> 建立连接,没发送一条消息都需要对方确认收到,否则重发
UDP 通信: 面向无连接的,不可靠的通信方式
--> 不建立连接,只管发送,发送完了就不管了
PF_INET protocol family --> IPV4 协议
AF_INET address family
两者值一样,意义不同