【USTC 计算机网络】第一章:计算机网络概述 - Internet 结构与 ISP、分组延时与丢失、协议层次与服务模型

发布于:2025-03-17 ⋅ 阅读:(25) ⋅ 点赞:(0)

本文首先介绍了互联网的分层架构与互联网服务提供商(ISP)在互联网中扮演的角色,接着介绍了分组在传输过程中的延时与丢失问题,以及如何使用一些如 Ping 与 Traceroute 这样的简单网络诊断工具检测网络情况,最后介绍了计算机网络多层次的协议栈(OSI 七层模型与 TCP/IP 模型)与服务模型。

1. Internet 结构与 ISP

Internet 并不是一个单一的网络,而是由无数个独立的网络通过标准协议(如 TCP/IP)互联而成,因此常被称为网络的网络。这种结构体现了它的分布式和开放性,每个组成部分(例如局域网、城域网或广域网)都可以由不同的组织或机构管理,但又通过公共协议无缝连接在一起,从而构成一个全球互联的体系。

Internet 是一个分层的架构:

  • 边缘网络:包括所有终端设备和用户所在的局域网,用户通过这些网络接入互联网。
  • 骨干网络:由高速数据传输线路和核心路由器构成,负责在全球范围内传递大量数据。
  • 互联交换点(IXP):在不同 ISP 之间起到对等互联作用,使数据可以在更短的路径上直接交换,降低延迟和传输成本。

每个单独的网络通常由一个或多个 ISP 运营,它们负责本地数据的收发与传输,而全球的 Internet 就是通过这些分散的网络(ISP 网络)互联而成。正因为如此,Internet 不归属于任何单一实体,而是一个开放、自治系统(Autonomous Systems,AS)之间相互协作构建的巨大网络体系。

那么 ISP 到底是什么?互联网服务提供商(Internet Service Provider,ISP)是连接用户与全球互联网的桥梁,通过多层次的网络结构和合作机制,实现了数据的高速、稳定传输。其主要作用包括:

  1. 提供接入服务:ISP 通过各种接入方式(如光纤、DSL、无线等)为家庭、企业或移动设备提供与 Internet 的连接,赋予用户一个可用的 IP 地址,从而实现上网。
  2. 网络互联与路由:不同层次的 ISP(通常分为主干 ISP、地区 ISP 和本地 ISP)之间通过对等互联或购买上游传输服务来交换数据。主干 ISP 通常覆盖范围广、带宽大,而本地 ISP 则直接为终端用户提供服务,二者之间通过路由器和交换机相互连接,确保数据能够在全球范围内高效传输。
  3. 资源分配与管理:ISP 还负责从上游机构获取 IP 地址资源、管理网络安全、实施流量控制和提供各种增值服务,如域名解析、电子邮件、Web 托管等。

在这里插入图片描述

ISP 之间的互联主要依靠两种方式:对等互联转接关系

  • 对等互联:在对等互联中,两个或多个 ISP 通过建立直接的物理连接互换流量,通常在互联网交换中心(IXP)处实现。这种方式下,各 ISP 之间互相交换数据,通常无需额外支付费用,因为彼此间基于互惠原则共享网络资源。这种互联方式能降低延迟、提高传输效率,并优化数据路由路径。
  • 转接关系:较小或区域性的 ISP 往往无法直接覆盖全球所有网络,因此会通过购买大型上游 ISP(通常是 Tier 1 ISP)的网络接入服务来实现全球互联。通过这种转接关系,小 ISP 支付一定费用给上游 ISP,从而能够通过后者的全球骨干网络访问其它 ISP 网络。

互联网内容提供商(Internet Content Provider,ICP)指的是那些向用户提供各种互联网内容和服务的企业,如门户网站、搜索引擎、视频平台等。在中国,“ICP 备案”是指网站需要取得政府颁发的 ICP 许可证才能合法运营。

大型的 ICP 为了提高内容传输效率和服务质量,往往会在全球各地部署数据中心,并构建自己的专用网络(例如 CDN 或专网),以便将内容更快、更稳定地传递给终端用户。这种专用网络可以减少对公共 ISP 网络的依赖,降低延迟和传输成本,但 ICP 依然需要通过 ISP 接入全球互联网,从而实现与外部用户和其他网络的互联。

2. 分组延时与丢失

在这里插入图片描述

2.1 延时与丢失

在数据从源头传输到目的地的过程中,分组(Packet)会经历多种延时,同时也可能由于多种原因丢失。一般来说,分组的总延时可以分为以下四个主要部分:

(1)处理延时(Processing Delay)

