『computer network-3』network layer
网络层
一、网络层提供的两种服务
面向连接的服务:虚电路;以电信公司为代表的一派支持,电话没有差错处理能力,故传输网络必须可靠
- 通信双方开始数据传输前,先由网络建立连接,由网络保证数据传输可靠性
- 虚电路通信时,首部无需填写完整的目的主机地址,只需要填写虚电路编号(减少分组开销)
注意:虚电路只是一种逻辑连接,分组沿逻辑连接传送,并不是真正建立了一条物理连接
无连接的服务:数据报;以Internet为代表的一派支持,电脑比电话有更强的差错处理能力
- 网络在发送数据时不需要先建立连接,每个分组在网络中独立传送
- 网络层要设计得尽可能简单,向上层提供简单灵活、无连接的、尽最大努力交付的数据报服务(不可靠交付)
注意:网络层不保证服务质量,分组可能出错、丢失、重复或失序;由上层运输层负责可靠通信

二、网际协议IP
网际协议(Internet Protocol):TCP/IP体系中最重要的两个协议之一
各层网络的中间设备:将网络互相连接的设备
物理层:转发器
数据链路层:网桥 or 交换机
注意:物理层 和 数据链路层 的设备知识把网络扩大了,不能称之为网络互连
网络层:路由器,真正的网络互连
网络层以上:网关(比较复杂、使用较少)
虚拟互连网络:即 逻辑互联网络,屏蔽了各网络的具体异构细节,在网络层上看好像是一个统一的网络
- 直接交付:查找转发表,若目的主机在本网络上,就不需要经过路由器而是直接交付
- 间接交付:查找转发表,若目的主机不在本网络上,就需要转发给其它路由器进行间接交付
分类的IP地址:分配给主机或路由器的标识符,目前使用的IPv4为32位IP地址;IP地址由ICANN机构分配
IP地址的表示方法:32bit,采用点分十进制记法,将IP地址用4段十进制数字表示,并在段间插入一个小数点
IP地址的分类:分为A、B、C、D、E五类,IP地址 ::= {<网络号>, <主机号>}

各地址的范围:看点分十进制的最高字节
- A类地址:最高字节 \(\le\) 127
- B类地址:128 \(\le\) 最高字节 \(\le\) 191
- C类地址:192 \(\le\) 最高字节 \(\le\) 223
- D类地址:224 \(\le\) 最高字节 \(\le\) 239
- E类地址:240 \(\le\) 最高字节 \(\le\) 255
特殊IP地址:这些IP地址不会被指派,仅用于特定情况

- {0, 0}:本网络上的本主机;能作为源地址,不能作为目的地址
- {0, X}:本网络上主机号为 X 的主机;能作为源地址,不能作为目的地址
- {全1, 全1}:本网络上进行广播的地址(路由器不转发);不能作为源地址,能作为目的地址
- {Y, 全1}:对网络号为 Y 的网络上的所有主机进行广播;不能作为源地址,能作为目的地址
- {127, 非全0且非全1}:用于本机软件回环测试;能作为源地址,能作为目的地址
IP地址的特点:
- 分等级的地址结构:
- 网络前缀是第一级地址(由管理机构分配),主机号是第二级地址(由单位自行分配,便于管理)
- 转发时仅考虑网络前缀,无需考虑目的主机号 \(\Rightarrow\) 减少转发表所占存储空间,缩短查找转发表的时间
- 多归属主机:由于路由器至少连接到两个网络上,故一个路由器至少有两个不同的IP地址
- 用转发器(物理层)或交换机(链路层)连接的网络仍属于一个网络;拥有不同网络前缀的局域网必须使用路由器进行互联
- 同一个局域网上的主机 or 路由器使用的网络前缀(网络号)必须相同;局域网地址的主机号部分为全0
- 匿名网络:点对点链路("/31",即只有两个IP地址)构成的网络不分配IP地址(节省IP地址资源)
- 分等级的地址结构:
IP地址与硬件地址(MAC地址):
- IP地址:网络层 及 以上各层使用的地址,是一种逻辑地址;设置在IP数据报首部
- 物理地址:数据链路层 以及 物理层使用的地址;设置在MAC帧首部

ARP与RARP协议:分别实现同一局域网内 IP地址 \(\rightarrow\) MAC地址 与 MAC地址 \(\rightarrow\) IP地址 的转换
ARP高速缓存:存放本局域网内各主机或路由器的IP地址到MAC地址的转换项
ARP(发送)请求分组:发送方IP地址 + 发送方MAC地址 + 接收方IP地址
ARP(接收)响应分组:接收方IP地址 + 接收方MAC地址
注意:ARP发送请求是局域网内广播发送,ARP响应请求是局域网内单播发送(只返回给发送方)
主机A想给本局域网上的主机B发送IP包:
- 在主机A的ARP cache中查找主机B的IP地址项
- 若存在主机B的IP地址项,将对应的硬件地址写入MAC帧,通过局域网发送
- 若不存在,在局域网内广播ARP请求;当主机B收到ARP请求时,向主机A返回ARP应答(告知B的物理地址)
注意:ARP解决同一局域网内IP地址和硬件地址的映射问题;若目的主机不在本局域网内,IP包需经路由器转发
运行ARP协议:主要分为以下四种情况:
- \(\text{H}_1\)发送数据至同一网络的\(\text{H}_2\):\(\text{H}_1\)广播(\(\text{N}_1\))ARP请求分组,获得\(\text{H}_2\)的MAC地址
- \(\text{H}_1\)发送数据至不同网络的\(\text{H}_3\):\(\text{H}_1\)广播(\(\text{N}_1\))ARP请求分组,获得连接两个网络的\(\text{R}_1\)的MAC地址(剩余工作由\(\text{R}_1\)完成)
- \(\text{R}_1\)发送数据至邻接网络的\(\text{H}_3\):\(\text{R}_1\)广播(\(\text{N}_2\))ARP请求分组,获得\(\text{H}_2\)的MAC地址
- \(\text{R}_1\)发送数据至非邻接网络的\(\text{H}_4\):\(\text{R}_1\)广播(\(\text{N}_2\))ARP请求分组,获得连接\(\text{N}_2\)的\(\text{R}_2\)的MAC地址(剩余工作由\(\text{R}_2\)完成)

注意:ARP cache中的每个映射项目都有生存时间,超过生存时间的项目会被删除
IP数据报的格式:首部 + 数据

首部固定部分:
版本:占4bit,目前IP协议版本是IPv4;通信双方使用协议IP版本必须一致
首部长度:占4bit,单位为一个word(32bit) \(\Rightarrow\) 首部长度最长可达60Byte(15 \(\times\) 32 / 8 Byte)
区分服务:占1byte,表示服务类型,一般被忽略
总长度:占2byte,表示首部 + 数据部分总长度,单位为一个Byte \(\Rightarrow\) 总长度最大可达65535Byte
标识:占2btye;当数据报长度 > MTU时要分片传输,各数据报片具有相同的标识,便于各分片重装为原来的数据报
标志:占3bit,其最低位为MF、中间一位为DF,最高位无意义 MF=1表示该分片后面"还有分片",MF=0表示是最后一个分片 DF=1表示“不能分片”,DF=0表示允许分片7
片偏移:占13bit,表示该分片相对于原分组中数据字段起点的偏移,单位为8Byte
生存时间:占8bit,表示跳数限制;每次转发时就将TTL减一,减小至0就丢弃(防止无法交付的数据报浪费网络资源)
协议:占8bit,表示该数据报携带的数据使用何种协议,如ICMP、IP、TCP、UDP、IGMP等
首部校验和:占16bit,只检验数据报首部,不包括数据部分;最终结果(取反后)为全0则可以保留
反码求和:将n个长度为16bit的字按行排列,写出每列"1"的个数
- 拆分数字:将各列数字拆分成 1 + (若干2的幂次之和) or 0 + (若干2的幂次之和)
- 进位:将拆分得到的若干2的幂次按2进制权重向前累加到对应的列上,原列只保留1 or 0
- 循环迭代:若最高位拆分得到的数仍 > 1,继续拆分之,并将拆分得到的数回添到末位上;直至各列位置均 = 0 or 1
注意:也可用16进制计算,各列求和后拆分得到16的倍数 + <16的数,进位 + 循环迭代直至各列位置均 < 16 (0~9A~F)

源地址、目的地址:各占32bit,分别表示发送IP数据报的主机IP地址 和 接收IP数据报的主机IP地址
首部可变部分:选项字段,长度可变,用来支持排错、测量以及安全等措施;实际很少被使用
三、划分子网和构造超网
划分子网的目的:分类IP地址无法适应Internet快速发展的需要(主机数量庞大 + 访问子网需求)
三级IP地址 与 子网掩码:
- 三级IP地址:net-id + subnet-id + host-id
- 子网掩码:net-id 和 subnet-id 部分全1,host-id 部分全0

