#import "../typst/template/reference.typ": POINT,NOTE,TIP,cn_fake-italic,indent,example,example_dc,line_cs,line_end,line_dc,regular_script,THEOREM
#import "../typst/template/page/basic.typ":basic
#import "@preview/tablem:0.1.0": tablem

#let center_title = [
  LEARNING \ Computer Networking \
  #text(size: 15pt)[A Top-Down Approach]
]
#show:doc=>basic(
  title: center_title, // 标题
  authors: ((
    name: "aaron.li",
    affiliation: "pzhu",
    email: "<EMAIL>",
  ),),
  doc,
  chapter: 1,
)

= 计算机网络和因特网

#image("./asset/image/计算机网络与因特网.png")

目的：不仅能够理解今天的网络，也能理解明天的网络。

== 什么是因特网

我们主要用*公共因特网*作为讨论的主要载体。

对因特网，主要从两个方面描述：

1.因特网的具体构成：基本硬件和软件组建

2.根据分布式应用提供服务的联网基础设施

=== 具体构成描述

*主机*（host，*端系统*（end system））,例如：PC、手机、平板等。

端系统通过*通信链路*（communication link）和*分组交换机*（packet switch）的网络连接在一起。

通信链路由不同物理媒介（同轴电缆、铜线、光纤和无线电频谱）组成。不同链路具有不同的*传输速率*（transmission
rate，以比特/秒（bit/s，或bps）度量）。

两台端系统发送数据时，会将数据分段并在每段首部加上字节。由此形成的信息包称为*分组*（packet）。

常见的分组交换机有*路由器*（router）和*链路层交换机*（link-layer switch）。链路交换机通常用于接入网中，路由器通常用于网络核心中。

从发送端系统到接收端系统，一个分组所经历的一系列通信链路和分组交换机成为通过该网络的*路径*（route或path）。

类比：分组类似于卡车，通信链路类似于高速公路和公路，分组交换机类似于交叉口，端系统类似于建筑物。

端系统通过*因特网服务提供商*（Internet Service
Provider，ISP）接入因特网。每个ISP自身就是一个网络（由多台分组交换机和多段通信链路组成），每个ISP网络独立管理，并运行IP协议，遵从一定的命名和地址规则。

端系统、分组交换机和其他因特网部件运行多个*协议*（protocol），由协议控制因特网中信息的接收和发送。

*TCP*（Transmission Control Protocol，传输控制协议）和*IP*（Internet
Protocol，网际协议）是因特网中最重要的两个协议。IP协议定义了路由器和端系统之间发送和接收的分组格式。因特网的主要协议统称为*TCP/IP*。

*因特网标准*（Internet standard）由因特网工程任务组（Internet Engineering Task
Force，IETF）研发。IETF的标准文档称为*请求评论*（Request For Comment，RFC）。RFC文档往往技术性很强并且相当详细。

=== 服务描述

从#regular_script[应用程序程序提供服务的基础设施]的角度描述因特网，对于因特网应用（运行在端系统之上）来说，由于它们需要涉及多个相互交换数据的端系统，所以被称为*分布式应用*（distributed
application）。

那么产生描述因特网的另一种方式：用于应用的平台。不同端系统上的应用该如何进行数据交换？，对此的解决方案是：与因特网相连的端系统提供了一套*套接字接口*（socket
interface），该接口规定了一系列发送程序必须遵循的规则集合。

同样，因特网上也存在一个套接字接口用于向接收数据的程序交付数据。

=== 什么是协议

网络协议类似于人类协议，在因特网中，涉及两个及以上远程通信实体的所有活动都受协议的约束。

*协议*（protocol）定义了在两个或多个通信实体之间交换的报文的格式和顺序，以及报文的发送/接受或其他事件所采取的操作。

计算机网络*广泛*使用协议，掌握计算机网络知识的过程就是理解网络协议的构成、原理和工作方式的过程。

== 网络边缘

将与因特网连接的计算机或其他设备称为端系统（因为位于因特网的边缘）。

主机有时会被划分成*客户机*（client）和*服务器*（server）两部分。

=== 接入网

