概述

计算机网络

一篇围绕网络组成、数据交换、时延计算和分层参考模型展开的计算机网络概述笔记。


计算机网络把分散的端系统连接起来,使应用进程能够交换数据。数据经过接入网进入由交换设备组成的网络核心,再由不同层次的协议逐步处理。本篇先建立这条从物理连接到协议模型的主线,不展开具体的路由算法、传输协议实现和应用协议。

概述知识结构
* 计算机网络
  * 网络组成
    * 网络边缘
      * 端系统
      * 接入网
    * 网络核心
      * 链路
      * 分组交换机
    * ISP
      * 网络互联
  * 数据交换
    * 电路交换
      * 预留端到端资源
    * 报文交换
      * 整条报文存储转发
    * 分组交换
      * 分组存储转发
      * 流水线
    * 时延
      * 处理
      * 排队
      * 传输
      * 传播
  * 网络分层
    * 对等实体
      * 协议
        * 语法
        * 语义
        * 同步
    * 相邻层
      * 接口
      * 服务
    * 数据单元
      * PDU = PCI + SDU
  * 参考模型
    * OSI 七层
    * TCP/IP 四层
    * 五层教学模型

1. 网络的组成

1.1 端系统、链路与分组交换机

计算机网络可以抽象为节点(node)和连接节点的链路(link)。节点包括主机、交换机和路由器等;链路提供节点之间的传输通道。网络中的每个节点并不都直接面向用户,真正运行应用进程的主机称为端系统(end system),也称主机(host)。

对象作用常见实例
端系统运行应用进程,产生或消费数据个人电脑、手机、服务器、物联网设备
通信链路在相邻节点之间传输比特,具有传输速率和传播距离双绞线、光纤、Wi-Fi 无线信道、卫星链路
分组交换机接收分组、查看控制信息并决定下一跳链路层交换机、路由器
协议与软件规定数据格式、转发规则和错误处理动作Ethernet、IP、TCP、应用层协议

链路的传输速率通常记为 RR,单位是 bit/s。在分组交换网络中,应用数据会在发送端被组织成分组(packet);交换机收到分组后,根据首部中的地址或标签选择输出链路。

节点与链路的连接关系称为网络拓扑。总线形、星形、环形和网状是常见的抽象结构;接入网络常采用星形结构,具有冗余路径的网络核心则更接近网状结构。拓扑只描述连接关系,不决定网络使用哪一层协议或哪一种交换方式。

四种结构分别强调共享主干、中心节点、闭合环路与多路径互联

链路层交换机主要依据链路层地址在同一接入网络内转发帧,路由器依据网络层地址在不同网络之间转发分组。现实设备可能同时实现多个层次的功能,因此“交换机属于链路层、路由器属于网络层”是理解其典型职责的简化说法。

1.2 网络边缘与网络核心

网络边缘由端系统组成。客户端发起请求,服务器提供服务;对等式应用中的同一端系统也可能同时请求和提供服务。端系统通过接入网连接到边缘路由器。接入网连接端系统与路径上的第一台路由器;家庭场景通常包括终端到家庭网关的 Wi-Fi 或 Ethernet,以及家庭网关到 ISP 的光纤、同轴电缆等接入链路。

家庭固定宽带常见三种接入方式:

  • 数字用户线(Digital Subscriber Line,DSL) 复用已有的电话双绞线,本地环路从住宅延伸到电话公司的中心局。用户侧的 DSL 调制解调器与中心局的 DSLAM 通信,语音和数据占用不同频段,因此可以同时通话和上网。每户拥有独立的本地环路,但可用速率会受到线路长度和铜线质量影响。
  • 电缆因特网接入(cable Internet access) 复用有线电视的混合光纤同轴网络,用户侧的电缆调制解调器连接运营商的 CMTS。同一片区的住户共享接入网的广播介质,因此实际速率会受到同时在线用户数量影响。
  • 光纤到户(Fiber To The Home,FTTH) 把光纤直接铺设到住宅。它提供更高的传输能力和更长的传输距离;常见的无源光网络 (PON)会让多户共享分光器到运营商端设备之间的光纤。

