计算机网络笔记-2

简介

  • 这里记录了笔者阅读《计算机网络:自顶向下方法》的一些笔记。笔记有所缩略。
  • 主要关于
    • 第四章:网络层:数据平面

第四章:网络层:数据平面

1. 网络层概述

  • 网络层在协议栈中是最复杂的层次。网络层可以被分解为两个相互作用的部分:数据平面控制平面

    • 数据平面:网络层中每台路由器的功能,该数据平面功能决定到达路由器输入链路之一的数据报如何转发到该路由器的输出链路之一。
    • 控制平面:网络范围的逻辑。该控制平面功能控制数据报沿着从源主机到目标主机的端到端路径中路由器之间的路由方式。
  • 网络层的作用:将分组从一台发送主机移动到一台接收主机。有两种重要的网络层功能需要被使用:

    • 转发。当一个分组到达路由器的输入链路时,该路由器必须将该分组移动到适当的输出链路。转发是在数据平面中实现的唯一功能
    • 路由选择。网络层必须决定分组所采用的路由或路径。计算这些路径的算法称为路由选择算法

    需要注意的是,转发路由选择是两个截然不同的词语。

    • 转发forwarding是指将分组从一个输入链路接口移动到适当的输出链路接口的路由器本地动作。时间尺度很短,通常为几纳秒。
    • 路由选择routing是指确定分组从源到目的地所采取的端到端路径的网络范围处理过程,时间尺度较长,通常为几秒。

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

    转发表的设置有两种方式:

    • 传统的方式。路由选择算法决定了插入该路由器转发表中的内容。在一台路由器中的路由选择算法与在其他路由器中的路由选择算法通信,以计算出它的转发表的值。这种通信是通过根据路由选择协议交换包含路由选择信息路由选择报文

      image-20210515175625818

    • SDN方式。远程控制器计算和分发转发表以供每台路由器使用。控制平面路由选择功能与物理的路由器是分开的,路由选择设备只执行转发,而远程控制器计算并分发转发表。以下是**软件定义网络(Software-Defined Networking, SDK)**的一个例子:

      image-20210515175645704

  • 网络服务模型

    • 因特网的网络层提供了单一的服务,称为尽力而为服务best-effort service
    • 约定术语分组交换机是指一台通用分组交换设备,它根据分组首部字段中的值,从输入链路接口到输出链路接口转移分组。
      • 某些分组交换机称为链路层交换机link-layer switch,基于链路层帧中的字段值做出转发决定,这些交换机因此称为链路层设备
      • 其他分组交换机称为路由器router,基于网络层数据报中的首部字段值做出转发决定。路由器因此是网络层设备

2. 路由器工作原理

a. 通用路由器体系结构

image-20210515181508354

  • 输入端口。
    • 在路由器中执行终结入物理链路的物理层功能(最外侧的方框)
    • 还要与位于入链路远端的数据链路层交互来执行数据链路层功能(较中间的方框)
    • 在输入口执行查找功能(最内侧的方框)。正是在这里通过查找转发表决定路由器的输出端口,到达的分组通过路由器的交换结构转发到输出端口。
  • 交换结构。交换结构将路由器的输入端口连接到它的输出端口。
  • 输出端口。输出端口存储从交换结构接收的分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组。
  • 路由选择处理器。执行控制平面功能,例如维护路由选择表与关联链路状态信息,计算转发表等等。

b. 输入/输出端口处理 & 基于目的地转发

输入端口的线路段接功能与链路层处理实现了用于各个输入链路的物理层和链路层。转发表从路由选择处理器经过独立总线复制到线路卡。因此转发决策可以使用在每个输入端口的转发表副本,在每个输入端口本地做出,提高效率。

image-20210515185638281

输出端口处理操作与输入端口类似,包括选择和取出排队中分组进行传输、执行所需的链路层和物理层传输功能。

image-20210515190039325

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

c. 交换