当路由器收到一个数据包时,它需要检查包头、执行错误检测、决定转发方向以及更新内部表项。这个过程所需的时间就是处理延时。虽然通常很短(以微秒计),但在处理复杂策略或遇到异常情况时也可能稍长。

(2)排队延时(Queuing Delay)

数据包在等待进入下一跳传输链路时,会先进入队列,分组到达链路的速率超过了链路输出的能力时,队列就会堵塞从而产生排队延时。这个延时取决于当前链路的拥塞状况,当网络繁忙时,排队延时会大幅增加;而在空闲时,排队延时可能几乎可以忽略不计。

(3)传输延时(Transmission Delay)

传输延时指的是将整个数据包的所有比特从路由器输出接口“推”到链路上所需的时间。其计算公式为:

T t r a n s m i s s i o n = L / R T_{transmission} = L / R Ttransmission=L/R

其中, L L L 表示数据包长度(比特数,单位 bits), R R R 是链路的传输速率(单位 bps)。例如,一个 1000 比特的数据包在 1 Mbps 链路上的传输延时大约为 0.001 秒。

(4)传播延时(Propagation Delay)

一旦比特被传输到链路上,它们还需要在物理介质中传播到下一个节点。传播延时由链路长度和信号在介质中传播的速度决定,其计算公式为:

T p r o p a g a t i o n = d / s T_{propagation} = d / s Tpropagation=d/s

其中, d d d 表示链路长度, s s s 表示信号传播速度(在光纤中大约为 2 × 1 0 8 m / s 2 \times 10^8 m/s 2×108m/s)。

因此,一个数据包从一个节点传输到下一个节点的总延时通常为这四种延时的总和:

T t o t a l = T p r o c e s s i n g + T q u e u i n g + T t r a n s m i s s i o n + T p r o p a g a t i o n T_{total} = T_{processing} + T_{queuing} + T_{transmission} + T_{propagation} Ttotal=Tprocessing+Tqueuing+Ttransmission+Tpropagation

我们定义流量强度 ρ \rho ρ 通常描述系统中数据包到达与处理能力之间的负载比例,常用数学公式表示为:

ρ = λ μ \rho = \frac {\lambda}{\mu} ρ=μλ

其中, λ \lambda λ数据包的平均到达率,而 μ \mu μ 为系统(或服务器)的平均处理速率。简言之,流量强度反映了服务器资源的利用率。

在排队理论中,当流量强度较低时,服务器大部分时间处于空闲状态,数据包几乎不需要等待,排队延时也就非常短;相反,当流量强度接近 1 时,服务器忙碌的时间增多,数据包在等待处理时会积压在队列中,导致排队延时急剧增加。特别是在 M/M/1 排队模型中(第一个 M 表示到达过程(例如顾客或数据包的到达)服从泊松分布,这意味着到达是随机且无记忆的;第二个 M 表示服务时间服从指数分布,即每个服务过程的持续时间是随机且无记忆的;数字 1 表示系统中只有一个服务台或服务器),平均排队延时可表示为:

T q u e u i n g = ρ μ ( 1 − ρ ) T_{queuing} = \frac {\rho}{\mu (1 - \rho)} Tqueuing=μ(1ρ)ρ

可以看到,当 ρ \rho ρ 趋近于 1 时,排队延时随之趋于无穷大。因此系统设计时流量强度不能大于等于 1,如果 ρ ≥ 1 \rho \ge 1 ρ1,意味着数据到达的速率不低于处理速率。此时,服务器处理不过来,队列会无限增长,系统将变得不稳定,最终导致严重拥堵甚至崩溃。且理论上平均等待时间和排队延时会趋向无穷大,这对实时应用或对延时敏感的业务来说是不可接受的。

当流量强度等于 1 时,服务器正好以和数据到达同样的速率工作,但这并没有考虑到随机性波动性。实际上,数据包的到达和服务时间都是随机的,因此即便平均上看似平衡,任何短暂的波动都可能导致服务暂时滞后,从而使队列迅速增长。

由于链路的队列缓冲区容量有限,当分组到达一个满的队列时,该分组将会丢失;或者是物理链路上可能因干扰、噪声或信号衰减等因素导致比特错误,接收端在检测到错误后会丢弃该数据包。丢失的分组可能会被前一个节点或源端系统重传,或根本不重传。

对于可靠传输协议(如 TCP),接收方会检测到缺失或损坏的分组(例如,通过校验和、序号等),并通过未收到确认(ACK)或收到重复 ACK 来通知发送方。发送方随后会重传这些丢失的分组,直到接收方成功确认为止。