网络核心由大量互联的交换设备和链路构成。核心不直接运行用户应用,而是为边缘端系统提供转发和通信能力。在因特网这样的分组交换网络中,路由器通常完整接收一个分组后再执行存储转发;部分链路层设备也可以采用直通转发,因此存储转发不是所有交换设备唯一的实现方式。

“边缘”和“核心”描述的是工作位置,而非两种互斥的硬件类型:同一台设备可以在不同网络中承担不同角色。

1.3 ISP 与网络互联

单个网络通常无法覆盖所有端系统。互联网服务提供商(Internet Service Provider,ISP)建设接入网、骨干链路和路由器,为用户提供接入服务;多个 ISP 再通过互联形成更大的网络。因特网(Internet)因此是由许多自治管理的网络互联而成的“网络的网络”。

小写的 internet 是多个网络互联这一类结构的通用名词,不限定协议;大写的 Internet 指采用 TCP/IP 协议族的全球公共互联网络。用户向 ISP 获取接入能力时,实际获得的是到 ISP 网络的链路和相应的网络配置,跨越多个 ISP 后才能到达远端服务。

2. 数据交换与时延

交换是按照某种规则分配和使用链路资源,使数据从源节点到达目的节点。电路交换预先保留端到端路径上的通信资源,报文交换以整条报文为存储转发单位,分组交换则把报文拆成较小的分组并逐个转发。

2.1 电路交换

电路交换的完整通信过程经历三个阶段,传送数据前先建立连接:

  1. 建立连接,沿路径为通信双方分配并保持资源。
  2. 传输数据,双方持续使用已分配的线路、时隙、频段或其他信道资源相互通信。
  3. 释放连接,归还资源。
一条端到端电路由两端用户线、交换机内部连接和中继线串接而成

电路建立后,数据按照连续比特流在端到端资源上发送,中间节点不必为每个数据单元执行完整的存储转发。传统电话网是典型实例;现代网络中“电路”不一定是一根独占的物理导线,也可以是通过时分复用(TDM)、频分复用(FDM)等方式预留的逻辑资源。

频分复用把链路的频率范围划成多个互不重叠的频带,每条电路持续占用其中一个频带;时分复用把时间划成周期性帧,每条电路在每帧中占用固定时隙。两种方式都在连接存续期间保留资源,即使某条电路暂时没有数据,其频带或时隙通常也不能直接交给其他连接。

图中以两个各 4 kHz 的频带示意链路资源切分
编号 1~4 的时隙构成重复帧,相同编号归同一连接

电路交换的主要特征是资源有保证、传输过程稳定,但空闲时资源仍被占用。若数据量很小或通信呈突发状态,建立连接和保留资源的代价可能超过实际传输时间。

忽略释放连接对数据到达时间的影响时,电路交换的数据完成时间可写为

Tcircuit=tsetup+MRcircuit+i=1kdprop,i.T_{\text{circuit}}= t_{\text{setup}}+ \frac{M}{R_{\text{circuit}}}+ \sum_{i=1}^{k} d_{\text{prop},i}.

其中 tsetupt_{\text{setup}} 是建连时间, MM 是数据量,RcircuitR_{\text{circuit}} 是分配给该连接的速率,kk 是路径上的链路,dprop,id_{\text{prop},i} 是每条链路上的传播时延,取决于每段链路距离和介质。

电路交换节点通常透明转发连续比特流,不会像报文交换机或分组交换机那样缓存数据单元并执行逐跳差错检测。端到端是否可靠仍取决于端系统采用的上层协议,不能仅由交换方式判断。

与此同时,电路交换的每个端到端通信占有固定资源,因此适合实时性要求高的服务,如语音电话。

2.2 报文交换

报文交换不预先建立连接。发送端把完整的数据和控制信息组成一条报文(message),每个交换节点 完整接收并缓存 这条报文,再发送到下一跳。这个过程称为存储转发(store-and-forward)。

报文交换能按当前链路状况灵活选择路径,只有实际发送报文的链路才被占用;但报文长度可变且可能很大,因此交换节点需要较大的缓存。每一跳都必须等整条报文接收完毕,长报文的存储转发时延和出错后的重传代价都较大。

