网络IP层


网络IP层

1.数据层面

1.1 网络层概述

网络层的作用从表面上看极为简单,即将分组从一台发送主机移动到一台接收主机。为此,需要使用两种重要的网络层功能:

  • 转发。当一个分组到达某路由器的一条输人链路时,该路由器必须将该分组移动到适当的输出链路。转发是在数据平面中实现的唯一功能
  • 路由选择。当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径。计算这些路径的算法被称为路由选择算法(routing algorithm)。路由选择在网络层的控制平面中实现。

更为精确的描述:

转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地操作。时间尺度短:ns级别

路由选择是指确定分组从源目的地所采取的端到端路径的网络范围处理过程。时间尺度长:s级别

  • 每台网络路由器中有一个关键元素是它的转发表(forwardingtable)。路由器检查到达分组首部字段值,使用这些值在其转发表中搜索,转发分组。
  • 这些值对应存储在转发表项中的值,指出了该分组将被转发的路由器的输出链路接口

控制平面

路由选择算法决定了插入该转发表的内容。路由选择算法运行在每台路由器中,并且每台路由器都有转发和路由选择两种功能。

网络服务模型

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

  • 确保交付:确保分组最终到达目的地
  • 具有时延上界的确保交付:在特定的主机到主机时延上界内(100ms内 e.g.)交付
  • 有序分组交付:确保分组以发送顺序到达目的地
  • 确保最小带宽:在双方之间模拟一条特定比特速率的传输链路,只要发送方传输速率低于该速率,所有分组确保交付到目的主机
  • 安全性:在发送方加密数据报,在接收方解密数据报。

因特网的网络层提供了单一的服务,称为尽力而为服务( best- effort service)。使用尽力而为服务,传送的分组既不能保证以它们发送的顺序被接收,也不能保证它们最终交付;既不能保证端到端时延,也不能保证有最小的带宽。


1.2 路由器工作原理

下图显示了路由器的总体视图。

  • 输入端口
    • 执行物理层功能,在路由器上终止传入的物理链路。
    • 与位于输入链路远端的数据链路层交互来执行数据链路层功能。
    • 在输入端口执行查找功能,通过转发表决定路由器的输出端口。
  • 交换结构
    • 交换结构将路由器的输入端口连接到它的输出端口。这种交换结构完全
      包含在路由器之中,即是一个网络路由器中的网络。
  • 输出端口
    • 输出端口存储从交换结构接收的分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组。
    • 当一条链路是双向的时(即承载两个方向的流量),输出端口通常与该链路的输入端口成对出现在同一线路卡上。
  • 路由选择处理器
    • 路由选择处理器执行控制平面功能。
    • 在传统的路由器中,它执行路由选择协议,维护路由选择表与关联链路状态信息,并为该路由器计算转发表。
    • 在SDN路由器中,路由选择处理器负责与远程控制器通信,接收由远程控制器计算的转发表项并安装在输入端口。

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

路由器用分组目的地址的前缀(prefix)与该表中的表项进行匹配;如果存在一个匹配项,则路由器向与该匹配项相关联的链路转发分组。

当有多个匹配时,路由器使用最长前缀匹配规则,即在表中寻找最长的匹配项。

  • 通过查找确定了某分组的输出端口,则该分组就能够发送进人交换结构。
  • 如果来自其他输入端口的分组当前正在使用该交换结构,一个分组可能会在进入交换结构时被暂时阻塞。因此,一个被阻塞的分组必须要在输人端口处排队,并等待稍后被及时调度以通过交换结构。

输入端口还需完成其他动作:

  1. 必须出现物理层和链路层处理
  2. 必须检查分组的版本号、检验和以及寿命字段,并且重写后两个字段;
  3. 必须更新用于网络管理的计数器(如接收到的IP数据报的数目)。

交换

