主机序、网络序的理解
首先明白字节序,字节序是指占内存超过1个字节类型的数据在内存中存放顺序,通常有小端和大端两种顺序类型:
小端顺序:指低字节数据存放于内存低地址处,高字节数据存放在内存高地址处;
大端顺序:指低字节数据存放于内存高地址处,高字节数据存放在内存低地址处。
具体如下例子所示:
1.主机序
不同的CPU在处理数据时有不同的字节序类型,将一台设备的字节序类型称作主机序。
2.网络序
网络上以字节流的方式传输数据,在传输过程的字节序类型称为网络序。其与具体设备的cpu、os类型无关,保证了在不同设备间传输时能够被正确解析。
网络序固定采用大端排序方式。
3.两者转换
为了实现不同设备间的通讯,数据能够被正确的解析,需要进行主机序与网络序两者间的转换。
转换规则:相同字节序的设备进行网络通信时无需字节序转换,反之必须进行字节序转换。
原因为:网络协议规定《发送方网络协议函数接收到得第一个字节是高字节,并将其存放到低地址,然后传输时会首先去低地址取数据的高字节进行发送》。
且不管是发送设备(或者接收设备),取(或者存)数据都是从低地址到高地址进行
例子:小端模式设备的多字节数据在存放时,低地址存放的是低字节,而被发送方网络协议函数发送时会首先去低地址取数据(想要取高字节,真正取得是低字节),接收方网络协议函数接收时会将接收到的第一个字节存放到低地址(想要接收高字节,真正接收的是低字节),所以最后双方都正确的收发了数据。而相同平台进行通信时,如果双方都进行转换最后虽然能够正确收发数据,但是所做的转换是没有意义的,造成资源的浪费。而不同平台进行通信时必须进行转换,不转换会造成错误的收发数据,字节序转换函数会根据当前平台的存储模式做出相应正确的转换,如果当前平台是大端,则直接返回不进行转换,如果当前平台是小端,会将接收到得网络字节序进行转换。
转换接口:htons、htonl 、ntohs 、ntohl
参考:https://www.cnblogs.com/fuchongjundream/p/3914770.html
主机序、网络序的理解相关推荐
- 大端模式小端模式 主机序网络序
1. 主机序 不同的CPU有不同的字节序类型这些字节序是指整数在内存中保存的顺序,这个叫做主机序.最常见的有两种: 1. Little endian:将低序字节存储在起始地址. 即小端 ...
- 大端模式小端模式、主机序网络序、入栈地址高低问题
一.大端模式&小端模式 所谓的"大端模式",是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把 ...
- 通俗易懂说字节序,大小端,网络序和主机序
通俗易懂说字节序,大小端,网络序和主机序 1. 什么是字节序 1.1 为什么字符串不用转序 2. 什么是网络字节序 3. 什么是主机字节序 3.1 主机字节序 3.2 大小端字节序 4. 举例 4.1 ...
- 通俗易懂说字节序,大小端,网络序和主机序(2)htonl和ntohl 源码实现
通俗易懂说字节序,大小端,网络序和主机序(2)htonl和ntohl 源码实现 1. htonl 内核源码实现 1.1 注意:这里有判断,如果本身内存中存储的就是网络序,那就不转 1.1 __bswa ...
- java 主机字节序 网络字节序_主机字节序 与 网络字节序
一.字节顺序 是指占用内存多于一个字节类型的数据在内存中的存放顺序. 计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的.所以,计算机的内部处理都是小端字节序. 但是,网络传输.文件储存. ...
- 程序人生 | C语言字节对齐问题详解 - 对齐/字节序/位序/网络序等(上)
本文首发于 2014-07-21 15:32:28 1. 引言 考虑下面的结构体定义: typedef struct{char c1;short s; char c2; int i; }T_FOO; ...
- 序列化和反序列化二叉树 -----前序,中序,后序,层序
目录 一.序列化和反序列化 1.什么是序列化和反序列化 二.前序遍历 1.序列化 1.问题分析 2.代码实现 2.反序列化 1.问题分析 2.代码实现 三.后序遍历 1.序列化 1.思路分析 2.代码 ...
- 由先序+后序遍历确定序列是否唯一并输出一个中序序列
由先序+后序遍历确定序列是否唯一并输出一个中序序列 @(算法学习) 在前面讨论过如何确定两种唯一二叉树的情况. 先序+中序 后序+中序 中序是必须要有的,因此按照这个提示原则,我们根据根在先序或后序的 ...
- 二叉树的构造(前序+中序)---(后序 + 中序)
二叉树的构造(前序+中序)-(后序 + 中序) 思路:要对前序+中序(后序+中序)的构建树的动态过程要了解,思路比较简单,在了解了这个过程之后,理解下面代码就容易了. 过程 参考图: 前序 + 中序: ...
最新文章
- 移动端导航页面html,swiper4实现移动端导航切换
- 利用Javadoc工具生成api文档
- MVC 3 登录、注销
- EditorGridPanel的网格样式以及编辑属性设置
- js父页面和子页面之间传值
- Java中如何引用文档对象模型_在JAVA中使用文档对象模型DOM经验小结
- 专题导读:大数据整理
- 变更数据推送java_idea 团队成员修改工程后push推送
- 将一个对象相同的属性(不区分大小写)赋值给一个新对象 DataTable的一个简单的扩展...
- iOS开发之UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
- mysql 使用内置函数来进行模糊搜索(locate()等)
- 极域电子教室豪华版v6.0.2021有哪些功能
- 外螺纹对照表_美制螺纹内外径对照表unf
- echarts 基于个性化百度地图的迁徙图
- 微信小程序-tab切换(scroll-view + swiper)
- 计算机控制技术第二章,微型计算机控制技术 赖寿宏版 课件 第二章.ppt
- 各大电商历史价格json后端接口
- Java error 62_java – Maven build和maven-failsafe-plugin – 分叉的VM在没有正确说再见的情况下终止...
- 【CentOS】常用命令
- 手术分级标准目录2020_2020年3月份即将实施国家标准目录(四)