计算机网络----基本概念
基本概念
在这一章从整体上介绍计算机网络的概况, 为后续的学习搭建起整体的框架;
介绍计算机网络中的基础术语和概念;
什么是因特网
『 因特网 』是一个世界范围内互联了数以亿计的计算设备的计算机网络;
因特网具体构成
因特网互联了数以亿计的计算设备, 这些设备被称为『 主机 host 』或『 端系统 end system 』
- 🌰 例如, PC 电脑, 手机, 游戏机, 汽车, 等;
端系统通过『 通信链路 Communication Link 』和 『 分组交换机 Packet Switch 』连接到一起;
- 通信链路由不同类型的物理媒体组成;
- 🌰 例如, 同轴电缆, 铜线, 光纤, 无线电频谱, 等;
- 不同的链路能以不同的传输速率以『 比特/秒 bit/s 』为单位传输数据;
当一个端系统要向另外一个端系统传输数据时, 发送端系统将数据分成几段, 并在每段上加上一些相关信息, 由此形成的信息包被称为『 分组 Packet 』这些分组最终通过网络发送到了目的端系统;
“分组交换机” 从它的一条入通线链路接收到达的分组,并从它的一条出通信链路转发该分组;
- 最著名的两种分组交换机是『 路由器 Router 』和『 链路层交换机 Link - Layer Switch 』:
从发送端到接收端系统,一个分组所经历的一系列 “通信链路” 和 “分组交换机” 称为通过该网络的『 路径 Route / Path 』;
端系统通过『 因特网服务提供商 Internet Service Provider, ISP 』接入英特网;
- 每个 ISP 是一个由多个分组交换器和多个通信链路组成的网络,各个 ISP 为端系统提供了各种不同类型的网络接入;
- 端系统连接入低层的 ISP,而低层的 ISP 通过国家的,国际的高层 ISP 互联起来,高层的 ISP 是由通过高速光纤链路互联的高速路由器组成的;
端系统, 分组交换机和其他因特网部件都要遵循一系列的『 协议 Protocol 』。这些协议控制着因特网中信息的接收和发送;
因特网提供服务
在日常生活中, 我们通过网络可以使用到各种应用程序. 🌰 例如, 通讯软件, 社交网络, 在线视频, 网络游戏, 等;
这些依靠于网络的应用程序被称为『 分布式应用程序 Distributed Application 』因为它们涉及多台互相交换数据的端系统;
为了能够让应用程序在一个端系统上向另外一个端系统发送数据。端系统自身提供了一堆用于网络通信的 API.
网络协议
拿人类活动进行类比。两个人为了完成一项工作,必须遵守相同的通信协议。比如交流的语言,语法,统一遵守的社交规则;
- 如果一个人说英语,另外一个人说日语,两个人都互相听不懂对方的话,这两个人很难进行合作;
在互联网中为了能够让各种网络设备互相交流,必须遵守遵守统一的协议 Protocal;
- 一个协议定义了两个或多个通信实体之间交换的报文格式, 各部分含义。以及发送报文 / 接收报文,或其他事件时所采取的动作与次序;
网络边缘
被因特网相连起来的『 端系统 』处于网络的边缘;
端系统也称为『 主机 』, 因为他们可以容纳各种应用程序;
接入网
『 接入网 Access Network 』指将 “端系统” 连接到其『 边缘路由器 Edge Route 』的物理链路;
- 边缘路由器: 是一个端系统到任何其他远程端系统的 “路径” 上的 “第一台路由器”;
接入网主要存在三种接入网络的方式:
- 点对点方式接入;
- 以太网/WiFi方式接入;
- 广域无线接入;
生活中通常有如下几种接入网的使用环境:
- 家庭接入;
- 公司接入;
- 广域移动无线接入;
家庭接入
家庭接入互联网有如下几种方式:
数字用户线 (Digital Subscriber Line, DSL) :
- 住户通常从提供本地电话接入的电话公司处获得 DSL 因特网接入, 因此本地电话公司也是它的 ISP;
- 每个用户的 『 DSL 调制解调器 』使用电话线与位于本地电话公司的本地中心局 CO 中的『 数字用户线接入复用器 DSLAM 』 来交换数据;
- 家庭的 DSL 调制解调器将数字数据转换成高频音;
- 数字用户线接入复用器 DSLAM 将来自家庭的模型信号转换成数字信号;
- 电话线能同时承载网络信号和电话信号, 是因为他它们采用了不同的信号频率;
电缆因特网接入 (Cable Internet Access) :
- 利用了有线电视的基础设施;
- 通过光缆将电缆头端连接到地区枢纽, 然后再从这里使用传统的同轴电缆连接到各个家庭;
- 因为在这个系统中同时使用了光缆和同轴电缆, 所以也称为『 混合光纤同轴 Hybrid Fiber Coax, HFC 』
- 家庭需要使用『 电缆调制解调器 Cable Modem 』来将家庭的端系统发送出的数字信号转换成模拟信号;
- 在电缆头端, 使用『 电缆调制解调器端接系统 Cable Modem Termination System, CMTS 』来讲模拟信号转换成数字信号;
光纤到户 (Fiber To The Home, FTTH) :
- 光纤接入很简单, 从本地中心局直接连一条到家庭的光纤, 这被称为『 直接光纤 』
- 也有很多家庭共享一根光纤接入的方式;
- 家庭端使用『 光纤网络端接器 Optical Network Terminator, ONT 』它将数字信号转换成光信号;
- 中心局使用『 光纤线路端接器 Optical Line Terminator, OLT 』将光信号转换成数字信号;
企业接入
在公司和大学这种环境中, 通常端系统先接入一个由『 以太网交换机 』组成的『 局域网 LAN 』, 然后再由与以太网交换机相连的『 边缘路由器 』连接到因特网中;
物理媒介
在端到端的传输中,每个比特通过传播电磁波或者光脉冲的方式跨越物理媒介进行发送。物理媒介可以分成两种类型,导引型媒介和非导引型媒介。导引型媒介音波沿着固体媒介前行,非导引型媒介电波在空气或者外层空间传播,例如在无线局域网或数字卫星频道中传播。
双绞线:两根相互绝缘的铜导线
同轴电缆:有双向传输的功能
光缆:在玻璃光纤传播光脉冲,每一脉冲一比特(高速运行,底误码率)
非导引型介质–无线电波:通过电磁频谱传播信号
网络核心
『 网络核心 』即由互联端系统的『 分组交换机 』和『 通信链路 』构成的网状网络;
网络链路和交换机移动数据有两种基本方法:
- 电路交换 circuit switching;
- 分组交换 packet switching;
其演化方式如下图
电路交换
电路交换网络 中,在端系统建通信会话期间,预留了端系统间通信需要的资源 (缓存,链路传输速率)
- 🌰 传统的电话网络就是电路交换网络的例子;
- 发送方和接收方之间是一条他们 “专属的” 连接,这被称为『 电路 circuit 』这保证了可以以恒定的速率向接收方传送数据;
- 上图是一个电路交换网络;
- 在这个网络中, 用 4 条链路互联了 4 台电路交换机;
- 每条链路中都有 4 个电路;
- 因此每条链路同时支持 4 个并行的连接;
- 每个端系统间都建立起了『 端到端连接 end-to-end connection 』
- 对于本例的一个端到端连接来说, 它使用链路的 1/4 带宽, 哪怕其他三条电路不被使用, 也要为将来的连接进行预留;
电路交换网络中的复用
链路中的电路是通过『 频分复用 Frequency Division Multiplexing, FDM 』或『 时分复用 』来实现的;
- 对于 FDM 链路, 链路的频谱由跨越链路创建的所有连接所共享。而每个连接专用一个频段;
- 🌰 调频无线电台也使用频分复用来共享 88~108 MHz 的频谱,其中每个电台分配一个特定的频段;
- 对于一条 TDM 链路, 时间被划分为固定区间的帧, 而每帧又被划分为固定数量的时隙. 每个连接被分配了指定的时隙;
Example
计算通过电路交换网络将一个640,000比特长的文件从主机A传送到主机B需要多长时间(所有链路速率皆为1.536 Mbps,每条链路使用有24个时隙的TDM,建立端到端的电路需要500毫秒)?
t = 640000 ( ( 1.536 × 1000 × 1000 ) ÷ 24 ) + 0.5 = 10.5 s t=\frac{640000}{((1.536×1000×1000)÷24)}+0.5 = 10.5s t=((1.536×1000×1000)÷24)640000+0.5=10.5s
电路交换的特性
- 数据交换前需建立起一条从发端到收端的物理通路
- 在数据交换的全部时间内用户始终占用端到端的固定传输信道
- 交换双方可实时进行数据交换而不会存在任何延迟
电路交换的问题
- 计算机之间的数据交换往往具有突发性和间歇性特征,而对电路交换而言,用户支付的费用则是按用户占用线路的时间来收费的
- 不够灵活。只要在通话双方建立的通路中的任何一点出了故障,就必须重新拨号建立新的连接,这对紧急和重要通信是很不利的。
分组交换
- 在各种网络应用中, 端系统彼此交换『 报文 message 』
- 报文里可以包含数据, 也可以执行一种控制功能;
- 为了传输报文, 源端系统将报文拆分成较小的固定长度的数据块,再在每一个数据段前面增加一个首部(包含地址等控制信息,供交换机选择路由),称为『 分组 Packet 』
- 在源端系统和目的端系统之间, 每个分组都通过『 通信链路 』和『 分组交换机 』传送;
- 分组以等于该链路最大传输速率进行传输, 如果要经过链路发送一个
L
L
L 比特的分组, 链路的传输速率为
R
R
R 比特/秒, 则传输完该分组所需的时间为
L
/
R
L/R
L/R 秒;
存储转发传输
- 多数分组交换机在链路的输入端使用『 存储转发传输 store and forward transmission 』机制
- 它是指在交换机能够开始向输出链路传输该分组的第一个比特之前, 必须接收到整个分组;
- 如果源端系统从
0
0
0 时刻开始传输分组, 在
L
/
R
L/R
L/R 时刻路由器接收到整个分组, 之后路由器开始向目的端系统传输分组, 在时刻
2
L
/
R
2L/R
2L/R 目的端接收到整个分组.
- 总时延: 2 L / R 2L/R 2L/R
- 这是在只有一台路由器, 两条链路的情况下;
- 可以推导, 如果有源端到目的端之间有 N − 1 N - 1 N−1 个路由器, N N N 条速率为 R R R 链路, 则总时延为 N × L / R N \times L/R N×L/R
排队时延 & 分组丢失
- 每个分组交换机有多条链路与之相连,对于每条相连的链路,该分组交换机具有一个『 输出缓存 output buffer 』也称为『 输出队列 output queue 』
- 它用于储存路由器,准备发往那条链路的分组。需要缓存的原因是如果到达的分组需要传输到某条链路,但发现此链路正忙于传输其他分组则该分组必须在缓存中进行等待;
- 所以除了储存转发时延之外分组还要承受输出缓存的『 排队时延 queue delay 』
- 如果分组到达路由器之后,发现输出缓存已满。则这个分组就无法被接收,就会出现『 分组丢失/丢包 packet lost 』的情况。
转发表 & 路由选择协议
- 在因特网中,每个端系统都具备一个 IP 地址,当原主机要向目的端系统发送一个分组时。源端系统在该分组的首部包含了目的地的 IP 地址;
- 每个路由器都具备一个『 转发表 forwarding table 』,它会将接收到的分组中首部带的目的地址映射为对应的输出链路;
- 通过一些『 路由选择协议 routing protocol 』分组交换机可以自动地设置转发表;
分组交换 vs 电路交换
因为电路交换网络中, 在连接没有被使用时, 称为『 静默期 silent period 』其依旧占用着资源, 这导致它的传输效率比较低;
总体来讲, “分组交换” 性能优于 “电路交换”.
在相同条件下,分组交换能够比电路交换支持更多的用户。当用户数较少时,分组交换能够获得比电路交换更好的性能。
假设:1Mbps的链路,每个用户需要100kbps
电路交换:仅支持10个用户(1Mbps/100kbps)
分组交换:分组交换下1个用户活跃的概率为0.1,35个用户条件下,11个及以上用户同时活动的概率为0.0004,即10个及10个以内用户同时活跃的概率为0.9996,基本上与电路交换性能相当。
若要连续传送大量数据,且其传送时间远大于呼叫建立时间,则采用在数据通信之前预先分配传输带宽的电路交换较为合适。分组交换不需要预先分配传输带宽,在传送突发数据时可提高整个网络的信道利用率。
网络的网络
端系统经过一个『 接入 ISP 』与因特网相连;
而接入 ISP 自身也必须相连, 才能保证所有端系统都可以相连;
ISP 之间的连接被称作『 网络的网络 』
现如今的因特网网络结构非常复杂, 为了帮助理解, 下面 👇 我们从最基础的网络结构一步步地讲解:
最简单的结构:
- 最简单的方法就是将每个接入 ISP 都直接与其他所有的接入 ISP 单独连一条通信链路;
- 但很显然, 这种实现成本太高, 也很难实现;
网络结构 1:
- 创建一个单一的『 全球承载 ISP 』负责互联所有的接入 ISP;
- 因为承载全球的接入 ISP 连接成本很高, 所以全球承载 ISP 要进行收费;
- 接入 ISP 被称为『 客户 Customer 』;
- 全球承载 ISP 被称为『 提供商 Provider 』
网络结构 2:
- 如果精英全球承载 ISP 是有利可图的, 自由市场中就会涌入很多其他的公司;
- 这时就会有多个全球承载 ISP;
- 接入 ISP 可以在多个提供商之间进行选择;
- 全球承载 ISP 之间是必须互联的, 这样才能让连接到不同全球承载 ISP 的接入 ISP 之间互联;
- 这是一种两层的网络等级结构:
- 全球承载服务商位于顶层, 其也称为『 第一层 ISP ( tier-1 ISP ) 』
- 接入 ISP 位于底层;
网络结构 3:
- 这个世界很大, 有很多地方离全球承载 ISP 都很远, 接入 ISP 很难与它们连接;
- 这时出现了, 在给定区域提供连接的『 区域 ISP 』;
- 区域中, 接入 ISP 可以与区域 ISP 连接, 也可以选择接入第一层 ISP;
- 区域 ISP 与第一层 ISP 进行连接;
网络结构 4:
- 为了能够对接收到的连接和数据进行各种操作和控制, 除接入 ISP 之外, 再网络结构的各个等级都添加了『 入网点/存在点 Point of Presence, PoP』
- 除了第一层 ISP 之外, 任何 ISP 都可以选择『 多宿 Multi-Home 』即两个或更多供应商 ISP 相互连接;
- 🌰 一个接入 ISP 可以与多个区域 ISP 或全球承载 ISP 连接;
- 这样如果一个供应商 ISP 出现故障了, 不会影响当前 ISP 的服务;
- 位于相同等级层次的临近 ISP 之间还能够进行『 对等 Peer 』即通过网络连接在一起, 使他们之间的流量不需要上层的 ISP 传输;
- 因为上层的供应商会对流量收费, 两个平级 ISP 直接相连的话, 就可以省钱了;
- 当两个 ISP 对等时, 它们是不对流量进行结算的, 也就是互相不收钱;
- 当对等的需求多了, 就有第三方公司创建『 因特网交换点 Internet Exchange Point, IXP 』在这里不同等级层次的 ISP 都可以进行对等;
网络结构 5:
- 在网络结构 4 的基础之上添加了『 内容提供商网络 content provider network 』
- 类似谷歌这样的公司就有自己的 “内容提供商网络”. 它把自己的服务器连接起来, 构成一个独立于公共因特网的专有网络;
- 这个专有网络通过与较低层的 ISP 对等 (无结算) 从而避免与接入 ISP 连接, 省去这部分流量的费用;
- 并且通过自己的专有网络, 内容供应商可以对如何提供服务给端用户有了更多的控制;
分组交换网中的时延, 丢包, 吞吐量
在从一个端系统向另一个端系统传递分组的过程中, 会经历各种不同类型的时延:
- 结点处理时延 nodal processing delay;
- 排队时延 queuing delay ;
- 传输时延 transmission delay;
- 传播时延 propagating delay;
这些时延总体累加起来是, 结点总时延 total nodal delay;
时延的类型
下图 👇 这个模型中展示了端到端传输路径的一部分, 一个分组从上游结点想通过路由器 A 来向路由器 B 发送. 下面我们通过模型来解释各种时延:
结点处理时延:
- 指的是分组进入路由器后, 机器会对分组上的信息进行必要的处理.
- 🌰 例如, 通过分组的首部来找到分组的去向, 进行错误检验, 等;
- 在结束完结点处理后, 路由器将分组引向通往路由器 B 链路的队列;
排队时延:
- 指的是分组在队列上等待传输造成的时延;
- 如果链路上没有分组在传播, 则排队时延为 0;
传输时延:
- 由链路传输速率和分组长度造成的时延;
- 假如分组长度为 L L L, 链路传输速率为 R b p s / s R \space {bps/s} R bps/s, 则传输时延为 L / R L/R L/R;
- 这是将所有的分组的比特从路由器推向链路所花的时间;
传播时延:
- 分组在链路上从起点到终点传播所花的时间;
- 链路的传播速率取决于物理媒体, 但基本上略小与光速;
- 传播时延等于链路的长度, 除以传播速度;
端到端的总时延:
- 假定在源主机到目的主机之间有 N − 1 N-1 N−1 台路由器, 每台路由器和源主机上的处理时延是 d p r o c d_{proc} dproc, 每台路由器和源主机的传输时延是 d t r a n s d_{trans} dtrans, 每条链路的传播时延是 d p r o p {d_{prop}} dprop;
- 则端到端传输的总时延为: d e n d − e n d = N ( d p r o c + d t r a n s + d p r o p ) d_{end-end} = N(d_{proc} + d_{trans} + d_{prop}) dend−end=N(dproc+dtrans+dprop)
排队时延 & 丢包
排队时延的大小, 很大程度上取决于流量到达该队列的速率, 链路的传输速率, 和到达流量的性质;
- 假如 a a a 表示分组到达队列的平均速率, 单位为 p k t / s pkt/s pkt/s;
- R R R 是路由器的传输速率, 即从队列向链路推出比特的速率;
- 假定每个分组都由 L L L 个比特组成, 同时假定队列无限大;
- 则比率 L a / R La/R La/R 表达了 “比特到达队列的平均速率, 与队列向外推出的比特速率的比值”, 这被称为『 流量强度 traffic intensity 』
- 如果 L a / R > 1 La/R > 1 La/R>1 则比特到达队列的速率大于队列向外推出比特的速率, 如果分组无限地以 a a a 速率传输到向路由器, 则会造成排队时延的无限增大;
上面我们假设队列能容纳无限多的分组. 但现实中, 队列的容量是有限的:
- 如果队列已满, 新来的分组会被『 丢弃 drop 』, 即分组遭到『 丢失 lost 』,或者路由形成环路,无法送到目的地,则分组也会丢失。
- 分组丢失的份额随着 “流量强度” 增加而增加;
- 一个结点的性能不仅根据 “时延” 来衡量, 也根据 “丢包率” 来衡量;
吞吐量
从主机 A 向主机 B 传输一个文件, 在任何时间的『 瞬间吞吐量 instantaneous throughput 』指的是主机 B 接收该文件的瞬间速率;
如果文件由 F F F 个比特组成, 主机 B 接收完 F F F 比特用了 T T T 秒, 则文件传输的『 平均吞吐量 average throughput 』是 F / T b p s F/T \space bps F/T bps
观察下面 👇 这个模型, 服务器要经过路由器向客户传递数据, 服务器到路由器的链路传输速率为 R s R_s Rs, 路由器到客户链路的传输速率为 R c R_c Rc;
- 很容易想象, 客户接收分组的速率为两个链路传输速率的最小值, 即吞吐量为 m i n [ R s , R c ] min[R_s, R_c] min[Rs,Rc];
- 传输速率最小的链路也被称为『 瓶颈链路 bottleneck link 』, 其速率等于吞吐量;
- 传输一个 F F F 个比特大小的文件, 所花时间为 F / m i n [ R s , R c ] F/min[R_s, R_c] F/min[Rs,Rc]
- 同理, 如果路径中有 N N N 条链路, 速率分别是 R 1 , R 2 , . . . , R n R_1, R_2, ..., R_n R1,R2,...,Rn, 则吞吐量是 m i n [ R 1 , R 2 , . . . , R n ] min[R_1, R_2, ..., R_n] min[R1,R2,...,Rn]
在现实中, 网络核心的所有链路都有非常高的传输速率, 基本上远远高于需求, 所以限制吞吐量的因素只要是每个主机的接入网;
协议层次及其服务模型
在现实中, 我为简化一个复杂的系统, 我们通常会将其抽象成分层的体系结构;
- 每个分层各自承载特定的功能, 并与其他层次用定义好的交互方法来进行合作;
- 只要与其他层次交互的方法不变, 层次内部对于功能的具体实现改变, 不会影响到其他层次;
🌰 下图展示了民航服务的分层结构:
协议分层
计算机网络设计中, 以『 分层 layer 』的方式组织协议, 以及这些协议的网络硬件和软件;
- 所有层次的协议合起来被称为『 协议栈 protocal stack 』
『 因特网的协议栈 』由 5 个层次组成, 自顶向下分别为:
应用层:
- 这个层次存放的协议, 为网络应用程序提供服务;
- 🌰 例如, HTTP, SMTP, FTP, DNS, 等;
- 应用层协议分布在多个端系统上, 一个端系统中的应用程序使用协议向另一个端系统应用程序发送信息;
- 位于应用层的传输的信息称为『 报文 message 』
运输层:
- 运输车在应用程序两端传送应用层报文;
- 在因特网中, 有两个运输协议, TCP 和 UDP;
- TCP 为应用程序提供了面向连接的服务;
- UDP 为应用程序提供了无连接的服务;
- 运输层传输的分组, 称为『 报文段 segment 』
网络层:
- 网络层负责为传递的分层选择最合适的网络路径;
- 网络层协议有著名的 IP 协议;
- 网络层传输的分组, 称为『 数据报 datagram 』
链路层:
- 链路层将网络层传输的数据报从一个结点移动到下一个结点;
- 链路层传递的分组, 被称为『 帧 frame 』
物理层:
- 物理层将链路层传递的帧, 一个比特一个比特地从一个结点移动到下一个结点;
- 这层的协议与链路的实际传输媒体相关;
- 不同的链路媒体, 传输比特的方式也各不相同;
OSI 模型
因特网协议栈不是唯一的协议栈;
20 世纪 70 年代, 国际标准化组织 ISO 提出了『 开发系统互联 OSI 』模型的 7 层网络协议栈;
相比较与 5 层协议栈, 它在应用层和运输层间, 添加了 “表示层” 和 “会话层”;
- 表示层: 使得通信的应用程序能够明白接收到的数据的含义;
- 数据可能被压缩, 加密, 或者采用特殊的编码格式;
- 会话层: 提供了数据交换定界和同步功能;
- 提供了检查点, 数据恢复等功能;
封装
在下图可以看出, 发送端在协议栈中自顶向下地传递分组时, 每一层都会在上一层分组的基础上, 加上自己层次的附加信息 ( 首部字段 ) , 这种行为成为『 封装 encapsulation 』
- 这些首部字段, 会被接收端的对应层次所使用, 用以传递和层次相关的信息;
- 一个分组具有两种类型的字段: 『 首部字段 』 和『 有效载荷字段 payload field 』
- 有效载荷字段就是来自于上一层的分组;
从这张图还可以看出, 协议栈不需要在所有的网络设备中得以实现, 只需要各自实现自身所需的即可;
越在网络边缘, 所需的网络协议越复杂, 复杂性越高;