*接入网*，指将端系统物理连接到其*边缘路由器*（edge router）的网络。边缘路由器是端系统到任何其他远程端系统的路径上的第一台路由器。

==== 家庭接入：DSL、电缆、FTTH和5G固定式无线

在本书中，提到美国家庭与因特网连接（即宽带住宅接入）一般采用*数字用户线*（Digital Subscriber
Line）或电缆。用户一般通过本地电话公司（也就是其ISP）获得DSL因特网接入，该过程大致如下：
$
 "家庭PC" <==> "DSL调制解调器" <==> "分频器" <==> "中心局的复用器（DSLAM）" <==> "因特网"
$

#indent DSL调制解调器的作用是将数字数据转换为高频音，通过电话线传输给本地中心局。同时中心局得到的模拟信号在DSLAM处被转换回数字形式。因为普通的电话信道与数据传输信道的频段不同，使得单根DSL线路能够被共享使用。

#figure(
  tablem(
    ignore-second-row: false,
    align: center,
  )[
    |信道|频段|传输速率| |普通双向电话信道|0\~4k Hz频段|| |中速上行信道|4k Hz \~ 50k Hz频段|3.5M bps和16M bps|
    |高速下行信道|50k Hz \~ 1M Hz频段|24M bps和52M bps|
  ],
  caption: [
    DSL传输速率
  ],
)#indent

由于DSL受到传输距离、双绞线规格和电气干扰程度的影响，一般而言住宅速率小于最大速率。如果住宅不是位于本地中心局的5\~10英里范围内，那么该住宅必须采用其他形式的因特网接入。（事实上，在我国住宅的因特网接入通常是选择光纤到户方式）。

DSL利用的是本地电话基础设施，那么另一项接入方式*电缆因特网接入*（cable Internet access）则是利用有线电视基础设施。大致过程如下：
$
 "500~5000个家庭" <==> "同轴电缆" <==> "光纤节点" <==> "光缆" <==> "电缆头端的CMTS" <==> "因特网"
$

#indent 光缆将电缆头端连接到地区枢纽，在该系统中既用到电缆又用到光缆，所以经常被称为*混合光纤同轴*（Hybrid Fiber Coax，HFC）系统。

电缆接入因特网需要*电缆调制解调器*（cable modem）和*电缆调制解调器端接系统*（Cable Modem Termination
System，CMTS）。与DSL一样，HFC网络也划分为上行下行两个不对称信道。

#figure(
  tablem(
    ignore-second-row: false,
    align: center,
  )[
    |信道|DOCSIS 2.0标准|DOCSIS 3.0标准| |上行信道|30M bps|100M bps| |下行信道|40M bps|1.2G bps|
  ],
  caption: [
    HFC传输速率
  ],
)#indent

由于电缆因特网接入的一个重要特征是*共享广播媒体*，所以当几个用户同时经下行信道下载文件，每个用户接收文件的实际速率将大大低于电缆总计的下行信道（这与DSL的个人信道不同）。但另一方面，如果活跃用户较少，那么用户几乎能够以全部的下行速率接收文件。

因为在接入同一个电缆因特网的用户很少会同一时刻发送请求，所以上行信道也是共享的，但是还是需要一个#regular_script[分布式多路访问协议]来协调传输和避免碰撞。

相对来讲，上述的两种接入网方式都已经过时了，现在更多的是采用光纤入户和5G无线。

*光纤到户*（Fiber To The Home，FTTH）。一般来讲是提供一条从本地中心局直接到家庭的光纤路径，以此提供高速传输速率（大概能提供100M
bps至1G bps [2024]）。

光纤分布方案一般有以下三种：
#pad(x: 2em)[
  + 直接光纤。从本地中心局到每户设置一根光纤

  + 从本地中心局出来的光纤在邻近家庭间进行共享，在这种分配方式下，存在两种光纤分布体系结构
    - *有源光纤网络*（Active Optical Network，AON）
    - *无源光纤网络*（Passive Optical Network，PON）
  AON本质上就是交换以太网。
]

