第 1 章:计算机网络和因特

1.1 什么是因特网 (What Is the Internet?)

可以通过两种方式来描述因特网:

  1. 具体构成:由硬件和软件组件构成
  2. 基础设施:为分布式应用 (distributed applications) 提供服务

1. 1. 1 具体构成描述 (A Nuts-and-Bolts Description)

计算机网络中有大量的设备彼此连接,如笔记本电脑,平板电脑,游戏机,智能手表,汽车等等。这些设备都可以被称作主机 (Host)端系统 (end system)

端系统:

  • 通过通信链路 (communication link) 分组交换机 (packet switch) 连接
  • packet 此处译为“包”或许更好;packet loss 丢包
  • 不同的通信链路能够以不同的速率传输数据,数据的传输速率(transmission rate)比特/秒(bits/s,或bps)度量(详见 1. 2. 2 物理媒体)

分组交换机:

  • 当今主要为路由器 (**router**)链路层交换机 (link-layer swich)

路径:

  • 一个 packet 经过的一系列通信链路和交换机称为路径 (route or path)

ISP (Internet Service Provider)** **:

  • 简单来说就是提供网络服务的都可以被称为 ISP
  • ISP 自身也是一个由多台 packet switches 和 communication links 组成的网络

协议 (protocols)

  • 协议控制各设备之间收发信息
  • 最重要的两个协议为:
    • Transmission Control Protocol (TCP)
    • Internet Protocol (IP)
  • IP 协议主要控制 packet 在各设备之间的收发格式

1. 1. 2 服务描述 (A Services Description)

Internet 也可以被看作是一个提供 service 给 application 的基础设施,如:

  • email
  • 收发信息
  • 地图
  • 在线音乐

