当前位置: 首页 > news >正文

计算机网络:网络字节序

目录

  • 一、字节序
    • 1.字节序概念
    • 2.字节序的理解
      • (1)大端模式存储数据
      • (2)小端模式存储数据
  • 二、网络字节序

一、字节序

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

网络字节序问题

http://www.lryc.cn/news/126048.html

相关文章:

  • 2023国赛数学建模A题思路分析
  • 【Java】常见面试题:网络
  • TTS | VocGAN声码器训练自己的数据集
  • nuxt3--prisma配置
  • 学习ts(一)数据类型(基础类型和任意类型)
  • Qt 之 QPushButton,信号与槽机制
  • MySQL面试题一
  • 【Java】2021 RoboCom 机器人开发者大赛-高职组(复赛)题解
  • 使用electron-vue获取文件夹的路径
  • 剑指Offer14-II.剪绳子II C++
  • 2023企业微信0day漏洞复现以及处理意见
  • 【IMX6ULL驱动开发学习】04.应用程序和驱动程序数据传输和交互的4种方式:非阻塞、阻塞、POLL、异步通知
  • day-21 代码随想录算法训练营(19)二叉树part07
  • 【Vue3】依赖注入
  • Vue 引入 Element-UI 组件库
  • 照耀国产的星火,再度上新!
  • 大语言模型LLM的一些点
  • leetcode810. 黑板异或游戏(博弈论 - java)
  • 算法练习Day48|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III
  • 什么是设计模式?常用的设计有哪些?
  • clickHouse部署
  • Flutter实现倒计时功能,秒数转时分秒,然后倒计时
  • 【hadoop】windows上hadoop环境的搭建步骤
  • 一周在榜9本计算机专业新书
  • CSS变形与动画(二):perspctive透视效果 与 preserve-3d 3d效果(奥运五环例子)
  • [论文笔记]Glancing Transformer for Non-Autoregressive Neural Machine Translation
  • 视觉学习(七)---Flask 框架下接口调用及python requests 实现json字符串传输
  • unity编写树形结构的文件管理页面
  • 基于单片机的家用智能浇灌系统
  • Solr的入门使用