《计算机网络》笔记-第1章计算机网络和因特网

[TOC]

0. 前言

鉴于计算机网络的重要性,以及即将开设的计算机网络课程,我决定利用寒假的时间认真研读 《计算机网络——自顶向下方法》第7版,并撰写阅读笔记。

愚以为,计算机网络是计算机领域中基础且重要的部分,必须牢固掌握。相对于各种新兴框架,计算机网络才是提高计算机素养的关键之一。值得我们花时间去阅读、研究和实践。

我接触计算机网络,是从一本叫做《网络是如何连接》的小书开始的。这本书十分不错,帮我打开了计算机网络的大门。但这本书中的知识并不深入,也没帮我形成完整的知识体系。所以,此次选择更加权威而全面的《计算机网络——自顶向下方法》进行阅读,希望我能从中收获更多。

这篇是《计算机网络——自顶向下方法》第1章的学习笔记。由于我结合了英文版的内容,所以笔记中用到了一些英文,请大家见谅。不过,个人认为英语对计算机学生还是很重要的(后悔自己英语不好)。同时,笔记中既有原文内容,也有我自己的理解部分。如果存在某些名词跟原文不符,我希望大家不要纠结。(愚以为,重要的在于理解思想,而不在于名词解释、或者概念背诵)

那话不多说,冲冲冲。

1. What Is the Internet

But what is the Internet? There are a couple of ways to answer this question. First, we can describe the nuts and bolts of the Internet, that is, the basic hardware and software components that make up the Internet. Second, we can describe the Internet in terms of a networking infrastructure that provides services to distributed applications.

什么是因特网?回答这个问题有两种方式:其一,我们能够描述因特网的具体构成,即构成因特网的基本硬件和软件组件;其二,我们能够根据为分布式应用提供服务的联网基础设施来描述因特网。

1.1. A Nuts-and-Bolts Description(用具体构成描述因特网)

1

客观存在:

  • 主机(host) == **端系统(end system)**,接入因特网的设备,如图中的电脑、手机、联网汽车等

  • **通信链路(communication link)**,连接各端系统的物理媒介,图中的线

  • **分组交换机(packet switch)**,通信链路中的交叉口。其中最著名的两种是:

    • **路由器(router)**,图中的圆形带“X”体
    • **链路层交换机(link-layer switch)**,图中的方形带“X”体
  • **分组(packet)**,由一台端系统发送给另一台端系统的数据/信息包

主观存在:

  • **ISP(Internet Service Provider, 因特网服务提供商)**,为端系统提供接入因特网的服务。较低层的ISP管理某个区域,类似于校园网、公司网等;较高层的ISP管理整个国家,类似于联通、移动等。

  • **协议(protocol)**,因特网中最重要的两个协议是:

    • TCP(Transmission Control Protocol, 传输控制协议)
    • IP(Internet Protocol, 网际协议)

将因特网与现代物流系统类比:

因特网 物流
端系统 货物寄送或到达的地方
通信链路 高速公路、铁路、普通公路等
分组交换机 岔路口
分组 货物
ISP 公路局、铁路局等

1.2. A Services Description(用服务描述因特网)

  • **分布式应用程序(distributed application)**,各大网站

1.3. What Is a Protocol

人们规定好的一套交流、行事的标准,就是协议

古代儒学、书信格式、普通话标准等等,都是协议。

学习计算机网络,最重要的就在于理解网络协议。

2. The Network Edge(网络边缘)

网络边缘主要包括:端系统和接入网

2.1. Access Networks(接入网)

  • 接入网(access networks),将端系统物理连接到其边缘路由器的网络

  • 边缘路由器(edge router),端系统发送的数据,到达任何其它远程端系统所经过的第一台路由器

以上定义有待考察。

总而言之,接入网就是指连接互联网与家庭、公司网络的通信线路。其长度一般为几百米到几公里,因而被形象地称为”最后一公里”。它包括 DSL、电缆、FTTH 等

2.1.1. DSL(Digital Subscriber Line, 数字用户线)

DSL,即用电话线作为网线。它包括**ADSL(Asymmetric Digital Subscriber Line,非对称数字用户线)**、RADSL、HDSL和VDSL等等

用户从提供本地电话接入的本地电话公司处,获取DSL因特网接入,用户的本地电话公司即是它的ISP。

1