在某些应用中,为了减少重传延迟(例如实时视频或语音传输),发送方会在发送数据时加入冗余信息,使接收方在丢失部分数据包的情况下仍能通过冗余信息重构原始数据,从而避免重传,这被称为前向纠错(Forward Error Correction,FEC)。

对于不提供内建重传机制的协议(如 UDP),应用层可以实现自己的错误检测和重传逻辑。比如,在实时应用中可能采用自定义的心跳机制和重传策略,或者结合 FEC 和冗余发送等方法来缓解丢包带来的影响。

2.2 延时诊断

Ping 与 Traceroute 是常用的网络诊断工具,用于检测网络连通性和了解数据包传输路径。

Ping 利用 ICMP 协议(Internet Control Message Protocol,互联网控制报文协议)发送 Echo Request(回显请求)数据包给目标主机,并等待接收其 Echo Reply(回显应答)。

通过计算发送请求和收到应答之间的时间差,Ping 能够测量数据包的往返时延(Round-Trip Time,RTT),并报告丢包率。如果目标主机能够回复 Ping 包,说明网络连通正常;否则可能存在网络故障、防火墙阻断或目标主机未响应 ICMP 请求。

在 Windows 或 Linux 系统中都可以在终端中输入以下命令使用 Ping:

ping [目标域名或 IP 地址]

如果能够正常 Ping 通显示的内容应该类似下面这样:

正在 Ping www.a.shifen.com [110.242.69.21] 具有 32 字节的数据:
来自 110.242.69.21 的回复: 字节=32 时间=22ms TTL=51
来自 110.242.69.21 的回复: 字节=32 时间=25ms TTL=51
来自 110.242.69.21 的回复: 字节=32 时间=24ms TTL=51
来自 110.242.69.21 的回复: 字节=32 时间=22ms TTL=51

110.242.69.21 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 22ms,最长 = 25ms,平均 = 23ms

Traceroute 利用 IP 数据包头中的 TTL(Time To Live)字段逐跳探测路径。TTL 表示数据包在网络中可以经过的最大跳数,每经过一个路由器(即一跳)就会将 TTL 值减1。

Traceroute 先发送 TTL = 1 的数据包,到达第一个路由器时 TTL 变为 0,路由器会丢弃该数据包并返回 ICMP “Time Exceeded”(超时)消息。接着,它发送 TTL = 2 的数据包,第二个路由器丢弃后返回 ICMP 信息,如此逐步递增 TTL 值,从而记录数据包经过的每个路由器的 IP 地址和响应时延。最终,Traceroute 列出从源到目的地之间所有经过的中间路由器,帮助用户了解数据传输路径和识别网络瓶颈。

Windows 与 Linux 系统使用 Traceroute 的命令有一点小区别:

tracert [目标域名或 IP 地址]  # Windows
traceroute [目标域名或 IP 地址]  # Linux

我们以下面这个例子来分析一下 Traceroute 返回的结果表示什么意思:

通过最多 30 个跃点跟踪
到 www.a.shifen.com [110.242.69.21] 的路由:

  1    <1 毫秒   <1 毫秒    4 ms  192.168.31.1
  2     2 ms     2 ms     3 ms  10.194.255.254
  3     3 ms     6 ms     2 ms  172.16.14.49
  4     *        *        *     请求超时。
  5     5 ms     6 ms     6 ms  113.200.174.1
  6     *        *        *     请求超时。
  7     *        *        *     请求超时。
  8     *        *        *     请求超时。
  9     *        *        *     请求超时。
 10    24 ms     *       21 ms  110.242.66.182
 11    22 ms    22 ms    37 ms  221.194.45.130
 12     *        *        *     请求超时。
 13     *        *        *     请求超时。
 14     *        *        *     请求超时。
 15     *        *        *     请求超时。
 16    22 ms    22 ms    21 ms  110.242.69.21

跟踪完成。

结果显示了从我们所在的终端到目标主机(其 IP 为 110.242.69.21)之间经过的各个路由器(跃点)以及它们返回的响应时间信息。

首先 Traceroute 工具设置了最大跃点数为 30,即最多探测 30 个中间路由器。为了更准确地测量每一跳(跃点)的延时,程序会向同一跃点发送三个探测包,并分别记录它们的往返时间,这样能够捕捉延时波动,提高测量可靠性。

  • 第 1 跃点: 192.168.31.1,返回时间分别为 <1 毫秒、<1 毫秒和 4 毫秒。这通常是我们本地的网关或路由器。
  • 第 2 跃点:10.194.255.254,返回时间约为 2 到 3 毫秒,这可能是运营商内部的一个路由器。
  • 第 3 跃点:172.16.14.49,响应时间在 2~6 毫秒之间,同样是内部网络中的路由器。
  • 第 4 跃点:请求超时,没有收到回应,可能该设备是一个保密的核心路由,设置了不响应 ICMP “Time Exceeded” 消息或者被防火墙屏蔽。
  • 一直到第 16 跃点:110.242.69.21,返回时间为 21~22 毫秒,这正是目标主机的 IP 地址,表明 Traceroute 到此结束。

