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

两者值一样,意义不同

原文地址:https://www.cnblogs.com/gd-luojialin/p/9216034.html