交换结构位于一台路由器的核心部位,正是通过这种结构,分组才能实际的从一个输入端口交换到一个输出端口。交换可以用许多方式完成:

image-20210515190159433

d. 排队

当路由器的缓存空间被耗尽,无内存可用于储存到达的分组时将会出现丢包packet loss,即在网络中丢失被路由器丢弃。排队有两种,一种是输入排队;另一种是输出排队。

以下说明的情况假定

  • 所有链路速度相同。
  • 一个分组能够以一条输入链路接收一个分组所用的相同的时间量,从任意一个输入端口传送到给定的输出端口。
  • 分组按FCFS(先来先服务)方式,从一指定输入队列移动到其要求的输出队列中。只要其输出端口不同,多个分组可以被并行发送

输入排队

  • 如果交换结构不能快的使所有到达分组无时延地通过它传送,那么输入端口也将出现分组排队,因为到达地分组必须加入输入端口队列中,以等待通过交换结构传送到输出端口。

  • 如果位于两个输入队列前端的两个分组是发往同一输出队列的,则其中的一个分组将被阻塞,且必须在输入队列中等待。因为交换结构一次只能传送一个分组到某指定端口。

  • 输入排队交换机中的线路前部Head-of-the-Line,HOL阻塞,即在一个输入队列中排队的分组,因为被位于线路前部的另一个分组所阻塞,使得必须等待通过交换结构发送。

    image-20210515192933636

输出排队

  • 当没有足够的内存来缓存一个入分组时,就必须做出决定:

    • 要么丢弃到来的分组(弃尾策略)
    • 要么删除一个或多个已排队的分组为新来的分组腾出空间。

    在某些情况下,在缓存填满之前便丢弃一个分组(或在其首部加上标记),可以提前向发送方提供一个拥塞信号。这些处理分组丢失与标记的策略,统称为主动队列管理(Active Queue Management, AQM)算法。其中,刚刚所说明的随机早期检测(Random Early Detection, RED)算法是得到最广泛研究和实现的AQM算法之一。

计算路由器缓存大小的经验方法是:缓存数量(B)应该等于平均往返事件(RTT)乘以链路容量(C)。即$B=RTT * C$。该结果基于相对少量的TCP流的排队动态性分析得到。

例如一条具有250ms RTT的10Gbps链路需要的缓存量等于 B = 2.5Gb.

最近的实验表明,当有大量TCP流流过一条链路时,缓存所需要的数据量是$B=RTT * C / \sqrt{n}$。

e. 分组调度

  • 先进先出。

  • 优先权排队

    • 在优先权排队规则下,到达输出链路的分组被分类放入输出队列中的优先权类。每个优先权类通常都有自己的队列。当选择一个分组传输时,优先权排队规则将从队列为非空最高优先权类中传输一个分组。在同一优先权类的分组之间的选择通常以FIFO方式完成。
    • 非抢占式优先权排队规则下,一旦分组开始传输,就不能打断。
  • 循环和加权公平排队

    • 循环排队规则下,分组像使用优先权排队那样被分类。然而在类之间不存在严格的服务优先权,循环调度器在这些类之间轮流提供服务。一个所谓的保持工作队列(work-conserving queueing)规则在有任何类的分组排队等待传输时,不允许链路保持空闲。当寻找给定类的分组但没有找到时,将立即检查循环序列中的下一个类。

    • 一种通用形式的循环排队已经广泛实现在路由器中,即加权公平排队(Weighted Fair Queuing, WFQ)规则。不同点在于,每个类在任何时间间隔内可能收到不同数量的服务,即第 i 类将确保接收到的服务部分等于 $W_i / W$,其中$W$为所有权重之和。

      image-20210515201004707

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

1. IPv4数据报格式

网络层分组统称为数据报。IPv4数据报格式如下:

image-20210515212314203

