计算机网络(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分配规则,可以指定掩码长度。

相关推荐
忆源2 分钟前
SOME/IP-SD -- 协议英文原文讲解9(ERROR处理)
网络·网络协议·tcp/ip
低头不见6 小时前
tcp的粘包拆包问题,如何解决?
网络·网络协议·tcp/ip
古希腊掌握嵌入式的神16 小时前
[物联网iot]对比WIFI、MQTT、TCP、UDP通信协议
网络·物联网·网络协议·tcp/ip·udp
鹅肝手握高V五色17 小时前
Wireshark入门教程:如何抓取和过滤网络数据包
websocket·网络协议·tcp/ip·http·网络安全·https·udp
老六ip加速器18 小时前
如何改电脑网络ip地址:一步步指导
网络·网络协议·tcp/ip
self-discipline63420 小时前
【计网速通】计算机网络核心知识点与高频考点——数据链路层(二)
网络·网络协议·计算机网络
网络抓包与爬虫21 小时前
Wireshark——抓包分析
websocket·网络协议·tcp/ip·http·网络安全·https·udp
仙女很美哦1 天前
Flutter视频播放、Flutter VideoPlayer 视频播放组件精要
websocket·网络协议·tcp/ip·http·网络安全·https·udp
路由侠内网穿透1 天前
本地部署开源流处理框架 Apache Flink 并实现外部访问
大数据·网络协议·tcp/ip·flink·服务发现·apache·consul