跳转到正文

数据究竟是什么? ​

阶段 0 · 计算机与数据基础 · 第 1 课

电脑 A 想把一个字母 A 发给电脑 B。电脑如何保存这个字母?网线中传播的是什么?收到信号后,另一台电脑又怎样显示 A?我们沿着这个字母的路线,从屏幕一直追到网线的另一端。

字母 A 在发送端编码成 01000001,网卡通过网线传输信号,接收端再把恢复出的数据解释成 A。

1. 从一个字母 A 开始 ​

你对朋友说“我今天很开心”,朋友听到这句话,知道了你的心情。你想表达的意思是信息,表示这层意思的文字是数据。同一条信息可以用文字或声音表达,每种表达都需要共同理解的规则。

计算机也需要规则。ASCII是一套把字符与数字对应起来的约定。例如,字母 A 对应十进制 65。按规则把一种表示转换成另一种表示,叫作编码。

字符ASCII 十进制写成 8 位二进制十六进制
A65010000010x41
B66010000100x42
149001100010x31

表中 0x 表示后面的数字采用十六进制,也就是逢十六进一。字符 1 的 ASCII 数值是 49。把整数一写成 8 位二进制时,得到的是 00000001。两者分别表示字符和数值。

2. 八个开关怎样表示数字? ​

想象一个开关,关用 0 表示,开用 1 表示。二进制的每一位就像这样一个开关。一个比特(bit)有两种可能的取值,两个 bit 就有 00、01、10、11 四种组合。每增加一位,组合数翻倍,所以八位共有 256 种组合,可以表示从 0 到 255 的无符号整数。

八个 bit 组成一个字节(Byte)。在网络速率里,小写 b 表示 bit,大写 B 表示字节。例如,8 MB 等于 64 Mb,这里的 M 都表示一百万。

读出 01000001 ​

十进制的 352 可以拆成 3 × 100 + 5 × 10 + 2 × 1。二进制也有位权,从最右边的 1 开始,每往左一位,权重翻倍。

从左到右的位权1286432168421
0100000101000001

把值为 1 的位置对应的权重相加,得到 64 + 1 = 65。写成 8 位时,左侧补 0 不会改变数值。

实验:拨动 8 个 bit ​

从 A 开始,试着关掉权重为 1 的位,打开权重为 2 的位。十进制值会变成 66,对应的 ASCII 字符会变成 B。

8 位二进制实验

点击任意一位,在 0 和 1 之间切换。按钮下方的数字是这一位的权重。

十进制
65
十六进制
0x41
ASCII 字符
「A」

值为 1 的各位权重之和 64 + 1

载入字符

课后巩固 · 练习 · 单选

已知字母 A 的 ASCII 码是十进制 65。它用 8 位二进制表示时是什么?

3. 数据暂时存在哪里? ​

屏幕上写着 0 和 1。在硬件中,这些值可以由两种可区分的物理状态表示。例如,数字电路可以把较低的电压范围判为 0,把较高的电压范围判为 1。两种状态分得足够开时,小幅干扰仍可能落在原来的判定范围内。

程序运行时,数据经常暂存在内存(RAM)中。以常见的 DRAM 为例,微小电容中的电荷状态可以存储信息,电路会定期刷新它们。中央处理器(CPU)执行程序指令,并根据指令读取或修改数据。在我们的例子中,编码得到的 01000001 可以先作为一个字节放在内存里。

4. 数据怎样进入网卡? ​

发送程序向操作系统提出通信请求。操作系统根据协议组织数据,再通过驱动程序与网卡(NIC)配合。这样,聊天程序可以专注于发送消息,网卡负责与外部介质收发信号。

把以太网帧理解为按规定格式打包的一段数据,就能区分网卡中的两项工作。

网卡功能在这个例子里负责什么
MAC处理以太网帧,包括收发控制和帧的差错检测。
PHY发送时生成适合介质的物理信号,接收时从信号中恢复数字数据。

MAC 和 PHY 描述两种功能,可以集成在同一颗芯片里。这里的 MAC 指媒体访问控制功能,后续课程会讲到它怎样使用 MAC 地址处理帧。

5. 网线上传播的是什么? ​

在简化模型中,我们约定低电平表示 0,高电平表示 1,每位占用相同的时间。这样,数字 01000001 就能用随时间变化的电压来表示。这种可检测的物理变化是信号。

理想二电平波形。8 个等宽时间格依次表示 0、1、0、0、0、0、0、1。

图中中间一段连续保持低电平。接收端如果只看到一条平线,就无法从电平本身判断这段时间有几个 0。它还要知道每位占多久、何时读取,这就是同步要解决的问题之一。

上图使用理想的二电平模型。实际的千兆电口以太网(1000BASE-T)使用四对双绞线和多电平信号。发送端产生的电磁变化沿网线传播,接收端 PHY 根据约定的编码和时序恢复数据。

课后巩固 · 练习 · 单选

在以太网网卡中,哪个功能负责发送适合网线的电信号,并在接收时从信号中恢复数据?

6. 回到接收程序 ​

  1. 发送程序将 A 编码为 01000001,把这个字节交给操作系统发送。
  2. 操作系统组织通信数据,发送端网卡处理以太网帧并产生物理信号。
  3. 信号经网线传播到另一端,接收端网卡从信号中恢复数据并处理帧。
  4. 接收端操作系统把应用数据交给对应程序。接收程序按照共同的字符编码规则,把 01000001 解释为 A。

这是一条简化的数据路线。真实通信还需要携带额外信息,例如帧里的地址和检错信息。此刻先能分清字母、表示字母的二进制数据,以及承载数据的物理信号,就可以进入第 2 课 · 程序、进程、操作系统和驱动,看看应用程序是怎样把这一个字节交给操作系统与网卡的。