网络层服务

概述

从发送主机向接收传送数据段

发送主机:将数据封装到数据包中

接收主机:向传输层交付数据段

每个主机和路由器都运行网络层协议

路由器检验所有穿越它的$IP$数据报的头部域,决策如何处理$IP$数据报

image-20220514101921975

网络层的核心功能

转发(forwarding):将分组从路由器的输入端口转移到合适的输出端口

路由(routing):确定分组从源到目的的经过的路径

  • 路由算法

image-20220514102253436

某些网络的重要功能—连接建立

  • 数据分组传输之前两端主机需要首先建立虚拟/逻辑连接,网络设备(如路由器)参与连接的建立
  • 不同于传输层的两个应用进程之间,对中间网络设备透明,网络连接是两个主机之间,路径上的路由器等网络设备参与其中的

image-20220514102424876

网络层服务模型

image-20220514102719165

无连接服务:不事先为系列分组的传输确定传输路径,每个分组独立确定传输路径,不同分组可能传输路径不同

  • 数据报网络:简化网络,复杂“边缘”

连接服务:首先为系列分组的传输确定从源到目的经过的路径,然后沿该路径传输系列分组,系列分组传输路径相同

  • 虚电路网络:简化“边缘”,复杂网络

虚电路网络

虚电路($VC$)

image-20220514104303691

一条从源主机到目的主机,类似于电路的逻辑(逻辑连接)

  • 分组交换
  • 每个分组的传输利用链路的全部带宽(不同于电路交换的复用)
  • 源到目的路径经过的网络层设备共同完成虚电路网络功能
  • 通信过程
    • 呼叫建立 、数据传输、拆除呼叫
  • 每个分组携带虚电路标识$VCID$,而不是目的地址
  • 虚电路经过的每个网络设备都需要维护它的连接状态
  • 链路、网络设备资源(如带宽、缓存)可以面向$VC$进行预分配来达到一些预期的服务性能

$VC$的具体实现

每条虚电路包括:

  • 从源主机到目的主机的一条路径
  • 虚电路号$VCID$,沿路每段链路一个编号。($VCID$反映链路的通信能力,不同链路的通信能力不同,$VCID$也不能相同)
  • 沿路每个网络层设备,利用转发表记录经过的每条虚电路

同一条$VC$,在每段连路上的$VCID$通常不同,路由器转发分组是依据转发表改写/替换虚电路号

image-20220514105624317

虚电路信令协议

$(signaling protocols)$

用于$VC$的建立、维护与拆除,建立过程中路由选择

典型的虚电路网络:ATM、帧中继(frame-relay)网络

image-20220514110009500

数据报网络

无连接

每个分组携带目的地址

路由器根据分组的目的地址转发分组

  • 基于路由协议/算法构建转发表
  • 检索转发表
  • 每个分组独立选路

image-20220514135740175

数据报转发表

如果转发表的目的地址都是具体地址,则数量太过庞大,很难实现,所以转发表中存储目的地址

image-20220514140008397

image-20220514140116788

如果划分不那么完美

最长前缀匹配优先:优先选择与分组目的地址匹配前缀最长的入口

image-20220514140813726

Internet网络层

image-20220514195138327

一般来说,实现$IP$协议也要同时实现$ICMP$协议

$IP$

$IP$数据报

格式

image-20220514195454615

  • 版本号,占4位

  • 首部长度占4位:$IP$分组首部长度

    • 以4字节为单位,乘以4才是首部长度,例如首部长度字段为5,则表示$IP$首部长度为20字节
  • $TOS$占8位:指示期望获得哪种类型的服务,也叫区分服务,只有在网络提供区分服务时使用,一般情况下不使用

  • 总长度:$IP$分组的总字节数(首部+数据)

    • 最大$IP$分组的总长度:$65535B$
    • 最小的$IP$分组首部$20B$
    • $IP$分组可以封装的最大数据为$65535 - 20 = 65515B$
  • **标识$ID$**:标识一个$IP$分组

    • $IP$协议利用一个计数器,每产生一个$IP$分组计数器加1,作为该$IP$分组的标识
    • 标识不足以唯一标识一个$IP$分组,还需要利用源、目的$IP$地址等才能唯一标识一个$IP$分组
  • 标志位

    • 保留 $DF$ $MF$
    • $DF(Don’t Fragment)$: 为1禁止分片,为0允许分片

    • $MF(More Fragment)$:为1表示非最后一片,为0表示最后一片(或未分片)

  • 片偏移:一个$IP$分组分片封装原$IP$分组数据的相对偏移量

    • 以8字节为单位
  • $TTL$:$IP$分组在网络中可以通过的路由器数(或跳步数),路由器转发一次分组$TTL$减1,如果$TTL=0$,路由器则丢弃该$IP$分组

  • 协议:指示$IP$分组封装的是哪个协议的数据包

    • 可以实现复用/分解;例如6表示封装的是$TCP$段,17位表示封装的是$UDP$段
  • 首部校验和:实现对$IP$分组首部的差错检测

    • 计算校验和时该字段全置为0,采用反码算数运算求和,和的反码作为首部校验和字段
    • 逐跳计算,逐跳校验:因为每次转发首部都会发生变化,例如$TTL$每次转发都会减1
  • 选项字段:$1$~$40B$,携带安全、源选路径、时间戳和路由记录等内容,实际上很少被使用

  • 填充:$0$~$3B$,目的是补齐整个首部,符合32位对齐,保证首部长度是4字节的倍数

