《计算机网络》第6章-物理层(a.基本概念)

       在计算机网络的世界中,物理层可以说是最底层,它位于TCP/IP五层结构中的最下层,主要负责比特流(bit stream)在物理媒介(如:电缆、光纤和无线电波等)上的传输工作,将比特流从发送方传输到接收方。虽然物理层不涉及任何的数据处理或网络协议,但它却是整个网络通信过程中不可或缺的一部分,因为物理层的通信利用了物理现象,而这些物理现象是可以被外部感知和观测的。如果两个主机节点之间使用双绞线进行通信,剖开双绞线,随着数据在两点之间传输,金属导线上的电压也会出现变化,而这些变化就是物理现象,就算不使用双绞线,改为Wi-Fi进行通信,在某个频段(比如:2.4GHz)上也会有电波的传输。

       计算机中的比特数据会通过物理层转化为客观物理现象,比如:光或者电,而它们会透过物理媒介传输到对端网卡,再经过翻译转换为操作系统内存中的比特数据,主机之间的通信就完成了。如果这样看,物理层还挺简单的,主机之间用电线一连就成了。可是你有没有想过,在电线上传输的信号是有含义的,它和家里220V的交流电完全不同,不是连一根线那么简单的。在计算机科学中,比特(Bits)是信息的基本单位,只有两种状态:01,而在物理媒介参与的情况下,01该如何表示呢?如果能够用某种物理现象表示数据,对端主机该怎样理解呢?不考虑物理现象传输的带宽容量,如何能保证传输的信号不失真呢?这些工作都是物理层负责的,这么看来物理层就没有这么简单了吧。

       虽然已经了解到物理层挺复杂,但是还需要问:物理层进行通信要解决哪些问题呢?

       计算机网络中的物理层就像联通计算机科学和物理学的桥梁,如果用计算机专业的视角来看整个物理层,一定会觉得很神秘,一时间会摸不着头脑,但如果站在使用者的角度去看,其实物理层需要解决的问题主要有两个,即信号的编(解)码和传输。前者探讨如何将比特转换为可以在物理媒介上传输的信号,后者解决如何定义和标准化物理接口,以及如何在物理媒介上有效的传输信号,这涉及到信号的衰减、噪声和失真等问题。

       虽然本文是探讨物理层的基本概念,但是物理层无法脱离现实存在于虚空概念中,所以笔者选择使用双绞线作为物理媒介的以太网为参考,这样让大家更有体感一些。

信号的编(解)码

       比特数据由0和1组成,而物理现象,比如:电压或者光波该如何表示01呢?1伏特表示10伏特表示0吗?显然不是。虽然如何定义和量化这些物理现象取决于规范设计,但我们也希望这些规范简单且易于操作。比特数据到物理现象的过程称为调制,反之,称为解调,接下来使用以太网作为示例,先来看看如何使用电压来定义01

使用电压来描述比特

       以一节五号电池为例,它有正极和负极,二者之间的电势差为1.5伏特,当用导线连接正负极时,由于电势差的存在,会产生电流,如果导线中有一个灯泡的话,它应该会亮,这代表电流在做功。同样的道理,主机到主机之间通过导线连接,当一方处于高电势,而两者之间又存在回路,就会产生电流,依靠电流就能实现通信。

       电流在导线中的传输速度近似光速,所以能够以忽略不计的时间延迟将电流传递到对端,但对端的主机不能像灯泡一样亮一下就完了,它需要理解电信号并将其还原为比特数据,这就要求在电压上做些文章了。还是以五号电池为例,如果使用两个五号电池,分别将其负极和正极接地,即电势为0,那么分别联通二者的正极和负极,就会产生正负电压,该过程如下图所示:

       如上图所示,如果联通左侧的开关,对端主机就会接收到正电压,我们可以将其定义为收到1,如果联通右侧的开关,对端主机就会接收到负电压,也就是收到比特数据0,可以想象,左右两个开关在同一时刻不能全部联通。从AB的通信也能看出,双绞线不是一根简单的导线,如果只考虑单向通信,至少需要两根导线,且它们之间必须绝缘,而一旦需要两端相互通信,就需要再double,也就是至少四根导线,A的发送需要与B的接收相连,如下图所示:

       可以看出,计算机通信时,在物理层,发送和接受完全独立,天生就是全双工的。使用正负电压就可以将比特数据的0和1进行很好的描述,比如:正电压一次,负电压一次,就代表二进制的10,感觉也没有那么困难嘛。细心的同学可能已经看出问题了,按照正负电压的方式,该如何表述连续的1或者0呢?这就引出了一个关键问题:对信号进行度量时间的设定。如果想要上述电压描述比特的方式能够走通,就需要约定发送和接受两端对于电压度量的时间间隔,假设是1秒,也就是每次正负电压给定的单位时间必须是1秒,不多也不少。这样二进制11000就变成了,正电压持续2秒,负电压持续3秒。使用约定时间间隔的方式看似能解决度量问题,不过随着信号传递的延迟以及时间度量的误差,该方法坚持不了多久就一定会出问题。

       看来从比特数据到正负电压没有那么容易,不过关键问题已经被挖掘出来了,就是传递的物理信号该如何进行度量,即如何调制信号。

调制比特到信号

       如果将比特原本的含义翻译为信号,那只能称之为转换,但如果能够在翻译的过程中加入其他信息,就如同鸡尾酒一般,这才能被称为调制。信号传输时,就需要考虑信号在对端如何度量,对端在测量电压和电流时,必须要判断出每个比特的界限在哪里。这就是之前我们遇到的那个关键问题。

       简单做法是在已有数据传输的导线基础上再增加一根导线,用它来发送一组区分比特间隔的信号。这就需要在传输数据时将时间间隔也同步传递过去,不过两条线路一旦不同步,时钟偏移了,数据就全乱了。难道这无解了?不会的,既然在物理层,那就利用一些物理特性,如果说单开一条导线是计算机学科的线性思维,那利用波的叠加就实属物理学的高维理论了。

       通过波的叠加,将数据信号和时钟信号叠在一起,这就仿佛在比特数据之水中撒入时间之蜜,生成的信号如同调制出来的蜜水一样,即解渴又解馋。该过程如下图所示:

       如上图所示,需要发送的比特数据为1010,时钟信号表示度量的间隔,从负电压到正电压如同嘀嗒的一跳,伴随着周期性的“跳跃”与数据信号进行叠加信号就是调制出来的结果。发送方的时钟是稳定的,调制信号时只需要用这把尺子去度量数据信号,就能比对着得到叠加信号。观察叠加信号,会发现它是不断变化的,在任何一个时间间隔中都有正负电压的变化,比如:比特1,从正电压变为负电压,比特0,从负电压变为正电压,这就代表着始终采用变化的电压或者说电压变化的趋势来描述0或1,而不是简单的采用静止的正负电压。

       比特数据的01,对应到电压上就成了变换的趋势,不论是01,都包含了电压的变化。因此接收方可以通过度量电压变化周期从叠加信号中分离出发送方的时钟信号,再依据时钟周期还原出数据信号,也就是比特数据了。

       采用叠加方式进行数据传输的好处有很多,如果需要提升传输数据的带宽,就可以选择在单位时间里向对端发送更多的数据信号,这就会以更密集的时钟信号向对方发送数据,从物理角度看,就是信号频率变得更快。只需要两端设备的工作频率上限能够支持,数据就可以正常传输,从外界来看,如果传输的网速比较慢,设备工作频率就比较低,如果网速处于满载状态,设备就处于高频工作状态,网卡的灯就猛闪。

       讲到这里,回忆一下数据链路层-以太网 中介绍以太网协议时提到的8个字节前导码,连续7次重复的byte数据10101010,目的就是让接收端能够有足够的窗口识别出时钟周期,所幸调制一个帧所用的时钟周期是一致的。