交换结构位于一台路由器的核心部位,通过交换结构,分组能实际地从一个输入端口交换( 即转发)到一个输出端口中。交换可以用许多方式完成。

  • 经内存交换。在输入端口与输出端口之间的交换是在CPU (路由选择处理器)的直接控制下完成的。输入与输出端口的功能就像在传统操作系统中的I/O设备一样。
    • 分组到达输入端口时,通过中断被路由选择器复制进()内存。
    • 从首部提取目的地址,在转发表中找出输出端口,将该分组复制到()输出端口的缓存。
    • 如果内存带宽为每秒读写B个分组,则总的转发吞吐量(分组从输入端口被传送到输出端口的总速率,即一次和一次)必然小于B/2。

  • 经总线交换。输入端口经一根共享总线将分组直接传送到输出端口,不需要路由选择处理器的干预。

    • 输入端口为分组预先计划一个标签,指示输出端口,分组传送到所有输出端口,但只有与该标签匹配的端口才能保存该分组。
    • 然后标签在输出端口被去除,因为其仅用于交换机内部来跨越总线。
    • 如果多个不同输出端口分组同时到达路由器,一次只有一个分组能够跨越总线。
    • 每个分组必须跨过单一总线,故路由器的交换带宽受总线速率的限制。
  • 经互联网络交换。一种由2N条总线组成的互联网络,它连接N个输入端口与N个输出端口。每条垂直的总线与每条水平的总线交叉,交叉点通过交换结构控制器能开启和闭合。

    • 分组到达端口A,需要转发到端口Y时,交换机控制器闭合总线A和Y交叉部位的交叉点。
    • 来自端口B的一个分组在同一时间能够转发到端口X,因为A到Y和B到X的分组使用不同的输入和输出总线。
    • 纵横式交换机是非阻塞的(non-blocking),即只要没有其他分组当前被转发到该输出端口,分组将不会被其他分组阻塞。如果目的地为相同的输出端口,则一个分组必须在输入端等待。

输出端口处理

输出端口处理取出已经存放在输出端口内存中的分组并将其发送到输出链路上。这包括选择和取出排队的分组进行传输,执行所需的链路层和物理层传输功能。


排队

排队的位置和程度(在输入端口或者在输出端口排队)将取决于流量负载、交换结构的相对速率和线路速率。因为随着这些队列的增长,路由器的缓存空间最终将会耗尽,并且当无内存可用于存储到达的分组时将会出现丢包(packet loss)。

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

假定该交换结构决定发送左上角队列前端的分组。在这种情况下,左下角队列中的深色阴影分组必须等待。但不仅该分组要等待,左下角队列中排在该分组后面的浅色阴影分组也要等待,即使右中侧输出端口(浅色阴影分组的目的地)中无竞争。

这种现象叫作输入排队交换机中的线路前部(Head-Of-the-Line HOL)阻塞

2.输出排队

  • 在时刻t,每个输入端口都到达了一个分组,每个分组都是发往最上侧的输出端口。
  • 假定线路速度相同,交换机以3倍于线路速度的速度运行,一个时间单位以后,所有三个初始分组都被传送到输出端口,并排队等待传输。
  • 在下一个时间单位中,这三个分组中的一个将通过输出链路发送出去。
  • 之后又有两个新分组已到达交换机的入端;这些分组之一要发往最上侧的输出端口。
  • 输出端口的分组调度( packet scheduler) 在这些排队分组中选择一个分组来传输


分组调度

1.先进先出(FIFO)

FIFO(也称为先来先服务)调度规则按照分组到达输出链路队列的相同次序来选择分组在链路上传输。

2.优先权排队

到达输出链路的分组被分类放入输出队列中的优先权类,如图所示。

在同一优先权类的分组之间通常以FIFO方式完成。

3.循环和加权公平排队

在循环排队规则(round robin queuing discipline) 下,分组像使用优先权排队那样被分类。然而,在类之间不存在严格的服务优先权,循环调度器在这些类之间轮流提供服务。

一个所谓的保持工作排队(work-conserving queuing)规则在有分组排队等待传输时,不允许链路保持空闲。当类中没有分组时,将立即检查循环序列中的下一个类。


1.3 网际协议 IPV4、寻址、IPV6

IPV4数据报格式

网络层分组被称为数据报

一个IP数据报有20 byte的首部(不包含选项),若数据报承载了一个TCP报文段(20 byte首部),则每个数据报共有40 byte的首部。