$IP分片$

**最大传输单元$MTU$**:链路层数据帧可封装数据的上限

不同链路的$MTU$不同

image-20220514202648427

当两条链路$MTU$不一样时,可能会发生大的向小的传输的情况

image-20220514202824541

大的$IP$分组向较小的$MTU$链路转发时,可以被分片(如果不允许分片路由器会选择将分组丢掉)

  • 1个$IP$分组分为多片$IP$分组

  • $IP$分片到达目的主机后进行“重组”

$IP$首部相关字段用于标识分片以及确定分片的相对顺序(字段描述见格式部分)

(如果目的主机没有收全,会等待一段时间后将所有分组都丢弃)

image-20220514203341102

过程($IP$分组总长度为$L$,待穿法链路的$MTU$为$M$,$L > M$)

  • $DF = 0$

  • 分片时每个分片的标识复制原$IP$分组的标识

  • 通常分片时,除最后一个分片,其他分片均分为$MTU$允许的最大分片

  • 一个最大分片可封装的数据应该是8的倍数,因此,一个最大分片可封装的数据为:

    $$ d = \lfloor \frac{M-20}{8} \rfloor \times 8$$

  • 需要的总片数为:

    $$ n = \lceil \frac{L-20}{d} \rceil $$

  • image-20220514210104710

image-20220514210310269

$IP$编址

image-20220515145425732

接口:主机/路由器与物理链路的连接

  • 实现网络层功能
  • 路由器通常有多个接口
  • 主机通常只有一个或两个接口

$IP$地址:32比特($IPv4$)

  • 标识主机、路由器的接口
  • $IP$地址与每个接口关联

(点分十进制)

image-20220515145306495

$IP$地址:

  • 网络号—高位比特

  • 主机号—低位比特

  • $NetID$ $HostID$

$IP$子网:

  • $IP$地址具有相同网络号的设备接口
  • 不跨越路由器(第三以及上层网络设备)可以彼此物理联通的接口

image-20220515145922892

6

有类$IP$地址

image-20220515150635027

  • A 类、B 类和C 类地址的网络号字段(在图中这个字段是灰色的)分别为1 个、2 个和3 个字节长,而在网络号字段的最前面有1~3 位的类别位,其数值分别规定为0, 10 和110 。
  • A 类、B 类和C 类地址的主机号字段分别为3 个、2 个和1 个字节长。
  • D 类地址(前4 位是1110) 用于多播(一对多通信)。
  • E 类地址(前4 位是1111) 保留为以后用。

B类网络可以指派的最小网络地址是128.1.00

C类网络可以指派的最小网络地址是192.0.1.0

特殊$IP$地址

image-20220515151023875

全0用于在自身主机不知道自身的$IP$但仍然要传播分组的时候,一个例子是$DHCP$的工作过程

==xxr书上第二行是可以、不可以,从后面的ppt来看,xxr是对的==

私有$IP$地址

image-20220515151730256

子网划分与子网掩码

将$IP$子网划分为更小范围的子网

$NetID$ $SubID$ $HostID$
  • $SubID$原主机号部分比特

子网掩码

  • 形如$IP$地址,点分十进制形式
  • 对应$NetID、SubID$位取1,$HostID$位取0

子网掩码+子网划分确定子网的大小

image-20220515154549309

将$IP$分组的目的$IP$地址与子网掩码按位与运算,提取子网地址

image-20220515154851346

一个C类地址的划分例子

image-20220515155122253

$CIDR$与路由聚合

无类域间路由($Classless InterDomain Routing$)

  • 消除了有类地址的界限
  • 把网络号+子网号统一为一个可以任意长度的前缀
  • 融合子网地址与子网掩码,方便子网划分
    • $a.b.c.d/x$,其中$x$为前缀长度