其中,关键字段如下:

  • 版本(号)。这4bit规定了数据报的IP协议版本。通过查看版本号,路由器能够确定如何解释IP数据报的剩余部分。不同的IP版本使用不同的数据报格式。

  • 首部长度。一个IPv4数据报可包含一些可变数量的选项,故需要用这4bit来确定IP数据报中载荷实际开始的地方。大多数IP数据报不包含选项,所以通常具有20字节的首部。

  • 服务类型。服务类型(TOS)比特包含在 IPv4首部中,以便使不同类型的IP数据报相互区分开。

  • 数据报长度。IP数据报的总长度(首部+数据)。该字段有16比特的宽度。

  • 标识、标志、片偏移。主要涉及到IP分片(重点)

  • 寿命。即Time-to-Live, TTL。用来确保数据报不会永远在网络中循环。每当一台路由器处理数据报时,该字段的值减1。若TTL字段为0,则该数据报必须丢弃。

  • 协议。该字段通常只会在IP数据报到达最终目的地时才有效,主要指定IP数据报的数据部分应交付给哪个特定的运输层协议。例如 6 表示交付给TCP,17表示交付给UDP。

  • 首部校验和。用于帮助路由器检测收到的IP数据报中的首部比特错误。路由器会对每个收到的IP数据报计算其首部校验和,如果检测出差错,一般情况下则丢弃该报文。

    需要注意的是,在每台路由器上都必须重新计算检验和并再次存放到原处,因为TTL字段以及可能的选项字段会改变。

    为什么TCP/IP 在运输层和网络层都执行差错检测?原因如下:

    • IP层只对IP首部计算了校验和,而TCP/UDP检验和是对整个TCP/UDP报文段进行的。

    • TCP/UDP与IP不一定必须属于同一个协议栈,原则上说TCP能够运行在一个不同的协议上。而IP不一定要传递TCP/UDP的数据。

  • 源和目的IP地址。当某源生成一个数据报时,它在源IP字段插入它的IP地址,在目的IP字段中插入其最终目的地的地址。

    注意:TCP/UDP中插入的是源和目的端口号,注意区分。

  • 选项。该字段允许IP首部被扩展。

  • 数据。目标传输的数据。

2. IPv4 数据报分片

不是所有链路层协议都能承载相同长度的网络层分组。而一个链路层帧能承载的最大数据量叫做最大传送单元(Maximum Transmission Unit, MTU)。链路层协议的MTU严格限制IP数据报的长度,同时每条链路可能使用不同的链路层协议,有着不同的MTU。

若收到了一个IP数据报,转发时发现输出链路的MTU比该IP数据报的长度要小,则必须将IP数据报中的数据分片成两个或更多个较小的IP数据报,并用单独的链路层帧来封装这些较小的IP数据报,并最终通过输出链路发送这些帧。其中这些较小的数据报被称为片fragment

由于分片机制的存在, 片到达目的地运输层之前需要重新组装。IPv4将数据报的重新组装工作放到端系统完成,而不是网络路由器中。

当一台目的主机从相同源收到一系列数据报时,它需要确定这些数据报中的某些是否是一些原来较大的数据报的片。如果是,则必须进一步确认何时收到最后一片,并判断如何将这些接收到的片拼接在一起以形成初始的数据报。为了实现这些任务,IPv4将标识标志片偏移字段放在IP数据报首部中。使用方式如下所示:

  • 当生成一个数据报时,发送主机在为该数据报设置源和目的地址的同时贴上标识号。
  • 发送主机通常会将它发送的每个数据报的标识号加1.
  • 当某路由器需要对一个数据报分片时,形成的每个数据报具有初始数据报的源地址、目的地址和标识号。

这样,当目的地从同一个发送主机收到一系列数据报时,它能够检查数据报的标识号以确定哪些数据实际上是同一较大数据报的片。

注意这里的标识号,其功能同样与TCP中的序号不同,切勿混淆!