在PON分布体系结构下的FTTH，每个家庭都有一个*光纤网络端接器*（Optical Network
Terminator，ONT），在国内通常称为“光猫”。其通过专用光纤连接到邻近分配器（splitter），再由分配器将一些家庭连接到一根共享光纤上，由该光纤连接到本地中心局的*光纤线路端接器*（Optical
Line Terminator，OLT）上。大概过程如下：
$
  "众多家庭的ONT" <==> "光纤分配器" <==> "中心局的OLT" <==> "因特网"
$

OLT和ONT进行光信号和电信号之间的转换，以此传递因特网信息。

最后一种接入方式：*5G固定式无线*。使用波束成形技术，数据通过无线方式从供应商的基站发送到家中的调制解调器。

==== 企业（和家庭）接入：以太网和WiFi

现如今，更多的环境使用*局域网*（LAN）将端系统连接到边缘路由器上。通常采用的局域网技术是以太网，以太网用户使用双绞线与一台以太网交换机相连，再与因特网相连，实现100M
bps或1G
bps乃至更大的传输速率。

同样在无线LAN环境下，无线用户通过一个接入点传输数据，该接入点再与有线因特网连接。例如：基于IEEE 802.11技术的无线LAN接入（更通俗称为WiFi）。

==== 广域网无线接入：3G、LTE 4G和5G

通过使用蜂窝移动电话相同的无线基础设施，利用蜂窝网提供商运营的基站来发送和接收分组。在广域网下，用户可以位于基站数万米外通信。

=== 物理媒介

简要概述在因特网中使用的传输媒介。

在端系统通信的过程中，比特通过一系列“传输器-接收器对”进行传递。对于每个传输器-接收器对，该比特通过传播电磁波或光脉冲的方式跨越某种*物理媒介*（physical
medium）进行发送。物理媒介具有多种形状和形式，例如：双绞铜线、同轴电缆、多模光纤电缆、陆地无线电频谱和卫星无线电频谱。

物理媒介可以分为两种类型：

#pad(x: 2em)[
  + *导引型媒介*（guided media），电波或光脉冲沿着固体媒介前进，如光纤、同轴电缆或双绞铜线。
  + *非导引型媒介*（unguided media），电波在空气或外层空间中传播，如无线局域网、数字卫星频道等。
]

#indent 虽然并不想讨论使用这些媒介的成本问题，但对现实生活中的一些实际情况这是不可避免的。物理链路（铜线、电缆）的实际成本相对于其他网络成本通常是*相当小*的。但是其劳动成本又比材料成本高出几个数量级。所以在现代都市中，开发商往往会在住宅中同时安装双绞线、光缆和同轴电缆，以节省经费（避免将来再铺设另外的线缆）。

下面开始正式介绍常见的物理媒介：

==== 双绞铜线

#figure(image("./asset/image/七类双绞线.jpeg", width: 60%), caption: [
  七类双绞线
])#indent

最便宜且最常用的导引型传输媒介，在一百来年的历史中，一直用于电话网。通过两根线（构成了一条通信链路）绞合在一起，以减少邻近类似的双绞线的*电气干扰*，并在这些双绞线外覆盖上保护性防护层。无屏蔽双绞线常用在建筑内的计算机网络中，即局域网中。目前局域网中双绞线的传播速率为10M
bps \~ 10G
bps@双绞线 。所能够达到的传输速率取决于导线路径以及传输方与接收方之间的距离。

#figure(
  tablem(
    ignore-second-row: false,
    align: center,
  )[
    |网线类型|八类网线|七类网线|超六类网线| |传输速率|40G bps|10G bsp| 10G bps| |频率宽带|2000M Hz|600M Hz|
    500M Hz| |传输距离|30米|100米|100米| |导体（对）|8|8|8| |线缆类型|双层屏蔽|双层屏蔽|屏蔽\非屏蔽|
    |应用环境|高速带宽环境|高速带宽环境|大型企业高速应用|
  ],
  caption: [
    双绞线传输速率
  ],
)<双绞线>#indent

虽然现如今光纤被广泛运用，但是在高速LAN环境下，双绞线仍然是主导性解决方案。

==== 同轴电缆