解调信号到比特

       对端网卡的RJ45接口接收到传递过来的叠加信号,需要根据信号进行一段时间观察,从中找出变化的周期,通过对前导码的分析,能够很快的确定时钟间隔。当接收到前导码最后一个字节,也就是SFD时,一旦出现连续的两个1,就代表之后的信号是正文了,该过程如下图所示:

       如上图所示,已知不论是0或者1,正负电压一定会发生变化,只是变化的方向不一样,0是从负电压变为正电压,而1刚好反过来。两次变化的时间间隔就在传递着时钟信号的含义,通过一次度量,就能大致算出时间间隔,也就知道了频率(每秒变化的次数)。连续7个字节,每个字节有8次变换,一个帧能够让接收方进行至少56次以上的观察,也就足够从叠加信号中准确的分离出时钟信号,从而获得数据信号,最终得到比特数据。

       在帧的尾部是4个字节的FCS,它是由发送方生成的,目的就是用来检查因噪声导致波形紊乱而产生的数据错误。接收方会通过收到的数据进行计算,然后与FCS对比,判断数据是否有错误,如果发现错误,直接丢弃该帧。如果帧被丢弃了,帧所包含的IP分组也就不存在了,IP分组中的报文更是无从谈起,而数据传输的可靠性,就需要(上层)传输层的TCP协议来保障了。

       掌握了信号如何进行调制,解调它也显得容易许多,不过这么复杂的工作,是网卡哪一部分来完成的呢?答案就是MAU。

打碟能手MAU

       MAU负责调制数据和解调信号,以数据发送为例,在之前的数据链路层中介绍MAC时,用过一张图:

       可以看到MAC将需要发送的帧,此时还是比特数据,交给MAU模块,而后者将比特数据调制成叠加信号,随着有规律的连接和断开RJ45接口上的开关,就如同发报机一样,将信号发送到物理媒介(双绞线)中。

       如果以发送比特数据1为例,它需要传输的信号是在一个周期内从正电压变为负电压,这就需要MAU模块先接通正电压导线的开关,然后断开的同时再接通负电压导线的开关,变换过程如下图所示:

       如上图所示,在一个周期中,两个开关均会发生连接和断开,只是面对传输的数据是0或者1时,操作开关的顺序有所不同而已。可以把这两个开关想象成DJ所用的碟,刚好一边一个碟,MAU在调制数据进行发送的过程就如同DJ在打碟一样。打碟的频率越快,曲调变化就越激烈,这与MAU发送数据也类似,频率和网络传输带宽成正比,不过频率越高,损耗越快,就好比Wi-Fi信号一样,2.4GHz速度慢,可是覆盖面广,5GHz速度快,但穿墙能力弱。

       MAC将帧交给MAU进行发送,MAU会将比特数据与时钟信号进行调制,产生的叠加信号会如同DJ打碟一样操作发送线路正负电压的开关,高速的“搓碟”,将信号发送到网络。

信号的传输

       MAU模块生成叠加信号,按照约定向网卡的RJ45接口施加电压,电信号会沿着插在接口上的双绞线到达对端的RJ45接口,并被对端的MAU模块感知和度量,最终电信号解调为内存中的比特数据。信号传输离不开接口与物理媒介,以太网常见的接口是RJ45,物理媒介为双绞线。

传输接口(RJ45)

       RJ45,其中RJ表示已注册的插口,45表示序列,该接口是一个8针的接口,主要用来连接以太网。RJ45接口的8针会连接到双绞线中的不同导线,其中1236号线负责信号的发送和接受,如下图所示:

       如上图所示,主机节点Node上插了一块网卡,网卡的MAU模块按照正负电压发送信号,其中12号线用来发送本机正负电信号,36号线负责接收对端的正负电信号。如果AB两台主机装备了相同的网卡,那相连之后,如果A的发送线路连接到B的发送线路,AB对着吼,信号不就无法收到了吗?的确如此,所以要求A的发送线路与B的接收线路相连,同样,A的接收线路与B的发送线路相连。RJ45接口是规范,因此很难做更改,那就选择接口与双绞线的接法上作调整。

       一根双绞线有两个水晶头,只需要其中一个选择交叉反接,就可以实现两台以太网设备之间的正确连接,如下图所示:

       如上图所示,直接一一对应的接法称为MDI直连,而进行交叉的接法称为MDI-X交叉,左侧集线器的RJ45接口插入的就是采用MDI-X交叉接法的水晶头。两端设备的接口不变,只是在水晶头与双绞线的接法上作调整即可。

       RJ45接口在MAU模块的指挥下,向1和2号线路发送正负电信号,同时接口将3和6号线路接收到的正负电信号传递给MAU模块进行解调。两端RJ45的连接离不开双绞线,以及双绞线水晶头的交叉接法,虽然使用双绞线传输电信号从电气特性上看与普通导线传输家用电相似,但实际上要比后者讲究和复杂的多。

