计算机网络自顶向下方法 | 第4章 网络层:数据平面

160 阅读12分钟

第4章 网络层:数据平面

4.1 网络层概述

4.1.1 转发和路由选择:数据平面和控制平面

网络层功能:

  1. 转发(fowarding):是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作。转发发生的时间尺度很短(通常为几纳秒),因此通常用硬件来实现。
  2. 路由选择(routing):是指确定分组从源到目的地所采取的端到端路径的网络范围处理过程。路由选择发生的时间尺度长的多(通常为几秒),因此通常用软件来实现。

每台路由器:

  • 数据平面的主要作用是从其输入链路向其输出链路转发数据报
  • 控制平面的主要作用是协调这些本地路由器的转发动作,使得数据报沿着源和目的主机之间的路由器路径最终进行端到端传送

每台网络路由器中有一个关键元素是它的转发表(forwarding table)。路由器检查到达分组首部的一个或多个字段值,进而使用这些首部值在其转发表中索引,通过这种方法来转发分组。

image-20220531192928978.png

4.1.2 网络服务模型

网络服务模型(network service model)定义了分组在发送与接收端系统之间的端到端运输特性。

因特网的网络层提供了单一的服务,称为尽力而为服务(best-effort service) 。 使用尽力而为服务,传送的分组既不能保证按序接收,也不能保证最终交付;既不能保证端到端时延,也不能保证有最小带宽。尽力而为服务看起来是根本无服务的一种委婉说法。

4.2 路由器工作原理

一台路由器的4个组件:

  • 输入端口
  • 交换结构
  • 输出端口
  • 路由选择处理器

4.2.1 输入端口处理和基于目的转发

image-20220601204229743.png

当有多个匹配时,该路由器使用最长前缀匹配规则(longest prefix matching rule):即在表中寻找最长的匹配项,并向与最长前缀匹配相关联的链路接口转发分组。

最长前缀匹配:在路由器中常用三态内容寻址存储器(Ternary Content Addressable Memory, TCAM)来完成(硬件)

  • 内容可寻址:将地址交给TCAM,它可以在一个时钟周期内检索出地址,不管表空间有多大
  • Cisco Catalyst系列路由器: 在TCAM中可以存储多达约为1百万条路由表项

4.2.2 交换

三种交换技术:

  1. 经内存交换。第一代路由器。在CPU直接控制下的交换,采用传统的计算机。一次只能转发一个分组
  2. 经总线交换。数据报通过共享总线,从输入端口转发到输出端口。总线竞争: 交换速度受限于总线带宽。一次处理一个分组。
  3. 经互联网络(crossbar等)交换。同时并发转发多个分组,克服总线带宽限制。Banyan(榕树)网络,crossbar(纵横)和其它的互联网络被开发,将多个处理器连接成多处理器。

image-20220601213840870.png

4.2.3 输出端口处理

image-20220601214234119.png

4.2.4 何处出现排队

丢包(packet loss):分组“在网络中丢失”或“被路由器丢失”,正是在一台路由器的这些队列中,这些分组被实际丢弃或丢失。

image-20220603103251158.png

4.2.5 分组调度

分组调度:packet scheduling

调度:选择下一个要通过链路传输的分组

  1. FIFO (First-In-First-Out, 先进先出):按照分组到来的次序发送。

  2. 优先权排队(priority queuing):发送最高优先权的分组。同一优先权类的分组之间以FIFO方式完成。在非抢占式优先权排队规则下,一旦一个低优先权分组开始传输,高优先权的分组到来也不能将其打断。

  3. RR (Round Robin queuing discipline, 循环排队规则):多类。循环扫描不同类型的队列,发送完一类的一个分组,再发送下一个类的一个分组,循环所有类。

  4. WFQ (Weighted Fair Queuing, 加权公平排队)。一般化的Round Robin。在一段时间内,每个队列得到的服务时间是:Wi / (ΣWi) * t,和权重成正比。每个类在每一个循环中获得不同权重的服务量。

image-20220603111612052.png

4.3 网际协议:IPv4、寻址、IPv6、及其他

4.3.1 IPv4数据报格式

image-20220603150625116.png

4.3.2 IPv4数据报分片

