• TCP/IP网络编程之字节序和网络字节序


    一、概要

    本篇文章主要讲解基于.net中tcp/ip网络通信编程中的网络字节序。在自我进步的过程中记录这些内容,方便自己记忆的同时也希望可以帮助到大家。技术的进步源自于分享和不断的自我突破。

    技术交流QQ群:580749909  欢迎交流有问必答,文章尾有个人的微信公众号有兴趣的小伙伴多多关注。

    二、简介

    在此之前我们需要了解清楚几个概念。

    CPU架构:人们常说的x86 x64是一种架构,但是他有32位的和64位的。32位的叫x86 ,后来出现基于它的64位版,就叫x64。

    操作系统位数 :64位的系统是基于64位处理器而来的,所以64位的系统能在64位的处理器上运行,但是不能在32的处理器上运行!

    而因为64位处理器是基于32位的X86而来,所以向后兼容,支持32位的系统!

    情况如下:

    64位处理器(X64):64位系统,32位系统

    32位处理器(X86):32位系统。64位处理器也能跑16位系统。

    只不过进了长模式之后,不再兼容16位指令了而已。开机之后如果没进长模式,还是可以跑16位指令的。

    什么是字节序和网络字节序?

    网络字节序 是TCP/IP中规定好的一种数据表示格式,跟CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。

    主机字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。

     只要是Intel或AMD的x86/x64架构就一定是小端主机字节序。

    三、主要内容

    为什么会有“字节序”的概念,因为有不同架构的CPU所以每种CPU的保存数据方式均不同。

    CPU向内存保存数据的方式有两种,相对应解析方式也有2种:

    大端序(Big Endian):高位字节存放到低位地址。

    小端序(Little Endian):高位字节存放到高位地址。

    整数中0x12345678, 0x12是最高位字节,0x78是最低位字节。因此大端程序中先保存最高位字节0x12(最高位字节0x12存放到低位地址)

    先保存的是最低位字节0x78。从以上分析可以看出,每种CPU的数据保存方式不同。因此代表CPU 数据保存数据方式的主机字节序在不同CPU中,也各不相同。

    大端序系统传输数据0x1234时为考虑字节序问题,直接以0x12、0x34的顺序发送。结果接收端以小端方式保存数据,因此小端序接收的数据编程了0x3412。

    这样传输小端序系统不是没法用了吗?这时候就约定统一处理方式,统一按照大端序来处理就行了。怎么处理呢.net中有专门的函数来处理这个问题。

  • 相关阅读:
    什么是DMI,SMBIOS,符合SMBIOS规范的计算机的系统信息获取方法
    Android init.rc执行顺序
    JVM-类的四种载入方式
    Intellij-创建Maven项目速度慢
    Intellij-工程目录下隐藏不想显示的文件和文件夹
    JVM-类加载机制(Java类的生命周期)
    Git-远程仓库的使用
    JavaSE-反射-获取类或者对象的四种方法
    工厂模式(Factory Pattern)
    Redis-配置认证密码
  • 原文地址:https://www.cnblogs.com/justzhuzhu/p/12129203.html
Copyright © 2020-2023  润新知