计算机网络(3) 字节顺序:网络字节序与IPv4

一.小端与大端

小端(Little endian):低字节保存在内存低地址,高字节保存在内存高地址。

大端(Big endian):低字节保存在内存高地址,高字节保存在内存低地址。

例如(1400(十进制)): 内存地址 0x0000 0x0001

数据(小端) 0x78 0x05

数据(大端) 0x05 0x78

可以看出大端符合人类直觉,我们计算Hex时的表示方法其实是大端的表示。但是一般x86架构的计算机CPU使用的是小端。再举一个例子如下:

如果我们将0x1234abcd 写入到以 0x0000 开始的内存中,则Little endian 和 Big endian 模式的存放结果如下:

地址 0x0000 0x0001 0x0002 0x0003

big-endian 0x12 0x34 0xab 0xcd

little-endian 0xcd 0xab 0x34 0x12

二.网络字节序

因为处理器架构的不同CPU内部使用的字节序也不尽相同,例如x86使用小端字节序,ARM使用大端字节序。为了在网络服务中统一字节序,我们规定网络字节序为大端字节序(Big endian)。因而针对不同的处理器架构,可能在进行网络编程时需要进行网络字节序的转换。

在Linux下inet.h头文件提供了字节序转换相关的辅助函数如下:

cpp 复制代码
#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);

h表示主机序  
n表示网络序
s表示short类型
l表示long类型

htonl表示将主机字节序转换为网络字节序(大端)且入参为uint32。使用转换函数必须特别小心,需要知道自己的平台架构信息,否则转换将导致错误。详细转换函数如下:

cpp 复制代码
uint32_t htonl(uint32_t hostint32);
功能:
  将 32 位主机字节序数据转换成网络字节序数据
参数:
  hostint32:需要转换的 32 位主机字节序数据,uint32_t 为 32 为无符号整型
返回值:
  成功:返回网络字节序的值
cpp 复制代码
uint16_t htons(uint16_t hostint16);
功能:
  将 16 位主机字节序数据转换成网络字节序数据
参数:
  hostint16:需要转换的 16 位主机字节序数据,uint16_t,unsigned short int
返回值:
  成功:返回网络字节序的值
cpp 复制代码
uint32_t ntohl(uint32_t netint32);
功能:
  将 32 位网络字节序数据转换成主机字节序数据
参数:
  netint32:待转换的 32 位网络字节序数据,uint32_t,unsigned int
返回值:
  成功:返回主机字节序的值
cpp 复制代码
uint16_t ntohs(uint16_t netint16);
功能:
  将 16 位网络字节序数据转换成主机字节序数据
参数:
  netint16:待转换的 16 位网络字节序数据,uint16_t,unsigned short int
返回值:
  成功:返回主机字节序的值

三.IPv4

IPv4地址用于在命名和识别一个网络设备,IPv4处于TCP/IP4层模型的网络层,它的长度为32Bits,也就是四字节。 格式形如A.B.C.D。

子网掩码用于分辨两个不同的IP Addr是否处在同一子网段下,通过与子网掩码做与操作判断。如果与操作后得到的结果相同则在同一网段下。例如:192.168.1.111 192.168.1.104子网掩码为255.255.255.0(0xffffff00)与操作后结果都为192.168.1.0故这两个IPV4地址在同一网段下。

三.IPv4分配规则

目前广泛使用CIDR分配规则,可以指定掩码长度。

相关推荐
CHENKONG_CK6 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
花间相见6 天前
【计算基础|网络04】—— HTTP接口实战(下):接口测试、鉴权与跨域排错
java·linux·人工智能·后端·python·计算机网络·postman
云运维笔记6 天前
华为设备IP地址配置全攻略
运维·网络·计算机网络·华为
开开心心就好6 天前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法
渡我白衣6 天前
HttpRequest与HttpResponse的实现
服务器·数据结构·c++·人工智能·tcp/ip·机器学习·caffe
鹿鸣天涯7 天前
护网专项工作 | 勒索病毒防护指南
网络·计算机网络·安全
z20348315207 天前
计算机网络—数据链路层
计算机网络
IpdataCloud7 天前
如何判断游戏注册IP是住宅宽带还是机房代理?IP风险识别看ASN、IDC标签与风险分
tcp/ip·ip
孙严Pay7 天前
代付 VS 纯代付
笔记·科技·计算机网络·其他·微信
酣大智8 天前
华为 VRRP的抢占延迟时间
网络·tcp/ip·vrrp