从源端开始把报文送入第一条链路计时,到最后一个比特完整到达目的端为止。设链路上实际发送的报文长度为 MM (包含报文控制信息),报文经过 kk 条链路,第 ii 条链路的传输速率为 RiR_i、传播时延为 dprop,id_{\text{prop},i};路径上有 k1k-1 个中间交换节点,其平均处理时延和平均排队时延分别为 dˉproc,j\bar d_{\text{proc},j}dˉqueue,j\bar d_{\text{queue},j} 。报文完整到达目的端的平均时延为

Tˉmessage=i=1k(MRi+dprop,i)+j=1k1(dˉproc,j+dˉqueue,j).\bar T_{\text{message}}= \sum_{i=1}^{k}\left(\frac{M}{R_i}+ d_{\text{prop},i} \right)+ \sum_{j=1}^{k-1} \left( \bar d_{\text{proc},j}+ \bar d_{\text{queue},j} \right).

第一项表示整条报文在每条链路上都要重新传输,第二项累计中间交换节点的处理与排队;传输和传播项视为确定值,处理与排队项取平均值。该计时不包含重传;若题目还给出源端发送前或目的端接收后的处理时延,应另行加入。所有链路速率均为 RR ,并忽略传播、处理和排队时延时,上式化为

Tmessage=kMR.T_{\text{message}} = k\frac{M}{R}.

这里的 kk 是链路数而不是交换机数;路径上有 k1k-1 个中间交换机。

2.3 分组交换

分组交换先把较长的报文划分为若干较小的数据段,并给每个数据段添加首部,形成分组。首部可以包含源地址、目的地址、分组编号等控制信息。交换机只需接收一个分组,就可以开始向下一跳转发;后续分组可在前一分组转发时并行发送,形成流水线。

分组长度较小且通常有统一上限,便于缓存管理和差错处理。数据报网络独立转发各个分组;路径不同可能导致失序,拥塞、差错或故障可能导致丢失,协议恢复或网络异常还可能产生重复。接收端或更高层需要根据协议处理这些情况。每个分组都重复携带控制信息也会带来首部开销。

以下计算均从源端开始发送目标数据的第一个比特计时,到目的端完整收到目标数据为止。设报文被划分为 PP 个长度均为 LL 的分组,分组沿固定路径按顺序存储转发;路径包含 kk 条链路和 k1k-1 个中间交换节点。这里的 LL 指包含首部在内的实际传输长度;若只给出有效载荷长度,还要把首部计入 LL

单个分组的端到端时延

若各链路速率均为 RR,并忽略传播、处理和排队时延,一个分组必须在 kk 条链路上各完成一次传输,因此

dpacket=kLR.d_{\text{packet}} = k\frac{L}{R}.

允许第 ii 条链路具有不同的传输速率 RiR_i 和传播时延 dprop,id_{\text{prop},i},并令第 jj 个中间交换节点的处理、排队时延分别为 dproc,jd_{\text{proc},j}dqueue,jd_{\text{queue},j},则单个分组的端到端时延为

dpacket=i=1k(LRi+dprop,i)+j=1k1(dproc,j+dqueue,j).d_{\text{packet}}= \sum_{i=1}^{k}\left(\frac{L}{R_i}+ d_{\text{prop},i} \right)+ \sum_{j=1}^{k-1} \left( d_{\text{proc},j}+ d_{\text{queue},j} \right).

该式的计时在目的端完整收到这个分组时结束,不包含源端发送前和目的端接收后的额外处理。

整个报文的完成时延

整个报文的完成时延不是 PP 倍的单个分组时延,因为多个分组可以在不同链路上同时传输。回到各链路速率均为 RR 、忽略传播、处理和排队时延的情形,第一个分组经过 kk 条链路后到达,之后每隔 L/RL/R 到达一个分组,因此

Tmessage=(P+k1)LR.T_{\text{message}}= (P+k-1)\frac{L}{R}.

若忽略首部增量,使报文长度 M=PLM=PL,上式也可写成

Tmessage=M+(k1)LR.T_{\text{message}}= \frac{M+(k-1)L}{R}.

若只增加各链路的传播时延,且仍保持固定路径、等长分组、等速率链路以及不排队、不额外处理,则

