为了足够通俗,俺先要介绍一些基本概念。
◇信道(channel)
这是通讯领域非常基本的概念,肯定要先聊聊它。
通俗地说,信道就是“传送信息的通道”。
◇信道的类型
首先,信道可以从广义上分为“物理信道 & 逻辑信道”。
顾名思义,“物理信道”就是直接使用某种【物理介质】来传送信息;至于“逻辑信道”——是基于“物理信道”之上抽象出来的玩意儿(待会儿讲到“协议栈”的时候再聊)。
◇信道的带宽
“带宽”指的是:某个信道在单位时间内最大能传输多少比特的信息。
请注意:
电气领域 & 计算机领域都有“带宽”这个概念,但两者的定义不太一样。电气领域所说的“带宽”指的是“模拟带宽”,单位是“赫兹/Hz”;计算机领域所说的“带宽”指“数字带宽”,单位是“比特率”或“字节率”。
后续章节提到“带宽”,都是指计算机领域的术语。
◇带宽的单位——容易把外行绕晕
“比特率”或“字节率”很容易搞混淆。用英文表示的话——大写字母B表示【字节】;小写字母b表示【比特】。
由于带宽的数字通常很大,要引入“K、M、G”之类的字母表示数量级,于是又引出一个很扯蛋的差异——“10进制”与“2进制”的差异。
【10进制】的K表示 1000;M表示 1000×1000(1百万)
【2进制】的K表示 1024(2的10次方);M表示 1024×1024(2的20次方)
为了避免扯皮,后来国际上约定了一个规矩:对【2进制】的数量级要加一个小写字母i。比如说:Ki表示 1024;Mi表示 1024×1024 …… 以此类推。
举例:
1Kbps 表示“1000比特每秒”
1KiBps 表示“1024字节每秒”
◇信道的工作模式:单工 VS 半双工 VS 全双工
再来说说信道的工作模式。大致可以分为如下三种。为了让大伙儿比较好理解,俺对每一种都举相应的例子。
单工(simplex)
比如“电台广播”就是典型的【单工】。“电台”可以发信号给“收音机”,但“收音机”【不能】发信号给“电台”。
半双工(half-duplex)
比如“单条铁路轨道”,就是典型的【半双工】。火车在单条铁轨上,可以有两种运行方向;但对于同一个瞬间,只能选其中一个方向(否则就撞车了)。
全双工(full-duplex)
比如“光纤”就是典型的【全双工】。在同一根光导纤维中,可以有多个光束【同时相向】传播,互相不会干扰对方。
◇端点
为了叙述方便,俺把参与通讯的对象(主体)称作“通讯端点”,简称“端点”。
这里的“端点”是广义的,可以是硬件(比如某个 卡),也可以是软件(比如某个应用程序)。
◇单播、组播/多播、广播、选播
对于“ 络通讯”,至少得有 N 个端点参与,并且【N ≥ 2】才有意义。
当 N 个端点构成一个 络,这时候就会涉及到“单播、组播、广播”这几个概念。
通俗地说:
单播(unicast)——发送给 络中的指定的【单个】端点
组播/多播(multicast)——发送给 络中的指定的【多个】端点
广播(broadcast)——发送给 络中的【所有】端点
选播(anycast)——发送给 络中随机选择的【单个】端点
◇通讯协议(protocol)
所谓的“通讯协议”就是:参与通讯的各方所采用的某种【约定】。只有大家都遵守这个约定,才有可能相互传递信息。
打个比方:如果两个人要用自然语言交流,前提是:双方使用相同(或相互兼容)的自然语言。
“通讯协议”就类似某种自然语言,参与通讯的多个端点,都必须能理解这个语言。
★从“分层”到“参考模型”
◇分层
在聊“分层”之前,先说说“分工”。比如在一个公司中,通常设有不同的工种/岗位,这就【分工】。
对于 络通讯也是如此,不太可能用一种通讯协议完成所有的信息传递任务(注:对于特别简单的 络,或许有可能只用单一协议;但如今的 络通讯已经很复杂,用【单个】通讯协议包办所有事情,已经不太可能)
一旦采用了多种通讯协议,这几种协议之间,该如何配合捏?
在 络通讯领域,采用的是【分层】的设计思路。多个层次的协议在一起协同工作,技术上称作“协议栈”(洋文叫做“protocol stack”)。
◇协议栈的原理
对于多层次的协议栈。每个层次都有各自的“端点”(进行通讯的主体)。处于【同一层次】的两个端点会使用该层次的协议进行通讯(注:同一个层次的协议,可能只有一个,也可能有多个)。
除了最顶层,每个层次的端点会向其【直接】上层提供“服务”;除了最底层,每个层次的端点会调用【直接】下层提供的“服务”(这里所说的“服务”指某种“编程接口”,技术行话叫 API)。
(“协议栈”的示意图)
(“服务”与“协议”之间的关系)
◇逻辑信道
(前一个小节说了)每个层次会向上一个层次提供服务(API 调用)。对上层而言,调用下层提供的 API 发送信息,其效果相当于在使用某种【信道】进行通讯,这也就是俺在★基本概念那个章节所说的“逻辑信道”。
(“逻辑信道”示意图)
◇数据格式的原理
大部分协议会把要传送的数据切割为 N 份,每一份就是一个数据包。
通常来说,数据包的格式有如下三部分:
头部
身体(也称作“有效载荷”)
尾部(注:很多协议没有尾部)
如果你收过快递,可以把“ 络数据包”与“快递包裹”作一个对照——
数据包的“头/尾”,就类似于快递包裹的【包装袋】。数据包的“身体”,就类似于快递包裹里面的东西。
对于【相邻】两层的协议,【下】层包含【上】层。也就是说:下层协议的【载荷】就是上层协议的【整体】。
还是以快递举例:
假设你从 上买了一台笔记本电脑。电脑出厂时,电脑厂商肯定会提供一个包装盒。快递公司在寄送这台笔记本的时候,又会在笔记本的盒子外面再加一个包装袋。对应到 络协议——“快递公司的包装袋”相当于【下层】协议;“电脑厂商的包装盒”,相当于【上层】协议。
(上下层协议的格式及包含关系)
◇ 络分层的参考模型
★OSI 概述
◇OSI 的历史
“OSI”的全称是“Open System Interconnection”。先说说它的历史。
上世纪70年代,“国际电信联盟”(ITU)想对各国的电信系统(电话/电 )建立标准化的规格;与此同时,“国际标准化组织”(ISO)想要建立某种统一的标准,使得不同公司制造的大型主机可以相互联 。
后来,这两个国际组织意识到:“电信系统互联”与“电脑主机互联”的性质差不多。于是 ISO 与 ITU 就决定合作,两家一起干。这2个组织的2套班子,从上世纪70年代开始搞,搞来搞去,搞了很多年,一直到1984年才终于正式发布 OSI 标准。
◇OSI 标准的两个组成部分
◇OSI 模型的7层
OSI 模型总共分7层,示意图参见如下表格:
层次 |
中文名 |
洋文名 |
第7层 |
应用层 |
Application Layer |
第6层 |
表示层 |
Presentation Layer |
第5层 |
会话层 |
Session Layer |
第4层 |
传输层 |
Transport Layer |
第3层 |
络层 |
Network Layer |
第2层 |
数据链路层 |
Data Link Layer |
第1层 |
物理层 |
Physical Layer |
★物理层:概述
◇物理层的必要性
通俗地说:直接与物理介质打交道的层次,就是物理层。这一层的必要性比较明显。
因为所有的通讯,归根结底都要依赖于【物理介质】。与物理介质打交道,需要牵涉到很多与【物理学】相关的东东。比如:“无线电通讯”需要关心“频率/波长”;电缆通讯需要跟“电压”打交道;“光纤通讯”需要关心“玻璃的折射率&光线的入射角” ……
“物理层”的主要职责是:屏蔽这些细节,使得“物理层”之上的层次不用再去操心物理学。
◇物理信道的类型
◇信噪比(Signal-to-noise ratio)
俺在很多篇关于“学习&心理学”的博文中提到过【信噪比】这个概念。其实这个概念是从通讯领域借用的术语。
对于“物理信道”,总是会存在某些环境干扰,称之为“噪声”(Noise)。“信道传输的有用信息”与“无用的干扰噪声”,这两者的比值就是“信噪比”。
“信噪比”单位是【分贝】。“分贝”洋文叫做“decibel”(简写为 dB)。“deci”表示“十进制”;“bel”是为了纪念大名鼎鼎的贝尔(电话它爹)。
◇带宽的限制因素
“物理信道”要依赖于物理传输介质。不管使用何种物理介质,都要受限于某些基本的物理学定律(比如“光速上限”)。另外,不管何种物理介质,总是会有或多或少的环境干扰(噪声)。这两个因素导致了:任何“物理信道”的最大传输率总是有限滴。
由于物理层是最底下的一层,物理层之上的其它层次总是要直接或间接地依赖【物理信道】。因此,其它层次建立的“逻辑信道”,其带宽只会比“物理信道”的最大带宽更小。换句话说:“物理信道”的带宽上限也就是整个协议栈的带宽上限。
◇多路复用(Multiplexing)
一般来说,凡是能实现【长距离】通讯的“物理信道”,都有相当的经济成本。比如铺设“光纤、同轴电缆”都要花钱。无线电通讯虽然免去了铺设线路的成本,但需要竞标购买频段。因此,物理信道非常强调“多路复用”。
所谓的“多路复用”,通俗地说就是:尽可能地共享物理信道,不要浪费了。
“多路复用”有很多种类型;不同的类型,原理也不同。为了展示各种不同的原理,俺拿【无线通信】来说事儿。
无线通信领域的“多路复用”,【至少】有如下几种:
频分多路复用/FDM(Frequency-Division Multiplexing)
这个最简单,就是根据频率拆分。不同的线路占用不同的频段,互不干扰。(电台广播用的就是这个思路)
但这个思路的缺点很明显——
其一,要依赖足够宽的频段(频段是稀缺资源);
其二,不同线路的流量可能会动态变化。如果某个线路空闲,其占用的频段就浪费了。
(注:光纤通讯中有个“波分多路复用/WDM”,本质上就是 FDM)
时分多路复用/TDM(Time-Division Multiplexing)
这种思路只用一个很窄的频段。为了在同一个频道发送多个信道,采用【分时机制】,把时间切割成很小的时间片,每个线路占用一个时间片。周而往复。
这个思路有点像十字路口的红绿灯——每隔一段时间,其中一条路可以通行。
这个思路的优点是:可以只使用一个很窄的频段。缺点是:线路越多,每条线路等待越久;即使某个线路空闲,依然会占用时间片(浪费了资源)。
码分多路复用/CDM(Code-Division Multiplexing)
这种思路采用某种【编码】的技巧,使得多个端点可以在同一个时间点使用同一频段发送数据;由于他们采用不同的编码方式,不会相互干扰。
一般来说,CDM 要依赖于“扩频技术”(spread spectrum),需占用一个比较宽的频道范围。这算是缺点。但其优点很明显——
其一,可以支持 N 个线路(N 动态变化);
其二,即使任何一个线路的流量动态变化,也不会浪费物理信道的资源。
显然,这种思路明显优于 FDM & TDM。如今在移动通讯领域大名鼎鼎的 CDMA(码分多址),采用的就是这个思路。
★物理层:具体实例
◇物理层的【协议】
物理层的协议主要有如下:
USB 协议
蓝牙协议的一部分
IEEE 802.11的一部分(Wi-Fi)
IEEE 802.16(WiMAX)
IEEE 1394(火线接口)
RS-232 协议(串行接口/串口)
……
(考虑到篇幅)俺不可能具体细聊这些协议,只是贴出每个的维基百科链接,感兴趣的同学自己点进去看。
◇物理层的【协议实现】
对于电脑主机(含移动设备),“ 卡硬件”包含了物理层的协议实现(参见如下示意图)
另外,还有一些专门的【1层】 络设备,也提供物理层的功能(参见下一个小节)。
◇物理层相关的【 络设备】
声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!