image-20220515155612619

  • 提高$IPv4$地址空间分配效率

  • 提高路由效率

    • 将多个子网聚合为一个较大的子网

    • 构造超网(一个较大的子网)

路由聚合($route aggregation$):面对较大的子网记录转发信息,节省路由表,提高路由效率

image-20220515160323007

层级编制使得路由器信息通知更高效:

image-20220515160540388

地址不一定连续,聚合的子网中有可能会缺少一部分,此时要在路由器中添加缺少的部分,利用最长前缀匹配正确转发

image-20220515160716438

网络地址转换$NAT$

使用私有地址的主机要进行通信必须要进行地址转换

image-20220515170040774

动机

  • 只需/能从$ISP$申请一个$IP$地址
    • $IPv4$地址耗尽
  • 本地网络设备$IP$地址的变更,无需通知外界网络
  • 变更$ISP$时,无需修改内部网络设备$IP$
  • 内部网络设备对外部网络不可见,即不可直接寻址(安全)

实现

替换

  • 利用($NAT \space IP$ 地址,新端口号)替换每个外出$IP$数据报的(源$IP$地址,源端口号)

记录

  • 将每对($NAT \space IP$ 地址,新端口号)与(源$IP$地址,源端口号)的替换信息存储到$NAT$转换表中

替换

  • 根据$NAT$转换表,利用(源$IP$地址,源端口号)替换每个进入内网$IP$数据报的(目的$IP$地址,目的端口号),即($NAT \space IP$ 地址,新端口号)

image-20220515170912616

16比特的端口号字段可以同时支持60000多并行连接

主要争议:

  • 路由器应该只处理第三层功能
  • 违背端到端通信原则
    • 应用开发者必须考虑到$NAT$的存在,例如$P2P$应用
  • 地址短缺问题应该有$IPv6$来解决

$NAT$穿透问题

image-20220515193553214

  • 静态配置$NAT$,将特定端口的连接请求转发给服务器

  • 利用$UPnP$互联网网关设备协议自动配置

    image-20220515193738362

    • 学习到$NAT$公共$IP$地址
    • 在$NAT$转换表中,增删端口映射
  • 中继(如$Skype$)

    • $NAT$内部的客户与中继服务器建立连接
    • 外部客户也与中继服务器建立连接
    • 中继服务器桥接两个连接的分组

    image-20220515194119521

$ICMP$

报文种类

(互联网控制报文协议)

支持主机和路由器:

  • 差错报告
  • 网络探询

两类报文:

  • 差错报告报文(5种)
    • 目的不可达
    • 源抑制(当路由器发现自身缓存已满导致后续报文被丢弃,向源主机发送该报文,期望源主机降低发送速率)
    • 超时/超期($TTL$)
    • 参数问题(路由器认为首部参数有问题而丢弃)
    • 重定向(路由器认为数据报不应该由自己来转发)
  • 网络探询报文(2组)
    • 回声($Echo$)请求与应答报文($Reply$)
      • ping利用该种报文
    • 时间戳请求与应答报文

image-20220516144352888

几种不发送$ICMP$差错报告报文的特殊情况

  • 对$ICMP$差错报告报文不在发送$ICMP$差错报告报文
  • 除了第一个$IP$数据分片以外,对后续分片均不发送
  • 多播$IP$数据报不发送
  • 对具有特殊地址(如$127.0.0.1或0.0.0.0$)的$IP$数据报不发送

几种$ICMP$报文已不再使用

  • 信息请求与应答报文
  • 子网掩码请求与应答报文
  • 路由器询问和通告报文

报文格式

$ICMP$报文封装到$IP$数据报中传输

image-20220516145610769

差错报告报文数据封装

image-20220516145817854

应用

$Traceroute$

image-20220516150354675

$IPv6$

动机

  • $IPv4$地址空间已分配殆尽
  • 改进首部格式
    • 快速处理/转发数据报
    • 支持$QoS$

格式

$IPv6$数据报格式:

  • 固定长度的40字节基本首部
  • 不允许分片

image-20220516150701480

  • 优先级(priority):标识数据报的优先级
  • 流标签(flow Label):标识同一“流”中的数据报
  • 下一个首部:标识下一个首部,最后一个首部指向上层协议首部(如TCP首部)

改变

校验和被彻底移除,以减少每跳处理时间

选项机制改变,定义多个选项首部,通过“下一个首部”字段指示

$ICMPv6$:新版$ICMP$

  • 附加报文类型,例如“$Packet \space Too \space Big$”
  • 多播组管理功能

基本地址类型

地址表现形式(8组,每组4位16进制数1)

image-20220516151920930

不在有广播地址,定义为特殊的多播

image-20220516152218520

过渡