#figure(image("./asset/image/同轴电缆.png", width: 50%), caption: [
  同轴电缆
])#indent

同轴电缆由两根铜导体组成（与双绞线类似，但是导体是同心而非并行）。同轴电缆在电缆电视系统中应用相当普遍。

在电缆电视和电缆因特网接入中，发送设备将数字信号调制到某个特定的频段，产生的模拟信号从发送设备传送到一个或多个接收方。同轴电缆能被用作导引型*共享媒介*（shared
medium）。

==== 光纤

#figure(image("./asset/image/光纤.png", width: 60%), caption: [
  光纤
])#indent

光纤是用于导引光脉冲的媒介。每个脉冲表示一个比特，通常一根光纤能够支持极高的比特速率，在商用领域为100G bps乃至400G bps（甚至在实验室中达到26T
bps）。由于光纤不受电磁干扰，对长达100km的光缆信号衰减极低，并且很难窃听。这些特征使得光纤成为长途导引型传输媒介，广泛使用于长途电话网络、因特网主干等。

==== 陆地无线电信道

无线电信道使用电磁频谱传输信号，由于无需安装物理链路，很适合移动用户使用。但是无线电信道极大依赖于传播环境和传播距离。

陆地无线电信道大致分三类：

#pad(x: 2em)[
  + 运行在很短的距离
  + 运行在局域
  + 运行在广域
]

==== 卫星无线电信道

通信卫星通过地面站的发送的信号转发实现信号的传输。在通信中常用到两类卫星：*同步卫星*（geostationary
satellite）和*近地卫星*（Low-Earth Orbiting，LEO）。

同步卫星永久停留在地球上方的同一个点上，但是由于近地轨道距离地球36000km，造成客观的信号时延。

近地卫星需要围绕着地球旋转，所以需要发射多个卫星（并且这些卫星彼此之间能够通信），例如：星链计划。

== 网络核心

网络核心，由互联网特网端系统的分组交换机和链路构成的网状网络。

在网络链路和交换机移动数据上有两种基本方法：*分组交换*（packet switching）和*电路交换*（circuit switching）。

=== 分组交换

端系统间彼此交换*报文*（message）。报文可以是数据，也可以是控制功能。

从源端系统发送到目的端系统的一个报文，源端将会把长报文划分为小的数据块，称为*分组*（packet）。在运输途中由通信链路和*分组交换机*（packet
switch）完成。

如果从某源端系统或者分组交换机经过某一个链路发送一个$L$ bit的分组，该链路的传输速率为$R$ bps，那么该链路传输该分组的时间为$L/R$ s

==== 存储转发传输

多数分组交换机在链路的输入端使用*存储转发传输*（store-and-forward
transmission）机制。其指在交换机开始向输出链路传输该分组的第一个比特之前，必须接收到整个分组。

在一般情况下（不考虑传播时延）：通过由$N$条速率均为$R$ bps的链路组成的路径，从源端系统到目的端系统发送一个分组，其端到端时延是
$
  d_("end-end")=N L/R
$

==== 排队时延和分组丢失

每台分组交换机往往会与多条链路连接，对于每条相连的链路，该分组交换机具有*输出缓存*【output buffer，也称为*输出队列*（output
queue）】，用于*存储*路由器准备发送那条链路的分组。

如果已经到达交换机的分组准备发往某条链路，但是那条链路正在传输其他分组，那么该分组必须在输出缓存中等待【这种情况称为*排队时延*（queuing
delay）】。排队时延是变化的，其变化程度取决于网络的拥塞等级。

如果某台交换机的缓存空间已满，那么到达的分组或者已经排队的分组之一将会被丢弃【这种情况称为*分组丢失（丢包）*（packet loss）】。

==== 转发表和路由选择协议

不同的计算机网络会以不同方式进行分组转发，在因特网中，每个端系统都具有一个称为*IP地址*的地址。IP地址具有一种等级结构，源会在传输分组时将目的地的IP地址包含在其头部。当一个分组到达网络中的路由器时，路由器会检查该分组的IP地址的一部分，并将目的地址（或其一部分）映射为输出链路。