IPV4数据报分片

不是所有链路层协议都能承载相同长度的网络层分组。以太网帧能够承载不超过1500字节的数据,而某些广域网链路的帧可承载不超过576字节的数据。

一个链路层帧能承载的最大数据量叫作最大传送单元(Maximum Transmission Unit, MTU)

因为每个IP数据报封装在链路层帧在路由器间传输,故链路层协议的MTU严格地限制着IP数据报的长度。

  • 在其到达目的地运输层以前需要重新组装。为坚持网络内核保持简单的原则,IPv4的设计者决定将数据报的重新组装工作放到端系统中,而不是放到网络路由器中。

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

    • 当生成一个数据报时,发送主机在为该数据报贴上标识号。发送主机通常将它发送的每个数据报的标识号+1。
    • 当某路由器需要对一个数据报分片时,形成的每个数据报具有初始数据报标识号
    • 当从同一发送主机收到一系列数据报时,检查数据报的标识号以确定哪些数据报实际上是同一较大数据报的片。
    • 为了让目的主机绝对地相信它已收到了初始数据报的最后一个片,最后一个片的标志比特被设为0,而所有其他片的标志比特被设为1
    • 片偏移字段指定该片在初始IP数据报的位置。

IPV4编址

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

为便于书写,IPV4地址采用点分十进制记法,如127.0.0.1

223.1.1.0/24 其中 /24 称为子网掩码,表示最左侧24位定义了子网地址。

子网:分开主机和路由器的接口,使用接口端接入这些隔离网络的端点,每个隔离网络都叫做子网。

因特网地址分配策略:无类别域间路由选择(Classless Interdomain Routing CIDR)

  • 使用子网寻址,IP地址分为两部分,a.b.c.d/xx 指示了地址的第一部分bits,一般称为地址的前缀
  • 一个组织通常被分配一块连续的地址,即有相同前缀。

广播地址255.255.255.255。目的地为该地址的报文段会被转发给同一网络所有主机。


DHCP

动态主机配置协议(Dynamic Host Configuration),允许主机自动获取一个IP地址。同时获得子网掩码、第一跳路由器地址(默认网关)、本地DNS服务器地址等。

  • 如下图,在本机使用ipconfig命令即可查看网络配置。

对于一个新到达的主机,DHCP协议分为四步分配地址:

1.DHCP服务器发现

  • 通过使用DHCP发现报文实现。客户端在UDP分组中向端口67发送该报文。UDP分组封装在IP数据报中,使用广播目的地址255.255.255.255,将IP数据报传递给链路层,然后广播到子网连接的节点。

2.DHCP服务器提供

  • DHCP服务器收到DHCP发现报文,用DHCP提供报文响应客户端。仍用255.255.255.255向子网所有节点广播。
  • 子网可能存在多个DHCP服务器,因此服务器报文中包含发现报文的事务ID、推荐给客户端的IP地址网络掩码、IP地址租用期(IP地址有效时间,一般为几小时-几天)。

3.DHCP请求

  • 客户端从一个或多个服务器提供中选择一个,并向选中的服务器提供DHCP请求报文,回显配置的参数。

4.DHCP ACK

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

客户端收到ACK后,交互完成。


网络地址转换

地址空间10.0.0.0/8是在[RFC 1918]中保留的三部分IP地址空间之一,这些地址用于下图等专用网络或具有专用地址的地域。

具有专用地址的地域是指其地址仅对该网络中的设备有意义的网络。

  • NAT使能路由器对于外部世界来说行为就如同具有单一IP地址的单一设备。

    • 上图所有离开家庭路由器流向更大因特网的报文都拥有一个源IP地址138.76.29.7,且所有进入家庭的报文都拥有同一个目的IP地址138.76.29.7
    • NAT使能路由器对外界隐藏了家庭网络的细节。
  • 通过NAT转换表(NAT translation table),路由器知道将分组转发给哪个内部主机。


IPV6

