源主机网络层的主要工作
路由器网络层的主要工作
目的主机网络层的主要工作
网络层提供的服务
o 屏蔽底层网络的差异,向传输层提供一致的服务
虚电路网络
o 虚电路网络提供面向连接的服务
n 借鉴了电路交换的优点
n 发送数据之前,源主机和目的主机之间首先要建立一条虚连接(逻辑连接)
n 数据无丢失、重复和失序
o 面向连接
n 数据传输过程分为三阶段:建立虚连接、传输数据、拆除虚连接
n 虚电路表
Ø 输入接口、输入VCI(虚电路标识,局部有效)
Ø 输出接口、输出VCI(虚电路标识,局部有效)
n 输入接口和输入VCI唯一标识一条虚电路,后续的数据报只需携带VCI,无需携带完整的目的地址
数据报网络
o 无连接
o 路由器对于每个输入的数据包单独进行处理
o 路由表包含了目的地址和输出接口的对应关系
o 每个数据包必须包含完整的目的地址
o 来自相同源节点和目的节点的两个数据报可能被转发到不同的接口,不保证顺序
o 对网络状况和目的主机状况一无所知,可能出现丢失
数据报网络的好处
o 由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。
o 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的传输层负责(包括差错处理、流量控制等)
路由选择算法
o 基于图论
n 节点:路由器
n 边:链路
n 权值:链路开销
o 路径长度
o HOP数(跳数)
o 延迟时间
o 最短路由
n 总开销最小的路径
静态选路算法
o 固定路由表选路法
n 根据事先设置的静态路由表,查表选路
o 洪泛法(Flooding)
n 向除输入接口之外的所有接口转发
o 随机走动选路法
n 按概率随机选路
o Dijkstra算法(1959):通过用边的权值作为距离的度量来计算最短路径,
n 有最少边数的路径不一定是最短路径
算法原理
1)定义一个集合N,包含所有最短路径已确定的节点,在初始时,该集合中只包含一个源节点(设为S)
2)如果S和某个节点之间有一条边相连,距离就是该边上的权值;否则,距离值设为无穷大(∞)
3)从集合N外的节点中选择一个和S距离最小的节点(设为T)加入集合
4)重新计算S到其他集合N外的节点的距离,如果经过T的路径更短,则更新距离值
5)重复3-4步,直到所有节点都加入集合N
洪泛法
o 不计算路径,有路就走
o 路由器收到数据包后,向除了输入接口之外的所有接口转发
洪泛法的特点
o 一个数据包将产生大量的副本(copy)
n 给网络增加大量负载
o 至少有一个副本将到达目的主机
n 健壮性强
o 至少有一个副本选择的是最优路由
o 所有的路由器都会收到副本
n 可用于传播路由信息
缺点:重复数据包多,浪费带宽
优点:可靠性高,路径最短,常用于军事
随机走动选路法
o 路由表中,一个表项有多条候选路由,路由器收到一个数据包时,按照预定的概率随机地选择其中一条路由
o 应用:无线网络
动态选路算法
o 自适应算法是动态的、分布式的算法
o 实现分布式算法的三要素:
n 测量路由
n 更新路由信息的协议
n 计算路由开销
距离矢量选路算法
o 距离:两个节点间传输数据的开销
o 前提:每个路由器都知道自己到邻居节点的距离
o 动态选路:路由器通过周期性地与邻居节点交换路由信息
n 与谁交换:邻居节点
n 交换什么:路由表中的距离项(目的地、距离)
n 何时交换:周期性交换
o 各节点根据路由信息更新路由表
无穷计算问题
o 好消息传播得快,坏消息传播得慢
DVR算法的缺点
o 交换的路径信息量大
o 路径信息不一致
o 收敛速度慢(坏消息)
o 不适合大型网络
链路状态选路算法
o LSR:Link State Routing
n 链路状态:链路连通/中断、链路开销
o 又称最短路径优先(SPF)选路
n 使用Dijkstra算法来计算最短路径
o 路由器发现自己和邻居节点的链路状态及开销
o 路由器之间通过交换路由信息,构造出全网的拓扑结构,并计算出到其他节点的最短路径
n 与谁交换:网络中的所有节点
n 交换什么:一个节点到各邻居节点的链路开销
n 何时交换:网络初启或链路状态变化时
测量线路开销
o 发送一个ECHO分组要求对方立即响应,通过测量RTT,再除以2,发送方就可以得到一个延迟估计值
构造链路状态包(LSP)
包含:源节点到其所有邻居节点(路由器)的线路开销测量值(即时延)
发布链路状态分组
o 用洪泛法向所有节点发布LSP,保证每个节点都能收到。
o 存在问题:
n 对于重复的LSP,路由器使用序号判断哪个LSP最新
n 如果序号循环使用,就会发生重复
n 如果一个路由器重启,序号将从0开始重新计数,但这些LSP会被当成过时包
n 如果序号发生错误,则很多LSP将被看成过时包
解决办法:序号+年龄
o 使用一个32位序号,即使每秒钟发送一个LSP包,137年才会循环一次
o 在每个LSP包中加一年龄字段(如初值为60),每秒钟将年龄值减1,为0后该包将被丢弃
oLSR的优点
n 路由信息的一致性好,坏消息也一样传播得快
n 状态分组的长度较短,仅包含到邻接点的距离、序号和年龄等,与网络规模关系不大,传输所耗用的网络带宽不大,此外,状态分组的扩散,由于年龄参数的设定,不会无限制扩散,所以可适用于大型网络
oLSR的缺点
n 每个路由器需要有较大的存储空间,用以存储所收到的每一个节点的链路状态分组
n 计算工作量大,每次都必须计算最短路径
IP地址的构成
o 网络号net-id +主机号host-id
n 网络号标识主机/路由器所连接到的网络,
n 主机号标识该主机/路由器
IP 地址 ::= { <网络号>, <主机号>}
o 地址划分有两类
n 分类编址:
Ø 单播地址分为A、B、C三类
Ø 网络号和主机号所占的比特个数不同
n 无类别编址
同一个网络(如LAN)中的主机或路由器的IP 地址中的网络号必须相同
划分子网的基本思路
o 属于一个单位内部的事情,对外仍然是一个网络
o 从主机号借用高若干位作为子网号 subnet-id,主机号host-id 相应减少了若干位
IP地址 ::= {<网络号>, <子网号>, <主机号>}
o 从外网发给本网某个主机的IP包,仍然根据其目的网络地址,先找到连接本网的路由器;路由器收到 IP包后,再按目的网络地址转发到目的子网。
n 最后交付给目的主机
子网掩码
o 从一个 IP 包的包头无法判断源主机或目的主机所在网络的网络地址
o 使用子网掩码(subnet mask)可以找出 IP 地址中的网络号部分
o 子网掩码:特殊IP地址,网络号(包括子网号)部分为全1,主机号部分为全0
路由器转发IP包的过程
(1) 从收到的IP包的包头提取出目的 IP 地址 D。
(2) 先检查直接相连的网络:用各网络的子网掩码和 D 逐位相“与” ,看是否和对应的网络地址匹配。若匹配,则将包转发到对应接口;否则执行(3)
(3) 若路由表中有目的地址为 D 的特定主机路由,则将IP包转发给对应的下一跳路由器;否则,执行(4)。
(4) 对路由表中的每一行的子网掩码和 D 逐位相“与” ,若其结果与该行的目的网络地址匹配,则将IP包转发给对应的下一跳路由器;否则,执行(5)。
(5) 若路由表中有一个默认路由,则将IP包转发默认路由器;否则,执行(6)。
(6) 报告转发包出错
可变长度子网掩码
o VLSM
o 划分子网时根据需要灵活划分,不要求每个子网的地址空间都一样大,即不同子网的地址掩码可能不同
超网
o Super network
o 一个C类网络地址不够时,将几个连续的C类地址块合并,构成一个超网
o 将网络号低位的若干位分离出来作为超网号
n 网络号、超网号、主机号
n 网络地址:超网号+主机号为0
n C类地址块个数必须是2n个
n C类地址块必须连续
n 超网的网络地址的第3字节值必须能整除C类地址块的个数
无类别地址
o CIDR(无类别域间选路)
o 不再对地址分类
o 根据网络规模的需要,将IP地址划分为任意2n(1<n<32)大小的地址块
o 采用CIDR后,根据CIDR子网掩码来判定网络大小
o CIDR使用各种长度的“网络前缀”(network prefix)来代替分类地址中的网络号和子网号。
IP地址 ::=网络地址/x
x为网络号的位数,即子网掩码中1的个数
CIDR:路由聚合
最长前缀匹配
o 使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。
o 应当从匹配结果中选择具有最长网络前缀的路由 : 最 长 前 缀 匹 配(longest-prefix matching)。
o 网络前缀越长,其地址块就越小,因而路由就越具体(more specific) 。
o 最长前缀匹配又称为最长匹配或最佳匹配。
私有地址
o 问题:IPv4的地址空间不够
o 方法:使用局部地址(私有地址)
n 允许不同网络内的主机使用相同的地址,该地址仅在网络内部使用
o 3段私有地址
n 10.0.0.0 – 10.255.255.255,10/8
n 172.16.0.0 – 172.31.255.255,172.16/12
n 192.168.0.0 – 192.168.255.255,192.168/16
NAT
o 网络地址翻译
n 完成私有地址和全局地址的转换
n 由路由器完成
IP地址的自动分配:DHCP
o 动态主机配置协议
n 自动分配IP地址的应用层协议
n C/S模式,服务器端口号为67,客户端口号为68
n 采用UDP传输
n 可配置其他网络参数:子网掩码、路由器地址、DNS服务器地址等
n DHCP服务器维护一个IP池,主机向DHCP服务器发出请求,申请IP地址
o 表示IP包内的数据属于哪个协议
n TCP=6
n UDP=17
n ICMP=1
n IGMP=2
n OSPF=89
IP包的分段和重装
o 原IP包:IP数据报
o 分段原因:底层网络所允许的最大数据块长度(MTU)不同
o 分段相关字段
n 标识(2B):所有属于同一个IP数据报的片段(IP包)都使用相同的标识
n DF(1位):不要分段,DF=1的IP数据报不允许分段
n MF(1位):更多片段,MF=0的IP包是最后一个片段
n 段偏移量(13位):本片段在原IP数据报中的位置,单位为8字节
因特网的差错处理:ICMP
o 因特网控制报文协议
o IP没有差错处理机制,由ICMP补充
o 提供差错报告机制
n 只报告,不强制处理
o ICMP 不是高层协议,而是 IP 层的协议。
o ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。
n IP包头的协议字段值=1
因特网有两大类路由选择协议
o 内 部 网 关 协 议 IGP (Interior Gateway
Protocol) :即在一个自治系统内部使用的路由选择协议。目前这类路由选择协议使用得最多,如 RIP 和 OSPF 协议。
o 外 部 网 关 协 议 EGP (External Gateway Protocol) :若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。在外部网关协议中目前使用最多的是 BGP-4。
o IGP和EGP相互独立
RIP(路由信息协议)
o 基于距离矢量算法
o 距离:跳数
距离矢量选路的问题:无穷计算
o Count-to-Infinity,又称为无穷环路(Infinite Loop)
o 坏消息传播得慢!
o 原因
n 节点只知距离、不知路径
n 向邻居提供虚假路由通告
n 导致路由中出现环路
o 解决方案
n 限制网络规模:RIP(网络直径<16跳)
n 在路由通告中增加路径信息:BGP
n 节点知道网络拓扑:OSPF(LSR)
OSPF(开放最短路径优先协议)
o 基于链路状态选路算法
o 经过信息交换,每个路由器都知道全网的拓扑结构,因此不会出现无穷计算问题
o 支持分级选路
OSPF消息
o 问候(Hello)消息:获知其邻居节点的IP地址、检测邻居节点是否可达。
o 链路状态更新消息(LSU):通告路由器已知的网络拓扑结构信息
o 链路状态确认消息(LSA):收到LSU消息时,路由器发送此消息进行确认
o 链路状态请求(LSR)消息:向邻居节点询问一条或多条链路的状态信息
组播可明显减少网络中资源的消耗
组播地址
o D类地址,每个小组成员使用同一个组地址
o 共228个组地址
o 组地址由因特网号码分配权威机构IANA分配
o 组地址只能用于目的地址,不能用于源地址
o 主机发送组播数据时,IP包的目的地址为组播地址
移动主机的通信过程
o (1) 相关节点发送的IP包被转发给归属代理
o (2) 归属代理将IP包封装到一个新的IP包里,发送给外来代理:隧道方式
o (3) 外来代理拆出原IP包,转发给移动节点
o (4) 移动节点回复IP包给相关节点