计网笔记一 概述

11 min

计算机网络的层级结构

计算机网络的特点:federated,scalable,constantly evolving,diverse,asynchronous,handle failures at scale。

由于计算机网络非常复杂,所以一般会分为若干层进行设计。每一层只需要保证自己的功能实现正确,而不需要关心其他层的实现细节。这样可以使得网络设计更加模块化,便于维护和扩展。

一共 5 层:

  1. 物理层(Physical, layer 1):通过物理的方式实现 bit 的传输,可以是有线的(wire)、无线的(wireless)、光信号(optical fiber)等
  2. 数据链路层(Link, layer 2):通过物理层的连接,将一个区域内不同的设备连接(link)起来,就构成了一个局域网,称为链路层。设备间可以传输 packets(一组 bit,代表某种信息,在这一层通常被称为 frames)
  3. 网络层(Network, layer 3):不同的局域网之间需要进行通讯,网络层就负责将数据从一个网络传输到另一个网络,使用 IP 协议来实现。又因为链路层一次传递数据有上限,所以网络层还实现了分片(fragmentation)和重组(reassembly)的功能。是一个 best-effort的服务(尽力服务),即不保证数据能被正确传输、不保证交付失败时可以汇报错误等,它只负责传输。
  4. 传输层(Transport, layer 4):网络层只负责传输,而无法保证数据的可靠性(如顺序、完整性等),传输层负责提供可靠的数据传输服务,常用的协议有 TCP(面向连接)和 UDP(无连接)。并且传输层将网络层的 packet 分成更小的片段,以便于传输和处理。传输层还负责端到端的通讯,提供了流量控制、拥塞控制等功能。它可以保证数据的可靠传输,但也会增加延迟。这一层将数据传输从数据包(packet)的概念转换到流(flow)的概念。
  5. 应用层(Application, layer 7):负责在不改变网络架构的前提下,构造不同的服务(service)。将应用程序的数据转换为网络可以传输的格式,并提供用户接口。常见的协议有 HTTP、FTP、SMTP 等。在旧式的网络模型里面这是第 7 层,所以现在有时仍然称为第 7 层。
前三层的示意图。一块灰色区域是一个局域网,局域网之间通过路由(router,也被称为 switch 用方块代表)来连接
前三层的示意图。一块灰色区域是一个局域网,局域网之间通过路由(router,也被称为 switch 用方块代表)来连接
internet 即为 network of networks。从一个设备发送数据到另一个设备,需要经过若干路由
internet 即为 network of networks。从一个设备发送数据到另一个设备,需要经过若干路由

Header File:只传输数据,接收方无法知道数据的信息以及如何处理数据。为此需要添加 headers,包含源地址、目的地址、协议类型、校验和(checksum)等元数据(metadata),被添加到数据(payload)的前面,形成一个完整的 packet。

由于有多个层级,每个层级都会添加自己的 header,所以会有 multiple headers 的现象。每一层只关注当前层对应的 header 内容。对于 endpoints(end hosts),有四层 header 被使用,而对于 router,则只有 3 个。在 router 之间传输时,最外层的 header 会被修改,比方说从 A 到 B 到 C,在 router A 处 header 内容可能为 From: A, To: B,而在 router B 处则会被修改为 From: B, To: C

Router 不关心 layer 4 和 7 的内容,而 end hosts 会关心所有 header 的内容,留意数据传输的路径
Router 不关心 layer 4 和 7 的内容,而 end hosts 会关心所有 header 的内容,留意数据传输的路径
NOTE

TTL (Time to Live) 在 layer 3 的 header 中有一个字段叫做 TTL (Time to Live),用于防止由于 router 的循环传输导致数据无法正确传输的问题。初始时,TTL 被初始化为一个较大的值,当经过每个 router 时,TTL 会减 1,当 TTL 减到 0 时,数据包就被丢弃(使用 IMCP 协议进行错误消息返回)。

设计准则

上一节介绍了计算机网络的结构,这一节讲解设计这种结构时使用的设计原则。

一些 guidelines:

  1. 去中心化控制(decentralized control):也可以是 SDN(Software Defined Networking),进行中心化控制。但是 DSDN(Distributed SDN) 又回到了去中心化控制。
  2. 尽力服务模型(best-effort service model):如 layer 3 (internet);也可以引入一些质量保证(Quality of Service, QoS)。
  3. 绕过麻烦(route around trouble):网络对 failures 需要弹性(resilient),如当一个 router 失败时,能找到其他路径进行传输。
  4. 愚蠢基础设施(dumb infrastructure with smart endpoints):如 routers 只负责转发数据,而不关心数据的内容。
  5. 端到端准则(end-to-end principle):在 end hosts 上实现功能,而不是 routers 上。
  6. 分层设计(layering):即上下层之间的依靠关系。
  7. Federation via narrow-waist interface:所有用户都使用相同的 layer 3 协议(IP)
