计算机网络:网络字节序

目录

一、字节序

1.字节序概念

字节序:内存中存储多字节数据的顺序。

难道存储数据还要看顺序吗?

yes。内存是按照字节编址与存取的,每个字节都有自己的地址。在存取单字节数据时不需要考虑顺序,因为直接取一个字节就好了。

但存储多字节数据时需要考虑数据的存储顺序,因为不同的cpu架构的存储顺序不同,因此这里需要知道字节序的分类,以及每一类的特点。(数据存储时从低地址到高地址存储,数据读取时从低地址到高地址读取)

字节序分类:

  1. 大端模式(大端字节序):内存的低地址空间存储数据的高位,即低地址存高位
  2. 小端模式(小端字节序):内存的低地址空间存储数据的低位,即低地址存低位

2.字节序的理解

比如这里有一个int 型整数 1,int型占据4个字节(也就是32个比特位)大小的内存空间,它的二进制形式是:

  • 0000 0000 0000 0000 0000 0000 0000 0001

它的十六进制形式是:

  • 0x 00 00 00 01

如图所示是十六进制的表示形式,注意区分高位和低位。

(1)大端模式存储数据

在大端模式中整型1是如何存储的?(以32位为例)

(1)按照大端模式下低地址存高位,低地址会存储00,而这四个字节中的最高地址存储01。

(2)在系统读取这个整型数据时,就会一次性读取出4个字节,然后按照大端模式对数据进行解读,得到正确的数据序列。

(2)小端模式存储数据

小端模式中整型1是如何存储的?(以32位为例)

(1)按照小端模式低地址存低位,四字节的最低地址存储01,四字节的最高地址存储00。

(2)在系统读取这个整型时,就会一次性读取4个字节,按照小端模式解释数据,得到正确序列。

二、网络字节序

(1)网络通信就是两端主机之间进行数据传输,两端主机使用的字节序不一定是相同的,这样就会造成数据错乱的情况。

(2)如果是两台主机之间进行通信,主机A是大端模式,主机B是小端模式。主机A如果要发送一个整型变量1给主机B,发送数据时,数据肯定都是从低地址开始发送的,接收端存储接收的数据时,也是从低地址开始存储数据的。但这样就有了很严重的问题。

(3)看看主机A的发送顺序,从低地址到高地址开始发送:第一个字节发送00,第二个字节发送00,第三个字节发送00,第四个字节发送01。

(4)来看看主机B的接收和存储顺序,接受顺序就是主机A的发送顺序,存储时也是按地址从小到大存储的。主机B的低地址存储00,高位存01。

(5)在主机B读取数据时就会出错了,因为主机B是用低地址来存储低位的。主机B如果要读取这个数据,就会一次性读取出来4个字节,然后按照主机B的字节序进行数据解析(主机B是小端)。然后就出现问题了,按照小端模式对数据进行解析后,得到的数据是这样的:0x 01 00 00 00。完犊子了,直接从1变成了一个很大的数据,这意味着数据会出现二义性。

(6)上面这个过程如果用一个通俗的例子来说就是,主机A说的是汉语,结果主机B把汉语当成英语进行理解,那肯定会出错啊。

(7)这样的问题是很严重的,因此网络通信中,要求全都使用网络字节序,而网络字节序是大端字节序。

相关推荐
白帽黑客26595 分钟前
入门网络安全工程师要学习哪些内容【2025年寒假最新学习计划】
linux·python·web安全·网络安全·系统安全·密码学·ddos
TIANGEKUAJING13 分钟前
怎样才算是高效的企业组网?
网络·企业组网·组网·企业网络·公司网络
TIANGEKUAJING17 分钟前
企业网络构建:如何满足业务需求与提升效率
网络·sd-wan·企业组网·sd-wan组网·sdwan·企业网络
陈小也~28 分钟前
VMware虚拟机Ubuntu 18.04版本 磁盘扩容
linux·ubuntu
-指短琴长-1 小时前
Linux从0到1——线程自定义封装
linux·运维·c++
22037271 小时前
#思科模拟器&通过服务配置保障无线网络安全&Radius
网络·安全·web安全
网络安全-杰克1 小时前
常见网络安全设备默认口令
网络
Beekeeper&&P...1 小时前
AddressBookController
java·前端·网络
信创极客2 小时前
Linux系统内存带宽读写性能测试工具Stream
linux·运维·服务器
monstercl2 小时前
【Linux】shell语法
linux·运维