Tmessage=(P+k1)LR+i=1kdprop,i.T_{\text{message}}= (P+k-1)\frac{L}{R}+ \sum_{i=1}^{k} d_{\text{prop},i}.

每个分组都要在各段链路上传播,但不同分组的传播过程会随流水线重叠, 所以路径传播时延只在整个报文的完成时间中累加一次,而不是乘以分组数 PP

若还要考虑处理和排队时延,不能把单个分组的时延直接乘以 PP。令第 pp 个分组开始从源端发送的时刻为 sps_p ,其在各中间节点实际经历的处理和排队时延为 dproc,p,jd_{\text{proc},p,j}dqueue,p,jd_{\text{queue},p,j},则该分组到达目的端的时刻可写为

Ap=sp+i=1k(LRi+dprop,i)+j=1k1(dproc,p,j+dqueue,p,j).A_p = s_p+ \sum_{i=1}^{k} \left( \frac{L}{R_i}+ d_{\text{prop},i} \right)+ \sum_{j=1}^{k-1} \left( d_{\text{proc},p,j}+ d_{\text{queue},p,j} \right).

整个报文的完成时延是所有分组到达时刻的最大值:

Tmessage=max1pPAp.T_{\text{message}}= \max_{1\leq p\leq P} A_p.

处理时延和排队时延可能改变流水线节拍,且排队时延取决于当时的流量和其他分组,不能把某个固定值简单乘以 PP 。若所有分组走同一路径并按序到达,最后一个分组通常给出这个最大值;若分组独立选路、长度不同或发生乱序,则必须按各分组的实际到达时刻取最大值。

2.4 时延的组成

一个分组经过交换节点和通信链路时,会经历处理、排队、传输与传播四类时延。

处理和排队位于节点 A,传输发生在发送接口,传播发生在 A—B 链路

2.4.1 处理时延

处理时延 dprocd_{\text{proc}} 是节点解析分组首部、查找转发表,以及执行协议规定的差错检测或校验所需的时间。它取决于节点的处理能力和协议操作,发生在节点决定如何处理或转发分组的阶段;并非每个节点和每层协议都一定执行差错检测。

2.4.2 排队时延

排队时延 dqueued_{\text{queue}} 是分组在输入队列或输出队列中等待处理、等待进入链路的时间。它随当前流量变化:队列为空时可以接近 00,突发流量到达或输出链路繁忙时则可能迅速增加。

链路负载与排队时延

若平均到达率为 aa 个分组/秒,每个分组长度为 LL,输出链路速率为 RR,链路负载 ρ\rho

ρ=LaR.\rho = \frac{La}{R}.

对于随机或突发到达的业务,ρ\rho 接近 11 时,排队时延通常会显著增加;ρ>1\rho>1 表示长期到达的比特量超过链路服务能力,在无限缓存模型中队列会持续增长,在有限缓存中则会持续丢包。ρ\rho 只能反映平均负载,精确的排队时延还取决于到达分布和调度策略。

2.4.3 传输时延

传输时延 dtransd_{\text{trans}} 是发送节点把一个长度为 LL 的分组全部推入速率为 RR 的链路所需的时间:

dtrans=LR.d_{\text{trans}} = \frac{L}{R}.

它由数据量和链路传输速率决定,与链路的物理长度无关。

2.4.4 传播时延

传播时延 dpropd_{\text{prop}} 是一个比特从链路一端传播到另一端所需的时间。设链路长度为 DD,信号在介质中的传播速率为 VV,则

dprop=DV.d_{\text{prop}} = \frac{D}{V}.

它由传播距离和介质决定,与分组长度和链路传输速率无关。

传输时延描述发送设备“推出”比特的过程,传播时延描述信号在介质中“走过”距离的过程,二者不能混用。

2.4.5 节点时延与端到端时延

一个分组经过单个节点及其输出链路时,节点时延为

dnode=dproc+dqueue+dtrans+dprop.d_{\text{node}}= d_{\text{proc}}+ d_{\text{queue}}+ d_{\text{trans}}+ d_{\text{prop}}.

对于由 kk 段链路和 k1k-1 个中间交换节点组成的路径,若分组长度为 LL,从源端开始发送计时,到分组在目的端完整到达为止,则单个分组的端到端时延为