(注意,一些 application涉及多个相互交换数据的端系统上(如App Store不仅可以下载应用还可以根据位置推荐应用),所以称为分布式应用程序 (distributed application)
为了能让每一个端系统里的应用程序能正常的收发数据,会有一个叫做套接字接口 (socket interface) 来规定它和 Internet 上的其他端系统中的应用程序之间的交互规则。这里引出一个很好的类比:

在寄信的时候我们需要:

  1. 把信放在信封里
  2. 在信封上写好收信人的信息
  3. 封好信封
  4. 在右上方贴好邮票
  5. 把这封信丢到信箱里面去

这一套邮局给我们的“规则”帮助我们实现和他人做信息交换,而套接字接口也是扮演这样的角色

1. 1. 3 什么是协议 (What is a protocol?)

协议就像是双方都能理解的一套规则,先用人类社会进行一个类比:

上课时

  1. 老师问:同学们有什么问题吗(发出一个信息)
  2. 你举起了手(给老师一个回应,一个隐含信息:提问)
  3. 老师说:请讲(给予回应,鼓励回答问题)
  4. 你开始阐述问题
  5. 老师针对你的问题进行回答

这样的一套约定俗成的一系列的动作,就可以被看作一个协议。这里老师问“同学们有什么问题吗”之后,同学们按照约定举手示意老师,老师收到“举手”的信息之后,也同样按照约定示意学生阐述自己的问题,以此开始后面的信息交换。

这是用人类社会的行动来类比协议,那网络协议呢?

网络协议中的例子:

  1. 在端系统中,拥塞控制协议控制了接收方和发送方之间的传输速率
  2. 路由器中的协议决定了数据包从起始地到目的地的路径

协议 (protocol)** 的定义:**协议定义了在两个或者多个通信实体之间交换的报文(信息)的格式和顺序,以及报文发送和/或接收一条报文或者其他事件所采取的动作

A protocol defines the format and the order of messages exchanged between two or more communicating entities, as well as the actions taken on the transmission and/or receipt of a message or other event.

1. 2 网络边缘 (The Network Edge)

在下图中,处于边缘的这些设备都可以被称作端系统,或者叫主机。在本书中,“端系统”和“主机”两个词作者交替使用,故在本书中,“端系统”等价于“主机”

image.png
主机是一个非常泛泛的概念,通常被分为两类:

  1. 客户端 (Client) **:**平时我们用的个人电脑,手机,都可以看做客户端
  2. 服务端 (Server)**:**用于储存发布网页,中继电子邮件等的机器

1. 2. 1 接入网 (Access Networks)

接入网定义:将端系统在物理层面上连接到第一个路由器(也称为边缘路由器 edge router)的网络下图中,蓝色加粗部分看作接入网

image.png

接入网的三种主要类型:

  1. 家庭接入 Home Access

当下两种最普遍的家庭接入方式:

  • DSL (Digital Subscriber Line)

image.png
DSL 的接入中,由同一家电话公司提供网络的接入,所以此时该电话公司为 ISP。所以这种情况下,电话线同时要处理 data 和传统的电话信号,这由线路中不同频率的带宽来实现。

用户端需要一个 DSL Model 来分开线路中不同频段的信号,并实现收发;在电话公司那面,也有一个装置叫做 DSLAM (digital subscriber line access multiplexer) 来实现同样的功能

DSL 接入方式是上下行不对等的,且传输速率受限于到 ISP 的距离,DSL 适用于短距离传输

  • Cable(电缆)

image.png
电缆接入的方式,是利用有线电视公司现有的线路,电视服务的提供者和 ISP 为同一个。和 DSL 有一点相似的是,电缆接入的电缆头端 (cable head end) 也有一套对信号进行处理的系统叫做电缆调制解调器端接系统 (Cable Modem Termination System, CMTS),其功能是将模拟信号转成数字信号的形式

电缆接入的方式也是上下行不对等的,但是比起 DSL 来说好的多

电缆接入有一个重要特征是共享广播媒体 (shared broadcast medium),简单来说如果很多用户同时使用网络服务的话,那么速率会受到很大影响

  • 光纤到户 (Fiber To The Home, FTTH)

image.png
这种方式在我们生活中已经很普遍了,从 ISP 中心局引出一根总线,然后在很接近用户的位置在分出很多支线出来到单独的每一户。实现这种分配目前有两种主要体系结构:

  1. 1. 有源光纤网络 (Active Optical Network, AON)
  2. 1. 无源光纤网络 (Passive Optical Network, PON)

这里先介绍 PON,这种分配结构中,每一家都有一个光纤网络端接器 (Optical Network Terminator,ONT),它会连接到附近的分配器,分配器在做整合连接到本地电话公司的中心局的光纤线路端接器 (Optical Line Terminator, OLT)再经过中心局的路由器接入互联网,OLT 的作用是实现光信号和电信号之间的转换。所有发送到分配器的数据包(分组)在分配器处复制。

  • 卫星链路(略)
  1. 企业接入** **Access in the Enterprise (and the Home)

在企业接入中,使用局域网 (LAN) 把端系统连接到路由器上。但是,以太网 (Ethernet) 是公司、大学和家庭网
路中比较流行的方式,如下图所示。另外还有基于IEEE 802.11无线LAN接入,通俗的叫它WIFI,它一般是接入企业网,再由有线以太网接入互联网。
image.png

  1. 广域无线接入** (**Wide-Area Wireless Access)

在这种接入方式中,端系统通过蜂窝网提供商运营的基站来实现收发数据,与WIFI不同的是用户可在基站覆盖范围内使用服务(数万米),而WiFi只有几十米的覆盖范围。

1. 2. 2 物理媒体 (Physical Media)

信号/数据的收发会通过各种设备,这些设备被称为物理媒体,他们由不同的材质构成

  1. 引导形媒体 (guided media):电波沿着固体媒体前行,如光缆、双绞铜线 (DSL 和 以太网使用) 或同轴电缆
  2. 非引导形媒体 (unguided media):电波在空气中或外层空间中传播,如无线局域网或数字卫星频道

介绍五种传输媒体:

  1. 双绞铜线 (Twisted-Pair Copper Wire)

成本最低,使用最广泛,通常会由许多双绞线捆扎在一起。它能达到的传输速率取决于线的粗细和双方的距离

  1. 同轴电缆 (Coaxial Cable)

同轴电缆由两个铜导体组成,借助其本身的结构(同心结构)和特殊的保护层,传输速率还是比较可观的

  1. 光纤 (Fiber Optics)

光纤,细而柔软,能够引导光脉冲,速率极高,一个脉冲代表一个 bit。光纤多用在长途传输,如跨海链路、因特网主干等等(不受电磁干扰,长距离传输的信号衰减极低,不易被窃听)。

  1. 陆地无线电信道 (Terrestrial Radio Channel)

无线电信道承载电子频谱中的信号,具有穿透墙壁和提供与移动用户的连接,和长距离承载信号,它极大地依
赖传播环境和信号传输的距离

  1. 卫星无线电信道 (Satellite Radio Channels)

一颗通信卫星连接地球上的两个或多个地面站(微波发射器/接受器),目前主要有两类卫星:同步卫星(速度和延迟都比较可观,通常用于无法使用DSL或电缆接入因特网的地区)和近地卫星

1. 3 网络核心 (The Network Core)

即互联因特网端系统的分组交换机与链路组成的网状网络。
通过网络链路和交换机移动数据有两种方法:

  • 电路交换:网络资源先到先得
  • 分组交换:预留网络资源

1. 3. 1 分组交换 (Packet Switching)

在网络应用中,端系统彼此之间会交换报文。报文能够包含协议设计者需要的任何东西(如用邮件协议的收发的报文就包含邮件),发送方把长报文分为较小的数据块,称其为分组,或者包 (packet),这些分组都会通过通信链路和分组交换机传送。在这些分组传输的过程中,会遵守一些特殊的传输机制(这取决于路由器使用什么机制)

交换机主要有两大类:路由器(**router)和链路层交换机(link-layer switch**)。

(侧重解释传输机制,理解机制,其余无关内容进行省略)

  1. 存储转发传输 (Store-and-Forward Transmission)

简单的解释,就是在交换机直到从输入链路接收到一个完整的分组(注意不是报文)之后,才会把该分组传输到输出链路上,用下图来举例
image.png
Source 端把一报文分为三个分组,首先路由器开始接受第一个分组的一部分(然后存储该部分分组),如上图所示,在这个过程中,路由器是不会开始向 Destination 传输这第一个分组,直到路由器完整接受到第一个分组(这时再发送给输出链路)。

  1. 排队时延和分组丢失 (Queuing Delays and Packet Loss)

当一个分组缓存到路由器中后,有时会出现输出链路繁忙的情况,此时已经缓存好的分组需要先储存到输出缓存(output buffer) 中,或者叫输出队列 (output queue),所以在分组传输的过程中,不仅要承受储存转发带来的时延,还要承受输出缓存的排队时延 (queueing delay),而分组丢失(也叫丢包)发生在这个输出缓存装满的时候,到达的分组或已经排队的分组之一将被丢弃。

  1. 转发**表和路由选择协议 (Forwarding Tables and Routing Protocols)**

每个分组的头部都会包含分组的目的地,且这个目的地是有明确的等级结构的,而转发表储存在路由器中,其作用就像是一个导航一样,让路由器知道分组的目的地大概在哪里,然后有针对性的进行分组转发。
下面用一个非常好的例子来类比:

一个人在 A 市,想去 B 省 C 市的 123 街道 456 号,他先来到一个加油站 他问:“我怎么能到 B 省 C 市的 123 街道 456 号” 服务员:“你先去 1 号高速一路往南开,你会到 B 省,等你到了 B 省后再问其他人吧” 随后这个人驾车到达 B 省的某一加油站,再次询问另外一个服务员 “您好,请问我怎么能到达 B 省 C 市的 123 街道 456 号” “你继续向南走,中途转到向东的 5 号高速上,之后你就会到达 C 市,然后再问问别人吧” 这个人按照这位服务员的指引到达了 C 市,随后他到了一个超市,询问店员 123 街道怎么走 得到路线后这个人会正确找到 123 街道。最后,他询问路人 456 号在哪里,然后顺利到达目地

路由选择协议主要用于自动配置转发表,它可以找到分组到达目的地的最短路径,并且将路径信息配置给转发表

1. 3. 2 电路交换 (Circuit Switching)

电路交换简单的来说,当两台主机之间建立连接时,网络中必须预留出空闲的电路为这个连接提供固定的资源,用下图来举例说明:
image.png
这个图中使用四条链路互联了四台交换机,而每条链路中都有四条电路**假如我们要在从 A 向 B 发送报文,那么这个链路中就必须在两条链路中保留出电路(图中蓝色电路),且两条电路只供 A 和 B 的连接使用,会分配到链路传输容量的 1/4。比如一条链路的的总传输速率为 1Mbps,那么单条电路**的速率为 250 kbps

电路交换的缺点:

  1. 建立一条电路交换的连接更复杂,耗时
  2. 电路交换在静默期 (silent period) 会浪费空闲的网路资源

(对于电路交换的缺点的例子,参见中文版 P20 和 P21,简单易懂,例子很多)

1. 3. 3 网络的网络 (A Network of Networks)

虽然说学校,公司这样相对小的组织,也可以被看作 ISP,让用户之间进行数据交互,但是这只是小范围的网络。如果想让千万用户都可以连接起来的话,各个 ISP 之间也需要连接在一起,形成网络的网络

这样网络的网络有几种结构:

  • 网路结构 1:

使用全球传输 ISP 互联所有的接入 ISP,这种网络结构跨越全球,并且每一台路由器会靠近数十万
的接入 ISP,这种结构下接入 ISP 被看作客户,而全球传输 ISP 被看作提供商,提供商会向客户收

  • 网络结构 2:

在网络结构 1 的基础上,有更多的公司看到了全球传输 ISP 带来的收益,都开始自己搭建全球传输
ISP,使得客户们可以根据自己需求进行不同全球传输 ISP 的选择 这种结构下,不同的全球 ISP 之
间也必须要互联

  • 网路结构 3:

基于网络结构 2,也有很多区域 ISP 出现,比如在中国,城市有接入 ISP,然后它们与省级 ISP 相
连,省级 ISP 又与国家级 ISP 相连,最终国家级 ISP 与第一层(也就是全球传输 ISP)相连,以此
形成这种层级关系

  • 网路结构 4:

这种结构下引入很多概念,如存在点 (Point of Presence, PoP)、多宿、对等、和因特网交换点

  1. PoP:提供商网络中的路由器群组
  2. 多宿:表一个接入 ISP 可以与多个上一级 ISP 连接,这样即使其中一个上级 ISP 挂掉了,依然可以继续工作
  3. 对等:同级别临近的 ISP 之间连接,他们之间不产生费用
  4. 因特网交换点 (Internet Exchange Point, IXP):各个 ISP 可以在交换点实现对等,可看做成一个枢纽


  • 网络结构 5:

引入“内容提供商”的概念,简单来说,这样的“内容提供商”一般在全球都有自己的数据中心,
拥有海量数据,他们自家的网络只会承载自家服务的流量,独立于公共因特网

image.png
网络的网络结构十分复杂,主要思想就是,低层的 ISP 与高层 ISP 相连,较高层 ISP 或同级 ISP 之间彼此连接

1. 4 分组交换网中的时延、丢包和吞吐量 (Delay, Loss, and Throughput in Packet-Switched Networks)

网络传输中的时延、丢包等问题,是很难避免的,本节会对这些问题进行一些简单的介绍

1. 4. 1 分组交换网中的时延概念 (Overview of Delay in Packet-Switched Networks)

当一个 packet 从一台主机出发,到达目的地,这一路上会经历不同类型的时延,其中有节点处理时延 (nodal processing delay)、排队时延 (queuing delay)、传输时延 (transmission delay) 和传播时延 (propagation delay)

![image.png](https://cdn.nlark.com/yuque/0/2021/png/576909/1614891615482-de991004-2e98-4f9f-b4e4-8427360772b9.png#align=left&display=inline&height=179&margin=%5Bobject%20Object%5D&name=image.png&originHeight=357&originWidth=898&size=102861&status=done&style=none&width=449)
  • 处理时延:当 packet 到一台路由器的时候,路由器需要一定的时间来检查 packet 的头部,并寻找适合该 packet 的出链路(有时还会检查 packet 的比特级别的差错),通常是微秒级
  • 排队时延:当 packet 在链路上等待传输的时间,称为排队时延。如果队列是空的,前方无其他 packet 在传输,那么排队时延就为 0,通常是毫秒到微妙级
  • 传输时延:是将一个完整的 packet 中的所有比特推向链路(或者叫发射)所需要的时间,通常是毫秒到微妙级
  • 传播时延:当一个比特从被推出链路一直到到达目的地所需要的时间就是传播时延,比特传播的速度受链路的物理媒体影响,通常为毫秒级

传输时延和传播时延的比较
传输时延是路由器推出分组所需要的时间,它是分组长度和链路传输速率的函数,而与两台路由器之间的距离无关;另一方面,传播时延是一个比特从一台路由器传输到另一台路由器所需要的时间,是两台路由器之间距离的函数,而与分组长度或链路的传输速率无关。

如果令自顶向下第一章 - 图10自顶向下第一章 - 图11自顶向下第一章 - 图12自顶向下第一章 - 图13分别表示处理时延、排队时延、传输时延和传播时延,则节点的总时延由下式给定:
自顶向下第一章 - 图14

1. 4. 2 排队时延和丢包 (Queuing Delay and Packet Loss)

排队时延比起另外三种时延是比较特别的,因为通常人们衡量它的方式是使用 statistical measure 的方式,比如平均排队时延、排队时延的方差、或者是排队时延超过某些特定值的概率等等

α 表示 packet 到达队列的平均速率,单位为 packet / second
R 表传输速率 ,即从队列中推出比特的速率
L 表示每个 packet 的比特数(假定每个 packet 都为 L 个比特构成)
那么 Lα / R 就表示流量强度
当流量强度小于等于 1 时,排队时延主要就会受到流量性质的影响,即流量是周期性到达还是突发形式到达;随着流量强度越来越接近 1,那么平均排队长度就会越来越长
image.png

在实际情况中,队列长度是有限的,而当流量强度越来越接近 1 的时候,队列就可能装满了,这时候由于没地方存到达的 packet,路由器就会丢弃 (drop)这个 packet。所以,packet 丢失的比例会随着流量强度的增加而增加,不过丢包了没关系,会有一些特殊的规则使丢失的包重新被发送

1. 4. 3 端到端时延 (End-to-End Delay)

现在我们考虑从源到目的地的总时延。
为了便于理解,假定在源主机与目的主机之间有 N-1 台路由器,且网络此时无拥塞,在每台路由器上和原主机上的处理时延均为自顶向下第一章 - 图16,每台路由器和源主机的输出速率为 R bps,每条链路上的传播时延为自顶向下第一章 - 图17。节点时延累加起来,得到端到端时延:
自顶向下第一章 - 图18
同样,式中 自顶向下第一章 - 图19 ,其中 L 为分组长度。

1. 4. 4 计算机网络中的吞吐量 (Throughput in Computer Networks)

(略)

1. 5 协议层次及其服务模型 (Protocol Layers and Their Service Models)

务必阅读一遍 1.5.1 中航线系统的例子

1. 5. 1 分层的体系结构 (Layered Architecture)

通过书中航线系统的类比,我们也可以把协议也进行分层,不同的层次负责不同的功能。每一层之间都紧密连接,每一层从其上一层获取服务,向下一层提供服务。
这种分层有很好的模块化,即更新该层的系统组件,且不影响其它层。换言之,即使对该层进行更新或者修改,该层一样可以使用上一层提供的服务,也可以向下一层提供同样的服务。(这些,主要是靠一些定义明确的接口来实现)这里只是改变了某一层的实现,而并没有改变该层的功能。
举个例子,HTTP 和 SMTP 都属于应用层的协议,他们都直接和应用程序接口结合,并提供常见的网络应用服务。每一层中的所有协议被称为协议栈 (protocol stack)

  • 应用层:应用层对应的是网络应用程序应用层协议,比如 HTTP 提供 Web 文档的请求和传送,SMTP 提供了电子邮件报文的传输等等。端系统中的应用程序使用协议与另外一个端系统中应用程序交换信息分组 (packet),我们称应用层中的信息分组为报文 (message)

  • 运输层:这一层的主要作用就是传输应用层来的报文,在运输层的报文称为报文段 (segment)

运输层主要由两个协议构成:
TCP:

  • 提供面向连接服务:确保传递,流量控制
  • 长报文变成短报文,并且提供拥堵控制机制

UDP:

  • 提供无连接服务,不提供不必要的服务
  • 无可靠性,无流量控制,无拥塞机制
  • 网络层:在网路层中传输的分组叫做数据报 (datagram),这一层主要起到定向运输分组的作用。这一层网络包括了著名的 IP 网际协议,网络层的因特网组件必须要实现该协议;这一层还包括路由选择协议,其主要作用也是帮助分组准确的运输,到达目的地
  • 链路层:链路层主要指两端系统之间的传输链路以及他们对应的协议。网络层将数据报下传给链路层,链路层沿着路径将数据报传递给下一个节点,在下一个节点上传给网络层。链路层的服务取决于链路层的协议,意味着一个数据报在不同的链路上会被不同的链路层协议处理,比如它可能在这一条链路上被以太网处理,在下一段则被 PPP 处理。网络层中的分组我们称之为帧 (frame)

  • 物理层:这一层的主要作用是把帧中的一个个比特从一个节点移动到下一个节点,其主要也是由一些物理传输媒体和其对应的协议组成

OSI 模型
这是 20 世纪 70 年代之后的标准,因为对网络教育有早期影响,现在依然能见到 OSI 模型,其比 5 层模型多了表示层和会话层

表示层:使通信的应用程序能够解释交换数据的含义,这其中包括

  • 数据压缩
  • 数据加密
  • 数据描述

会话层:提供了交换的定界和同步功能,主要包括

  • 建立检查点
  • 恢复方案

1. 5. 2 封装 (Encapsulation)

image.png
一个应用层报文(通常都是应用程序发出的),先被传输到运输层,随后该报文会附加上运输层首部信息。应用层报文和运输层首部信息一起构成了运输层报文段 (transport-layer segment),以上这个过程被看作运输层报文段封装了应用层报文。随后该报文会被一层层封装,直到送到物理层。
网络层数据报 (network-layer datagram):网络层首部信息加上运输层报文段
链路层帧 (link-layer fram):链路层首部信息加上网络层数据报
有效载荷字段 (payload field):来自上一层的分组

而图中后面的链路层交换机和路由器,都会根据这些首部信息/头部来正确的传输分组

推荐阅读中文版第 37 也邮政服务的类比案例

1. 6 面对攻击的网络 (Networks Under Attack)

下面会简短的讨论四种不同的网络威胁

1. 经过因特网植入有害程序

恶意软件可以通过控制计算机来删除软件,或者间谍软件来收集信息,每一个受害的主机聚集起来就被称为僵尸网络 (botnet),攻击者就可以利用该僵尸网络进行大量的流量攻击

多数的恶意软件都可以自我复制,其扩散呈指数式

病毒 (virus):需要通过某种特定的用户交互来触发
蠕虫 (worm):不需要明显的用户交互就可以进入用户设备

2. 攻击服务器和网络基础设施

拒绝服务攻击 (Denial-of-Service (DoS) attack),DoS 攻击使得网络、主机或者其他基础设施部分不能由合法用户使用,大多数 DoS 攻击分为以下三种类型:

  1. 弱点攻击 (Vulnerability attack):向目标主机上的应用程序或操作系统发送大量精心制作的报文,使得服务器崩溃
  2. 带宽洪泛 (Bandwidth flooding):发送大量无意义分组,使线路拥堵导致合法的分组无法到达服务器
  3. 连接洪泛 (Connection flooding):在目标主机中创建大量半开或全开 TCP 连接,使其停止接受合法的连接

(这里提一嘴,DoS 攻击如果只是从单一主机发出的话,会被上游路由器检测到并且拦截,所以攻击者可以利用大规模的僵尸网络来实现分布式 DoS 攻击,即 DDos,Distributed DoS)

3. 嗅探分组

简单来说攻击者通过分组嗅探器 (packet sniifer) 接受到我们发出的分组,无论是在无线的环境下还是有线的环境下。由于其不会向发送分组,所以也很难发现到嗅探器的存在

4. 伪装

攻击者可以精心设计一个分组,其源地址、分组内容和目的地地址都是人工制作的,进而当接收方收到这样的分组的时候就会不加猜疑的执行嵌入在分组内容中的命令,比如修改转发表。将具有虚假源地址的分组注入到因特网中的能力,称为 IP 哄骗 (IP spoofing)