网络知识

网络传输数据为什么要以二进制

网络之所以要使用二进制就可以归结为计算机为什么要使用二进制。原因是:


特定的计数方法一定与计数工具是相联系的,人类采用十进制,是与人有10个手指分不开的。而计算机表达和记录数据的原理通常不外乎是磁、光、电。而这些器材通常都有两种最稳定的状态,磁分南北极,光分通断,电分强弱。当然这些两极态中间也有许多状态,但要确定这些状态,器件精度和成本都会增高。所以,计算机明智地采用了二进制,而与计算机相联系的数据网络自然也就采用了二进制。

无论是文本传输还是二进制传输,其实均是将被传输对象转化为二进制字节进行传输的,很多人认为文本传输,顾名思义,就是网络直接传输文本,这是不对的。

无论是文本传输还是二进制传输,均是需要有一定的编码方式的。如果一个被传输对象是utf8格式的字符串,那么无论是文本传输还是二进制传输给客户端,客户端解析也必须使用utf8进行decode来获得该字符串。

而网络传输的数据是“扁平”的,最终需要转化成“扁平”的二进制数据在网络中传输,只有二进制数据才能在网络中传输。

  • 位:(bit)是计算机中最小的数据单位,只能为0或1。
  • 字节:(Byte)是计算机中存储空间的基本计量单位,8个二进制为组成一个字节。

在网络传输数据时,归根结底传送的数据都是二进制,如何将这些二进制数据还原成字节呢?那么需要知道其编码方式,然后根据编码方式反向去还原即可。


那么问题来了:

在网络中传输数据时,最后都是会转化成二进制,但是还原的时候怎么办,比如英文是单字节的,汉字是双字节的,系统怎么识别应该按照单字节还是双字节去还原二进制流?

将文本,音乐,视频转化成二进制的过程,可以看做一种【加密】,而将这个过程反转,从二进制流转化为有实际意义数据的过程则为【解密】。

而加密方法就是我们常说的编码格式。将二进制流转换为原始数据,知道编码格式是必须的,得知的方法有:

  • 根据统计学原理,从二进制数据的本身的特征上猜测编码(如:尝试对文本文件按照从严到松的顺序应用字符编码,认为第一个可以完全解码的字符编码为该文本文件的编码)
  • 其他的相关信息(如:从扩展名猜测文件格式)
  • 额外的协议约定,这个在网络传输中最常见。即在数据流插入编码的相关信息(如在二进制数据前加入一个字节,表示应该用什么方式解码)最广泛应用的UTF8编码里汉字可能是3字节甚至4字节。如果用了UTF-16,大部分字符包括英文都是2字节的。

多字节编码是经过仔细设计的,拿到一个字节,就能知道它应该和以后的几个字节组成一个码点,长度不同的编码没有共同前缀,不会造成歧义。拿UTF8这种变长编码为例:

  • 单字节:必以0开头,(0XXX XXXX),和ASCII一致。
  • 双字节:第一个字节以110开头 (110X XXXX)+(10XX XXXX)
  • 三字节:第一个字节以1110开头 (1110 XXXX)+(10XX XXXX)+(10XX XXXX)
  • 四字节、五字节等等的情况前缀就是几个1加一个0.

所以看第一个字节的前几位就知道应该再读几个字节去解码一个字符了。


问题:数据是如何产生的?又是如何在网络中传递的?比如我在QQ群里输了一段话,这段话是如何传递到群里的其他成员QQ里的。

其实也没那么麻烦,所谓二进制传输,就是只有0 1 。 那么这样就很好理解了。你的数据包被转换成为二进制.。比如01010101,这八个位的二进制就表示一个字节。你的报文会以一大堆的01 发送过去。每个字都是八位的二进制来表示的。报文中有一部分来表示你是谁,你要发给谁。这个需要占用一部分数据包的字节。其他的基本上都可以理解为你的数据内容。就是你所说的输入的一段话。当然了,你的数据如何转换为报文,那是QQ(软件来进行转换的。)

你通过键盘转换成中断的信号发送到电脑,电脑端会接受到软件中,软件会把这些东西转换成电脑方便传输的字节或者转换其他格式的字符串,网卡驱动负责把这些字符串转换成电信号。

你目前可以这么理解:所谓 01 就是电信号通或不通,网线中八芯。其中传输数据的一般只有4芯另外4芯另做他用(POE之类的) (实际传输是通过信号的高低频来确定传输的是 0 还是 1的,太深入的话,,就不是这个问题的意义了。)

传输一个0,就关一下信号,,传输一个1 就通一下信号。

(其实这样不容易被理解, 并且确实也不对. 所以重新解释一下 : 网线里面的几根线会发出 高低电平. 一个高电平等于 1, 一个低电平等于 0) 大概就像我下面这样。当然了,每个高地电平的间隔是固定的,相较于电的速度, 间隔非常非常小. 1010 就像下面这样。

___|=|_____|-|____|=|__|-|

然后服务端,收到这些 0 1 ,再把 01 转换成服务端能理解的数据。 然后再发送给客户端(收到你消息的人或者群)。

然后大家就变成了服务端,收到0 1,网卡转换成固定格式的字符串。然后再由监听固定端口的软件(QQ之类的应用程序)把这些转换成你能看明白的东西。