dend=i=1k(LRi+DiVi)+j=1k1(dproc,j+dqueue,j).d_{\text{end}}= \sum_{i=1}^{k}\left(\frac{L}{R_i}+ \frac{D_i}{V_i} \right)+ \sum_{j=1}^{k-1} \left( d_{\text{proc},j}+ d_{\text{queue},j} \right).

式中第一项累计每条链路的传输与传播时延,第二项累计中间交换节点的处理与排队时延。题目若给出源端或目的端的额外处理时间,还应按其计时范围另行加入。

2.5 三种交换方式的比较

下表中的完成时延统一假设报文长度为 M=PLM=PLPP 个分组等长,路径包含 kk 条速率为 RR 的链路,报文交换和分组交换采用逐跳存储转发,并忽略处理、排队和重传。电路交换中的 RR 是端到端预留速率,各链路传播时延之和记为 dprop\sum d_{\text{prop}}

比较维度电路交换报文交换分组交换
传输前建连需要不需要通常不需要(数据报方式)
基本转发单位连续比特流整条报文分组
中间节点是否存储转发建连后不按报文存储转发完整接收报文后转发完整接收一个分组后转发
资源占用连接期间预留发送时按需占用发送时按需占用
缓存需求相对较小可能很大可按分组上限规划
完成时延tsetup+M/R+dpropt_{\text{setup}}+M/R+\sum d_{\text{prop}}kM/R+dpropkM/R+\sum d_{\text{prop}}(P+k1)L/R+dprop(P+k-1)L/R+\sum d_{\text{prop}}
逐跳差错处理(若协议提供)中间交换节点通常不按数据单元检错可按完整报文检错,恢复单位较大可按分组或帧检错,恢复单位较小
典型适用场景稳定、持续、需要资源保证的通信早期存储转发系统或整报文业务现代计算机网络的突发式数据通信

3. 网络分层

3.1 分层结构与实体

网络体系结构把功能组织为若干层,每一层完成相对独立的功能,只通过约定的边界使用相邻层服务。上层不依赖下层的具体实现,下层替换实现时,只要对外服务不变,上层通常无需修改。

层次中的活动元素称为实体(entity),可以是硬件模块、软件模块或进程。不同网络节点中承担同一层功能的实体称为对等实体(peer entities)。对等实体遵守同一层协议,形成逻辑上的水平通信;实际比特仍要在发送端逐层向下、经过链路和交换设备,再在接收端逐层向上。

分层带来模块化和标准化,也会产生重复功能、跨层信息需求和额外封装开销。

3.2 协议、接口与服务

协议、接口和服务分别描述不同方向的关系:

概念关系方向定义
协议(protocol)不同网络节点的同层对等实体之间,水平对等实体交换数据的规则
接口(interface)同一网络节点的相邻层之间,垂直上层使用下层服务的方法
服务(service)下层向紧邻上层,垂直下层(及其以下各层)向上层提供的能力
协议约束对等实体的水平通信,服务经 SAP 垂直提供给相邻上层

例如:同一主机的传输层与网络层通过接口交换服务请求;两台主机的传输层实体则按照传输层协议交换控制信息。

服务访问点(Service Access Point,SAP)是相邻层实体交换服务的逻辑入口,上层通过相邻层的接口访问下层。

3.3 协议的语法、语义与同步

一个可执行的网络协议至少要包含三类规则:

要素规定内容示例
语法(syntax)数据和控制信息的格式、字段顺序、字段长度和编码首部中端口号占用的位数,标志位如何排列
语义(semantics)字段代表的含义、应执行的动作以及应答收到确认标志后推进发送窗口
同步或时序(synchronization / timing)动作发生的条件、先后关系和允许的时机TCP三次握手后再传输数据

“同步”指协议事件的时序,而不等同于让两台设备共享一个物理时钟。

3.4 PDU、PCI 与 SDU

PDU:协议数据单元(Protocol Data Unit)是本层协议在对等实体之间处理和传送的完整数据单位,由本层的 PCI 与来自上层的 SDU 构成。

PCI:协议控制信息(Protocol Control Information)是本层为实现协议而添加的控制字段,通常表现为首部 HH 或尾部 TT