隧道(tunneling):$IPv6$数据报作为$IPv4$数据报的载荷进行封装,穿越$IPv4$网络

image-20220516152435153

image-20220516152551893

路由算法

image-20220516163659866

网络抽象:图

image-20220516163838518

image-20220516164050140

关键问题:源到目的的最小费用路径是什么

路由算法:寻找最小费用路径的算法

分类

静态路由:

  • 手工配置
  • 路由更新慢,需要人工改动
  • 优先级高

动态路由:

  • 路由更新快
    • 定期更新
    • 即是响应链路费用或网络拓扑变化

全局信息:

  • 所有路由器掌握完整的网络拓扑和链路费用信息
    • 链路状态$LS$路由算法

分散信息:

  • 路由器只掌握物理相连的邻居以及链路费用
  • 邻居间信息交换、运算的迭代过程
    • 距离向量($DV$)路由算法

链路状态路由算法

$Dijkstra$算法

  • 所有结点掌握网络拓扑和链路费用

    • 通过“链路状态广播”
    • 所有结点拥有相同信息
  • 计算从一个结点到达所有其它结点的最短路径,获得该结点的转发表

  • 迭代:k次迭代后得到到达k个目的节点的最短路径

image-20220516170349019

存在震荡可能

image-20220516170556979

往往会采取一些措施避免例如随机延迟的链路状态更新

距离向量算法

($Distance \space Vector$)

$Bellman-Ford$方程(动态规划)

image-20220518134727006

image-20220518135143645

image-20220518135444116

image-20220518135801510

举例

image-20220518140233316

第二列的(x,z)由7变为3,因为计算$c(x,y)+D_{y}(x)$比$c(x,y)+D_{z}(z)$更小

第三列因为y没有发生变化,所以不用更新

链路费用变化:节点检测本地链路费用变化,更新路由信息,重新计算距离向量,如果$DV$改变,通告所有邻居

好消息(变小)传播快

坏消息(变大)传播慢:无穷计数问题

image-20220518141719635

毒性逆转:如果一个节点(z)到达某目的(x)的最小费用路径是通过某个邻居(y)则通告给该邻居节点到达目的的距离为无穷大

image-20220518142241833

最大度量值:定义一个最大的有效费用值,超过则表示无穷

image-20220518142735342

层次路由

聚合路由器为一个区域:自治系统$AS$

同一个$AS$内的路由器运行相同的路由协议

  • 自制系统内部路由协议
  • 不同自治系统内的路由器可以运行不同的$AS$内部的路由协议

网关路由器(gateway router)

  • 位于$AS$边缘
  • 通过链路连接其他$AS$的网关路由器

转发表由$AS$内部的路由算法与$AS$间路由算法共同配置

image-20220518145456597

自治系统间路由

image-20220518145718662

image-20220518145904876

image-20220518150015646

热土豆路由:将分组发送给最近的网关路由器

image-20220518150127016

$RIP$协议

($Routing \space Information \space Protocol$)

$AS$内部路由协议也称为内部网络协议$IGP$

利用距离向量路由算法

  • 距离度量:跳步数(max = 15 hops),每条链路一个跳步
  • 每隔30秒,邻居之间交换一次$DV$,成为通告
  • 每次通告:最多25个目的子网

image-20220518151435282

image-20220518151656950

用下一条来实现毒性逆转技术

链路失效、恢复

  • 如果180秒没有收到通告,则邻居/链路失效,经过该邻居的路由不可用,需要重新计算路由
  • 向邻居发送新的通告(如果发生转变)
  • 邻居再一次向外发送通告(如果发生转变)

$RIP$路由表的处理

  • 利用一个叫做$route-d$的应用层进程来管理
  • 通告报文周期性地通过$UDP$数据报发送

image-20220518152201678

$OSPF协议$

($Open \space Shortest \space Path \space First$)

开放

采用链路状态路由算法

  • 链路状态分组扩散
  • 每个路由器构造完整的网络拓扑图
  • 利用$Dijkstra$算法计算路由

$OSPF$通告中每个入口对应一个邻居

$OSPF$在整个$AS$范围泛洪

  • $OSPF$报文直接封装到$IP$数据报中

优点

  • 安全:所有$OSPF$报文可以被认证(预防恶意入侵)
  • 允许使用多条相同费用的路径
  • 对于每条链路,可以针对不同的$TOS$设置多个不同的费用度量(针对希望在这条链路上传输的分组设置低费用)
  • 集成单播路由与多播路由,多播$MOSPF$与$OSPF$利用相同的网络拓扑数据
  • 支持对大规模$AS$分层

image-20220518153528084

image-20220518153549406

image-20220518153654002

image-20220518153714817

(边界路由器可以有多个)