- 子网地址 = 主机IP地址 & 子网掩码
使用掩码的分组转发过程:路由表项 = 目的网络地址 + 目的网络子网掩码 + 下一跳
- 路由器提取分组首部的目的IP地址D
- 用与路由器直接相连的各网络的子网掩码和D逐位相“与”,若与D匹配则直接交付,否则间接交付(即转入下一步) 匹配 \(\Leftrightarrow\) (目的地址) & (子网掩码) = (主机地址) & (子网掩码)
- 若路由表中存在目的地址为D的特定主机路由,则将分组传送给对应的下一跳路由(否则转入下一步)
- 将路由表中的各子网掩码和D逐位相“与”,若其结果与该行目的地址匹配,则传送给对应的下一跳路由(否则转入下一步) 匹配 \(\Leftrightarrow\) (目的地址) & (子网掩码) = (目的网络地址)
- 若路由表中存在默认路由,则传送给路由表中指明的默认路由器,否则报告转发分组出错
注意:子网内部通过数据链路层MAC帧实现直接交付,涉及ARP缓存的查询
无分类编址 CIDR:用于缓解IP地址枯竭的问题
网络前缀:代替分类地址中的网络号 + 子网号,IP地址 = {<网络前缀>, <主机号>}
- CIDR记法:IP地址后添 "/n",n表示IP地址高n位是网络前缀
CIDR地址块:由网络前缀相同的连续IP地址组成
- 最小地址 = <网络前缀> + 全0
- 最大地址 = <网络前缀> + 全1
注意:CIDR是无分类的,如果IP地址未指明前缀长度("/n"),就不知道网络地址是什么
地址掩码:用于计算网络地址,高n位为全1,剩余低位为全0;网络地址 = IP地址 && 地址掩码
路由聚合 与 构成超网:
- 超网:一个CIDR地址块可包含多个分类地址网络,如 255.255.254.0/23(512个主机)可容纳两个C类网络(256个主机)
- 路由聚合:一个表项 \(\rightarrow\) 很多个传统分类地址(可减少路由表中表项的个数),减少了查找转发表所需要的时间
最长前缀匹配:选择匹配成功的表项中具有最长网络前缀的路由
- 让目的地址D依次与路由表中各掩码进行“按位与”操作:(掩码) & (数据报目的地址) = (表项网路地址)
- 若 (某项掩码) & (目的地址D) = (该项网络地址),说明匹配成功
- 从匹配成功的若干表项中选出网络前缀最长的表项,转发至对应出口
注意:网络前缀越长,说明CIDR地址块越小,路由也就越具体
四、网际控制报文协议 ICMP
ICMP的作用:报告错误 + 测试
ICMP报文格式:ICMP位于IP层,封装在IP包内传输

注意:首部的检验和检验首部,ICMP报文中的检验和检验数据报
ICMP报文协议:差错报告报文 + 询问报文,主要包括以下9种类型(“询问”包括request+reply)
- 差错报告报文:向源主机发送
- 终点不可达:路由器 or 主机无法传输报文时向源主机发送
- 源点抑制:路由器 or 主机由于拥塞丢弃报文时,向源主机发送此报文,使其放慢发送速度
- 超时:当报文字段TTL=0时,路由器丢弃该报文,并向源主机发送此报文
- 参数问题:路由器 or 主机收到的报文中头部有非法字段时,丢弃数据包,并向源主机发送此报文
- 重定向:路由器向源主机发送此报文告知路由改变,主机下次发送数据报给另外的路由器
- 询问报文:向目的主机发送
- 回声探测:测试网络连通性
- 请求时间:可用于时间同步
- 应用实例:Ping(回声探测,主机回应) + Traceroute(超时检测, 一系列报文的TTL=1, 2, 3, ...)
- 差错报告报文:向源主机发送
五、路由算法及协议
路由器根据路由信息转发分组;路由信息由路由协议生成;路由算法是路由协议的核心
理想路由算法的特性:
- 正确 + 完整:可根据路由正确寻址
- 计算上简单、不能增加过多开销
- 具有自适应性:根据通信量 + 网络拓扑 变化调整路由
- 具有稳定性:通信量和拓扑稳定时,能快速收敛
- 公平性:对所有用户公平
- 最佳路由:能找出最好的路由(时延)
静态路由 与 动态路由:
- 静态路由:非自适应 + 简单开销小(无法及时适应网络变化)+ 适用于小规模网络(人工设置路由)
- 动态路由:自适应 + 复杂开销大(较好地适应网络状态变化)+ 适用于大规模网络(算法协议计算)
自治系统AS:一组路由器,AS内部使用 路由选择协议 + 共同的度量 确定AS内的路由
- 内部网关协议IGP:AS内部使用的路由选择协议,如RIP和OSPF
- 外部网关协议EGP:若源站和目的站处在不同的自治系统中,自治系统边界使用EGP将路由选择信息传递到另一个AS中
RIP报文:距离向量路由协议
RIP特点:
- 简单、适用于小规模网络
- 距离定义为路由器跳数:最长为15、16表示不可达
- 仅与相邻路由器交换信息(即路由表),每30s交换一次
RIP格式:属于用户层协议,封装在UDP用户数据报中

