一、概要

本篇文章主要讲解基于.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中有专门的函数来处理这个问题。

TCP/IP网络编程之字节序和网络字节序的更多相关文章

  1. 【TCP/IP网络编程】:01理解网络编程和套接字

    1.网络编程和套接字 网络编程与C语言中的printf函数和scanf函数以及文件的输入输出类似,本质上也是一种基于I/O的编程方法.之所以这么说,是因为网络编程大多是基于套接字(socket,网络数 ...

  2. [C#网络编程系列]专题一:网络协议简介

    转自:http://www.cnblogs.com/zhili/archive/2012/08/11/NetWorkProgramming.html 因为这段时间都在研究C#网络编程的一些知识, 所以 ...

  3. Python网络编程(OSI模型、网络协议、TCP)

    前言: 什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系. 在数学上,网络是一种图,一般认为专指加权图. 网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类 型的实际问题中抽象 ...

  4. 一个项目看java TCP/IP Socket编程

    前一段时间刚做了个java程序和网络上多台机器的c程序通讯的项目,遵循的是TCP/IP协议,用到了java的Socket编程.网络通讯是java的强项,用TCP/IP协议可以方便的和网络上的其他程序互 ...

  5. Linux IPC tcp/ip socket 编程

    模型 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include < ...

  6. 子网划分、变长子网掩码和TCP/IP排错__子网、掩码、网络汇总

    1.如何创建子网? 要创建子网,就需要从IP地址的主机部分中借出一定的位,并且保留它们用来定义子网地址.这意味着用于主机的位减少,所以子网越多,可用于定义主机的位越少. 2.子网划分的好处: 1)缩减 ...

  7. Linux 网络编程基础(1)--网络相关的数据结构及转化函数

    在Linux下进行网络编程,使用的语言一般为C.就个人感受而言,在Linux下进行网络程序的编写,重要的不是代码能力要多强,而是对Linux的网络编程思想的理解和对Linux网络数据结构的掌握.如果想 ...

  8. 第三模块:面向对象&网络编程基础 第2章 网络编程

    01-计算机基础 02-什么是网络 03-五层协议详解 04-传输层详解 05-什么是Socket 06-基于socket实现简单套接字通信 07-在简单套接字基础上加上通信循环 08-客户端与服务端 ...

  9. python基础(29):网络编程(软件开发架构、网络基础、套接字初使用)

    1. 软件开发架构 我们了解的程序之间通讯的应用可分为两种: 第一种是应用类:qq.微信.百度网盘.腾讯视频这一类是属于需要安装的桌面应用. 第二种是web类:比如百度.知乎.博客园等使用浏览器访问就 ...

  10. linux网络编程基础--(转自网络)

    转自 http://www.cnblogs.com/MyLove-Summer/p/5215287.html Linux下的网络编程指的是socket套接字编程,入门比较简单. 1. socket套接 ...

随机推荐

  1. PHP xml_get_current_line_number() 函数

    定义和用法 xml_get_current_line_number() 函数获取 XML 解析器的当前行号.高佣联盟 www.cgewang.com 如果成功,该函数则返回当前行号.如果失败,则返回 ...

  2. PHP mysqli_stat() 函数

    创建 SSL 连接: <?php 高佣联盟 www.cgewang.com // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli_connect(& ...

  3. IC行业常见用语

    https://www.cnblogs.com/yeungchie/ Active Devices 有源器件 MOSFET Metal-Oxide-Semicoductor Field-Effect ...

  4. C/C++编程笔记:C语言错误处理方法!如何更好地处理程序的错误?

    C语言被忽视的一些小东西!C语言基础教程之错误处理. C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据.在发生错误时,大多数的 C 或 UNIX 函数调 ...

  5. P5468 [NOI2019]回家路线 斜率优化 dp

    LINK:回家路线 (文化课 oi 双爆炸 对 没学上的就是我.(我错了不该这么丧的. 不过还能苟住一段时间.当然是去打NOI了 这道题去年同步赛的时候做过.不过这里再次提醒自己要认真仔细的看题目 不 ...

  6. mit-6.828 Lab01:Booting a PC Part2 理论知识

    Part 2 目录 Part 2 学习理论知识 反汇编 扇区 BIOS 启动过程总结 Boot loader启动过程总结 A20 gate 读boot/boot.S 和 boot/boot.c源码 - ...

  7. 原来写个Vue 首页就这么简单

    全栈的自我修养: 为我们的项目添加首页 You can never replace anyone. What is lost is lost. 每个人都是无可替代的,失去了便是失去了. 前言 上篇文章 ...

  8. qt中使用dll库的方法

    使用dll文件时首先通过dll文件导出符号表,如下面介绍 1. 制作def 直接调用 pexports mylib.dll > mylib.def 2. 生成a 需要mylib.dll和myli ...

  9. javaweb 测试

    题目要求: 1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分) 2登录密码:要求显示“• ”或“*”表示输入位数,密码要求八位以上字母.数字组成.(1分) 3性别:要求用单 ...

  10. Spring Cloud 系列之 ZooKeeper 注册中心

    什么是注册中心 服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串.路由信息等.服务注册中心是微服务架构中最基础的设施之一. 注册中心可以说 ...