计算机网络-Internet原理(一)
参考书 《计算机网络原理》 第二版 王志文 陈妍
Internet原理
是什么?
Internet 是基于 TCP/IP 协议集逐渐发展起来计算机互连网络。
学习 Internet 原理,就是学习 TCP/IP 协议簇,了解协议工作原理
TCP/IP 分为:
- 应用层
- 传输层
- 网际层(Internet层)
- 网络接入层
网络接入层
网络接入层对应着数据链路层和物理层。可参考前两篇数据链路层和局域网浅解
网际层
网际层对应 OSI 的网络层,基于前一篇广域网用不同的协议来实现该层的功能
IP协议
IP 协议是 TCP/IP 协议集网络层主要协议,提供尽力而为的无连接的数据包发送机制。不保证数据可靠性,不验证,不确认。
主要功能:
- 无连接的数据报发送
- 数据报路由(IP 路由)
- 分组的分段和重组
IP地址
不同物理网络有不同物理地址,为了让不同物理结构的网络互连互通,需要在互联网上采用统一的地址。
Internet 中,由 NIC 统一负责全球 IP 地址的规划和管理。
IP地址由四字节构成,通常每个字节都用十进制表示,小数点隔开。
分为5类地址:A、B、C、D和E类。A类头一位固定为0,B类头两位固定为10,C类110以此类推。D类地址用于组播定义,E类保留备用,所以 Internet 中能分配给主机的只有A类、B类和C类地址。
另外,有些地址有特殊含义而保留
主机号全 1 的网络地址用于指定网络的广播地址
主机号全 0 的网络地址用于表示网络本身
网络号全 0 的网络地址用于表示本网络
32位 IP 地址全 1 的网络地址用于本网广播,又被称为有限广播地址
A类网络地址127是一个保留地址,用于网络软件测试以及本地机进程间通信,被称为回送地址
每类地址都保留了一个地址段用作私有地址,专门为组织机构内部使用保留,当私有地址的网络接入 Internet 时需要经过地址翻译(如 NAT )将私有地址转换成合法地址。
为了方便管理,网络可能被划分为子网。并进行网络内部子网号和主机号的分配。此时IP地址分为三部分:标准网络地址、子网地址和主机地址。前两者构成真正的网络地址。
因为子网存在,为了区分网络地址和主机地址编码位数,引入子网掩码的概念。网络地址位为 1,主机地址位置为 0,在求网络地址时求与。如无子网情况下,A类地址子网掩码255.0.0.0,B类255.255.0.0,C类255.255.255.0。
当收发双方网络地址相同时,说明两者在同一网段,不需要通过路由器分发。
IP分组协议格式
Internet 网际层中基本数据单元是 IP 分组,通过 IP 分组完成不可靠、无连接的传输。
IP 分组由分组头和数据区两部分组成,分组头存控制信息。
version:4bit ,用于表示分组对应 IP 协议版本号,多用4版本
Hlen:IP分组头的长度,单位4字节。分组头的长度可变,所以必不可少。
TOS:指明 IP 分组所希望达到的优先级、可靠性、吞吐量、延时等服务质量要求
Length:指明 IP 分组的总长度,单位是字节,也就是说最多有2^16字节
Ident:唯一标识符,分组、重组等必须
Flags:一位保留,一位 DF 用于指明 IP 分组是否允许分段,MF 用于表明是否有后续分段
Offset:偏移量,分组在原始分组里的位置
TTL:生存时间,传输最长时间,每经过一个路由器减 1,当减到 0 时,该分组被丢弃。保证分组不会在网络出错时无休止地传输
Protocol:用于指明 IP 协议进行传输的高层协议,例如,ICMP 的值为 1,TCP 为 6,UDP 的值为 17。
Checksum:用于保证 IP 分组头的完整性。其算法为:该字段初值为 0,然后对 IP 分组头以每 16 位为单位进行求异或和,并将结果取反,便得到校验和
Source Addr:指明发送 IP 分组的源主机的 IP 地址。
Destination Addr:指明接受 IP 分组的目的主机
Options:例如
填充:长度不定,因为IP分组头必须是 4 字节的整数倍
分段、重组和转发
分段和重组主要涉及标识符字段、标志字段、片偏移字段。
当 IP 分组进入的物理网络最大传输单元比分组长度小时,IP 协议就把该分组分割成小的数据块后封装到帧中。要求每个分段的长度都是 8 的倍数,最后一个分段可以任意小。每个分段都有分组头,除了偏移量、MF标志位和校验和字段之外,其他都与 IP 分组头相同。重组根据分段偏移量和 MF 标志查看是否为同一分段,MF=0且Offset=0则为完整分组。
转发则需要根据 IP 地址判断是否在同一网段,若不在,则传输到网桥通过路由器转发到目标网络的网桥。
ARP协议
Internet 中所有主机都有两个地址:一个是物理地址,另一个是 IP 地址。源主机发送数据时通过 IP 地址来指示目的主机,但我们实际数据链路层进行发送时使用的是物理地址,所以我们需要将 IP 地址转换为物理地址。
地址转换协议(Address Resolution Protocol)就是这样的一个协议,它虽然工作在网络层,但实际上是一个低层协议,它使网络层与硬件及数据链路层隔离,数据链路层可以直接使用 ARP 。
通过ARP,可以在不知道主机或网关物理地址的情况下发送数据,当物理地址和 IP 地址对应的关系发生变化时,能及时更新。
每一台使用 ARP 协议的主机都在内存中存有 ARP 表。随着 IP 分组的发送,ARP 表会动态的更新。为了确保正确,每一个 ARP 表项都关联了一个生存时间,超时就会自动删除。
ARP 协议解析物理地址流程
A 向 B 发送分组,先判断是否在同一子网中(IP 地址 & 子网掩码),如果在,则使用本物理网络发送 IP 分组,反之通过网关进行转发。
发送前查询 ARP 表,
若在,则以对应物理地址封装帧。
若不在,在物理网络中广播 ARP 请求报文
- 目的主机在网络中
- 目的主机收到报文,发现 IP 地址与自己相同,则将物理地址写到报文内,并发送给源主机
- 源主机收到该物理地址,并以该地址封装帧
- 目的主机不在网络中
- 无响应,超时后放弃发送 IP 分组
- 目的主机在网络中
协议格式
- 协议类型:使用的高层协议类型,为多种协议适配
- 硬件地址长度和协议地址长度:为工作在不同协议、网络下适配
- 操作:
- 1-ARP 请求报文
- 2-ARP 响应报文
- 3-RARP 请求报文
- 4-RARP 响应报文
ARP请求报文:填写首部(发送方硬件地址之前的所有)、发送方主机 IP 地址以及目的 IP 地址
ARP响应报文:目的地址写请求报文的
CIDR协议
C 类地址只有 256 个主机号,但是有些时候企业内部所需地址超过 254 个(还有两个被定义了)。这种情况下分配 B 类地址又太过浪费。
又或者一些小型网络内部所需地址远远不足254个,这样也对网络地址造成了浪费。
无类别域间路由(Classless Inter-Domain Routing,CIDR)就是针对这种问题引入的。
CIDR 的基本思想是取消 IP 地址的分类结构,将地址块聚合在一起生成一个更大的网络,从而包含更多的主机。CIDR 也支持路由聚合,把许多条目合并成更少的条目。
为了实现 CIDR,更改了 C 类地址的分配方式。
世界被分为四个区,每个区都有一块连续的 C 类地址空间
工作流程
例如从200.117.0.0开始的地址有数百万可用。当 A 子网需要 2048 个 IP 地址,B 子网需要 4096 个 IP 地址。
A 获得的地址范围是 200.117.0.0 —— 200.117.7.255,子网掩码为255.255.248.0,标识为 200.117.0.0/21
B 获得的地址范围是 200.117.16.0 ——200.117.31.255,子网掩码为255.255.240.0,标识为 200.117.16.0/20
这些组地址必须满足:
- 必须连续
- 数量必须为2的指数倍,假设为2^n
- 若数量为2^n,那么起始地址必须要能被2^n整除
进行寻址时,依赖如下图路由表。到达路由器,会依次与路由表内 IP 地址进行是否在同网段的比较。保留网段相同且最长的地址。相同网段越长,则说明网络规模越小,寻址越精确。
ICMP协议
控制报文协议(Internet Control Message Protocol)是一种网络差错和状态的报告机制,弥补了 IP 协议的不可靠缺陷。例如出现目的主机不可达、网络拥塞等状态时。
ICMP 通过 IP 协议进行传输,封装在 IP 分组中的数据部分。
协议格式
- 首部
- 类型:标识 ICMP 上报错误的类型,一类 1~127 的差错报文,另一类是 128 以上的信息报文
- 代码:标识编码,与类型共同标识详细类型
- 校验和:对报文校验,每16位异或和,结果取反
- 首部其他部分:标识本 ICMP 进程,但仅适用于回显请求和应答 ICMP 报文
- 数据
- 可能包含出错 IP 分组头及该分组前 64 位数据,提供这些信息帮助源主机确定出错分组
特点
- 提供差错报告,但是不规定处理方式。主机需要另外的应用程序来进行差错处理
- 都是从路由器到源主机,有时并不能真正解决问题。大多数情况下都是源主机问题可以解决,偶尔会是中间路由器的问题,这时中间路由器无法得到差错报告,源主机又不知道差错出在哪里。这时候就要依赖管理员
应用
网络层控制主要包括拥塞控制和路由选择两种功能,ICMP为之提供相应的报文。
拥塞控制与源抑制报文
TCP/IP采用源抑制技术。抑制主机发出分组速率,流程如下:
- 路由器周期测试每条线路,路由器发现拥塞,发出 ICMP 源抑制报文。
- 源主机收到 ICMP 源抑制报文后,按一定速率降低到某目的节点的分组传输速率
- 拥塞接触后,源主机恢复分组传输速率
但其中 ICMP 源抑制报文只是一种拥塞报告机制,无从知道、无法控制主机如何处理。
路径控制与重定向报文
互联网路径由主机和路由器上路由表决定,各主机路由表一般来自同一网络中的路由器。
主机启动时,通过路由表中的路由器信息把分组发送出去,但是路径不一定是最优的,到达路由器后,路由器检查是否是最优路径,如果不是,那么在转发分组的同时,会向主机发送一个重定向 ICMP 报文,更新主机的路由表为最优路径。
通过这种方式,主机会拥有一个动态的、又小又优的路由表。
NAT协议
NIC为每类地址保留了一个地址段,用于解决没有申请到足够 IP 地址的企业组网问题。
例如,ISP 给了一个 202.16.1.1 的地址分配给 R 与 Internet 的端口,为了内部网络中每个节点都能与 Internet其他节点通信,也需要分配 IP 地址,R与内部网连接的端口采用了私有地址 192.168.1.1。
内部网络种所有 IP 分组都是经过路由器 R 转发,因为私有地址无法出现在 Internet 中,所以分组源地址要通过某种协议转为 202.16.1.1 ,再通过端口2发送到目的主机。同样,R 收到分组时会完成一个 202.16.1.1 转到内部网私有 IP 的协议。
NAT 协议就是为此提出的。
NAT表
NAT 协议需要实现双向地址转换,需要维护如下所示 NAT 表。出了记录 IP 地址还要记录端口号。
工作流程
NAT 路由器位于从内部网到 Internet 的路由出口,在两个方向上完成两次地址转换或者翻译。
出方向做源信息替换,入方向做目的信息的替换。这个过程对收发双方无感知。
另外,这也决定了网络访问只能由内网发起。
转换方式有三种:
静态转换
内部网私有地址和外部合法地址映射关系一对一,并且固定不变。一般用于对内网特定设备的访问。
动态转换
私有地址和外部合法地址映射动态变化,私有地址可以随即转换为可用的合法外部地址。动态转换时可以使用多个合法地址集。适用于合法地址略少的情况下。
端口多路复用
外出数据源端口也进行转换,从而端口多路复用共享同一个合法 IP 地址进行访问,最大化节约资源。又可隐藏内部主机。是应用最多的方式。
NAT 只能对 IP 层和传输层头部进行转换处理。但有一些应用层协议包含地址信息。NAT 使用了一种应用程序级网关来替换这些信息。
DHCP协议
这个协议是为了解决局域网中 IP 地址不够用或者主机配置 IP 参数困难的问题。它基于客户 / 服务器模式提供了一种动态指定 IP 地址和参数配置的机制。
在网络中至少有一台 DHCP 服务器,它用于监听网络中的 DHCP 请求,并与客户端协商 TCP / IP 的设定环境。提供了三种 IP 地址分配方式:
手工分配
客户端 IP 地址和参数都是管理员手工指定,DHCP 服务器负责把指定的 IP 地址及其参数通知给相应主机
自动分配
DHCP 客户端一旦从服务器成功租用一个 IP 地址后,永远使用这个 IP 地址。
动态分配
当 DHCP 客户端从服务器租用到 IP 地址后,并不能永久使用该地址,只要租约到期,就会释放 IP 地址,并给其他主机使用。客户端可以更优先延续租约。
动态分配比自动分配更灵活,可以实现少量 IP 地址多个用户共同租用。
工作流程
广播 DHCP Discover 报文,此时主机无 IP 地址,所以源地址为 0.0.0.0(即未知地址),目的地址为 255.255.255.255(广播地址)。此时报文中包含当前主机的物理地址
提供 IP 地址。DHCP 服务器收到报文,并从空闲 IP 中选择一个,通过 MAC 地址信息发送 DHCP Offer 报文给主机。此时报文包含需要的IP地址、租约期限等信息。
接受 IP 租约。主机收到 Offer 报文后,发送ARP请求查询 ARP 服务器,看该 IP 是否已经被使用。
如果 IP 已经 被使用,那么发送 DHCP Decline 报文给 DHCP 服务器,拒绝这个报文,并重新发送广播 DHCP 发现报文。
如果 IP 未被使用,广播发送一个 DHCP Request 报文请求租用该 IP 地址
租约确认。当 DHCP 服务器接收到客户端的 DHCP 请求报文后,判断是否相同。如果不相同,则 DHCP 服务器不做任何处理,只清除相应 IP 地址分配记录。如果相同,那么 DHCP 服务器就会响应客户端一个 DHCP ACK 报文,增加使用租期信息,确认生效。
IP地址释放。DHCP 客户端用完之后,发送 DHCP Release 报文。DHCP 服务器收到后,回收地址重新分配。
服务质量
因为不同的应用有不同的服务要求,为了能根据用户的需求进行分配和资源调度,服务质量(Quality of Service,QoS)应运而生。
IPv4中,所有分组同等对待,这并不能满足业务需求。所以通过 QoS 来描述业务所需的质量。
参数类型:
- 可用性:需要时网络能正常工作的时间百分比。
- 吞吐量:是指一定时间段内对网上流量的度量。根据不同的应用和服务,服务水平协议(SLA)可以规定承诺信息速率(CIR)、突发信息速率(BIR)和最大突发信号长度。
- 时延:一项服务从网络入口到出口平均经过时间
- 时延变化:不同分组时延的不同。高频率变化称为抖动,低频率时延称为漂移。抖动主要因为排队发送时间不同引起,语音、视频等不能容忍抖动。
- 丢包率:数据分组在源节点和目的节点之间传输过程丢包概率。
QoS服务类型:
尽力而为的服务模型
没有任何保证,先入先出传输,不存在差错控制。
综合服务模型
为了提供 QoS 服务,提供了资源预留和 QoS 控制流程的综合服务模型 IntServ,用资源预留协议(RSVP)为基础保障 QoS。
这个协议运行在从源节点到目的节点的每个通信流上,通过监视流使用资源的数量,防止过度使用,明确保证每个流的服务质量,细化服务质量颗粒度。
根据 QoS 定义了三种服务类型:
- 有保证的服务:保证带宽,限制延迟,无丢包
- 控制负载服务:在负载较轻的网络中进行尽力而为的服务
- 尽力而为的服务:在多种负载中提供尽力而为的服务
该模型可以提供不同的服务等级,能够动态设置参数。但是这也需要沿途的每个网络单元为每一个流维持一个“软状态”。因为内存有限,保存的软状态信息也有限。
区分服务模型
为了解决 Inter/Serv 扩展性差的问题,提出了 DiffServ。
简单来说,就是对不同的通信流分类,加入到不同的队列中,按照不同队列设定的策略进行传输和处理。通过设置数据包 DS 字段,来进入到不同的队列中。具体每个服务等级所能传送的最大速率,由 ISP 和用户协商达成(可扩展性),超过服务等级要求最大传输速率的包会被丢弃。
相应的也提供了三种服务
- 尽力而为的服务
- 奖赏服务:提供低延迟、低抖动、低丢失率、保证带宽的端到端或者网络边界到边界的传输服务。
- 确保服务:在网络拥塞情况下,仍能保证一定量的预留带宽,着眼是带宽和丢失率,不保证延迟和抖动。即统计意义上会有一定量的预留资源,预留内标记为 IN,预留外标记为 OUT,丢包时优先丢弃 OUT。
IPv6协议
IPv4有以下问题:
- 地址空间不足
- 早期 IP 分配不连续,导致路由器路由表项过大
- 不易进行自动配置和重新编址
- 不能解决日益突出的安全问题
所以新开发了 IPv6 补充和改善:
- 128位地址空间,提供了充足的地址空间
- 层次化网络结构,提高路由效率
- 分组头更简洁、灵活、易于扩展
- 支持自动配置(无需使用 DHCP )
- 支持端到端安全(IPSec)
- 支持移动特性
- 新增流标签(标识流),更利于支持 QoS
分组
包括:
基本头部
- 版本
- 通信量类型:类别和优先级,类似协议域
- 有效载荷长度:除基本头部之外字节数
- 下一头部:当前头部后下一个头部位置、类型
- 跳数上限:限制无限转发
- 源地址
- 目的地址
扩展头部
相当于 IPv4 分组的选项,在 IPv6 中使用链式结构来支持。分为以下几种:
- 逐跳选项头:该选项头被转发路径所有节点处理。
- 目的选项头:允许出现在两个位置,路由头或者上层头之前。放置在路由头前,表明可以被目的节点和路由头中指定的节点处理;放置在上层头表明只能被目的节点处理
- 路由头:用于源路由选项和 Mobile IPv6
- 分片头:超过路径最大分组时,用于分组分片
- 验证头:用于 IPSec 检查,用于提供分组验证、完整性检查和加密。
- 封装安全载荷头:用于 IPSec 检查,用于提供分组验证、完整性检查和加密。
数据
IPv6 地址
一共 128 位,一般每十六个位用十六进制表示,中间用冒号分隔。
如 68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF
- 允许把数字前面重复的 0 省略
- 允许 0 压缩,但是只能用一次避免误解。如68E6:0:0:0:0:0:0:FFFF压缩为68E6::FFFF
- 允许点分十进制后缀,如0:0:0:0:0:0:128.0.0.1,每个冒号划分两个字节,每个点划分一个字节
- 为了方便表示 IPv6 的网络前缀,同样可以使用 CIDR 的斜线表示法
类型:
单播地址:标识一个接口,每个接口属于一个节点,所以每个单播地址都可以用来表示节点
组播地址:标识一组接口,发出的分组被每个组内接口接受
泛播地址:标识一组接口,发向组内最近的一个接口
未指明地址:“::”,不能用作目的地址,用于特殊主机源地址(如未获得 IP )
回送地址:“::1”,与 IPv4 相同
IPv4 兼容的 IPv6 地址:低 32 位是 IPv4 地址,高 96 位为0,用于隧道封装
IPv4 映射的 IPv6 地址:前 80 位为 0,中间 16 位全为 1,用于 IPv4 表示 IPv6 地址,但是实际上发送的还是 IPv4 分组
本地链路单播地址:本地网络使用 IPv6,但是没有连接 Internet,此时可以使用本地的地址
格式:
- 全球路由选择前缀:第一级地址,占 48 位,相当于 IPv4 的网络号。单播地址前三位为 001,所以只有 45 位可用
- 子网标识符:二级地址,用于建立子网,如果没有可以设置为全 0
- 接口标识符:三级地址,指明主机或路由器的网络接口,相当于 IPv4 主机号。
IPv4 到 IPv6 过渡方案
因为 IPv4 路由器数量庞大,所以只能缓慢过度。需要考虑如何实现有三个要求:
- 如何充分利用现有 IPv4 资源
- 如何实现网络设备互连互通的同时,保证信息传输质量
- 逐步和渐进,需要尽可能简便
主要有三个技术
双栈技术
双栈节点优先使用 IPv6 ,与只支持 IPv4 的节点通信使用 IPv4。
如何辨别对方节点使用协议?通过 DNS 实现,返回的是 IPv6 地址则使用 IPv6,反之使用 IPv4。
支持单个节点设备实现,也支持直接实现一个双栈骨干网,该网内所有设备必须是双栈设备,并且配备两个地址。
这个技术是过渡的基础,所有过渡方案技术基于双栈技术
隧道技术
提供两个 IPv6 节点通过 IPv4 网络实现通信连接,或者两个 IPv4 节点通过 IPv6 网络实现通信连接的技术
隧道是将一种协议完全封装在另一种协议数据中的技术。
优点在于只需要把网络边缘节点实现双协议栈和隧道功能。
IPv4 / IPv6 协议转换技术
提供 IPv4 网络和 IPv6 网络之间互通的技术,实现的是协议之间的转换。直接把 IPv4 转成 IPv6 就可以在 IPv6 网络中传输了。只需要在两个网路之间接口配置该技术。
Internet路由协议
路由基本概念
为了避免主干网路由表过大,划分网络为多个自治系统(AS),每个 AS 内部有多台主机,并有一台负责与外部通信。AS 之间通过边界网关(路由器)连接不同的自治网络。
这种基于 AS 的路由模式为:AS 内部,内部网关共同完成本地路由。AS 外部,数据需要通过相邻 AS 传递到目的AS,中间 AS 协同作用。
所以路由协议分为两大类
内部网关协议(Interior Gateway Protocol,IGP)
一个 AS 内部路由器间交换路由信息,包括 RIP、IGRP、HELLO、OSPF。一般 AS 内部所有路由器全部参与、直接交换
外部网关协议(Exterior Gateway Protocol,EGP)
不同 AS 之间路由器交换路由信息,包括 EGP、BGP。一般只有相邻边界路由器之间进行。
路由信息协议
Routing Information Protocol,RIP是应用较早的内部网关协议。
RIP 是距离向量路由算法的简单实现,该算法在广域网中已经介绍过了。
使用跳数(hop)衡量到达目的节点的距离。
RIP 将节点分为主动的和被动的两类。主动节点向其他节点通告路由,被动节点只接受并更新路由。路由器主动工作,主机被动。主动方式运行 RIP 的路由器 30s 广播一次报文,报文中包含当前路由表的信息。
报文格式
- 命令:指出是请求还是应答。请求报文请求发送路由表,应答报文回应路由表
- 版本号
- 0:历史原因,为了兼容旧协议
- 地址家族标识(AFI):指出网络地址所使用的地址类型
- 路由标记:用于标记自治系统,区分内部和外部路由。
- 网络地址和子网掩码:说明目的网络地址,如果子网掩码全 0,标识子网掩码无效。
- 下一跳路由器地址:到达目的网络经过的下一路由器地址
- 距离:到目的节点经过的跳数,1~15。
RIP最大报文 512 字节,每个路由表项 16 字节,前 4 字节是 RIP 报文头。
路由表会一直保留直到收到性能更好的路由。路由表项会设置定时器,如果定时 180s 内还没有收到新通告,则该路由变为无效路由。
开放式最短路径优先协议
Open Shortest Path First,OSPF 路由协议是一种典型的链路状态路由协议,一般用于同一个 AS 之内路由选择。
在同一个 AS 中,所有的 OSPF 路由器都维护一个相同描述的 AS 结构数据库,存放链路状态信息。
相对 RIP,OSPF优势在于:
- 开放性好
- 支持多种距离衡量尺度
- 支持基于服务类型的路由
- 支持负载均衡
- 支持分层系统
- 增加了适量的安全设施
- 支持隧道技术
链路状态路由算法也在广域网介绍中介绍过了。下面介绍一下实现细节:
OSPF路由层次
根据路由器所连接的物理网络不同,划分网络为:
- 广播多路访问(BMA)
- 点到点(P2P)
- 非广播多路访问(NBMA)
- 点到多点
分层则是将一个 AS 划分为多个区域,区域中有一个是主干区域(backbone),称为区域0。其他所有区域都要和主干区域相连。
因此路由器可以分为:
- 主干路由器:连接主干区域端口(如 Internet )的路由器
- 区域边界路由器(ABR):与多个区域相连的路由器。具有相连的每个区域的网络结构数据,并了解如何广播到骨干区域。
- AS边界路由器(ASBR):AS 内连接 AS 外部的路由器。边界路由器在AS内广播得到的外部路由信息,从而使得每个区域内的路由器都知道外部信息
- 内部路由器:所有直连路由器都在同一个 AS 内部。
广播多路访问网络中,为了避免路由器之间建立完全相邻关系的开支,OSP要求选举一个指派路由器DR,每个路由器都与它建立连接,它负责收集数据链路信息并广播。同时也会选举一个备用指派路由器BDR,在 DR 失效时备用。
OSPF数据包
路由器链路信息数据包:用于描述路由器自身连接的链路或者端口的状态信息。
所有的 OSPF 路由器都会产生这种数据包,只会在区域内路由器广播。
数据报内会标识自身路由器类型,链路信息也会描述链路所连接的网络类型。
网络链路信息数据包:描述该网段上所连接的所有路由器的状态信息。
只有指派路由器产生,只在区域内广播。
总结链路信息数据包:描述一个区域外部的路由信息
由区域边界路由器或 AS 边界路由器产生,只会在区域内广播
AS外部链路状态信息包:描述 AS 外的目的地的路由信息
由 AS 边界路由器产生,在 AS 内除了残域之外的所有区域广播
协议工作流程
OSPF 协议由 Hello 协议、交换协议、扩散协议组成。只介绍 Hello 协议。
Hello 协议工作流程
建立路由器邻接关系
使用 Hello 报文初始化新的相邻关系,并确认路由器之间的通信状态。开启端口 OSPF 时会发送 Hello 报文,之后会周期性发送 Hello 报文。
点对点将直接建立连接。广播多路访问型首先会通过选举确定 DR 和 BDR,选举根据路由器ID和优先级选出。
发现路由器
确认主从关系和连接之后。主从路由器会相互交换部分链路状态信息,并对信息分析比较。路由器如果有新信息,会要求对方发送完整链路状态信息。完成之后,路由器之间建立完全相邻关系,邻接路由器拥有独立、完整链路状态数据库。
选择适当路由器
拥有完整数据库后,采用最短连接路由选择算法计算并创建路由表。
维护路由信息
链路状态发生变化时,路由器会通过广播通告其他路由器。即使没有改变,每 30 分钟也会进行一次更新。
边界网关协议
Border Gateway Protocol,BGP是一种在不同 AS 之间的路由器进行路由信息交换的协议。
BGP系统之间交换网络的可到达信息。包括数据到达必须经过的 AS 及其路径。从而构成一张 AS 的拓扑图。每个 BGP 系统可以根据路由的好坏来制定路由选择的策略。允许自行指定策略。
BGP也是一种距离向量路由协议。在传输层使用 TCP,端口号 179。通信时首先建立 TCP 会话,从而保证 BGP 可靠性,并简化复杂度。
使用增量、触发式的路由更新。节省带宽。
有多种衡量路由路径的路由属性可选,可以更加准确判断最优路径。
IBGP 和 EBGP
建立了 BGP 会话连接的路由器称为对等体。同一个 AS 内部建立的会话连接为 IBGP,AS 之间建立的连接为 EBGP。
虽然 BGP 是 AS 之间路由交换,但 IBGP 存在意义是什么?
IBGP 的作用是维持内部连通性,即使得 BGP 协议可以从 AS 内部传递信息。IBGP 要求不能将来自另一 IBGP 路由器的路由发送给第三方 IBGP 路由器。当 IBGP 收到 EBGP 的更新时,会更新信息并发送到所有 IBGP 和其他 EGBP 对等体上;当 IBGP 收到 IBGP 更新信息时,只会进行处理并转发给 EBGP。
在 AS 中,IBGP 之间建立全连接来保持连通性。AS 内部 BGP 路由器必须发送相同的路由信息给边界的 EGBP。路由信息在经过 IBGP 链路时不会发生变化。
工作流程
有四种消息类型:
- Open 消息:建立 TCP 连接后发送的第一条信息,用于建立 BGP 连接
- Update 消息:用于更新路由信息
- Notification 消息:用于报告协议操作中检测到的差错
- Keepalive 消息:用于验证连接的可用性。建立 BGP 连接的两个邻居路由器间定期互相发送,保持会话不超时
- Open 建立 BGP 会话
- 建立会话后,交换路由信息(所有条目)
- 当出现路由条目改变或者失效时,触发路由更新。如果没有更新,那么定期发送 Keepalive 保持邻居关系
增量:只更新发生变化的条目。
触发式:只在发生变化时才更新路由。