传输介质(双绞线)

       使用导线传输信号时,信号无外乎是方波或正弦波,这些在导线中传递的波,本质是一种能量,它会随着传输而衰减,导线越长,衰减越严重。如果信号(或者波)的频率越高,虽然带宽载荷更大,但是更容易损失能量,信号变化剧烈的部分,其拐角就会变缓,再加上噪声的影响,信号再进一步失真。

       信号一旦失真,对端解调时就有概率出现对01的误判,这就是产生通信错误的原因。MAU将信号转换为比特数据,随后将比特数据交给MAC模块来完成帧的生成,失真信号解调出来的帧大概率无法通过对FCS的检查,出错的帧会被丢弃,虽然TCP层面可以通过重传来保证数据不丢,但重传会引发TCP的拥塞控制,表象上看就是网速变慢。

       可以看到,如何避免或者减少噪声,是传输介质需要考虑的,对于噪声少的传输介质,它能够更好的服务网络上层,使数据流转变得更加通畅。双绞线包含了8根线,两根线为一组缠绕在一起,目的就是为了抑制噪声。

       金属导线进行信号传输时,噪声产生的原因是导线周围的电磁波,当电磁波接触到金属导体时,会产生电流,一旦此时导线中有信号传输而传输方向与产生的电流相反,就会导致信号产生失真。影响导线的电磁波分为两种,一种是外部设备泄漏出来的,另一种是内源性噪声。

       先看一下外部泄漏的电磁波,当外部电磁波与网线作用,会产生感应电流,如果我们学过高中物理,那这个物理现象应该耳熟能详,即导线切割磁感线,会产生感应电流。双绞线会将两根线进行缠绕,如果只看一根线,它在磁场下的分布是螺旋状的,如下图所示:

       如上图所示,螺旋的线,各段会产生相反的感应电流,这就使得噪声被抵消了。螺旋的间隔要求在13mm以内,材质好的双绞线螺旋更均匀,间隔更小,线材使用更多,噪声会更小,从而性能更好。

       接下来是内源性噪声,电流通过导线,也会产生磁场,虽然磁场很小,但是它也会形成影响其他导线的噪声。内源性噪声也被称为串扰,要抑制这种噪声,关键在于双绞线的缠绕方式,4对导线的间隔要保有一定差异,用来抵消产生的噪声。

       双绞线应对外部电磁波和内源性噪声,采用了两根线缠绕为一组,组与组再缠绕的方式来抑制噪声,可以看到相比导线传输家用电确实复杂很多。线材制作工艺的提升也能支撑更高频率的信号进行传输,更高的频率意味着更高的带宽。双绞线一般使用类别(Category)来进行区分,示例图中的双绞线就是超五类线,一般常见的类别如下表:

类别 带宽 频率
CAT-5,五类 100Mbit/s,百兆 125Mhz
CAT-5e,超五类 1000Mbit/s,千兆 125Mhz
CAT-6,六类 10000Mbit/s,万兆 250Mhz
CAT-7,七类 10000Mbit/s,万兆 600Mhz

       虽然双绞线有不同的类别,但是它是支持向下兼容的,如果网卡是百兆的,使用五类线就够了,你要使用六类线也没有问题。虽然向下兼容很好,但反过来就不行了,比如:千兆网卡使用五类线,那就亏了,最高只能跑到百兆网速,所以我们在布网时不仅要关注网口速率,也要注意网线的类别,缺一不可。

results matching ""

    No results matching ""