RIP优势与缺陷:
- 优势:实现简单,开销较小
- 缺陷:”坏消息传得慢“
- 网络出现故障时,要经过很长的时间才能传送到所有路由器
- 支持的网络规模有限($$15)
- 每次交换完整的路由表,这导致随着网络规模扩大,开销随之增加
距离向量路由:动态路由算法;各路由器维护一张路由表,存放 目的网络 - 最短距离 - 下一跳 的表项
- 路由器R收到相邻路由器X的RIP报文,把报文下一跳地址改为X,把报文中所有距离d加1得到d',报文目的地址仍为N
- 对改后RIP报文中的每个项目:
- 若R的路由表中不存在目的网络N,直接将该项目加入路由表即可(N不可达 \(\Rightarrow\) N可能可达)
- 若R的路由表中存在目的网络N:
- 若其下一跳地址仍是X,必须用新的项目更新该项目(保证路由信息是最新的)
- 若其下一跳地址不是X,且d'小于原先距离,用最新的项目覆盖该项目(松弛操作);否则不更新
- 若3min内未收到相邻路由器的更新路由表(标明邻居不可用),则把此相邻路由器更新为16
链路状态路由:
- 链路状态:本路由器与哪些路由器相邻,以及该链路的“度量”
- 链路状态数据库:每个路由器各自建立,均包含全网络的拓扑结构图,各db保持一致(链路状态数据库的同步)
注意:RIP协议并不知道全网的拓扑结构,只知道全网络dist + 下一跳地址 - 路由表构建:基于全网拓扑图,使用dijkstra算法计算本路由器到其它节点的最佳路径,构建路由表
链路状态路由算法:以下均为双向操作
- 每个节点向邻居发送问候分组(间隔10s一次),了解邻居节点的网络地址、是否可达
- 设置到它每个邻居的成本度量metric
- 构造DD分组,向邻站提供自己数据库中已有的链路状态摘要信息
- (根据摘要信息)邻站向本站发送LSR分组,请求本站没有的 or 可更新的信息
- 本站收到邻站的LSR分组后,发送LSU分组对链路进行更新;更新完毕后,邻站返回LSA分组确认
注意:只要有一个路由器链路状态发生改变,就要使用洪泛法更新全网链路状态,且收到更新分组后要返回确认
OSPF协议:属于链路状态路由协议,直接通过IP数据报传送(不使用UDP)
OSPF特点:
- 收敛速度快:当链路状态发生变化时,通过洪泛方式告知本AS中的其它节点
注意:“洪泛”是指向除了输入链路外的所有其他链路发送数据,之后每个相邻路由器接着向所有相邻路由器发送数据("BFS") - 适用于较大规模的网络:仅在链路状态发生变化时发送洪泛信息,不会产生很大的通信量
- 收敛速度快:当链路状态发生变化时,通过洪泛方式告知本AS中的其它节点
OSPF类型:Hello确定可达性,其余类型用于达到数据库的同步
- 问候(Hello)分组:用来发现和维持邻站可达性
- 数据库描述(DD)分组:向邻站给出自己的链路状态数据库中所有链路状态项目的摘要
- 链路状态请求(LSR)分组:向对方请求某些链路状态项目的详细信息
- 链路状态更新(LSU)分组:用洪泛法对全网络更新链路状态
- 链路状态确认(LSA)分组:对链路更新分组(LSU)的确认

划分区域:OSPF将一个AS进一步划分为若干个区域,便于管理大规模网络
优势:将洪泛范围限制在一个区域而不是整个自治系统,减少整个网络上的通信量
层次结构的区域划分:每个区域拥有一个32位的区域标识符(用点分十进制表示);主干区域用于连通其它下层区域