如上图所示,每个用户的 DSL调制解调器(DSL modem) 使用现有电话线(双绞铜线),与位于电话公司的本地中心局中的 数字用户线接入复用器(DSLAM) 交换数据,分配器(splitter) 则将网络信号与电话信号分开。

在电话线中,包含三个通道:

  • 电话信号通道位于0到4kHz频段;
  • 网络上行信号通道位于4kHz到50kHz频段;
  • 网络下行信号通道位于50kHz到1MHz频段。

缺点:短距离。

2.1.2. Cable Internet Access(电缆因特网接入)

用电视线作为网线。由于在这个系统中应用了光纤和同轴电缆,又被称为**混合光纤同轴(Hybrid Fiber Coax, HFC)**系统。

1

使用电缆接入因特网,需要电缆调制解调器(cable modem),家庭PC会连接到它的以太网接口。在电缆头端(cable head end),有一个电缆调制解调器端接系统(cable modem termination system, CMTS),负责接收并处理各家庭传来的网络信号。在电缆中,也分为上行下行两个信号通道。

缺点:多个家庭共享电缆,用的人越多,网速越慢。

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

根据光纤分布体系结构,可分为:

  • **AON(active optical networks, 主动光纤网络)**,从本地中心局到每户设置一根光纤
  • **PON(passive optical networks, 被动光纤网络)**,从中心局出来的每根光纤由许多家庭共享,直到接近用户的位置,才为每个用户分配一根光纤,类似于树杈状

以较为常见的PON为例,如图:

1

每个家庭都有一个光纤网络端接器(optical network terminator, ONT),用户将一台家庭路由器与ONT相连,并经过这台家庭路由器接入因特网。ONT通过专门的光纤连接到邻近的**光纤分配器(optical splitter),该分配器把一些家庭(少于100个)集结到一根共享光纤,该光纤再连接到中心局(central office)的光纤线路端接器(optical line terminator, OLT)**。该OLT再经过中心局路由器与因特网相连。

2.1.4. 卫星与拨号

在一些乡村环境,常使用卫星链路拨号接入的方式,但是网速很慢。

2.1.5. 以太网与WiFi

在公司、大学校园以及越来越多的家庭中,也常使用**局域网(LAN)**,将端系统连接到边缘路由器。

有线局域网常使用以太网技术;

无线局域网常使用WiFi技术。

2.1.6. 3G、4G与5G

手机等移动设备,则使用广域无线接入的方式。通过蜂窝网提供商运营的基站来发送和接收分组,用户需要位于基站的数万米范围内。

2.2. Physical Media(物理媒体)

分组数据所跨越的物理媒介,分为两种类型:

  • 导引型媒体:电波沿着固体媒体前行,如光纤、双绞铜线或同轴电缆
  • 非导引型媒体:电波在空气或外层空间中传播,如无线局域网或卫星

下面讨论几种导引型媒体:

  • 双绞铜线:两根绝缘铜线螺旋绞合形成双绞线(减少干扰),许多双绞线构成一根电缆

    • 优点:便宜
    • 缺点:传输速率取决于粗细和距离
    • 用途:局域网、DSL、拨号
  • 同轴电缆:两个同心的铜导体

    • 优点:
    • 缺点:共享
    • 用途:电缆接入因特网
  • 光纤:细而柔软的、能够导引光脉冲的媒体,每个脉冲表示一个比特(bit)

    • 优点:网速高、抗干扰强
    • 缺点:发送接收的光设备(接收器、交换机等)成本高
    • 用途:光纤入户

3. The Network Core(网络核心)

下图中,蓝色加粗部分即为网络核心:

1

通过网络链路和交换机移动数据有两种基本方法:分组交换电路交换

3.1. Packet Switching(分组交换)

  • **报文(message),源端系统向目的端系统发送的完整的数据信息,如图像数据、音频数据等。在传递过程中,报文会被分解为较小的数据块,被称为分组(packet)**。

  • 存储转发传输(store-and-forward transmission) 机制,分组交换机必须接收到整个分组,才能向输出链路传输该分组的第一个比特。

  • **输出缓存(output buffer)**,用于存储路由器准备发往对应链路的分组,当该链路正忙于传输其它分组时,刚到达的分组必须在输出缓存中等待。

  • **排队时延(queuing delay)**,由于分组会遇到在输出缓存中等待的情况,所以分组传输中会存在排队时延。

  • **分组丢失(packet loss)**,由于缓存空间有限,当缓存已满时,将出现分组丢失的情况。

  • **转发表(forwarding table)**,存在于每台路由器中,用于将目的地址映射成对应的输出链路。路由器通过转发表,判断将当前分组转发到哪一条输出链路。

  • **路由选择协议(routing protocol)**,用于自动地设置这些转发表。例如,一个路由选择协议可以决定从每台路由器到每个目的地地最短路径,并使用这些最短路径结果来配置路由器中的转发表。