IP地址的等级结构类似于现实生活中的邮政地址，例如：四川省成都市武侯区……。邮政人员根据邮政地址进行分级投递，最终到达目的地。而在因特网中，路由器根据*转发表*进行检索，当发现适当的输出链路，便将分组导向该链路。

在路由器中，因特网具有一些特殊的*路由选择协议*（routing protocol），用于自动地设置每台路由器的转发表。例如，*开放最短路径优先*（Open
Shortest Path First，OSPF）协议能够找出每台路由器到目的地的最短路径。

=== 电路交换

电路交换的特点便是：在端系统间通信会话期间，#regular_script[预留]了端系统间沿路通信所需要的资源（缓存，链路传输速率）。经典例子便是传统的电话网络。在进行电话通信时，该网络必须为发送方与接收方创建一条#regular_script[名副其实]的连接，该路径上的交换机都将为该连接维护连接状态。用电话的术语表示，这条连接称为一条*电路*（circuit）。

何为电路，即是在两台主机之间创建一条*专用*的*端到端连接*（end-to-end
connection）。与分组交换不同点就在于，分组发送入网络后，并不会预留任何资源，因此当链路中出现阻塞时，会产生时延。这即是因特网（采用分组交换网络）特点：尽最大努力已及时方式交付分组，但它不做任何保证。

==== 电路交换网络中的复用

链路中的电路通过*频分复用*（Frequency-Division Multiplexing，FDM）或*时分复用*（Time-Division
Multiplexing，TDM）实现。

对于FDM，链路的频谱由跨越链路创建的所有连接共享。在连接过程中链路为每条连接专设一个频段。在电话网络中，这个频段的宽度通常是4k
Hz【频段的宽度也被称为*带宽*（band-width）】。同理，调频无线电台也使用FDM来共享88M Hz \~ 108M
Hz，其中每个电台被分配一个特定的频段。

对于TDM，时间被划分为固定时段的帧，每个帧又被划分为固定数量的时隙。当创建一条链路时，网络会指定每个帧的特定时隙用于传输数据（这些时隙就会被单独使用）。

分组交换的支持者总是说，电路交换不够经济，具体证明点有，
#pad(x: 2em)[
  + 在*静默期*（silent period）专用电路是空闲的
    + 创建端到端电路和预留端到端带宽是复杂的，需要复杂的信令软件以协调沿端到端路径的交换机的操作
    + 电路交换的传输时间与链路数量无关
]#indent 

==== 分组交换与电路交换的对比

分组交换与电路交换之争的有趣讨论参见@molinaro-fernandez2002ip。

对二者的分歧点我们用实例说明：

#line_dc
#example_dc(
    title:[
        假定多个用户共享一条1M bps的链路，用户的活跃周期是变化的。活跃期间，用户以100k bps的恒定速率产生数据，静止期间不产生数据，且乎仅有$10 percent$的时间活跃。如果采用电路交换，必须为每个用户预留100k bps的传输速率。
    ],
    solutions:[
        如果采用电路交换，那么仅支持$"1M bps"/"100k bps"=10$个并发用户。如果采用分组交换，如果有35个用户，当存在11个或更多并发活跃用户的概率大约为$0.0004$，反之概率高达$0.9996$。在这种概率下，聚合数据的速率是小于或等于该链路的输出速率（100M bps）。

        综上所述，在极大概率下，分组交换获得与电路交换相同的性能。
    ]
)

#example_dc(
    title:[
        假定有10个用户，某个用户突然产生1000个大小为1000bit的分组，其他用户保持静默。
    ],
    solutions:[
        在每帧（1s）具有10个时隙并且每个时隙包含1000bit的TDM电路交换情况下，活跃用户传输完成需要10s时间，而在分组交换情况下，该用户能够以1M bps的满速完成任务，只需要1s的时间。
    ]
)

#line_dc
电路交换不考虑需求，而预先分配了传输链路，这使得已分配而并不需要的链路时间未被利用。另一方面，分组交换#regular_script[按需]分配链路，链路传输能力将在所有需要在链路上传输分组的用户之间逐分组地被共享。

未来的趋势无疑是朝着分组交换方向发展。