网络层
网络层
4.1 概述
主机到主机、网络核心实现
核心功能
- 转发:将分组从路由器的输入端口转移到合适的输出端口(数据平面)
- 通常由硬件实现
- 转发表
- 路由:确定分组从源到目的地经过的路径(控制平面)
- 通常由软件实现
- 路由算法
网络层服务模型
- 无连接服务
- 不事先为系列分组的传输确定传输路径
- 每个分组独立确定传输路径
- 不同分组的传输路径可能不同
- 连接服务
- 为系列分组的传输确定从源到目的地所经过的路径(建立连接)
- 系列分组的传输路径相同
- 传输结束后拆除连接
虚电路网络
提供网络层连接服务的分组交换网络
- 虚电路(VC):一条从源主机到目的主机,类似于电路的路径(逻辑连接)
- 通信过程:呼叫建立——>数据传输——>拆除呼叫
- 每个分组携带虚电路标识(VCID),而不是目的地址
- 同一条VC,每段链路上的VCID通常不同,由路由器的转发表记录
- VC路径上每个路由器都需要维护VC连接的状态信息
- 虚电路信令协议
- 用于VC的建立、维护与拆除
- 应用于虚电路网络:ATM、帧中继
数据报网络
提供网络层无连接服务的分组交换网络
- 每个分组携带目的地址
- 路由器根据分组的目的地址转发分组
- 例:Internet
对比
项 | Internet(数据报网络) | ATM(VC网络) |
---|---|---|
服务 | “弹性”服务,没有时间要求 | 实时对话,严格要求时间 |
端系统 | 智能(可自适应、性能控制、差错恢复) | 电话机、传真机 |
一言蔽之 | 简化网络,复杂“边缘” | 简化“边缘”,复杂网络 |
4.2 IPv4协议
IP数据报
- 首部长度:单位为4字节(首部通常为20字节)
- 服务类型:指示期望获得哪种类型的服务(区分服务)
- 总长度:IP分组的总字节数(首部+数据)
- TTL:IP分组在网络中可以通过对路由器数
- 路由器转发一次分组,TTL减1
- 若TTL=0,则路由器丢弃该分组
- 协议:运输层协议(UDP为17,TCP为6)
- 首部检验和
- 路由器一般会丢弃检测出错误的数据报
- 每台路由器上必须重新计算检验和并重新放到原处
IP数据报分片
- MTU(最大传输单元):一个链路层帧能承载的最大数据量
- 大IP分组向较小MTU链路转发时,可以被“分片”
- 在端系统重组分片
- 相关字段
- 标识:每生成一个IP分组加1
标志位(3位)
字段 说明 保留 DF (Don’t Fragment) 1禁止分片;0允许分片 MF (More Fragment) 1非最后一片;0最后一片(或未分片) - 片偏移(13位) :以8字节为单位
- 原IP分组总长度L,待转发链路的MTU为M(L>M,DF=0)
- 一个最大分片可封装的数据为$d=\lfloor {\frac{M-20}{8}} \rfloor \times 8$ (字节)
- 需要的总片数$n=\lceil {\frac{L-20}{d}} \rceil$
- 每片的片偏移字段取值:$F_i=\frac{d}{8}\times (i-1)$ (8字节)
- 每片的总长度字段
- $1\leq i <n$:$L_i=d+20$
- $i=n$:$L_i=L-(n-1)d$
IP编址
- 接口:主机与物理链路的边界(连接)
- 路由器有多个接口;主机通常只有一个或两个
- IP地址(IPv4);32比特(点分十进制)
- IP地址与每个接口关联
- 网络号(高位比特)+主机号(低位比特)
- IP子网
- 具有相同网络号的设备接口
- 不跨越路由器,可彼此物理联通的接口
有类IP地址(分类编址)
特殊IP地址
NetID HostID 源地址 目的地址 用途 直观地址 全0 全0 √ × 在本网范围内表示主机;在路由表中用于表示默认路由 0.0.0.0 全0 特定值 × √ 表示本网内某个特定主机 全1 全1 × √ 本网广播地址(路由器不转发) 255.255.255.255 特定值 全0 × × 网络地址,表示一个网络 特定值 全1 × √ 广播地址,对特定网络上的所有主机进行广播 127 非全0或非全1的任何数 √ √ 环回地址,用于本地软件环回测试 私有地址
class NetIDs Blocks A 10 1 B 172.16 to 172.31 16 C 192.168.0 to 192.168.255 256 - Internet不使用,只在私有网络里面使用,(可以重复使用)
子网划分
- 子网掩码:网络号全取1,主机号取0(子网号也取1)
- 用于划分网络位和主机位
- 判断两个IP是否位于同一个子网
- 划分
- NetID : SubID : HostID
- 子网号:原主机号部分比特
- 子网地址+子网掩码–>确定地址大小
- 将IP地址与子网掩码按位与运算,得到子网地址
CIDR(无类域间路由)
- 消除传统的A类、B类和C类地址界限
- 无类地址格式:a.b.c.d/x,x为前缀长度(可变长度)
- 路由聚合:使用单个网络前缀通告多个网络
- 最长前缀匹配优先
DHCP(动态主机配置协议)
别名:即插即用协议,零配置协议
- 应用层
- 允许主机自动获取一个IP地址、子网掩码、默认网关(第一跳路由器地址)、DNS服务器名称与IP地址
- 支持在用地址续租
- 流程
- 主机广播“DHCP发现报文”
- DHCP服务器利用“DHCP提供报文”进行响应
- 主机请求IP地址:“DHCP请求报文”
- DHCP服务器响应:“DHCP ACK报文”
- 报文封装到UDP中
4.3 NAT(网络地址转换)
实现
流程 解释 替换 利用(NAT IP地址,新端口号)替换每个外出IP数据报的(源IP地址,源端口号) 记录 将每对(NAT IP地址,新端口号)与(源IP地址,源端口号)的替换信息存储到NAT转换表中 替换 根据NAT转换表,利用(源IP地址,源端口号)替换每个进入内网IP数据报的(目的IP地址,目的端口号) - 16-bits端口号字段:可支持60000多并行连接
- NAT穿透
- 静态配置NAT,将特定端口的连接请求转发给服务器
- 利用UPnP、IGD
- 自动学习到NAT公共IP地址
- 在NAT转换表中,增删端口映射
- 中继
- NAT内部的客户与中继服务器建立连接
- 外部客户也与中继服务器建立连接
- 中继服务器桥接两个连接的分组
4.4 IPv6协议
数据报格式
- 流标签:表示同一“流”中的数据报
- 下一个首部:标识下一个选项首部或上层协议首部(如TCP首部)
- 跳步限制:TTL
- 改变
- 移除校验和:以便快速处理IP分组
- 移除选项:从基本首部移出,定义多个选项首部
- 不允许在中间路由器上进行分片与重新组装,只能在源与目的地执行
IPv6地址表示形式
- 一般形式:由冒号分隔的16进制表示,共8组
- 例:
1080:0:FF:0:8:800:200C:417A
- 例:
- 压缩形式:全为0可用两个冒号压缩
- 例:
FF01:0:0:0:0:0:0:43——>FF01::43
- 例:
- IPv4-嵌入形式:前80位为0,16位为1,+IPv4
- 例:
0:0:0:0:0:FFFF:13.1.68.3
- 例:
- 地址前缀:
2002:43c:476b::/48
(不使用掩码) - URLs:
http://[1080:0:FF:0:8:800:200C:417A]:8000
IPv6基本地址类型
- 单播:一对一通信
- 多播:一对多通信
- 任意播:一对一组之一通信(一般为最近一个)
IPv4向IPv6过渡
- 隧道:IPv6数据报作为IPv4数据报的载荷进行封装,穿越IPv4网络
4.5 ICMP(因特网控制报文协议)
- 作用与分类
- 差错报告
- 目的不可达
- 源抑制
- 超时/超期(TTL)
- 参数问题(首部出错)
- 重定向
- 网络探询
- 回声(Echo)请求与应答报文(Reply)
- 时间戳请求与应答报文
- 差错报告
- 不发送ICMP差错报告报文的特殊情况
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 除第一个IP数据报分片外,对所有后续分片均不发送ICMP差错报告报文
- 对所有多播IP数据报均不发送ICMP差错报告报文
- 对具有特殊地址(如
127.0.0.0
或0.0.0.0
)的IP数据报不发送ICMP差错报告报文
- ICMPv6
- 附加报文类型:例,“Packet Too Big”
- 多播组管理功能
报文格式
- 数据部分一般包含IP数据报的首部和前8个字节
4.6 路由算法
分类
- 静态路由vs动态路由
- 静态路由
- 手工配置、路由更新慢、优先级高
- 动态路由
- 路由更新快:定期更新;及时响应链路费用或网络拓扑变化
- 静态路由
- 全局信息vs分散信息
- 集中式路由算法
- 所有路由器掌握完整的网络拓扑和链路费用信息
- Eg:链路状态路由算法(LS)
- 分散式路由算法
- 路由器只掌握物理相连的邻居及链路费用
- 邻居间信息交换、运算迭代的过程
- Eg:距离向量路由算法(DV)
- 集中式路由算法
- 负载敏感vs负载迟钝
- 负载敏感算法:链路开销会动态地变化以反映出底层链路当前的拥塞水平
- 负载迟钝算法:链路开销不明确地反映链路当前的拥塞水平
链路状态路由算法(LS)
- 所有节点掌握网络拓扑和链路费用
- 每个节点向网络中所有其他节点广播链路状态分组(链路状态广播)
- Dijkstra算法($O(n^2)$)
- 问题:振荡
- 解决方法:让每台路由器发送链路通告的时间随机化
距离向量路由算法(DV)
- 迭代的、异步的、分布式
- Bellman-Ford方程(动态规划)
- $d_x(y)=min\{c(x,v)+d_v(y)\}$(v为x的邻居)
- 算法:
- 链路费用变化
- 节点检测本地链路费用变化
- 更新路由信息,重新计算距离向量
- 如果DV改变,则通告所有邻居
- 无穷计数问题
- 毒性逆转:若z通过邻居y路由选择到达目的地x,则z将通告y:z到x的距离是无穷大
- 定义最大度量:定义一个最大的有效费用值
层次路由
- 问题
- 网络规模
- 管理自治
- 自治系统AS:聚合路由器为一个区域
- 由ICANN区域注册机构分配ASN进行标识
- 自治系统内部路由协议(intra-AS routing protocol)
也称为IGP
- 内部路由器
- 同一AS内的路由器运行相同的AS内部路由协议
- 不同AS内的路由器可运行不同的AS内部路由协议
- OSPF、RIP、IGRP
- 自治系统间路由协议(inter-AS routing protocol)
也称EGP
- 网关路由器
- 位于AS“边缘”
- 通过链路连接其他AS的网关路由器
- BGP是唯一的EGP
- 网关路由器
- AS路由转发表
- AS内部路由算法设置AS内部目的网络路由入口
- AS内部路由算法与AS间路由算法共同设置AS外部目的网络路由入口
Internet路由
RIP(路由信息协议)
- 使用距离向量路由算法
- 距离向量:使用跳步数,每条链路1个跳步(max = 15hops,无穷大 = 16hops)
- 通告:每隔30s,邻居之间交换一次DV
- 每次通告:最多25个目的子网(IP地址形式)
- 链路失效:超过180s没有收到通告,则标记为不可达路由器
- RIP为应用层协议,使用UDP传送数据
- RIP选择的路径不一定是时间最短的,但一定是具有最少路由器的路径。
OSPF(开放最短路径优先)
- 使用链路状态路由算法
- OSPF通告在整个AS范围泛洪
- OSPF是网络层协议,使用IP数据报进行传送
- 优点
- 安全:所有OSPF报文可以被认证
- 允许多条相同费用的路径
- 对于每条链路,可以针对不同的TOS设置多个不同的费用度量
- 集成单播路由域多播路由
- 支持对大规模AS分层
- 分层
- 主干区、局部区
- 链路状态通告只限于区内
- 每个路由器掌握所在区的详细拓扑
- 区边界路由器
- 主干路由器
- 主干区、局部区
IGRP(内部网关路由协议)
- Cisco的私有协议
BGP(边界网关协议)
- 应用层协议
- 使用179端口的半永久TCP连接
- eBGP(外部BGP):从邻居AS获取子网可达性信息
- iBGP(内部BGP):向所有AS内部路由传播子网可达性信息
BGP报文
类型 说明 Open 与peer建立TCP连接 Update 通告新路径(或撤销原路径) KeepAlive 确保连接 Notification 报告先前报文的差错;也用来关闭连接 - BGP属性
前缀 + 属性 = “路由”
- AS-PATH:包含前缀通告所经过的AS序列
- 还用来检测和防止通告环路(若在路径列表中看到自己的AS,则拒绝该通告)
- NEXT-HOP:开始一个AS-PATH的路由器结构,指向下一条AS
- AS-PATH:包含前缀通告所经过的AS序列
- 热土豆路由
- 选择最近的路由器
- 路由器选择算法(顺序地调用消除规则)
- 本地偏好值属性:策略决策(由网络管理员决定)
- 最短AS-PATH
- 热土豆路由
- 附加准则
This post is licensed under CC BY 4.0 by the author.