MTU比IP数据报长度要小怎么办?将IP数据报中的数据分片成两个或多个较小的IP数据报。这些较小的数据报都称为(fragment)。片在其到达目的地运输层以前需要重新组装。为坚持网络内核保持简单的原则,IPv4的设计者决定将数据报的重新组装工作放到端系统中,而不是放到网络路由器中。

IPv4的设计者将标识、标志和片偏移字段放在IP数据报首部中,以为了让目的主机执行这些重新组装任务。

  • 发送主机通常将它发送的每个数据报的标识号加1。路由器分片,片具有初始数据报的源地址、目的地址和标识号。
  • IP的不可靠,片可能丢失,最后一个片的标志比特被设为0,以让目的主机相信它已收到初始数据报最后一片。
  • 使用偏移字段指定该片应放在初始IP数据报哪个位置,以为了让目的主机确定是否丢片和能按正确顺序组装片。

image-20220603162419304.png

4.3.3 IPv4编址

主机与物理链路之间的边界叫作接口,路由器与它的任意一条链路之间的边界也叫作接口。一台路由器有多个接口,每个接口有其链路。因为每台主机与路由器都能发送和接收IP数据报,IP要求每台主机和路由器接口拥有自己的IP地址。因此,从技术上讲,一个IP地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联

每个IP地址长度为32比特,因此总共有232个(约40亿)可能的IP地址,这些地址通常按所谓的点分十进制记法(dotted-decimal notation)。

在全球因特网中的每台主机和路由器上的每个接口,都必须有一个全球唯一的IP地址。然而,这些地址不能随意地自由选择,一个接口的IP地址的一部分需要由其连接的子网来决定

image-20220603182106404.png

eg:IP编址为这个子网分配一个地址223.1.1.0/24,其中的/24记法,有时称为子网掩码(network mask),指示32比特中的最左侧24比特定义了子网地址。另一种表示方法:11111111 11111111 11111111 00000000(24个1)。

书上关于如何定义系统中子网:

为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口 端接这些隔离的网络的端点。这些隔离的网络中的每一个都叫作一个子网(subnet)。

旧:分类编址(classful addressing) 问题:不够用 or 浪费 (前面的几位用来标识是哪一类)

image-20220603190911243.png

一些约定:

  • 子网部分: 全为0---本网络
  • 主机部分: 全为0---本主机
  • 主机部分: 全为1---广播地址,这个网络的所有主机

新:CIDR ( Classless Interdomain Routing, 无类别域间路由选择 )

image-20220603192246648.png

如何获得一个IP地址?

  • ICANN分配IP地址给ISP(它还管理DNS根服务器)

  • ISP分配一组地址给某组织

  • 某组织一旦获得了一块地址,它就可以为本组织内的主机与路由器接口逐个分配IP地址。

    可以手动配置,但更常用:动态主机配置协议(Dynamic Host Configuration Protocol, DHCP):从服务器中动态获得一个IP地址

image-20220604144013684.png

image-20220604145840674.png