IPV6数据报格式入下图。

  • 扩大的地址容量:128bits。
  • 40字节定长首部:允许路由器更快地处理数据。
  • 流标签:流(flow)。该字段用于“给属于特殊流(发送方要求特殊处理)的分组加上标签”。
  • 下一个首部(Next hdr):标识数据报中内容需要交付给哪个协议(如TCP或UDP)。
  • 跳限制(Hop limit):转发数据报的每台路由器将该字段-1。如果计数为0,则丢弃。

2.控制平面

2.1 路由选择算法

从发送方到接受方确定一条通过路由器网络的最佳路径。

  • 路由选择算法的一种分类方式:

    • 集中式路由选择算法:用完整的、全局性的网络知识计算出从源地址到目的地址的最低开销路径。该算法以所有节点之间的连通性和所有链路的开销作为输入。

      具有全局状态信息的算法通常称为链路状态(Link State, LS)算法

    • 分散式路由选择算法:路由器以迭代、分布式的方式计算出最低开销路径。没有节点拥有关于所有网络链路开销的完整信息。每个节点仅有直接相连的链路开销信息即可工作。

  • 第二种分类方式:

    • 静态路由选择算法:路由随时间变化非常缓慢,通常人工进行调整(人工编辑链路开销)。
    • 动态路由选择算法:随着网络流量负载或拓扑发生变化而改变路由选择路径。易受选择循环、路由震荡之类问题的影响。
  • 第三种分类方式:

    • 负载敏感算法:链路开销会动态变化以反映底层链路的拥塞水平。
    • 负载迟钝算法:链路开销不反映拥塞水平

链路状态路由选择算法

通过每个节点向网络中所有其他节点广播链路状态分组(链路标识和开销)来确定所有链路开销。

节点广播的结果是所有节点都具有该网络统一、完整的视图。

Disjkstra算法

Initialization:
	N’ = {u}
    for all nodes v
    if v is a neighbor of u
    	then D(v) = c(u, v)
    else 
    	D(v) = ∞

Loop
    find w not in N’ such that D(w) is a minimum
    add w to N’
    update D(v) for each neighbor v of w and not in N’:
    D(v) = min(D(v), D(w)+ c(w, v) )
    /* new cost to v is either old cost to v or known
       least path cost to w plus cost from w to v */
until N’= N


距离向量路由选择算法

是一种迭代的、异步的、分布式的算法。

分布式:每个节点从一个或多个直接相连邻居接收信息,执行计算,将结果分发给邻居。

迭代:过程一直持续到邻居之间无更多信息交换为止。

异步:不要求所有节点相互之间操作一致。


2.2 OSPF

自治系统(AS):通常在一个ISP中的路由器以及互联它们的链路构成一个AS。

在相同AS中的路由器都运行相同的路由选择算法并且有彼此的信息。

在一个自治系统内运行的路由选择算法叫作自治系统内部路由选择协议(intra-autonomous system routing protocol)。

OSPF

OSPF是一种链路状态协议,它使用洪泛链路状态信息和Dijkstra最低开销路径算法。

使用OSPF,一台路由器构建了一幅关于整个自治系统的完整拓扑图。于是,每台路由器在本地运行Djkstra的最短路径算法,以确定一个以自身为根节点到所有子网的最短路径树。各条链路开销是由网络管理员配置的。

  • 使用OSPF时,路由器向自治系统内所有其他路由器广播路由选择信息,而不仅仅是向其相邻路由器广播。
  • 每当一条链路的状态发生变化时(如开销的变化或连接/中断状态的变化),路由器就会广播链路状态信息。
  • 即使链路状态未发生变化,它也要周期性地(至少每隔30min一次)广播链路状态。

2.3 ISP之间的路由选择:BGP

在因特网中,所有的AS运行相同的AS间路由选择协议,称为边界网关协议(BGP)。

在BGP中,分组并不是路由到一个特定的目的地址,相反是路由到CIDR化的前缀,其中每个前缀表示一个子网或一个子网的集合。

  • 作为一种AS间的路由选择协议,BGP为每台路由器提供了一种完成以下任务的手段:
    • 从邻居AS获得前缀的可达性信息。
    • 确定到该前缀的“最好的”路由。

文章作者: Maosr
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Maosr !
  目录