导读
作为一名从事多年的软件开发人员,还是对于网络协议栈的理解太少。于是,最近抽空瞎鼓捣琢磨一番,重新理解一下网络层协议,本篇主要是对于 OSI(Open System Interconnect) 七层协议中最底层(绝大多程序员不关心的一层,可能实际上也不会用得着)的物理层协议进行一番理解后的梳理和总结。
(本篇不是严谨的学术性的文章和探讨,仅仅帮助理解。如有错误,还请不吝赐教。)
通信的本质
互联网的本质是将若干台计算机组织在一起,组织在一起干嘛呢?当然是通信啦。在分析计算机如何通过网络协议通信之前,我们先通过人与人之间的交谈这种最直观的通信方式,来感受整个过程的要点。
首先说话者经过大脑处理信息,然后发送出去,通过神经传导到喉咙,控制喉咙震动、震动在空气中进行传播、传递到耳膜后感受到震动、震动信息最后通过神经传入听者大脑。
因为我们主要研究的是物理层的通信协议,对于说话本身内容,我们并不讨论和关注,因此,只考虑说话内容如何传递。接下来从以上过程,我们来看看通信的要点有哪些:
1. 两种角色
这里有两个角色,一个发送者(说话者)一个接收者(听者)。这里分为了几种类型:
【单工通信】比如一个聋子对一个哑巴说话,因为只能一个说,一个人听。
【半双工通信】
领导跟你说话的时候,你不准打断,你先听,等领导问你问题后,你再回答领导,此时领导听你说。这种同一时间只能一个人说。
【全双工通信】
你说你的,我说我的,两个人吵架的时候就是如此。
除了发送接收者分类,还有一种在通信里面是按照目的地范围进行分类:
【点对点】
你只跟一个人说悄悄话,不给其他人听。
【广播】
你在街上大喊,大家都能听得到。
2. 信号规则
人与人说话是通过震动频率这种方式来传递信息了,说话的通信是基于对震动频率(音调高低)和振幅(音量大小)进行有机排列组合来达成的,这种控制是人的本能,异常精妙。
大脑命令喉咙准备合适的震动方式,既不能不能尖叫,也也不能低鸣,否则听不到或者听的刺耳,更加也不能低于和超过人可接受到的震动频率范围,因为人耳可感受到的震动频率是20赫玆到20,000赫玆。
3. 传播介质
只有说话者的嘴巴和听者的耳朵就能通信了吗?除非你的嘴巴贴着人家的耳朵,否则,就像这里一样,需要空气这种介质进行传导。
物理层协议
好了,到这里,我们基本上明白了通信的要点,接下来回到本文的重点,圈出来物理层的范围。
然后,我们来总结一下,这个人联网中的物理层协议,可以看出它关注什么:
包括: 谁能发送; 什么时候可以发送;什么时候该闭嘴;谁能听;什么时候该接收;不想听了怎么屏蔽等。
既然是物理层,我们必须从生理上(物理硬件)支持这种能力,比如我们可以想象有一根神经控制喉咙此时是否该震动,另外一根神经控制喉咙震动多少频率,还有一根神经控制振幅多大。再有一根神经,控制耳朵打开和关闭(实际上人做不到,但计算机可以做到)
计算机中的物理层协议
此前,我们已经通过人与人的交谈来理解物理层,接下来,我们看看计算机中的物理层是如何的通信的。
【物理介质】
现代计算机体系基本都是采用冯诺依曼体系,以二机制为计算基础,计算机只能处理0/1。这里只讨论主流的电子计算机,在计算机内部,0/1是通过可区别的电信号来识别,比如某个电压范围为0,谓之低电平,某个电压范围为1,称之为高电平。以上,是电子计算机内部的信号处理方式,那计算机之间呢?用什么介质来进行传导信号呢?
说到这里,大家基本上都知道,有电线(网线),空气(4g、wifi、蓝牙),光导纤维(光信号)。
当然,这里涉及到一些转换,外部信号不一定直接能被内部使用,比如光信号,需要转换为内部电信号,这就需要调制解调器了,如光猫(光电转换)。
【通信规则】
我们以最简单的 “网线” 为例,传递的实际还是0/1电平,但不要以为两台计算机之间,只有”一根线“连接,那只是外部绝缘包裹看起来是一根,但内部是有多条线(芯)的。为什么需要这么多线,首先,一台计算机要支持全双工的方式,就至少要有两根线,一根发送0/1,一根接收0/1,够了吗?显然不够,就像上文讲的,我们还需要更多的线来控制 “允许接受”,“允许发送” 等行为。
另外,不光是规定一台计算机需要连接几根线,还需要明确两台计算机之间的这多根线互相之间怎么。比如,a计算机的发送线需要连到b计算机的接收线上等等。
最后,我们来总结一下,看看这里的物理层协议它定义了什么:
1. 有几根线,每根线有什么作用(比如同轴电缆)
2. 两台计算机之间的线(触点)该怎么连。(实际是定义了插头和插座的规范,毕竟线不是直接扭在一起)
3. 输出电压是多少,不能爆炸了呀
4. 对上提供流程控制逻辑接口(暂定接收、允许发送,发送等,发送和接收微电路控制)
5. 最终发送的是 0/1 流
6. 一些数据校验(容错)
【点对点和广播】
要能实现点对点,很容易想象直接用网线把两台电脑一连即可,如果需要广播呢?除了我们知道无线电波这种直观的广播方式,还能使用集线器、路由器这种设备,可以支持相当于将一台计算机的网线连入多台计算机,从而实现广播。
写在最后
以上是基于个人理解的一点总结,有兴趣的同学可以选一种早期简单的物理层协议进行深入研究,加深理解。
另外抛出一个话题,物理层实际上是解决建立好了0/1的比特流通道,支持点对点和广播的方式,但一般计算机都是处在网络中(广播)。因此,它并没有解决在广播网络中,想要明确指向发给谁的能力。而这,便是由更上层协议数据链路层和网络层协议来解决,有兴趣的可以深入了解,后续有空也会补上相应内容。