计算机网络 Chap.1 计算机网络体系结构
本系列计算机网络博文基于Bilibili王道的免费考研课程整理而来, 目的在于系统的梳理计算机专业课的基础知识, 并为将来的面试做好充分的准备.
除本系列外, 计算机考研相关还包括数据结构 / 操作系统 / 计算机组成原理的相关内容.
引子, 为什么要考计网?
在开始梳理前, 稿主认为有必要明确, 为什么是计网? 计网在整个计算机体系中占据了什么样的地位?
这张图非常清晰的表述了关于我们会梳理的几门课程的地位. 计网 , 主打一个连接性, 两台物理上隔离的设备是如何做到互相通信的? 这就是我们要研究的核心问题.
1.1 计算机网络概述
1.1.1 计算机网络的概念
计算机网络(Computer Network) 的完整概念其实并没有一个确切的定论, 我们这里给出一种参考:
概念: 计算机网络
计算机网络 是一个将众多 分散的 , 自治的 计算机系统, 通过通信设备与线路连接起来, 由功能完善的软件实现 资源共享 和 信息传递 的系统
我们随后要明确三个名词的区别, 这三个名词非常相似, 但在计网中意义并不相同.
- 计算机网络(Computer Network) : 简称 网络 , 是由若干 结点(node) 和连接这些结点的 链路(link) 组成的系统.
概念: 结点
计网中的结点有很多种, 包含计算机, 集线器, 交换机, 路由器等等.
概念: 链路
请读者不要被这个名词所误导, 链路可以是有线的, 亦可以是无线的.
- 互连网(internet) : 指的是网络中存在 路由器 使两个子网能够相互连接的一个计算机网络.
注意: 路由器
在计网中所说的 路由器 , 与我们当前通常提及的 家用路由器 概念并不完全一致, 这是因为, 家用路由器为了保证便利性, 往往集合了 路由器 与 交换机 的功能.
- 互联网(Internet) : 也叫 因特网 , 是由各大ISP和国际机构构建的, 覆盖全球范围 的互连网.
概念: ISP(Internet Service Provider)
ISP, 即互联网服务提供商, 下属有高级路由器将各个大型互连网进行连接. 国内典型案例有: 中国移动 / 联通 / 电信
注意: 协议差别
在 互联网(Internet) 中, 使用的通信协议是有严格规定的, 必须为 TCP / IP通信协议 , 而在 互连网(internet) 中, 通信协议可以是自主协定的.
1.1.2 计算机网络的组成和功能
聊完了概念, 我们来看看计网里面到底有啥玩意.
我们先从 具体的组成部分 的角度来切入, 从组成部分看, 计算机网络可以分为三个大部分:
- 硬件
- 主机(End System, 端系统) : 如手机, 计算机, 智能家居等. 指的是这些设备连接在网络的 末端
- 通信链路 : 如网线, 光纤, 同轴电缆等
- 通信设备 : 如集线器, 交换机, 路由器等
- 软件
- 装载在主机和通信设备上, 目的是方便用户使用, 实现资源共享.
- 协议
- 规定了计算机网络中的通信规则
- 由硬件和软件共同实现
从 工作方式 上来看, 计算机网络也能被分为以下两部分:
- 边缘部分
- 这部分的网络直接为用户服务, 主要由 主机 以及其上的软件组成.
- 核心部分
- 这部分的网络目的是为 边缘部分 提供服务, 主要由大量网络以及连接它们的路由器组成.
随后, 我们了解一下计算机网络这玩意能干啥.
其实从日常生活中我们已经接触到了很多方面:
- 数据通信
- 资源共享
- 硬件资源
- 软件资源
- 数据资源
- 分布式处理
- 提高可靠性
- 负载均衡
- …
注意: 数据通信
这是计算机网络中 最基本, 最重要 的功能, 没了它, 后续所有的功能都无法实现(没了这玩意这个家得散)
例子: 分布式处理
一个控制端将一个很复杂的任务分成多个小部分, 分配给处在能够连接的网络中的其余主机, 这即分布式处理的方法.
例子: 提高可靠性
比如你的文件在某个云盘上被备份了, 显然它不应该只被存储了一份, 它应当是在这个云盘下属的多个服务器上都被存储了, 这才能保证厂商服务的可靠性. 这个备份工作就得靠计网对不?
1.1.3 计算机网络中的 交换
我们首先要明白, 交换 到底是个啥玩意.
我们此前解释过, 在网络中的端到端通信过程中, 中途需要经过很多 结点 , 这些结点能够将我们的信息根据某种规则进行传递, 并最终传递至目标端. 而所谓 交换 , 指的正是这个过程.
概念: 交换
网络设备(如交换机、路由器等)根据一定的规则转发数据包(或数据帧)的过程.
了解概念后, 我们看看有哪些 交换方式 :
- 电路交换
- 报文交换
- 分组交换
所谓 电路交换 , 指的是网络为通信双方分配一条 专用的 物理路径, 并且在通信过程中, 这条路径全程归通信双方所有.
其优势为 数据传输稳定; 速率高 .
其劣势为 线路利用率低; 线路分配的灵活性差 .
注意: 电路交换的适用场景
电路交换往往适用于 频次低, 传输量大 的数据通信. 它的方式由早期的 电话网络 发展而来.
但很遗憾, 在计算机网络中, 往往展现出 频次高, 传输量小 的特点. 通信请求往往是突发性的, 因此电路交换并不适用于当前的计算机网络.
捯饬 报文交换 之前, 我们得先搞明白 报文 是个啥东西.
概念: 报文(Message)
报文 是数据的一种封装形式, 通常表现为由以下三部分组成的一串数据: 报文头(Header) , 数据部分(Payload) , 报文尾(Trailer) .读者可以暂且将其理解为 带有发送方 / 接收方地址的数据信息 即可
所谓 报文交换 , 就是网络中的结点能够根据报文中发送方 / 接收方的信息(通常处于报文头中), 自主选择一条合适的转发路径, 并将该报文转发至接收方处.
其优势为: 无需提前建立连接; 通信线路由于报文的转发策略而可以灵活分配; 线路利用率高; 支持差错控制 .
概念: 差错控制
差错控制 指的是信息传输过程中, 如果因为意料之外的原因导致信息发生了改变, 中间的结点能够由一些报文中附带的信息(通常处于报文头中)察觉到这一点, 甚至将报文进行修正.
其劣势为: 报文通常不定长, 存储转发的缓存开销大, 管理难度大; 长报文易出错, 重传代价高 .
注意: 报文交换的适用场景
报文交换与计算机网络的适用场景非常类似, 即 频次高, 传输量小 的数据通信. 它来源于战争时期的 电报通信 .
同时, 我们也意识到了, 报文交换的绝大多数问题都来源于 报文过长 这种可能性.
分组交换 的思路与 报文交换 及其类似, 同时修正了部分报文交换的缺点.
嫌报文太长容易出错? 那我们把长报文切开就好了嘛.
概念: 报文分组
报文分组 , 指将原先很长的数据分成 定长的 多个部分, 并将每个部分单独添加上一个 首部 (作用与报文交换中的首部相同).
由于这里对报文分组了, 因此首部中相对于原先报文中的控制信息自然就要多一块来表示这是第几个分组. 我们称作 分组号 .
这种方式中, 中间的结点(也称 分组交换机 )会根据首部中的 IP地址 来判断发送的起点和终点, 并将一个个的定长分组存储转发至通信终点.
其继承了 报文交换的全部优势 , 且额外改进了其劣势, 即 分组定长, 存储转发管理开销小; 出错概率低; 重传代价低 .
其劣势为: 与报文交换相比, 控制信息占比增加; 与电路交换相比, 存储转发时延较高; 且存在 分组失序, 丢失 现象 .
概念: 虚电路交换
即参考了 电路交换 的思想, 在分组交换的交换方式上, 让交换双方预先进行连接, 并使后续数据传输全程处于该连接线路上.
需要明确的是, 这种 虚电路交换 并不存在电路交换上面的 线路独占 现象.
注意: 分组 Vs 虚电路?
在当前的互联网中, 分组交换最终被作为最广泛应用的交换策略.
这得从问题的解决方来考虑, 在分组交换中, 分组失序, 丢失现象的解决方是通信两端 ; 而在虚电路交换中, 这个问题的解决方是中间的交换结点 .
从当前的普遍情况而言, 通信两端的处理性能通常是要高于中间结点的性能的, 因此最终选择了前者.
唠完三种交换的基础概念, 我们分析一下这哥仨的 性能 .
上图的设定为:
- 每一跳传播时延1ms
- 电路交换机建立 / 释放吓一跳连接耗时1ms
- 接收方处理连接请求耗时2ms
- 数据传输速率0.5kb/ms
- 报文大小4kb
该流程总耗时 25ms , 如果仅看 报文传送 的过程, 则仅花费 11ms .
上图设定为:
- 每一跳传播时延1ms
- 数据传输速率0.5kb/ms
- 报文大小4kb
- 报文存储转发时延2ms
该流程共花费 31ms .
上图设定为:
- 每一跳传播时延1ms
- 数据传输速率0.5kb/ms
- 报文大小4kb
- 分组大小1kb
- 分组存储转发时延0.5ms
该流程共花费 17.5ms .
总结一下
单从数据传输速率上讲, 其实电路交换最优, 分组其次, 报文最差. 但由于分组的扩展功能较多(如差错控制, 线路分配等此前描述的优势), 并且对于线路的利用率极高, 因此最终当前互联网采用了 分组交换为主 的方式.
1.1.4 计算机网络的分类
计算机网路的分布标准比较多样, 这里只给出几个比较常见的分类方式:
- 按分布范围
- 广域网(WAN, Wide Area Network) : 通常跨国 / 跨洲
- 城域网(MAN, Metropolitan Area Network) : 一个或几个相邻城市
- 局域网(LAN, Local Area Network) : 几十米~几千米不等, 通常是家庭 / 公司的网络
- 个域网(PAN / WPAN, Personal Area Network / Wireless Personal Area Network) : 几十米以内, 个人 / 家庭范围的网络
注意: 计网中的探讨对象
计网中主要针对局域网与广域网进行探讨, 对其余的网络仅简单涉及.
按传输方式
- 广播式网络 : 广播范围内的全部计算机均收到该分组, 但仅目标接收该分组
- 点对点网络 : 数据点对点发送到接收方.
按拓扑结构
- 总线形结构 : 通常数据以广播式传输, 存在 总线争用 问题. ( 集线器 )
- 环形结构 : 通常数据以广播式传输, 通过 令牌 解决总线争用问题. ( 令牌环网 )
- 星形结构 : 由中央设备实现数据的点对点传输, 不存在总线争用问题. ( 以太网交换机 )
- 网状结构 : 数据通过中间节点实现逐一存储转发, 同属点对点传输. ( 众多路由器构建的广域网 )
概念: 令牌(Token)
一个环网中只有一个令牌, 网络中只有持有令牌的结点能进行数据的发送.
按使用者
- 公用网 : 向公众开放的网络
- 专用网 : 仅限某个组织 (企业, 机关, 政府) 内部使用的网络
按传输介质
- 有线网
- 无线网
这俩没啥好说的, 过了.
1.1.5 计算机网络的性能指标
1.1.5.1 速率
通常而言, 某个传输介质需要对应两条 信道(Channel) , 一条用于发送数据, 一条用于接收数据. 可以将信道理解成 有方向性的传输通道 .
概念: 速率
某一信道单位时间内的传输量.
其单位有以下几种:
- bit/s : 也写作 b/s 或 bps
- Byte/s : 也写作 B/s .
此外, 还要注意几种数量前缀:
- k: $ 10^3 $
- M: $ 10^6 $
- G: $ 10^9 $
- T: $ 10^{12} $
1.1.5.2 带宽(Bandwidth)
某个信道所能传送的最高数据率.
注意: 带宽
在计网和通信原理中, 带宽的含义并不相同但有其关联.
在通信原理中, 表示某信道允许通过的信号频带范围, 单位为Hz.这两个玩意通过香农定理和奈氏准则进行关联.
1.1.5.3 吞吐量(Throughput)
单位时间通过某个接口 / 信道 / 网络的数据量.
注意: 吞吐量 Vs 速率?
通常而言, 速率只针对某个单方向的信道, 但吞吐量能够针对很多的个体, 小到网线的两个方向的信道相加, 大到一整个网路的全部流量, 都可以用吞吐量描述.
1.1.5.4 时延(Delay)
指数据从通信一端至另一端所需的时间.
在计网中, 时延通常由以下四个部分组成:
- 发送时延 / 传输时延 : 节点将数据推向信道所花的时间
- 传播时延 : 数据在信道中传播一定距离所花的时间
- 处理时延 : 被路由器处理所花的时间
- 排队时延 : 数据排队进入 / 排队发出路由器所花的时间
这里需要额外注意的就是 发送时延 和 传播时延 这俩玩意, 特容易混, 也特容易考:
发送时延通常的计算公式为:
$$ 发送时延(传输时延) = \frac{数据长度(bits)}{发送速率(bit/s)} $$
传播时延的计算公式为:
$$ 传播时延 = \frac{信道长度(m)}{数据包在传输介质中的传播速度(m/s)} $$
这种题目的计算通常不会涉及排队时延和处理时延, 因为这俩玩意的长短取决于服务器和网络节点的状况, 比较复杂.
需要格外注意的是, 这类题目的做法通常更加建议通过类似 1.1.3 中使用的网络通信流程图进行, 因为数据被传输上到介质上会立刻进行传输, 因此整个过程是 并行的 即同一时刻有些数据在被发送, 而有些数据在传播. 通过类似这种图能够更加清晰的理清做题时的思路:
1.1.5.5 时延带宽积
指标如其名, 时延带宽积的计算方式为:
$$ 时延带宽积 = 传播时延 \times 带宽 $$
注意: 这位置用的是传播时延
其单位为: $ bit/s \times s = bit $
这玩意意味着什么? 我们捋一下
- 带宽意味着信道上最大的传输速率
- 传播时延是一个数据从信道最发送端至接收端所需经过的时间
因此, 时延带宽积意味着 一条链路中, 已从发送端发出但尚未到达接收端的最大比特数 . 可以理解为一条水管能容纳的最多的水.
1.1.5.6 往返时延(Round Trip Time / RTT)
表示从发送方 发送完数据 , 到发送方收到来自接收方的确认信息总经历的时间.
从上图来看, 往返时延应该为: $ t_2 + t_3 + t_4 + t_5 $
趣闻
打游戏时游戏给出的那个 延迟 其实就是这玩意.
1.1.5.7 信道利用率
与正常的计算方式相似:
$$ 信道利用率 = \frac{信道中有数据的时间}{信道被使用的总时间} $$
注意: 信道利用率的阈值
通常而言, 信道利用率不应过低, 也不应过高.
过低资源利用率较低, 过高则容易网络拥塞.
1.2 计算机网络的层次结构
1.2.1 网络的分层结构
分层 是计网中非常重要的思想, 其本质上在于将一个很复杂的问题转化为了一个个小型的, 更容易解决的问题, 并在不同问题的衔接之间建立接口.
其特点在于如下两个方面:
- 将网络在逻辑上划分为多个层次, 并将不同的功能划分至不同的层次中
- 不同类型的节点, 其所需要实现的层次并不相同
我们先自顶向下给出网络的五个层次:
- 应用层
- 传输层
- 网络层
- 数据链路层
- 物理层
注意: 层次固定? 层次功能固定?
分层的同时请务必注意目的. 我们的根本目的在于 合理的将计网的全部功能分配在每一层中, 使得整个体系合理且易于实现.
因此我们需要明白, 分层不是固定的, 而层次功能也是可以在不同层之间重复的. 只要整个系统能够达成它的功能即可.
在当前的世界上, 存在两种认可度较高的分层标准, 即 OSI参考模型 与 TCP/IP模型 . 这二者分别由 国际标准化组织 ISO 与 美国国防部阿帕网 ARPANET 所提出. 前者是更加标准化的法律标准, 而后者是现实中应用更加广泛的参考.
因此, 我们能够给出体系结构的概念了:
概念: 网络的体系结构
计算机网络各层以及其实现的功能, 包括实现这个功能需要使用的协议的集合.
注意: 抽象的体系结构
体系结构这玩意是抽象的, 并不包括各种协议的 具体实现 , 这是如何综合使用软硬件实现现有规划的问题, 并不是总体设计时需要重点考虑的方面.
概念: 对等实体 & 协议
对等实体 指的是在计算机网路不同节点中处于同一层的实体.
协议 事实上规定的是 对等实体 之间的通信规则.
概念: 接口 & 服务
接口 指的是同一节点相邻层之间的调用规则.
相邻层通过调用对方的 接口 来访问对方所提供的 服务 .
我们还需要明确一点, 就是报文首部的问题.
概念: 首部 / 协议控制信息
指的是用于说明本报文采取的协议以及对应报文的相关统计信息的一个数据部分. 通常会放在报文数据的前方, 因此称为 首部 .
相关的概念有仨:
- 协议数据单元 (PDU / Protocol Data Unit) : 说白了就是首部加上原先的数据包
- 服务数据单元 (SDU / Service Data Unit) : 说白了就是原先的数据包
- 协议控制信息 (PCI / Protocol Control Information) : 说白了就是首部
注意: 三个名词的适用对象
上面这仨玩意是针对 层 而言的, 这意味着每一层都有其对应的 PDU, SDU, PCI, 理解即可.
理解了网络的分层结构, 我们再回来看协议这个玩意本身, 可能会更好理解一些:
协议的三要素 是:
- 语法 : 就是首部的格式, 比如首部的哪些字节代表什么含义
- 语义 : 就是协议的使用方法, 就是使用这个协议的时候, 要发送什么数据, 该怎么应答…
- 时序 : 各种操作的时序关系, 比如收到不同的消息后应当如何应答, 何时应答
1.2.2 OSI参考模型
上一节中提到了两种现今广受认可的网络分层模型, 我们先从OSI七层模型说起.
这种模型与我们此前认知的五层模型的主要区别在于 将五层模型中的应用层拆分为另外的三层, 即应用层, 表示层, 会话层 .
我们现在来探讨一下 这七层分别负责哪些功能 :
- 物理层: 实现相邻节点的比特传输
- 定义电路接口特征(形状, 尺寸, 引脚数)
- 定义传输信号的含义(什么情况的信号表示1, 什么情况的信号表示0, 每个比特电信号持续多少秒, …)
- 以 比特(bit) 为单位
- 数据链路层(链路层): 确保相邻节点之间的链路在逻辑上无差错
- 进行 差错控制 , 检错 / 纠错 / 丢弃 / 重传
- 实现 流量控制 , 协调两个节点的速率, 防止速率过大导致丢帧
- 以 帧(frame) 为单位
- 网络层: 将数据从源结点 转发 至目的结点
- 路由选择: 规划出分组转发的最佳路径
- 分组转发: 将分组从合适的端口转发出去
- 拥塞控制: 发现拥塞并尝试避免拥塞
- 网际互连: 实现异构网络互联, 保证不同内部构造的网络能够互联
- 其他功能: 包括流量控制, 差错控制, 连接建立与释放等
- 以 分组 / 数据报(packet) 为单位
- 传输层: 实现 端到端 通信, 即实现进程到进程的通信
- 复用与分用: 目的在于实现数据从某个端口出, 就从其对应的端口入
- 其余通用功能: 差控, 流控…
- 以 报文段(segment) 为单位
- 会话层: 管理进程之间的会话
- 会话管理: 采用检查点机制, 保证通信失效时可以从检查点再次重传
- 表示层: 解决不同主机上信息表示不一致的问题
- 数据格式转换: 编码转换, 压缩解密等
- 应用层: 特定的网络应用根据需求自定义
- 以 报文(message) 为单位
注意: 层级之间功能的重合
读者可能会疑惑, 有些功能为什么在很多层上都有涉及? 比如差错控制, 流量控制等等.
事实上, 这是因为它们针对的对象不同, 比如链路层的差错控制只能局限于 帧 这个单位, 而网络层的控制则可以针对更大的单位, 即 数据报 .
这样相当于多加了一层保险, 同时也能够及早发现问题的出现.
1.2.3 TCP / IP模型
TCP / IP模型相对于OSI模型, 在分类上要简洁许多, 仅有如下四层:
- 网络接口层
- 基本对等于OSI中的物理层+数据链路层
- 网络层
- 对等于OSI中的网络层
- 传输层
- 对等于OSI中的传输层
- 应用层
- 对等于OSI中的会话层+表示层+应用层
在TCP / IP模型中, 设计者认为网络的最上层(应用层), 最下层(物理层), 分别对应着与使用者 / 硬件直接打交道的任务, 而使用者的需求繁多, 硬件的类型同样纷繁复杂, 因此这两个部分不应当做出过多的限制规定, 故将OSI模型中的规定大幅度简化, 以留给设计者更充分的创新空间.
此外, 在传输层和网络层上, 也不尽相同. 在TCP / IP模型中, 通常只有传输层进行严格的差错控制以及流量控制. 而下层则往往仅进行数据的传输. 这是因为全局的正确一定能够推测出局部的正确, 而代价则是当出现错误时, 需要令整个报文段整体重传. 也就是说, TCP / IP的网络层提供的是 无连接, 不可靠的服务 .
本章, 我们对网络的基础概念和一些结构性框架进行了较为详尽的说明, 从下一章开始, 我们将遵循我们此前说的五层结构, 一层一层的进行系统性学习.
本篇博文就到这里~