3.2. Circuit Switching(电路交换)

在电路交换网络中,端系统通信期间,会在沿路预留通信所需要的资源(缓存,链路传输速率)。而在分组交换网络中,这些资源是不预留的。

传统的电话网络就是电路交换网络的例子。在两方通话期间,第三方不能插足,因为没有多余的资源了。

电路交换主要通过 频分复用(frequency-division multiplexing, FDM)时分复用(time-division multiplexing, TDM) 来实现。

1

如上图所示,频分复用是划分频谱,不同用户不同频段;时分复用是划分时间,不同用户不同时隙。

3.3. Packet Switching vs Circuit Switching

  • 分组交换:
    • 优点:更好的带宽共享;更简单、有效、成本低
    • 缺点:端到端的时延是可变和不可预测的
  • 电路交换:
    • 优点:稳定
    • 缺点:预留端到端带宽是复杂的

分组交换胜出!

3.4. A Network of Networks(网络的网络)

年复一年,因特网用户越来越多,导致网络越来越大,从而形成了网络的网络。

端系统通过接入ISP进入因特网,只要所有的接入ISP互联,所有的端系统就能够彼此发送分组。那么,如何使所有的接入ISP互联呢?

网络的网络结构演变如下:

  • 一种幼稚的方法是,使每个接入ISP直接与其它每个接入ISP连接。

  • 网络结构1,用单一的全球传输ISP互联所有接入ISP,全球ISP相当于每个接入ISP的提供商(ISP)。

  • 网络结构2,由无数的接入ISP和多个 第一层ISP/全球ISP(tier-1 ISP) 组成。

  • 网络结构3,拥有多层等级ISP。例如,在中国,每个城市有接入ISP,它们与省级ISP连接,省级ISP又与国家级ISP连接,国家级ISP最终与 第一层ISP(tier-1 ISP) 连接。

  • 网络结构4,在网络结构3的基础上添加了如下内容:

    • **PoP(points of presence, 存在点)**,一个PoP是提供商ISP中的一台或多台路由器(在同一位置)群组,客户ISP借此与提供商ISP连接。

    • **多宿(multi-home)**,任何ISP(除第一层ISP外)都可以与一个或更多个提供商ISP连接。打比方说,就是你可以同时购买电信、联通的宽带,这样一个挂了,你还可以选择另一个。

    • **对等(peer)**,同等级相邻的ISP能直接互联,而不通过上级ISP,这样两者之间不需要付费,也可以不用向上级ISP交钱了。比如,南京市ISP与苏州市ISP对等,就可以不用向国家ISP缴纳这部分的钱,但南京市ISP要访问深圳市ISP,依旧要向国家ISP交钱。

    • **IXP(Internet Exchange Point, 因特网交换点)**,是由第三方公司提供的汇合点,多个ISP可以在这里一起对等。2016的因特网中,由400多个IXP。

  • 网络结构5,在网络结构4的基础上添加了**内容提供商网络(content-provider networks)**,例如谷歌,它的专用网络与较低层ISP对等,并“绕过”较高层ISP。如下图:

    1

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

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

1

上图所示的时延分为以下四种类型:

  • 处理时延(Processing Delay),路由器(分组交换机)检查分组首部和决定将该分组导向何处。在节点处理之后,路由器将该分组引向通往B链路之前的队列中。处理时延通常是微秒或更低的数量级。

  • 排队时延(Queuing Delay),分组在路由器中等待传输时经受的时延,取决于当前队列中分组的数量,即网络流量。排队时延可以是毫秒到微秒量级。

  • 传输时延(Transmission Delay),是将分组的所有比特推向链路(发射)所需要的时间。通常在毫秒到微秒量级。

  • 传播时延(Propagation Delay),从该链路起点到达路由器B所需要的时间。在广域网中,传播时延为毫秒量级。

节点时延($d_{nodal}$) = 处理时延($d_{proc}$) + 排队时延($d_{queue}$) + 传输时延($d_{trans}$) + 传播时延($d_{prop}$)