2.3 吞吐量

吞吐量(Throughput)是指在单位时间内,通过网络传输成功的数据量,通常以比特每秒(bps)、千比特每秒(kbps)、兆比特每秒(Mbps)或吉比特每秒(Gbps)来表示。它反映了网络系统实际的数据传输能力,与理论带宽不同,吞吐量考虑了实际网络条件下的各种因素。

带宽通常指的是链路的最高传输能力,而吞吐量则是受到网络延时、丢包、协议开销、路由器性能等多种因素影响的实际数据传输速率。

链路的物理传输能力为吞吐量提供了上限,但实际吞吐量通常低于理论带宽,因为还有其他开销,例如数据在网络中传输时会经历前面所提到过的四种延时,这些延时会影响数据包的往返时间,从而间接影响吞吐量。丢包会导致数据包重传,而重传会消耗额外的时间和带宽,也会降低实际吞吐量。在 TCP 中,丢包还会触发拥塞控制算法,使得发送速率降低,从而进一步降低吞吐量。

在一个端到端的网络中,整体吞吐量往往受限于瓶颈链路,即沿途传输速率最低的那一段链路。即便其他链路拥有更高的带宽,最终的吞吐量也只能达到瓶颈链路的速率。

3 协议层次与服务模型

3.1 协议层次

计算机网络为了应对其复杂性,采用了分层结构的设计思想,将整个通信过程分解成若干相互独立但又相互协作的层次,每一层只关注本层功能的实现,并向上层提供标准化的服务接口。常见的分层模型有 OSI(开放式系统互联)七层模型与 TCP/IP 模型。

(1)OSI 七层模型

  • 应用层:为用户应用程序提供接口,支持诸如 HTTP、FTP、SMTP 等协议。数据单位:报文(message)。
  • 表示层:负责数据格式转换、加密、压缩,确保不同系统间的数据能够正确理解。
  • 会话层:管理不同应用之间的会话,负责会话的建立、维护和终止。
  • 传输层:提供端到端的通信服务,控制数据传输的可靠性、流量控制和错误检测。常见协议有 TCP(面向连接、可靠传输)和 UDP(无连接、尽力而为传输)。数据单位:(segment),例如 TCP 段和 UDP 数据报。
  • 网络层:负责数据包的路由选择、寻址和转发,确保数据能够跨越多个网络到达目的地。常见协议有 IP、ICMP、ARP 等。数据单位:有连接的为分组(packet),无连接的为数据报(datagram)。
  • 数据链路层:在相邻网络节点之间提供可靠或不可靠的帧传输,为点到点通信,完成 MAC 地址寻址、差错检测与纠正。数据单位:(frame)。
  • 物理层:处理比特流在物理介质(如光纤、双绞线、无线电波)上的传输,关注电气、机械和光学特性。数据单位:比特(bit)。

(2)TCP/IP 模型

TCP/IP 模型是实际应用中更为常见的模型,它可以看作是对 OSI 模型的简化和实际化,OSI模型更注重理论上的完整性和功能划分,而 TCP/IP 模型则以实际应用为导向,结构更简单、实现更直接。TCP/IP 模型通常分为以下四层:

  • 应用层:包含 OSI 模型中应用层、表示层和会话层的功能,为人类用户或者其他应用进程提供网络应用服务,支持 HTTP、DNS、SMTP 等协议。
  • 传输层:在网络层提供的端到端通信基础上,细分为进程到进程的通信,并将不可靠的通信变成可靠地通信,主要协议为 TCP 和 UDP。
  • 网络层:也称为因特网层,负责数据包的路由、转发和逻辑寻址,实现了主机到主机之间的端到端通信,是不可靠的,主要协议为 IP。
  • 网络接口层:包括数据链路层和物理层的功能,实现数据在局域网或广域网上的实际传输,如以太网、Wi-Fi 等。

在这里插入图片描述

对于复杂的系统,分层处理能够使得结构更清晰,便于标示网络组件,以及描述其相互关系,且模块化更易于维护和系统升级,改变某一层服务的实现不会影响系统中的其他层次。

3.2 服务模型