SDU:服务数据单元(Service Data Unit)是相邻层通过接口交付的数据。

在第 nn 层中,基本关系为

n-PDU=n-PCI+n-SDU.n\text{-PDU} = n\text{-PCI} + n\text{-SDU}. n-PCI=Hn+Tn.n\text{-PCI} = H_n+T_n.

即本层传送的完整数据单位等于服务数据控制信息的总和。若协议没有首部或尾部,相应项记为 00

实际协议中,一个 nn-SDU 可以被分片到多个 nn-PDU 的数据字段中,多个 nn-SDU 也可以聚合进一个 nn-PDU,因此往往并没有固定的一对一关系。

在不考虑分片与聚合的简化模型中,发送端把第 n+1n+1 层交来的 PDU 作为第 nn 层的 SDU,加入第 nn 层的 PCI 后形成 nn -PDU。因此跨层之间还有如下关系:

(n+1)-PDU=n-SDU.(n+1)\text{-PDU} = n\text{-SDU}.
简化封装示例:第 2 层 PCI 由首部 H₂ 与尾部 T₂ 组成

不同教材对 PDU 的通用名称略有差异,常见对应关系如下:

层次常见 PDU 名称说明
应用层报文(message)应用协议直接处理的内容
传输层TCP 报文段、UDP 数据报面向进程或套接字的端到端数据
网络层IP 数据报或分组带有源、目的网络地址
数据链路层帧(frame)在相邻节点之间传送
物理层比特或比特流(bits)以信号形式在介质上传输

4. OSI 与 TCP/IP 参考模型

4.1 OSI 七层模型

开放系统互连参考模型(Open Systems Interconnection Reference Model,OSI/RM)由 ISO 提出,按自下而上分为七层。

层次核心职责功能示例
7 应用层为应用进程提供网络服务文件传输、电子邮件
6 表示层处理数据表示差异编码转换、压缩与加密
5 会话层管理进程之间的会话会话检查点与恢复
4 传输层在进程之间提供端到端传输复用与分解、流量控制、差错控制
3 网络层在主机之间交付分组逻辑寻址与路由选择
2 数据链路层在节点之间传送帧成帧、介质访问与差错检测
1 物理层在物理介质上传送比特机械、电气、功能与规程特性

传输所⽤的物理介质(如双绞线、光缆、⽆线信道等)不属于物理层协议范畴,⽽是位于其下⽅。因此,有⼈将物理介质视“第0层”。

端系统实现七层,中继系统只处理网络层及以下

OSI 的第 1~3 层通常被视为网络子系统,第 4 层提供端到端传输,第 5~7 层面向应用。

4.2 TCP/IP 四层模型

TCP/IP 模型从实际协议族出发,通常概括为四层:应用层、传输层、网际层和网络接口层。

TCP/IP 层主要职责代表性协议或技术
应用层定义应用进程的消息格式和交互规则HTTP、DNS、SMTP、TLS
传输层在端系统进程之间传送应用数据TCP、UDP
网际层在端系统之间传送 IP 数据报IPv4、IPv6、ICMP
网络接口层使用具体链路和物理介质把数据交给下一跳Ethernet、Wi-Fi、PPP 及其物理层技术
TCP/IP 四层模型中的协议与网络接口关系

4.3 五层教学模型与层次对应

《计算机网络:自顶向下方法》等教材常使用五层教学模型:应用层、传输层、网络层、链路层和物理层。它把 TCP/IP 的网络接口层拆开,便于分别讨论链路协议和信号传输。

OSI 七层TCP/IP 四层五层教学模型主要关注范围
应用层、表示层、会话层应用层应用层应用消息和面向用户的网络服务
传输层传输层传输层进程到进程、端到端传输
网络层网际层网络层主机到主机、跨网络转发
数据链路层网络接口层链路层相邻节点、单段链路
物理层网络接口层物理层比特、信号和传输介质
OSI 与 TCP/IP 的层次范围对照,并非逐层等价

三种模型的层名和边界不同,但都保留了同一条分析路径:应用数据向下封装,经过端系统与中间设备的相应层次,在目的端向上解封装。

主机通常实现完整的协议栈;链路层交换机主要实现物理层和链路层;路由器通常实现物理层、链路层和网络层。