4.2. Queuing Delay and Packet Loss(排队时延和丢包)

节点时延中最为复杂和有趣的成分是排队时延(其实,就是堵车消耗的时间)。

  • a表示分组到达队列的平均速率(单位是分组/秒,即pkt/s),即路由器处理该分组的速率;
  • R表示传输速率,即从队列中推出比特的速率;
  • L表示所有分组的平均比特长度;
  • La/R被称为**流量强度(traffic intensity)**。

如果La/R>1,则比特到达队列的平均速率超过从该队列传输出去的速率,即接收比送出去的快。同一时刻到达的分组越多,排队时延将越大,因为$\lim_{N\to \infty}N\tfrac{La}{R} = N$。

因此:

Design your system so that the traffic intensity is no greater than 1

当分组到达时,队列已满,那该分组奖会**丢失(loss)**。

4.3. End-to-End Delay(端到端时延)

假设网络是无拥塞的(因此排队时延是微不足道的)。

端到端时延:$d_{end-end} = N(d_{proc} + d_{trans} + d_{prop})$

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

除了时延和丢包,端到端吞吐量是计算机网络中另一个至关重要的性能测度。包含如下两个度量:

  • **瞬时吞吐量(instantaneous throughput)**:某一时刻的下载速率,以每秒传送的比特数bps计。比如文件下载时,不断变化的xxxkb/s

  • **平均吞吐量(average throughput)**:下载完整个文件的平均速率

另外,端到端的吞吐量,取决于端到端路径中速率(bps)最小的链路,即**瓶颈链路(bottleneck link)**。论证如下:

假设有一台服务器和一台客户机,他们通过两条通信链路和一台路由器相连,不考虑处理时延和传输时延,令$R_s$表示服务器到路由器之间的链路速率(bps),$R_c$表示路由器到客户之间的链路速率(bps),特别注意:链路速率(bps)表示每秒传送的比特数,而不是每秒前进的路程。如下图:

1

根据$R_s$与$R_c$的比较关系,可分为以下两种情况:

  1. 假设$R_s < R_c 且 R_s=1bit/s, R_c=2bit/s$:在时刻1,有1bit从服务器到达路由器;在1s~2s间,虽然路由器到客户端的链路1s能够传播2bit,但路由器此时只有1bit,所以该链路1s只能转播1bit;在时刻2,1bit到达客户端,新的1bit又到达了路由器;重复上述步骤。虽然$R_c=2bit/s$,但由于服务器到路由器的链路1s只能提供1bit,所以路由器到客户端的链路速率也降至$1bit/s$。

  2. 假设$R_s > R_c 且 R_s=2bit/s, R_c=1bit/s$:在时刻1,有2bit从服务器到达路由器;在1s~2s间,由于路由器到客户端的链路1s只能够传播1bit,所以路由器还停留了1bit;在时刻2,1bit到达客户端,新的1bit又到达了路由器,此时路由器保留了2bit。随着时间推移,路由器积累的bit越来越多,这是一种最不希望的情况。

因此,**对于这种简单的两链路网络,其吞吐量为$\tfrac{1}{2}min{R_c, R_s}$**(此处略不同于《计算机网络——自顶向下方法》1.4.4节中的内容,愚以为书中存在纰漏)。

综上所述,我们可以知道,端到端路径中的瓶颈链路,决定了端到端的吞吐量。所以,在今天因特网中,对吞吐量的限制因素通常是接入网

另外,当有许多数据流通过一条链路时,一条高传输速率的链路也可能成为瓶颈链路。

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

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

分层是分析和设计大型系统的良好方法。

5.1.1. Protocol Layering(协议分层)

5层因特网协议栈(protocol stack, 各层的所有协议) 如下图:

1

上层服务依赖于下层服务,下层服务为上层服务提供接口。

就像本书所说,我们采用 自顶向下方法(top-down approach) 进行解释分析:

  • **应用层(Application),软件实现。包含HTTP、SMTP、FTP、DNS等协议,应用层中的基本信息称为报文(message)**。
  • **运输层(Transport),软件实现。包含TCP、UDP等协议,运输层中的基本信息称为报文段(segment)**。
  • **网络层(Network),软硬件实现。包含IP、路由选择等协议,基本信息称为数据报(datagram)**。
  • **链路层(Link),硬件实现。包含以太网、WiFi等协议,基本信息称为帧(frame)**。
  • **物理层(Physical),硬件实现。包含关于双绞铜线、光纤等链路的协议,基本信息为比特(bit)**。