如图,第 3 层只使用 IP 协议,形成了一个狭窄的腰部接口
如图,第 3 层只使用 IP 协议,形成了一个狭窄的腰部接口

Demultiplexing:由于第 3 层需要决定每一个层的下一个层使用什么协议,所以在 header 中需要包含下一层协议类型的信息

以第 3 层为例,需要决定下一层是使用 TCP 协议还是 UDP 协议
以第 3 层为例,需要决定下一层是使用 TCP 协议还是 UDP 协议

而在第 4 层中,需要包含一个应用运行端口的信息,以将数据传递给正确的程序。操作系统会自动根据端口号确定使用什么协议,如 80 端口通常是 HTTP 协议,443 端口通常是 HTTPS 协议。一个 private 的客户端的端口可以是随机的,但是 public 的服务器端口需要是固定的。

第 4 层需要包含端口信息
第 4 层需要包含端口信息
  • Layers 1 and 2 are implemented in hardware, on the network interface card (NIC).
  • Layers 3 and 4 are implemented in software, in the operating system.
  • Layer 7 is the applications running in software.
不同层由不同的部件实现
不同层由不同的部件实现

End-to-End Principle:一些应用的 feature 只能在 end hosts 上实现,如网络只需要在 end hosts 上检查传输是否成功,而不需要在每一个 router 上检查。但是这个准则是可以被打破的。

资源共享

网络资源往往会在多对 end hosts 之间共享(如同时传递数据时,可能会经过相同的 routers 和 links),实际中是采用的 statistical multiplexing(多路复用) 的方式来共享资源。

如右图,通过用户需求,动态分配资源。左图为静态(预先)分配资源,会产生资源浪费。
如右图,通过用户需求,动态分配资源。左图为静态(预先)分配资源,会产生资源浪费。

实现 statistical multiplexing 的方式:

  1. circuit switching:在传输数据之前,先建立一个连接(circuit),并在每一个 router 和 link 上分配固定的资源(reservation),直到传输结束再传输一次结束信号释放占用的资源。
  2. packet switching:将数据分成多个数据包(packet),为每个 packet 独立分配资源(即不同 flow 的 packets 和同一个 flow 中的 packets 都被视作是独立的),然后按照 best-effort 的方式传输。

对于 bursty 的传输,packet switching 更加高效,因为它可以动态分配资源,而 circuit switching 则需要预先分配资源,可能会导致资源浪费(如浏览网页)。而 smooth 的传输(如视频流)则更适合 circuit switching,因为它可以保证传输的稳定性。

容错性方面,packet switching 更加健壮,因为它可以在某个 router 或 link 失败时重新传输,而 circuit switching 则需要重新建立连接。

优势对比:

  • Circuit switching pros:
    • Reservations give applications better performance.
    • Reservations are more predictable and understandable.
  • Packet switching pros:
    • More efficient.
    • Faster startup to first packet delivered.
    • Easier recovery from failure.
    • Simpler implementation.

现代网络通常使用 packet switching,而在一些受限的场景中使用 circuit switching。

链路层

  • bandwidth:单位 bit/s
  • propagation delay:在 link 中的传播延迟
当带宽为 1Mbps,传播延迟为 0.001s 时的传送时序图
当带宽为 1Mbps,传播延迟为 0.001s 时的传送时序图
  • packet delay = propagation delay + transmission delay
  • transmission delay = packet size / bandwidth

对于较小的 packet,transmission delay 可以忽略不计(因为把数据放到链路上不需要花很多时间),propagation delay 占主。即小带宽,低延迟的 link 更好。反之,对于较大的 packet,transmission delay 占主,propagation delay 可以忽略不计。即大带宽,高延迟的 link 更好。

可以通过管道图来直观的理解:当 packet size 较小时,bandwidth 没法打满,造成浪费,不如提升 propogation delay;反之同理。

每个小矩形中为 1s 内传输的 packet 数量
每个小矩形中为 1s 内传输的 packet 数量

上面的分析都没有考虑排队(queueing)的情况。排队分为瞬态过载(transient overload)、持续过载(persistent overload)。

transient overload
transient overload
persistent overload
persistent overload