在网络分层设计中,每一层不仅提供具体的协议实现,还向上层提供一组标准化的服务,这些服务定义了低层向高层提供的功能能力。每一层协议实体相互交互执行本层的协议动作,目的是实现本层功能,并通过接口为上层提供更好的服务,同时每一层在实现本层协议的时候,直接利用了下层所提供的服务。

  • 服务:是低层向高层提供的功能,例如提供可靠数据传输、路由选择、错误检测等;
  • 服务访问点(SAP):是上层调用低层服务的接口,保证各层之间的解耦。例如在传输层和应用层之间,端口号被视为服务访问点;套接字(Socket)是操作系统提供的一种编程接口,允许应用程序通过它们请求内核中的网络服务,即套接字提供了应用层与传输层之间的接口,使应用程序能够通过套接字与网络进行通信,因此套接字可以被视为一种服务访问点,允许应用程序通过它们请求内核中的服务。

服务的类型一般分为面向连接的服务与无连接的服务:

  • 面向连接的服务:如 TCP 协议提供的服务,在通信前建立连接、保证数据按序到达、检测和纠正传输错误。适用于传输大块数据或要求高可靠性的应用,如文件传输、电子邮件等。
  • 无连接的服务:如 UDP 协议提供的服务,无需建立连接、传输延迟低、适用于实时应用(例如视频流、语音通信)或简单查询场景(如 DNS)。其特点是可能会出现丢包、乱序、重复,但效率更高。

服务与协议的区别与联系为:

  • 区别
    • 服务是垂直的概念,描述低层向上层提供的通信能力和接口;
    • 协议是水平的概念,描述对等层实体之间在相互通信的过程中,需要遵循的规则的集合。
  • 联系
    • 本层协议的实现要靠下层提供的服务来实现;
    • 本层实体通过协议为上层提供更高级的服务

3.3 封装与分用(解封装)过程

在计算机网络中,数据从源主机传输到目标主机的过程中,经历了多次封装和解封装。源主机将数据从应用层逐层向下传递,每一层都会添加相应的协议头,直到物理层将比特流发送到传输介质上。

在传输过程中,数据可能经过交换机或路由器等中间设备,这些设备根据其工作层次,对数据进行相应的处理。最终,目标主机从物理层接收比特流,逐层向上解封装,还原出应用层数据。

  • 封装:当上层应用向下传输数据时,每经过一层,数据就会被该层的协议添加上对应的协议头(甚至尾部信息),形成更低层次的协议数据单元(Protocol Data Unit,PDU,指在计算机网络通信中,不同层次的协议之间传递的数据单元)。例如,应用层报文在传输层被封装成 TCP 段,在网络层又被封装成 IP 数据包,再在数据链路层形成帧,最终转化为比特流在物理介质上发送。
  • 分用(解封装):数据在接收端到达后,各层按相反顺序剥去相应的协议头和尾部信息,将数据逐层传递给上层,直到最终交给应用程序。这一过程保证了数据能够在多层协议保护下准确传输

3.4 交换机与路由器

交换机和路由器是网络中常见的两种设备,它们在工作层次和功能上存在明显区别:

  • 交换机:主要工作在 OSI 模型的数据链路层(第二层),根据 MAC 地址进行数据帧的转发。它用于连接同一网络中的多台设备,建立局域网(LAN),并通过学习 MAC 地址表来决定数据帧的转发路径。
  • 路由器:工作在 OSI 模型的网络层(第三层),根据 IP 地址进行数据包的路由选择和转发。路由器用于连接不同的网络,决定数据包的最佳传输路径,并能隔离广播域,提供防火墙等功能。

由于交换机和路由器工作在不同的 OSI 层级,它们对数据的处理方式也有所不同:

  • 交换机:在接收到数据帧时,读取数据链路层的帧头信息(主要是源 MAC 地址和目的 MAC 地址),根据 MAC 地址表决定将数据帧转发到哪个端口。交换机通常不修改数据帧的内容,因此不涉及解封装和重新封装的过程。
  • 路由器:在接收到数据包时,首先解封装数据链路层的帧头,获取网络层的包头信息(如源 IP 地址和目的 IP 地址)。根据路由表,路由器决定数据包的转发路径,然后重新封装数据链路层的帧头,将数据包发送到下一跳。

随着网络技术的发展,出现了三层交换机,它结合了交换机的高速数据转发能力和路由器的路由功能。三层交换机不仅能够在数据链路层根据 MAC 地址进行数据帧的转发,还能在网络层根据 IP 地址进行路由选择,实现不同子网或 VLAN 之间的通信。这使得三层交换机在大型局域网中得到了广泛应用,既提高了数据转发效率,又简化了网络结构。