5.1.2. The OSI Model(OSI模型)

1970s后期,国际标准化组织(ISO)提出计算机网络围绕7层来组织,称为开发系统互连模型(OSI模型),如下:

1

相比于因特网5层模型,7层模型多了 表示层(Presentation)会话层(Session) 两层。

为什么会少了两层呢?因特网回答如下:

it’s up to the application developer.

这交给开发者处理。

5.2. Encapsulation(封装)

封装的意义:对于上一层传来的数据信息,附加上当前层的附加信息。

对于每一层的数据信息,具有两种类型的字段:首部字段(当前层信息) 和 **有效载荷字段(payload field, 来自上一层)**。

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

  • **僵尸网络(botnet)**,被黑客入侵设备组成的网络。
  • **病毒(virus)**,一种需要某种形式的用户交互来感染用户设备的恶意软件。
  • **蠕虫(worm)**,一种无须任何明显用户交互就能进入设备的恶意软件。
  • **DoS(denial-of-service attacks, 拒绝服务攻击)**:
    • 弱点攻击。攻击目标主机上运行的应用程序,从而使主机崩溃或者控制主机。这不是pwn吗!
    • 带宽洪泛。攻击者向目标主机发送大量分组,使其接入链路拥塞。
    • 连接洪泛。攻击者在目标主机中创建大量的半开或全开的TCP连接。
  • **DDoS(distributed DoS, 分布式DoS)**,黑客利用受害主机组成的僵尸网络对服务器进行攻击:
    1
  • **分组嗅探器(packet sniffer)**,记录每个流经的分组副本的被动接收机。在无线传输设备的附近放置一台被动的接收机,它就能得到传输的每个分组的副本。分组嗅探软件——Wireshark。

等等等等。

7. History of Computer Networking and the Internet

  • 1960s,电话网络统治着通信网络,它主要采用电路交换的方式发送信息。
  • 1960s,MIT(麻省理工)的研究生Leonard Kleinrock、兰德公司和NPL(英国国家物理实验室)分别研究并发明了分组交换技术。
  • 1967年左右,Lawrence Roberts(Leonard Kleinrock的同事)公布了一个ARPAnet(ARPA,美国高级研究计划署)的总体计划,它是第一个分组交换计算机网络,是因特网的祖先。
  • 1969年,第一个分组交换网络ARPAnet落地,但只有4个节点。
  • 1972年,ARPAnet发展到15个节点,并完成了第一个端到端协议——NCP
  • 1970s早中期,其它分组交换网络问世,包括:ALOHAnet(无线电网络)、Telenet(BBN的商用分组交换网路)等,还有分时网络:Tymnet和GE信息服务网。
  • 1970s,将各网络互联的工作得到了DARPA(美国国防部高级研究计划署)的支持。
  • 1976年, Metcalfe 和 Boggs 基于ALOHAnet中的多路访问协议,研制了以太网协议
  • 1970s末,TCP、UDP、IP协议在概念上已经完成。
  • 1979年,ARPAnet拥有200个节点。
  • 1982年,SMTP邮件协议被发明。
  • 1983年1月1日,TCP/IP协议替代了NCP协议,成为ARPAnet新的标准主机协议。
  • 1983年,发明了DNS协议。
  • 1985年,发明了FTP协议。
  • 1980s初期,在ARPAnet发展的同时,法国启动了Minitel项目,他的计划是让数据网络进入每个家庭。在1990s中期,Minitel提供了20000多种服务,涵盖了广泛的范围。Minitel在大量法国家庭中存在了10年后,大多数美国人才听说因特网。
  • 1980s,BITNET为美国东北部的几个大学之间提供电子邮件和文件传输。然后,建立了CSNET将没有接入ARPAnet的大学研究人员连接到一起。1986年,又建立了NSFNET。
  • 1980s末期,连到公共因特网的主机数量达到1000000台。
  • 1990s,ARPAnet已不复存在,NSFNET也于1995年退役,因特网步入商业化。
  • 1989~1991年间,Tim Berners-Lee发明了Web,并和他的同事研制了HTML、HTTP、Web服务器和浏览器,这是Web的4个关键部分。
  • 1995~2000,因特网飞速发展。
  • 2000~2001,因特网股票崩盘,许多因特网初创公司倒闭。
  • 2000至今,因特网家庭接入、速度越来越快、大公司部署专用网络、“云”。