DHCP: 不仅仅是IP addresses。DHCP 返回:

  1. IP 地址
  2. 第一跳路由器的IP地址(默认网关
  3. DNS服务器的域名和IP地址
  4. 子网掩码 (指示地址部分的网络号和主机号)
image-20220604150214135.pngimage-20220604150307975.png

4.3.4 网络地址转换

LAN (Local Area Network, 局域网)

WAN (Wide Area Network, 广域网)

问题的引出:如果子网变大了,则需要分配一块较大的地址。但如果ISP已经为该子网的当前地址范围分配过一块连续地址该怎么办?

解决方法:网络地址转换(Network Address Translation, NAT)。专用网(子网)内部的主机的本地 IP 地址是专用网自己定义的,不属于232中的一个(不是65535,端口号是65535个),所以可以节省 IP 。专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP。

image-20220604165135921.pngimage-20220604165626253.png
image-20220604170028974.pngimage-20220604170047146.png

在以前,NAT 将本地 IP 和全球 IP 一一对应,这种方式下拥有 n 个全球 IP 地址的专用网内最多只可以同时有 n 台主机接入互联网。为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把传输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT(Network Address and Port Translation)。

img

NAT的争议以及NAT穿越(NAT traversal)问题:

image-20220604171718875.png

4.3.5 IPv6

  • 初始动机:32 - bit 地址空间将会被很快用完。
  • 另外的动机:头部格式改变帮助加速处理和转发。头部格式改变提升服务质量(QoS) 。

IPv6中引入的最重要的变化显示在其数据报格式中:

  • 扩大的地址容量。32 bit -> 128 bit
  • 简化高效的40字节首部。
  • 流标签。

image-20220604203627498.png

  1. 版本。IPv6将该字段值设置为6。
  2. 流量类型。类似IPv4的TOS。
  3. 流标签。能够对一条流中的某些数据报给出优先权。
  4. 有效载荷长度。定长的40字节数据报首部后面的字节数量。
  5. 下一个首部。交付给哪个协议(TCP / UDP)。
  6. 跳限制。转发数据报的每台路由器将该字段内容减1。为0则该数据报被丢弃。
  7. 源地址和目的地址。
  8. 数据。有效载荷(payload)部分。

IPv6数据报中不存在IPv4数据报中的几个字段:

  • 分片 / 重新组装。减少耗时。具体细节:IPv6不允许在中间路由器上进行分片与重新组装,这种操作只能在源与目的地执行。如果路由器收到的IPv6数据报因太大而不能转发到出链路上的话,则路由器只需丢掉该数据报,并向发送方发回一个“分组太大”的ICMP差错报文即可,于是发送方能够使用较小长度的IP数据报重发数据。
  • 首部检验和。减少耗时。运输层和链路层都执行了检验操作。IP设计者觉得在网络层具有该功能实属多余。
  • 选项。

从IPv4到IPv6的迁移方法:

建隧道 (tunneling)

image-20220604211640751.png

image-20220604211546326.png

image-20220604211852778.png

4.4 通用转发和SDN

传统方式:通过分布式,每台设备的方法来实现数据平面和控制平面功能。存在昂贵、管理困难、无法实现高级特性等问题。

image-20220605195030698.pngimage-20220605193818390.png

SDN的主要思路:

  1. 网络设备数据平面和控制平面分离。

  2. 数据平面 ---- 分组交换机

    将路由器、交换机和目前大多数网络设备的功能进一步抽象成:按照流表(由控制平面设置的控制逻辑)进行PDU(protocol data unit)(帧、分组)的动作(包括转发、丢弃、拷贝、泛洪、阻塞)。

    统一化设备功能:SDN交换机(分组交换机),执行控制逻辑。

  3. 控制平面 ---- 控制器 + 网络应用

    分离、集中。

    计算和下发控制逻辑:流表。

SDN控制平面和数据平面分离的优势:

  1. 水平集成控制平面的开放实现(而非私有实现),创造出好的产业生态,促进发展。

    分组交换机、控制器和各种控制逻辑网络应用app可由不同厂商生产,专业化,引入竞争形成良好生态。

  2. 集中式实现控制逻辑,网络管理容易

    集中式控制器了解网络状况,编程简单。

    避免路由器的误配置。

  3. 基于流表的匹配+行动的工作方式允许“可编程的”分组交换机。

    实现流量工程等高级特性。

    在此框架下实现各种新型(未来)的网络设备。

匹配加动作转发表在OpenFlow中称为流表 (flow table),它的每个表项包括:

  • 首部字段值的集合,入分组将与之匹配
  • 计数器集合(当分组与流表项匹配时更新计数器)
  • 当分组匹配流表项时所采取的动作集合

4.4.1 匹配

image-20220606204341803.png

Butler Lampson有过著名的论述:“在一个时刻做一件事,将它做好。一个接口应当俘获一个抽象的最低限度的要件。不要进行一般化,一般化通常是错误的”。

4.4.2 动作

最为重要的动作是:

  • 转发
  • 丢弃
  • 修改字段

4.4.3 匹配加动作操作中的OpenFlow例子

  1. 简单转发
  2. 负载均衡
  3. 充当防火墙

个人觉得这些都能算做流量工程。

“一个人总是要不断地超越自我,否则还有什么乐趣可言?” ----- Vinton G. Cerf