网络层
概述
- 像运输层提供怎样的服务(可靠/不可靠传输)
- 网络层寻址问题
- 路由选择问题
网络层的两个层面
根据路由器之间传送的信息类型,将网络层抽象为数据层面和控制层面
数据层面
转发源主机和目的主机之间所传送的数据分组
- 独立完成
- 由于使用纯硬件转发,速度非常快,纳秒级别(10-9秒)
控制层面
传送路由信息,完善路由表
- 各路由器间协同工作
- 使用软件转发,速度慢,为秒级别
由于控制层面的转发过于耗时,后人优化出了新的SDN网络体系结构
控制平面SDN方法
- 控制平面从路由器上物理分离
- 路由器仅实现转发,远程控制器计算和分发转发表。
将控制平面又细分为3个层面:
- 网络控制应用程序层的接口:负责与网络应用程序的通信
- 网络范围的状态管理层:获取全网的主机、链路、交换机以及其他受SDN控制的设备(在此层设计路由选择协议)
- 通信层:与数据层面通信
网络层提供的服务
面向连接—虚电路服务
可靠通信应有网络来保证
通信双方沿着已建立的虚电路发送分组
- 每个分组的首部只需携带一条虚电路的编号
- 在这个基础之上在使用可靠传输协议即可使分组正确抵达
- 通信结束后释放虚电路
广域交换网常用
无连接的数据报服务
可靠通信由用户主机保证
- 不需要建立网络层连接
- 每个分组可走不同的路径
- 首部必须携带目的主机的完整地址
因特网常用,将复杂的网络处理功能置于用户主机和其内部的运输层
IPv4地址概述
给因特网上每一台主机/路由器的每一个接口分配的全球唯一的32bit标识符
- 使用点分十进制表示方法,即32bit每8位一组转化为10进制每组用点号分割的形式
- 一般使用凑值法完成10进制转2进制
分类编址1981
按用途将地址分为ABCDE5类,32位bit被划分为两个部分,网络号与主机号
- 只有ABC类可以分配给网络中的主机或路由器各接口,
- 主机号全0的地址是网络地址,不能分配给主机或路由器的各接口
- 主机号全1的地址是广播地址,不能分配给主机或路由器的各接口
A类地址0
网络号占8位,最小的网络号0,最大的网络号127不指派(这是回环地址)
- 所以最多可分配126个网络,每个网路有224-2个IP
B类地址10
16位网络号,最小网络号128.0,网络地址128.0.0.0,最大网络号191.255,网络地址191.255.0.0(RFC6890开始可以被指派)
- 所以最多可分派216-2(16384)个网络,每个网络可分派216-2(65534)个IP地址
C类地址110
24位网络号,最小网络号192.0.0,网络地址192.0.0.0,最大网络号223.255.255,网络地址223.255.255.0
- 所以可分配224-3个网络,每个网络IP数量28-2(254)
根据第一个10进制数即可判别网络类型,小于127的为A类,128-191的为类,192-223的为C类
注意:路由器的各接口是需要被分配IP地址的!
D类(1110)为多播地址,E类(1111)为日后保留使用
划分子网1985
解决新增网络申请新网络号带来的问题:
- 其他路由的路由表记录数量上升
- 需要等待和花钱
- 浪费原有网络剩余的IP数量
子网掩码可以表明分类IP的主机号部分被借用了几个比特作为子网号
-
将IP地址分为网络号-子网号-主机号三部分,其中子网号为主机号借出的位。
- 连续比特0为主机号,连续比特1为网络号和子网号
-
将子网掩码与IPv4地址进行逻辑与运算即可得到IPv4地址所在子网的网络地址
- 每个子网都有2主机号个IP地址
默认子网掩码
- 判断网络类型
- 网络号部分取全1,主机号部分取全0
无分类编址1993
使用CIDR记法,在IPv4地址后面加上斜线/,在斜线后面写上网络前缀所占的比特数量(网络号)
路由聚合(构造超网):
-
聚合地址块:
- 取共同前缀(转2进制形式),剩余地址取0,将共同前缀的位数以“/”形式添加到结果尾部,即得到聚合地址块
-
网络前缀越长,地址块越小,路由越具体;
-
查表:将目的地址与路由条目中的目的网络掩码按位与,结果若与条目中的目的网络匹配,则列入备选
-
若路由器查表转发分组时有多条路由可选,则选择网络前缀最长的那条,称为最长前缀匹配
CIDR可以进一步通过子网掩码来划分子网。
各种设备的域隔离性)
设备 | 是否隔离冲突域 | 是否隔离广播域 |
---|---|---|
中继器(物理层) | 否 | 否 |
集线器(物理层) | 否 | 否 |
网桥(数据链路) | 是 | 否 |
交换器(数据链路) | 是 | 否 |
路由器(网络层) | 是 | 是 |
IP数据报发送和转发的流程
主机发送IP数据报
- 判断目的主机是否与自己在同一个网络
- 若在同一个网络,属于直接交付
- 若不在同一个网络,属于间接交付,传输给主机所在网络的默认网关(路由器)
路由器转发IP数据报
-
检查IP数据报首部是否出错
- 若出错,则直接丢弃该IP数据报并通告源主机
- 若没有,则进行转发
-
根据IP数据报的目的地址在路由表中查找匹配的条目
-
先将目的地址与路由表的地址掩码相与得到目的网络IP地址,
-
若找到匹配条目,转发给下一跳
-
若找不到,丢弃IP数据报并通告源主机
-
-
静态路由配置
人工配置的路由表,不能及时适应网络状态(流量、拓扑)的变化
-
开销小,适合在小规模网络使用
-
可能会出现路由环路的问题
默认路由0.0.0.0/0
对于具有相同下一跳的不同目的网络的路由条目,可以用0.0.0.0/0代替目的网络的位置,类型为静态
特定主机路由
目的网络写入对应目的主机的IP地址/32,其网络前缀最长,路由最具体
由“最长前缀匹配原则”,有多条路由可选时,选择最长前缀进行匹配转发
路由环路
-
针对错误配置:
-
为了防止IP数据报在路由环路中永远循环转发,IP数据报首部设有生存时间TTL
-
IP数据报进入路由器后,TTL字段值-1,若TTL值不等于0(先-1再判断)则转发,否则丢弃
-
-
针对聚合了不存在的网络:
- 配置黑洞路由,即将不存在的网络写入路由表中,配置下一条为null0
-
针对故障网络
- 将故障的网络地址写入路由表中,配置下一跳为null0
- 故障网络恢复后路由表会自动弃用配置的黑洞路由,重写恢复后的路由条目
路由选择协议
动态路由选择
通过路由选择协议自动获取路由信息,适用于大规模网络(比如因特网)
因特网采用分层次的路由选择协议:
- 自治系统AS间的路由选择称为域间路由选择,使用外部网关(路由)协议EGP
- 自治系统AS内的路由选择称为域内路由选择,使用内部网关协议(路由)IGP
内部网关协议IGP
- 路由信息协议RIP:基于距离向量,
- 内部网关路由协议IGRP:基于距离向量
- 增强型内部网关路由协议EIGRP
- 开放式最短路径优先OSPF:基于链路状态,广泛使用
- 中间系统到中间系统IS-IS
外部网关协议EGP
- 边界网关协议BGP
路由器基本结构
- 路由表需要对网络拓扑变化的计算最优化
- 转发表的结构使查找过程最优化,由路由表得出
几个重要协议
路由信息协议RIP
RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。称为距离向量D-V
-
RIP使用
跳数
作为度量来衡量到达目的网络的距离- 路由器到直连网络的距离定义为1
- 到非直连网络的距离定义为所经过的路由器数+1
- 一条路径最多包含15个路由器,距离等于16时表示不可达,所以只适用于小型互联网
-
RIP选择路径最短的路由,若有多条路径最短的路由,进行等价负载均衡
RIP三个要点:
- 仅与相邻路由器交换信息
- 交换自己的路由表(封装成含路由信息的RIP更新报文)
- 周期性交换
若干次交换和更新后,每个路由器都知晓了到达本AS内个网络的最短距离和下一跳地址,称为收敛
-
相同目的网络,相同下一跳,最新消息,更新
-
发现新的网络,添加
-
相同目的网络,不同下一跳,新路由优势,更新
-
相同目的网络,不同下一跳,距离相等,等价负载均衡
-
相同目的网络,不同下一跳,新路由劣势,不更新
坏消息传的慢:又称路由环路或距离无穷计数问题,这是距离向量算法的固有问题,可以减少但无法消灭。
使用UDP协议封装RIP报文,RIP是个应用层协议!
开放最短路径优先OSPF
为了克服RIP的缺点所提出,基于IP封装,是个网络层协议
最短路径优先SPF:Dijkstra
提出的最短路径算法
- 基于链路状态,从算法保证了不会产生路由环路
- 不限制网络规模,收敛速度快
- 链路状态包含本路由器与那些路由器相邻,以及对应链路的代价
OSPF相邻路由器通过交互问候分组,建立维护邻居关系
- 问候分组封装在IP数据报,发往组播地址224.0.0.5;
- 发送周期10秒
- 40秒为收到邻居问候分组,则认为邻居路由器不可达
OSPF路由器会产生链路状态通告LSA,包含:
- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
LSA封装于链路状态更新分组LSU中,使用洪泛法发送
OSPF路由器有链路状态数据库LSDB,用于存储LSA,通过发送LSU,最后路由器的LSDB将达到一致
OSPF有以下五种分组类型:
- 问候分组
- 数据库描述分组
- 链路状态请求分组
- 链路状态更新分组(30分钟周期转发)
- 链路状态确认分组
边界网关协议BGP
BGP基于TCP协议封装
BGP力求寻找一条能够到达目的网络且比较好的路由(不产生路由环路),而非最佳路由
- 每个自治系统的管理员要选择至少一个路由器作为该自治系统的BGP发言人
不同自治系统的BGP发言人要交换路由信息,首先建立TCP连接,端口号179
- 在TCP连接上交换BGP报文(封装于TCP报文段)建立BGP会话
- 利用BGP会话交换路由信息
- 使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站/对等站
BGP-4的四种报文:
- OPEN:与另一个BGP发言人建立关系,初始化通信
- UPDATE:通告某一路由的信息,列出要撤销的多条路由
- KEEPALIVE:周期性证实邻站连通性
- NOTIFICATION:发送检测到的差错
IPv4数据报首部格式
-
填充字段:确保首部长度为4字节的整数倍,使用全0填充
-
总长度:首部+数据载荷,最大65535,以字节为单位
-
标识、标志、片偏移用于IP数据报分片
- 标识用于分片后每个分片复制一遍原片标识,用于重组
- 标志有3位,最低位MF为0时为无后续分片,1为有后续分片,中间位DF为0时允许分片。
-
生存时间TTL:每经过一次路由器该字段值被-1,首部检验和重新计算
-
协议:指明IP数据报数据部分使用什么协议封装
如果数据报总长度超过MTU(以太网规定1500字节)则需要分片
片偏移(必须为整数)的计算:
- 头一个分片偏移量为0
- 下一个分片的偏移量就是上一个分片数据载荷长度/8,若非整数,重新分配
IP数据报被封装在以太网帧的数据部分中
网际控制报文协议ICMP
提高交付成功几率,更有效转发IP数据报
主机、路由器使用ICMP发送差错报告报文、询问报文
ICMP差错报告报文
- 终点不可达
- 源点抑制:路由器/主机因拥塞丢弃数据报,向源点发送抑制报文
- 时间超过:收到目的IP地址非本身的IP数据报,生存字段值-1,结果为0,丢弃并向源点发送时间超过报文。
- 参数问题:路由器检测到数据报首部误码,丢弃数据报,向源点发送差错报告报文
- 改变路由(重定向):将该报文发送给主机,让主机知晓下次数据报发送给另外的路由器
不能发送ICMP差错报告报文的情况:
- ICMP差错报告报告不再发送ICMP差错报告报文
- 第一个分片的数据报片后续所有分片都不发送
- 拥有多播地址的数据报
- 具有127.0.0.0/0.0.0.0地址的数据报
ICMP询问报文
- 回送请求和回答:测试目的站是否可达以及相关状态
- 时间戳请求和回答:该报文有一个32位的字段,写入的整数代表从1900.1.1日到当前时刻一共过去多少秒
ICMP应用
-
分组网间探测PING:
- 测试主机或路由器间的连通性
- 应用层直接使用网际层的ICMP,不经过运输层TCP/UDP
- 使用回送请求和回答报文
-
跟踪路由:
- 用于测试IP数据报从源主机到达目的主机要经过哪些路由器
- 使用ICMP回送请求,TTL设为1(初始值),这样第一个路由收到后,发送时间超过报文,丢弃该数据报,源主机继续发送回送请求,每一次TTL+1,直到到达目的主机发送ICMP回答报文,循环次数-1就是途径路由器
网络地址转换NAT
在路由器上安装NAT软件,且路由器上至少有一个有效外部全球IP地址
NAT软件的作用:
- 分配给专用网源主机一个临时全球IP地址
- 将真实源IP地址与临时地址记录到NAT转换表中
如果NAT路由器具有N个全球IP地址,则最多有N个内网主机同时访问外网
可以利用运输层的端口号和IP地址一起进行转换,这种技术叫做NAPT
移动IP
-
移动节点:具有永久IP地址的移动设备
-
归属代理(本地代理):
- 一个移动节点的永久“居所”称为归属网络
- 在归属网络中代表移动节点执行移动管理功能的实体叫做归属代理
-
永久地址:移动站点在归属网络中的原始地址
-
外部代理:在外部网络中帮助移动节点完成移动管理功能的实体称为外部代理。
-
转交地址(辅地址):可以是外部代理的地址或动态配置的一个地址