为了让目的主机相信它已经收到初始数据报的最后一片最后一个片的标志比特被设置为0,而所有其他片的标志比特被设置为1。同时为了让目的主机确定是否丢失一个片,并且按照正确顺序重新组装片,使用偏移字段指定该片应放在初始IP数据报中的哪个位置。

3. IPv4 编址

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

    以下是一个IP编址与接口的例子。其中某一部分的四个接口通过一个并不包含路由器的网络互联起来,例如以太网交换机等等,在此处用一朵云来表示:

    image-20210515222639352

  • 互联这3个主机接口与一个路由器接口的网络形成一个子网。IP编址为这个子网分配一个地址223.1.1.0/24,其中的/24记法,称为子网掩码,表示32比特中的最左侧24比特定义了子网地址。

    一个子网的IP定义并不局限于连接多台主机到一个路由器接口的以太网段。子网的定义如下所示:

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

    一个简单的例子:

    image-20210515225343646

  • 因特网的地址分配策略被称为无类别域间路由选择Classless Interdomain Routing, CIDR。当使用子网寻址时,32比特的IP地址被划分成两部分,并具有点分十进制数形式a.b.c.d/x,其中x指示了地址的第一部分中的比特数。形式为a.b.c.d/x的地址的x的最高比特构成了IP地址的网络部分,并且经常被称为该地址的前缀

    注意:路由表使用最长前缀匹配原则。

  • 在CIDR被采用之前,IP地址的网络部分被限制为长度为8、16、24比特,这是一种称为分类编址的编址方案。这是因为具有8、16和24比特子网地址的子网分别称为A、B和C类网络

  • 255.255.255.255为IP广播地址。当一台主机发出一个目的地址为255.255.255.255的数据报时,该报文会交付给同一个网络中的所有主机。路由器也会有选择地向邻近的子网发送该报文。

  • 获取主机地址:动态主机配置协议

    • 动态主机配置协议(Dynamic Host Configuration, DHCP)允许主机自动获取一个IP地址。除了IP地址分配以外,DHCP还允许让主机得知其子网掩码、第一跳路由器地址(即默认网关)、本地DNS服务器地址等等。DHCP具有将主机连接进一个网络的网络相关方面的自动能力,故它又常被称为即插即用协议零配置协议

    • DHCP是一个客户-服务器协议。客户通常是新到达的主机,它要获取包括自身使用的IP地址在内的网络配置信息。因此在最简单场合下,每个子网将具有一台DHCP服务器。如果在某子网中没有服务器,则需要一个DHCP中继代理(通常是一台路由器),该代理知道用于该网络的DHCP服务器的地址。

    • DHCP分配地址给新到达客户的流程如下:

      • DHCP服务器发现。一台新到达的主机的首要任务是发现一个要与其交互的DHCP服务器,这通过使用DHCP发现报文来完成。

        客户使用UDP向端口67发送该发现报文,其中目标IP地址中填入广播地址255.255.255.255;源IP地址中填写本机地址0.0.0.0

      • DHCP服务器提供。当DHCP服务器收到一个DHCP发现报文时,用DHCP提供报文向客户端做出响应。该报文向该子网的所有结点广播,仍然使用IP广播地址。由于在子网中可能存在多个DHCP服务器,因此该客户或许可以在多个提供的IP地址中进行选择。

        每台服务器提供的报文包含有收到的发现报文的事务ID向客户端推荐的IP地址网络掩码以及IP地址租用期

      • DHCP请求。新到达的客户从一个或多个服务器提供中选择一个,并向选中的服务器提供用DHCP请求报文进行响应,回显配置的参数。

      • DHCP ACK。服务器用DHCP ACK报文对DHCP请求报文进行响应,证实所要求的参数。

      image-20210515233546620

4. 网络地址转换

网络地址转换,即 NAT,可以使能路由器对于外部世界来说不像一台服务器,而是如同一个具有单一 IP 地址的单一设备,使得路由器对外界隐藏了内部网络细节

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2022 Kiprey
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~