注意:一个区域内的路由器只知道本区域内的完整网络拓扑,不知道其它区域的网络拓扑
外部网关路由协议 BGP:不同AS路由器之间交换路由信息的协议
BGP发言人:每个AS至少要选择一个路由器作为BGP speaker,与其它AS的BGP speaker交路由换信息
- 连接方式 与 选择条件:通过一个共享网络连接、一般选自AS边界路由器(也可以不是)
- 通信条件:路由信息交换由TCP协议进行,在TCP连接上交换BGP报文建立BGP会话
注意:BGP发言人除了运行BGP协议外,还要运行AS内部网关路由协议(RIP or OSPF)
信息交换 与 路由生成
- 信息交换:交换网络可达性信息,即要到达某个网络所经过的一系列AS(路径向量)
- 路由生成:BGP发言人交换了网络可达性信息后,根据策略找到到达各AS的较好的路由
BGP-4报文:包括以下4种
- OPEN报文:与相邻的另一个BGP发言人建立联系
- UPDATE报文:发送某一路由信息 + 列出要撤销的多条路由,路由信息变化时发送
- KEEPALIVE报文:确认打开报文(OPEN) + 周期性证实邻站关系
- NOTIFICATION报文:传送检验到的差错
BGP协议的特点:
- 交换路由信息的节点数量级 约等于 AS个数,大大少于所有AS中的网络数
- 各AS中的BGP发言人数量很少,使AS之间的路由选择不至于过于复杂
- BGP支持CIDR,故BGP路由表中包括目的网络前缀 + 下一跳路由器
- BGP刚开始运行时,邻站交换完整的BGP路由表;之后只在发生变化时更新,有利于节省网络带宽 + 减少处理开销
路由器:具有多个输入/输出端口的专用计算机,任务是转发分组
路由器组成:路由选择(控制层面,根据路由选择协议构建路由表)+ 分组转发(数据层面,交换结构 + 一组输入/输出端口)
分组转发:
- 报文转发速率影响因素:输入/输出端口性能 + 交换机构的性能
- 衡量路由器性能的指标:packet per second,简写为pps
输入和输出端口处理:

注意:在端口队列中排队会产生时延;分组处理速率 < 分组进队速率 会导致丢包(无队列存储空间)
网络的控制平面与数据平面
- 控制平面:生成路由表 + 转发表;数据平面:进行分组的快速转发
- 软件定义网络SDN:
- 控制层面:
- SDN控制器:维护准确的网络状态信息 + 为运行在控制平面的网络控制应用程序提供这些状态信息
- 网络控制应用程序:根据SDN控制器提供的方法,监视、编程、控制下方的网络设备
- 数据层面:根据转发表进行数据转发
- 特点:
- 控制平面与数据平面分离:控制器负责计算转发表,路由器仅实现转发
- 网络控制远离数据层面的网络交换机:由软件实现控制层面,包含 SDN控制器 + 若干网络控制应用程序
- 可编程的网络:利用控制层面的网络控制应用程序,使网络成为可编程的
- 优势:可以灵活快速地控制路由 / 转发策略;适用于路由策略变化频繁的网络
- 控制层面:
六、IP组播
- 组播(多播):用于实现一点对多点的数据传输
- 优势:可大大减少网络流量,应用于网络视频服务
- 组播数据报:使用D类IP地址(1110...),每个D类地址标志一个多播组,其IP首部协议字段是2,表示使用IGMP协议
注意:多播地址只能用于目的地址,不能用于源地址;多播数据报不产生ICMP差错报文 - 组播类别:包含以下2种
- 在局域网中的硬件组播:将MAC地址中特定地址段作为组播地址,并与IP组播地址形成对应关系
- 在Internet中的组播:
- 需要组播路由器
- 主机通过IGMP协议与组播路由器通信,加入 or 退出某个组播组
- 组播路由器之间通过组播路由协议实现组播数据报的传输
七、NAT 与 VPN
网络地址转换 NAT:
- 专用地址:只能用于机构内部的保留地址,Internet中的路由器不转发目的地址为专用地址的包 注意:专用地址可减少IP地址空间的占用,提高安全性
- 网络地址转换:当内部网络使用专用地址时,与Internet通信需要经过NAT路由器,实现外网数据包向内网地址的转换
虚拟专用网 VPN:涉及隧道、加密、身份认证等技术
多个企业 or 机构的内部网络间互连实现方法:
- 租用专用网络,形成专用网,成本高昂
- 基于公用网路,形成虚拟专用网VPN
基于Internet建立VPN的两种情形:
- 内部网络间通过Internet互连
- 远程用户访问某内部网络(remote access VPN)
典型的VPN实现技术:IPSec(工作在网络层) or SSL(Web浏览器内置支持)
VPN架构:使用隧道技术,效果好像在本部门的专用网上传输
