上一大节,咱们以两台主机为例,探讨了一个理想化的物理层模型。当初,咱们将问题进一步延长:多台主机如何实现两两通信呢?咱们以三台主机为例进行探讨:
如上图,有 _3_ 台主机,名字别离是:_ant_、_bee_ 以及 _cicada_。为了实现主机间通信,咱们将三者连贯到一根共用导线。每台主机都能够扭转导线电平,也能够检测导线电平。与此同时,假如在硬件层面,多方通信抵触仲裁机制曾经实现并且可用。这样,是否就解决了多主机通信问题呢?
寻址
假如,_ant_ 向 _bee_ 发送一个数据 11110000
(粗体)。因为导线是共享的,所有主机都能够检测到电平信号。换句话讲,_bee_ 和 _cicada_ 都会收到这个数据 11110000
,而 _cicada_ 本不应该接管这个数据!另一方面,_bee_ 收到数据后,也不晓得数据到底是谁发给它的。
为了简化接下来的探讨,咱们省略了物理层起止管制比特
1010
和0101
。
数据不禁产生困惑:_我从哪来?去往何方?_
为此,咱们须要引入一些比特,用来标识数据的 起源 以及 目的地。例子中只有 3 台主机,两个比特就足以惟一确定一台主机:
机器 | 比特 |
---|---|
ant | 00 |
bee | 01 |
cicada | 10 |
那么,发送数据时,再加上两个比特用于示意起源主机,两个比特示意指标主机,问题不就解决了吗?
如图,主机下方的灰色比特惟一标识一台主机:
ant 发送数据时,在最后面加上两个比特 (红色) 用于标识起源机器,00
示意 ant;另外两个比特 (绿色) 用于标识指标机器,01
示意 bee。
当 _bee_ 收到数据后,查看前两个比特(红色),值为 00
,便晓得它是 _ant_ 收回来的;查看紧接着的两个比特(绿色),值为 01
,与本人匹配上,便欢快地收下了。相同,_cicada_ 收到数据后,发现 01
和本人 10
匹配不上,便抛弃这个数据。
新引入比特所起的作用,在计算机网络中称为 寻址 。这两个比特也就称为 地址,其中,红色为源地址,绿色为目标地址。引入寻址机制后,咱们完满地解答了数据从哪来,到哪去的困惑。
复用与分用
信道只有一个,然而通信需要是无穷无尽的——传输钻研数值、文件打印、即时通讯,不一而足。如何解决这个矛盾呢?套路还是一样的——引入新的比特标识数据类型。
假如,总的通信需要就下面这 3 个。那么,2 个额定的比特即可解决问题。
类型 | 比特 |
---|---|
钻研数据 | 00 |
文件打印 | 01 |
即时通讯 | 10 |
举个例子,假如 _ant_ 向 _bee_ 上报钻研数据并打印一个文件:
_bee_ 接管到数据后,依据紫色比特,决定数据如何解决。通过新引入的紫色比特,咱们在同个信道上实现了不同的通信!
接下来,从实践的视角来扫视这个场景:
信道只有一个,却要承载多样的通信工作。在发送端,通过退出紫色比特,将不同的数据通过一个共用信道发送进来,这个过程叫做 复用 (_Multiplexing_);在接收端,从共用信道上接收数据,而后查看紫色比特决定数据如何解决,这个过程叫做 分用 (_Demultiplexing_)。
在接下来的章节,咱们将看到 复用分用 的思维贯彻计算机网络的始终。
到目前为止,咱们引入了 _3_ 种不同的比特,别离是 源地址 、 目标地址 以及 数据类型 。对于这些比特的位数以及含意的约定,便形成 网络协议。
至此,咱们解决了多台共用信道主机间的通信问题,这相当于网络分层构造中的 数据链路层。数据链路层负责为下层提供链路通信能力,次要作用是:
- 寻址
- 数据复用 / 分用
数据链路层的协定有很多,下节咱们将介绍其中最罕用的 以太网协定。
【小菜学网络】系列文章首发于公众号【小菜学编程】,敬请关注: