# 物理层
物理层的主要功能是利用物理传输介质为数据链路层提供物理连接,以便透明传送比特流。
# 理解
问题: 两台电脑如何通信?你可能会想到用网线,把网线拨开是几条铜导线。那这几条铜导线又是怎么传输信息的呢?如果给你几根铜导线,你如何设计信息传输的方式?
回答: 可以在铜线两端加上电压。 比如:0 伏维持 1 秒 → 5 伏维持 1 秒 → 0 伏 维持 2 秒 → 5 伏维持 1 秒 → 0 伏 维持 1 秒 → 5 伏 维持 2 秒。这样可以得到下图:
假设: 低电压 0V 的时候就代表数字 0,高电压 5V 的时候就代表数字 1。
这样就能得出 01001011,如果这是二进制,那转化为十进制就是 75。
问题: 现在我们可以传输数字了,那又如何传输字母、符号、文字呢?
回答: 数字与字母、符号、文字做一种联系。例如:ASCLL 码表。二进制 01001011 → 十进制 75 → ASCLL 码表的 K 字母。反过来的流程就是:字母通过码表 → 数字 → 二进制 → 电信号
补充: 传输方式除了网线,常见的还有光纤和无线电(那种带天线的路由器)。光纤线由两根光纤组成,光利用其反射原理在光纤中进行传输。网线通过电压变化传输信号,那光纤线就是光的出现和消失传输信号的。无线电则时以电磁波的形式发送信号(波的频率)的。
TIP
- 码元:承载信息量的基本信号单位。例如:一次 0V 或者一次 5V。
- 比特(bit):计算机专业术语,二进制数字中的位。例如:01001011 为 8bit。
- 比特率:每秒传送的 比特 数,其单位为 bps。
- 波特(Baud):波特率 的单位。波特 本身已是速率,不要说出波特每秒。🤣
- 波特率:每秒传送多少个 码元,其单位为 波特 。
注意:比特 和 波特 是完全不同的概念,比特率 不是 波特率,但有时候 比特率 等于 波特率。例如:0.1 秒传送一次 0V 或者 5V。如果 0V 代表 0 、5V 代表 1,则 比特率 为 10bps,波特率 为 10Baud。如果如果 0V 代表 01、5V 代表 10,则 比特率 为 20bps,波特率 为 10Baud。
# 时钟脉冲
问题: 接下来有个疑问,上图中所表示的二进制是多少?
回答: 01000010。
问题: 再放个非常直观的图,上图中所表示的二进制是多少?是 111111 ?还是 111111111111 ?还是 11111111111111111 ?
回答: 因为图上缺少时间概念,所以无法得知这 5V 到底维持了多长时间,也无法得出结果。
补充: 既然缺少,那么我们就引入时间概念。传输数据的过程中,也传输一条 时钟脉冲。当出现连续多个 0V 或者 5V,也能判断其二进制数量了。
TIP
时钟脉冲 是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号。如上图,一个单位时间内完成 0 和 1 之间的转换。
# 时钟偏移
通过发送一条 数据信号 和一条 时钟脉冲 来完成信息的传递。由于每条线在电阻、长短等物理介质和环境因素存在差异,于是就存在数据发送的快慢。导致时钟偏移,最后就是读取的结果出错。
原本是 01000010 的二进制数据,现在变成了 1000010。如果是在传输速率为 10M Baud 或者更快的网线中,时钟同步就更困难。
TIP
10M Baud,意味着 100 纳秒 传输 1 码元。意味着 数据信号 和 时钟脉冲 的时间差不能超过 100 纳秒。传输速率越快,对时间差的要求就越苛刻。
# 曼彻斯特编码
问题: 如何解决 时钟偏移 现象?
回答: 不再是利用数据和时钟脉冲两条信号,而是将数据和时钟脉冲整合到一条信号中。数据解读方式:根据电压变化来识别成信号。如下图:从高电压到低电压是 0,从低电压到高电压是 1。
补充: 从上图也可以看出,连续的 0 或 1 都能很好表达了。两个码元之间必定有电压跳变,可以方便地利用它作为同步时钟。
疑问: 为啥图中的紫色和黑色(低电压变高电压)不算 1 呢?
简单回答: 两个 码元 为一个 比特,可以把两 码元 当作一个整体,其前后边缘的电压变化是不算的。其实了解了 曼彻斯特编码 的解码过程,就比较清楚了。这个就不展开说明,有兴趣的可以自行查找。
TIP
曼彻斯特编码 的 波特率 是两倍的 比特率。因为两个 码元 才代表一个 比特。
数据链路层 →