没有人能夺走你的远方
《计算机网络》内容整理:
文章目录
网络层基本概念
- 通过路由选择算法,为分组通过通信子网选择最适当的路径;
- 网络层能够向传输层提供两种类型的接口:虚电路(VC: virtual circuit,早期)和数据报(datagram 或IP数据报)
IP地址
IP地址的基本概念
- 大型的互连网络中需要有一个全局的地址系统,它能够给每一台主机或路由器的网络连接分配一个全局唯一的地址;
- TCP/IP协议的网络层使用的地址标识符叫做IP地址;
- IPv4中IP地址是一个32位的二进制地址;IPv6中IP地址128位
- 网络中的每一个主机或路由器至少有一个IP地址
IP地址演变过程
IP地址结构
分层结构:IP 地址 ::= { <网络号>, <主机号>}
- ABC类地址,网络号字段分别为1个、2个、3个字节长,网络号的最前面有1~3位类别位,其数值分别规定为0,10,110
- ABC类主机号字段分别为3、2、1个字节长
- D类(1110)用于多播
- E类(1111)留作今后使用
- 点分十进制记法(dotted decimal notation)
- 三种类别IP地址的指派范围
- A类中:网络号中第一位固定,还剩七位。可派网络号减2的原因:第一,IP地址中全0表示**“这个(this)”,全0字段是保留地址,意指“本网络”;第二,网络号为127(0111 1111)保留为本地软件环回测试(loopback test)**本主机通信进程之用。当目的地址为环回地址时,该数据报不会发送到任何网络上
- B类中:前两位固定(10),还剩14位。虽然不存在全0和全1的可能性,但128.0.0.0是不指派的,所以减1
- 同样C类中:前3位固定(110),还剩21位;192.0.0.0不指派,网络数减1
- ABC类中:最大主机数减2的原因:第一,全0的主机号表示单个网络地址;第二,全1表示 “所有的(all)” ,表示该网络上所有主机
- 总结一下不可使用的IP地址
- RFC 保留的地址
- 专用或私有地址的地址块:
10.0.0.0 ~ 10.255.255.255;
172.16.0.0 ~ 172.31.255.255;
192.168.0.0 ~ 192.168.255.255 - 这些地址是保留给专用网的,专用地址在机构内部是唯一的,但是在全球范围内则不是唯一的。具有专用地址的IP数据报不能在因特网上传输,它们只能用于内部网中。(见NAT)
- 专用或私有地址的地址块:
IP 地址的一些重要特点
- IP 地址是一种分等级的地址结构
- IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP地址的管理
- 路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间
- 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口
- 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机 (multihomed host)
- 由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址
- 两个路由器直接相连时,在连线两端口的接口处,可以分配也可以不分配IP地址。如果分配,这就是一段只包含一条线路的特殊网络;为了节省IP地址资源,通常不分配。无编号网络(unnumbered network)/ 无名网络(anonymous network)
- 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id
- 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的
子网(subnet)和超网(supernet)
为什么要研究子网和超网
- IP地址空间的利用率有时极低
- 给每一个物理网络分配一个网络号会使路由表变得太大因而网络性能变坏
- 两级IP地址不够灵活
子网的基本概念
- 本单位以外的网络看不见这个网络是由多少子网构成的,这个单位对外仍表现为一个网络
- 子网IP地址是三层结构: IP地址 ::= {<网络号>, <子网号>, <主机号>}net ID-subnet ID-host ID
- 同一个子网中所有的主机必须使用相同的网络号-子网号(netID-subnet ID)
- 子网的概念可以应用于A类、B类或C类中任意一类IP地址中;
- 分配子网是一个组织和单位内部的事,它既不要向Internet地址管理部门申请,也不需要改变任何外部的数据库;
- 在Internet中,一个子网也称为一个IP网络或一个网络
子网掩码(subnet mask)
- 从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。使用子网掩码可以找出IP 地址中的子网部分
- 子网掩码长度 = 32 位;子网掩码左边部分的一连串 1,对应于网络号和子网号;子网掩码右边部分的一连串 0,对应于主机号
- 默认子网掩码
- 掩码运算:按位与
- 不同的子网掩码可能得出相同的网络地址。
但不同的掩码的效果是不同的。
子网地址空间的划分
- 划分子网是在IP地址编址的层次结构中增加了一个中间层次,使IP地址变成了三级层次结构。这实际上是以牺牲主机数目为前提的。
- 如何根据主机的IP地址判断是否属于同一个子网,看它们的网络号与子网地址是不是相同
无类域间路由CIDR技术
- CIDR 最主要的特点
- CIDR 消除了传统的 A 类、B 类和 C 类地址的概念,因而可以更加有效地分配 IPv4 的地址空间。
- CIDR使用各种长度的 “网络前缀”(network-prefix) 来代替分类地址中的网络号和子网号。
- IP地址从三级编址(使用子网掩码)又回到了两级编址。
- 无分类的两级编址
- IP地址 ::= {<网络前缀>, <主机号>}
- “斜线记法”(slash notation):example:128.14.32.0/20
- CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”
- CIDR 地址块
- 128.14.32.0/20 表示的地址块共有 212个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12位)
- 这个地址块的起始地址是 128.14.32.0
- 在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20 地址块”
- 128.14.32.0/20 地址块的最小地址:128.14.32.0;最大地址:128.14.47.255
- 全 0 和全 1 的主机号地址一般不使用
路由聚合(route aggregation)
- 一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。
- 路由聚合也称为构成超网(supernetting)
- 仍然使用“掩码”这一名词(但不叫子网掩码);对于 /20 地址块,它的掩码是 20 个连续的 1。 斜线记法中的数字就是掩码中1的个数
专用IP地址与网络地址转换NAT技术
- 网络地址转换NAT(Network Address Translation) 需要在专用网连接到互联网的路由器上安装NAT软件,它至少有一个有效的外部全球IP地址
- 通过NAT转换表实现
- 显然,通过NAT路由器的通信必须由专用网内的主机发起。这就表明,这种专用网内部的主机不能充当服务器用,因为互联网的客户无法请求专用网内的服务器提供服务
地址解析
IP地址与硬件地址
- 从层次的角度看,物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址(IP地址是用软件实现的)
- 从网络配置看
- 不同层次不同区间的源地址目的地址
网桥和集线器不能改变MAC帧的目的地址和源地址
路由器会改变MAC帧的目的地址和源地址
路由器不改变IP数据报的目的地址和源地址(NAT路由器除外) - 要强调以下几点:
- 在IP层抽象的互联网上只能看见IP数据报
- 路由器只根据目的站的IP地址进行路由选择
- 在局域网的链路层,只能看见MAC帧
- IP层抽象的互联网屏蔽了下层复杂的细节。只要在网络层上讨论问题,就能使用很统一的抽象的IP地址研究主机和主机或路由器之间的通信
地址解析协议 ARP
- 不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
- 每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表
- 当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该MAC 帧发往此硬件地址。
- 查不到主机B的IP地址时(可能B才入网,也有可能A刚加电,高速缓存是空的),需要:
- ARP在本局域网上广播发送一个ARP请求分组(为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入ARP 请求分组。)
- 本局域网上所有主机运行的ARP进程都收到此ARP请求分组
- 主机B的IP地址与ARP请求分组中要查询的IP地址一致,以单播的形式向主机A发送ARP响应分组(当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便了)
- 我们可以注意到,经过一个ARP请求和ARP响应,主机A和主机B的高速缓存上都有了彼此的IP地址和硬件地址
- ARP在本局域网上广播发送一个ARP请求分组(为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入ARP 请求分组。)
- 应当注意:
- ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题;
- 如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做
- 从IP地址到硬件地址的解析是自动进行的,只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址,主机的用户对这种地址解析过程是不知道的
- ARP缓存中对每一个映射项目都设置生存时间,超过生存时间就从高速缓存里剔除掉
- 使用ARP的四种典型情况
- 发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用ARP 找到目的主机的硬件地址。
- 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
- 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成
- 为什么不直接使用硬件地址进行通信
- 由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。
- 连接到因特网的主机都拥有统一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为调用ARP 来寻找某个路由器或主机的硬件地址都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。
IP协议
IP协议的特点
-
网络层只向上提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络层不提供服务质量的承诺
-
IP协议是一种不可靠、无连接的数据报传送服务协议;
-
与IP协议配套使用的还有三个协议:
- 地址解析协议ARP(Address Resolution Protocol)
- 网际控制报文协议ICMP(Internet Control Message Protocol)
- 网际组管理协议IGMP(Internet Group Management Protocol)
对应关系:
虚拟互联网络
- 没有一种单一的网络能够满足所有用户的需求
- 中间设备:
- 物理层:转发器(repeater)
- 数据链路层:网桥 / 桥接器(bridge)
- 网络层:路由器(router)
- 网络层以上:网关(gateway)
(有时会将路由器称为网关,这一点需要注意)
- 由于参与互联的计算机网络都使用相同的网际协议IP,因此可以把互联后的计算机网络看成一个虚拟互联网络(internet),在网络层上看起来是一个统一的网络,可简称为IP网。如果在这种覆盖全球的IP网的上层使用TCP协议,就是现在的互联网(Internet)
- 本网络直接交付,不同网络通过路由器间接交付
- 互联网是由多种异构网络互连组成
IP数据报结构
- 版本:占 4 位,指 IP 协议的版本目前的 IP 协议版本号为 4 (即 IPv4)
- 首部长度:占 4 位,可表示的最大数值15 个单位 (一个单位为 4 字节) 因此 IP 的首部长度的最大值是 60 字节。
- 区分服务:占8位,实际上从未用过
看个一乐
- 总长度:占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为216-1=65535 字节。总长度必须≤最大传送单元 MTU。(通常1500)
虽然尽可能长的IP数据报会使传输效率变高,但数据报短些,路由器转发的速度会更快。因此,IP协议中数据报长度不超过576字节(假定上层交下来数据长度512字节,加上最长IP首部60字节,加上4字节富余量)。当主机发送超过576字节的数据报时,需要分片
总长度是指分片后每一个分片的首部长度与该分片数据部分长度的总和 - 标识(identification) 占 16 位,它是一个计数器,用来产生数据报的标识。相同的标识字段的值使分片后各数据报片最后能正确地重装位原来的数据报
- 标志(flag) 占 3 位,目前只有后两位有意义。
- 标志字段的最低位是 MF (More Fragment)。
MF = 1 表示后面“还有分片”
MF = 0 表示最后一个分片。 - 标志字段中间的一位是 DF (Don’t Fragment)
只有当 DF = 0 时才允许分片
- 标志字段的最低位是 MF (More Fragment)。
- 片偏移(13 位)指出:较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
- 生存时间TTL(Time To Survive):占8位,数据报在网络中传输过程的“寿命”,避免由于路由表错误引起的数据报在网络中循环、无休止地流动
原先的单位是秒,因为现在发展太快了,秒这个单位太大了。于是改成了跳数限制,单位是跳数,路由器每次转发之前,就把跳数减一。当TTL减小到0,就丢弃这个数据报,不再转发。若把TTL的初始值设为1,就表示这个数据报只能在本局域网上传送。 - 协议:占8位,指出此数据报携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。类似MAC帧的“类型”
- 首部检验和(16 位)字段只检验数据报的首部不检验数据部分。
因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移可能发生变化,后两者发生变化的原因是由于链路层的要求,可能会再次(重新)分片)
首部检验和用反码算术运算的方法得到、使用 - 源地址:32位
- 目的地址:32位
- IP 数据报首部的可变部分:
- IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
- 选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。
- 增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销
- 实际上这些选项很少被使用。
IP层转发分组的流程
- 转发(forwarding)是指将分组从一个输入链路接口转移到正确的输出链路端口。
-
在互联网转发分组时,是从一个路由器转发到下一个路由器
-
路由表中,每一条路由对应的最主要的是:(目的网络地址,下一跳地址)
-
我们根据目的网络地址确定下一跳地址:
- IP数据报最终一定可以找到目的主机上所在目的网络上的路由器(可能通过多次间接交付)
- 只有到达最后一个路由时,才试图向目的主机直接交付
-
特定主机路由:
- 这种路由是为特定的目的主机指明一个路由
- 采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由
-
默认路由(default route)
- 路由器还可采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间
- 这种转发方式在一个网络只有很少的对外连接时是很有用的
- 默认路由在主机发送IP数据报时往往更能显示出它的好处
- 如果一个主机连接在一个小网络上,而这个网络只用一个路由器和因特网连接,那么在这种情况下使用默认路由是非常合适的。
- example:只要目的网络不是 N1和 N2,就一律选择默认路由,把数据报先间接交付路由器 R1,让 R1再转发给下一个路由器
-
需注意:
- IP 数据报的首部中没有地方可以用来指明“下一跳路由器的 IP 地址”
- 当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件
- 网络接口软件使用 ARP 负责将下一跳路由器的 IP地址转换成硬件地址,并将此硬件地址放在链路层的 MAC帧的首部,然后根据这个硬件地址找到下一跳路由器
-
使用子网掩码的分组转发过程
- 在划分子网的情况下,从 IP 地址却不能唯一地得出网络地址来,这是因为网络地址取决于那个网络所采用的子网掩码,但数据报的首部并没有提供子网掩码的信息。
- 路由器中保存着各个网络的子网掩码,用各子网掩码与目的地址逐位“与”,比较是否相同
-
最长前缀匹配(longest-prefix matching)
- 在查找路由表时,可能会得到不止一个匹配结果,应当选择匹配结果中最长网络前缀的路由。又称最长匹配,或最佳匹配
- 出现多个匹配的原因是可能某个CIDR数据块想把转发给其中一个子数据块的数据报直接转发过去,而不经过自己的路由器,但又不愿意改变自己使用的IP地址块。因此,在ISP的路由器的路由表中,就增加了子数据块的网络及掩码
- 网络前缀越长,其地址块就越小,因而路由就越具体 (more specific) 。 因此选择最长前缀匹配,它是最准确的
example
-
路由器转发分组算法
- 从收到的分组的首部提取目的 IP 地址 D
- 先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行(3)
- 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行(4)
- 对路由表中的每一行的子网掩码和 D 逐位相“与”,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行(5)。
- 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行(6)。
- 报告转发分组出错
Internet的路由选择协议
一开始学的时候觉得这一块很无聊无不当回事,复习的时候才明白它在网络层中的重要性
路由算法分类
- 全局性还是分步式
- 全局路由算法:用完整的、全局性的网络知识来计算从源到目的之间的最低费用路径。算法以所有节点之间的连通性及所有链路的费用为输入。
- 分布式路由算法:以迭代的、分布式的方式计算出最低费用路径。没有节点拥有关于所有网络链路费用的完整信息,每个节点仅有与其直接相连链路的费用就可工作。
- 静态还是动态
- 静态路由选择策略——即非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。
- 动态路由选择策略——即自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。
分层次的路由选择协议
- 因特网采用分层次的路由选择协议。
- 因特网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需的带宽就会使因特网的通信链路饱和。
- 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到因特网上。
两大类路由选择协议
- 自治系统 AS(Autonomous System):在相同管理控制下的一组路由器(例如由相同的ISP运营或属于相同的公司网络),而这些路由器使用一种 AS 内部的路由选择协议,且拥有彼此之间的信息。同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。
- 内部网关协议 IGP (Interior Gateway Protocol) 即在一个自治系统内部使用的路由选择协议。目前这类路由选择协议使用得最多,如 RIP 和 OSPF 协议。
- 外部网关协议EGP (External Gateway Protocol) 若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议 EGP。在外部网关协议中目前使用最多的是 BGP-4。
内部网关协议:RIP (Routing Information Protocol)
- 工作原理
- RIP 是一种分布式的基于距离向量的路由选择协议。
- RIP 协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。
- “距离” 的定义
- 从一路由器到直接连接的网络的距离定义为 1。
- 从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。
- RIP 协议中的“距离”也称为 “跳数”(hop count) ,因为每经过一个路由器,跳数就加 1
- RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”
- RIP 允许一条路径最多只能包含 15 个路由器。“距离”的最大值为16 时即相当于不可达。可见 RIP 只适用于小型互联网。
- RIP 不能在两个网络之间同时使用多条路由。RIP 选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
- 路由表的建立
- 路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为1)。
- 以后,每一个路由器只和相邻路由器交换并更新路由信息
- 经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址
- RIP 协议的收敛(convergence)过程较快,即在自治系统中所有的结点都得到正确的路由选择信息的过程。
- RIP的工作过程(距离向量算法)
收到相邻路由器(其地址为 X)的一个 RIP 报文:- 先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。
- 对修改后的 RIP 报文中的每一个项目,重复以下步骤:
- 若项目中的目的网络不在路由表中,则把该项目加到路由表中。
- 否则 若下一跳字段给出的路由器地址是同样的,则把收到的项目替换原路由表中的项目。(以最新消息为准)
- 否则 若收到项目中的距离小于路由表中的距离,则进行更新
- 否则,什么也不做。
- 若 3 分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为16(距离为16表示不可达)
- 返回
- RIP的三个要点
- 跟谁交换:仅和相邻路由器交换信息
- 交换什么:交换的信息是当前本路由器所知道的全部信息,即自己的路由表
- 多久交换:按固定的时间间隔交换路由信息,例如,每隔 30 秒
- RIP 协议的优缺点
- RIP 存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。“坏消息传播地慢”
- RIP 协议最大的优点就是实现简单,开销较小
- RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)
- 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。
- RIP报文格式
最短路径优先协议OSPF (Open Shortest Path First)
- 特点:
- “开放”表明 OSPF 协议不是受某一家厂商控制,而是公开发表的。
- “最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法SPF
- OSPF 只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”
- 分布式的链路状态协议
- OSPF三个要点:
- 跟谁交换:向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。
- 交换什么:发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。(代价)
- 多久交换:只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
- 链路状态数据库(link-state database)
- 由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库。
- 这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。
- OSPF 的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF 的更新过程收敛得快是其重要优点。
- OSPF 的 区域(area)
- 为了使 OSPF 能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫作区域。
- 每一个区域都有一个 32 位的区域标识符(用点分十进制表示)。
- 区域也不能太大,在一个区域内的路由器最好不超过 200 个。
- 划分区域:
- 划分区域的好处就是将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。
- 在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。
- OSPF 使用层次结构的区域划分。在上层的区域叫作主干区域(backbone area)。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。
- 主干路由器
- 区域边界路由器
- OSPF 直接用 IP 数据报传送
- OSPF 不用 UDP 而是直接用 IP 数据报传送。
- OSPF 构成的数据报很短。这样做可减少路由信息的通信量。
- 数据报很短的另一好处是可以不必将长的数据报分片传送。分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。
- OSPF 的其他特点
- OSPF 对不同的链路可根据 IP 分组的不同服务类型 TOS 而设置成不同的代价。因此,OSPF 对于不同类型的业务可计算出不同的路由
- 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫作多路径间的负载平衡
- 所有在 OSPF 路由器之间交换的分组都具有鉴别的功能。
- 支持可变长度的子网划分和无分类编址 CIDR。
- 每一个链路状态都带上一个 32 位的序号,序号越 大状态就越新
- OSPF 还规定每隔一段时间,如 30 分钟,要刷新一次数据库中的链路状态
- 由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF 协议要比距离向量协议 RIP 好得多。
- OSPF 没有“坏消息传播得慢”的问题,据统计,其响应网络变化的时间小于 100 ms。
外部网关协议BGP
- BGP 是不同自治系统的路由器之间交换路由信息的协议
- 因特网的规模太大,使得自治系统之间路由选择非常困难。对于自治系统之间的路由选择,要寻找最佳路由是很不现实的
- 当一条路径通过几个不同 AS 时,要想对这样的路径计算出有意义的代价是不太可能的
- 比较合理的做法是在 AS 之间交换“可达性”信息
- 因此,边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
- BGP 发言人(BGP speaker)
- 每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“ BGP 发言人”
- 一般说来,两个 BGP 发言人都是通过一个共享网络连接在一起的,而 BGP 发言人往往就是 BGP 边界路由器,但也可以不是BGP 边界路由器。
- BGP 交换路由信息
- 一个 BGP 发言人与其他自治系统中的 BGP 发言人要交换路由信息,就要先建立 TCP 连接,然后在此连接上交换 BGP 报文以建立 BGP 会话(session),利用 BGP 会话交换路由信息。
- 使用 TCP 连接能提供可靠的服务,也简化了路由选择协议。
- 使用 TCP 连接交换路由信息的两个 BGP 发言人,彼此成为对方的邻站或对等站
- BGP 协议的特点
- BGP 协议交换路由信息的结点数量级是自治系统数的量级,这要比这些自治系统中的网络数少很多。
- 每一个自治系统中 BGP 发言人(或边界路由器)的数目是很少的。这样就使得自治系统之间的路由选择不致过分复杂。
- BGP 支持 CIDR
- 在BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理 开销方面都有好处。
- BGP-4 共使用四种报文
- 打开(OPEN)报文:用来与相邻的另一个BGP发言人建立关系。
- 更新(UPDATE)报文:用来发送某一路由的信息,以及列出要撤消的多条路由。
- 保活(KEEPALIVE)报文:用来确认打开报文和周期性地证实邻站关系。
- 通知(NOTIFICATION)报文:用来发送检测到的差错
- 在 RFC 2918 中增加了 ROUTE-REFRESH 报文,用来请求对等端重新通告
路由器
- 路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。也就是说,将路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。
- 下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。
路由器的结构
- 路由选择部分
- 也叫控制部分,核心是路由选择处理机
- 里面是根据路由选择协议构造的路由表
- 分组转发部分
- 交换结构(switching fabric) 又叫交换组织。它的作用就是根据转发表(forwarding table,其实前面在分组转发时提到的路由表严格意义上来说是这里的转发表)对分组进行处理。交换结构可以看作是“在路由器中的网络”
有三种常用的交换结构:
- 输入端口
- 输出端口
- 交换结构(switching fabric) 又叫交换组织。它的作用就是根据转发表(forwarding table,其实前面在分组转发时提到的路由表严格意义上来说是这里的转发表)对分组进行处理。交换结构可以看作是“在路由器中的网络”
- 路由表与转发表的区别:
- 这就涉及到“路由选择”和“转发”的区别:转发是根据转发表把当前收到的IP数据报找个输出端口发出去,只涉及一个路由器;路由选择是许多路由器协同工作的结果
- 路由表一般仅包含从目的网络到下一跳(IP地址)的映射
- 转发表是由路由表得出的,还要包含目的网络与MAC地址信息的映射
- 转发表的结构应使查找过程最优化,路由表则需对网络拓扑变化的计算最优化
- 路由表是软件实现的,转发表甚至可用特殊的硬件实现
- 在讨论路由选择原理时,我们往往不去区分,而是笼统地用路由表这一名词
输入输出对分组的处理
- 输入端口:数据链路层剥去帧首部和尾部后,将分组送到网络层的队列中排队等待处理。这会产生一定的时延
- 输出端口:当交换结构传送过来的分组先进行缓存。数据链路层处理模块将分组加上链路层的首部和尾部,交给物理层后发送到外部线路。
- 分组丢弃:
- 若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。
- 路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因。
Internet控制报文协议(ICMP)
相关概念
- 为了提高 IP 数据报交付成功的机会,在网络层使用了网际控制报文协议 ICMP
- ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。
- ICMP 不是高层协议,而是 IP 层的协议。
- ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。
- ICMP不能纠正差错,它只报告差错。差错处理需要由高层协议去完成。
- 从技术角度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性。当路由器在处理一个数据包的过程中发生了意外,可以通过ICMP向数据包的源端报告有关事件。在网络安全角度很重要
ICMP报文格式
- ICMP 报文分类
- ICMP 差错报告报文
- ICMP 查询报文(回送请求和回答报文,时间戳请求和回答报文)
- ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的报文类型有关
- ICMP 差错报告报文共有 4 种
- 终点不可达
- 时间超过
- 参数问题
- 改变路由(重定向)(Redirect)
- 内容
- 不应发送 ICMP 差错报告报文的几种情况
- 对 ICMP 差错报告报文不再发送 ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文
- 对具有多播地址的数据报都不发送 ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
- 应用举例:PING (Packet InterNet Groper)
IP多播与Internet组管理协议(IGMP)
IP多播的基本概念
- 在互联网上进行多播就叫做 IP 多播
- 互联网范围的多播要靠路由器来实现,能够运行多播协议的路由器称为多播路由器(multicast router),当然它也可以转发普通的单播IP数据报
- IP 多播所传送的分组需要使用多播 IP 地址,在多播数据报的目的地址写入的是多播组的标识符,多播组的标识符就是 IP 地址中的 D 类地址(多播地址)
- 多播地址只能用于目的地址,不能用于源地址
- 多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员
- 在局域网上进行硬件多播
不需要ARP解析 - 由于多播 IP 地址与以太网硬件地址的映射关系不是唯一的,2^5=32个D类IP地址对应相同的Ethernet多播地址,因此收到多播数据报的主机,还要在 IP 层利用软件进行过滤,把不是本主机要接收的数据报丢弃
Internet组管理协议IGMP
- IGMP用来帮助多播路由器识别加入到一个多播组的成员主机,使用IP数据报传递报文,是IP协议的一个组成部分
- 工作可分为两个阶段:
- 加入多播组:A. 当某个主机加入新的多播组时,该主机应向多播组的多播地址发送 IGMP 报文,声明自己要成为该组的成员;B. 本地的多播路由器收到 IGMP 报文后,将组成员关系转发给互联网上的其他多播路由器
- 探询组成员变化情况:A. 因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员;B. 只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的;C. 但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器
- 由IGMP的工作过程我们可以看到:
- IGMP并非在互联网范围内对所有多播组员进行管理的协议。IGMP不知道IP多播组包含的成员数,也不知道这些成员都分布在哪些网络上等等
- IGMP协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是某台主机的进程)参加或退出了某个组
- 因此,仅有IGMP是不能完成多播任务的,这就需要配合使用多播路由选择协议。
多播路由器与IP多播中的隧道技术
- 多播转发必须动态地适应多播组成员的变化(此时网络拓扑并未发生变化)
- 多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络
- 多播路由器的作用是完成多播数据报的转发工作
- 实现方法:一种是专用多播路由器,一种是在传统路由器上实现多播路由的功能
- 当IP多播分组在传输的过程中遇到有不支持多播协议的路由器或网络时,就要采用隧道(tunneling)技术
隧道技术我们在讲IPv6的时候也会提到
IPv6
- 32 位的 IP 地址不够用,要解决 IP 地址耗尽的措施:
- 采用无类别编址 CIDR,使 IP 地址的分配更加合理
- 采用网络地址转换 NAT 方法以节省全球 IP 地址
- 采用具有更大地址空间的新版本的 IP 协议 IPv6
IPv6地址表示方法
- IPv6的128位地址 — 冒号十六进制(colon hexadecimal)表示法
- 按每16位划分为一个位段
- 每个位段被转换为一个4位的十六进制数,并用冒号“:”隔开
- 冒号十六进制记法
- 68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF
- 零压缩(zero compression),即一连串连续的零可以为一对冒号所取代。FF05:0:0:0:0:0:0:B3 可以写成:FF05::B3
注意,这里在一个地址中,只能零压缩一次,不然会引起歧义 - CIDR 的斜线表示法仍然可用。60 位的前缀 12AB00000000CD3 可记为:12AB:0000:0000:CD30:0000:0000:0000:0000/60或12AB:0:0:CD30::/60
IPv6 的基本首部
- IPv6 仍支持无连接的传送,所引进的主要变化如下:
- 更大的地址空间:32 - > 128;扩展的地址层次结构
- 简单高效的40字节首部,称为基本首部(base header)
- 流标签与优先级
- 将不必要的功能取消了,首部的字段数减少到只有 8 个
- 取消了首部的检验和字段,加快了路由器处理数据报的速度(数据链路层中,检测到有差错就丢弃;在传输层,UDP检测到有差错就丢弃,TCP检测到有差错就重传,此处可以精简)
这显然是以硬件技术提升为保障的,不然将错误的报文传播会消耗网络资源 - 在基本首部的后面允许有零个或多个扩展首部(extension header扩展首部不属于IPv6数据报的首部
- 所有的扩展首部和数据合起来叫做数据报的有效载荷(payload) 或 净负荷
- 允许协议继续扩充
- 支持即插即用(自动配置)
- 支持资源预分配
- 首部改为8字节对齐(原来是4字节)
- 版本(version)—— 4 位。它指明了协议的版本,对 IPv6 该字段总是 6
- 通信量类(traffic class)—— 8 位。这是为了区分不同的 IPv6 数据报的类别或优先级。目前正在进行不同的通信量类性能的实验
- 流标号(flow label)—— 20 位。 “流”是互联网络上从特定源点到特定终点的一系列数据报, “流”所经过的路径上的路由器都保证指明的服务质量。
所有属于同一个流的数据报都具有同样的流标号。
针对实时音频 / 视频数据 - 有效载荷长度(payload length)—— 16 位。它指明 IPv6 数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是 64 KB
- 下一个首部(next header)—— 8 位。它相当于 IPv4 的协议字段或可选字段
- 没有扩展首部时,相当于IPv4 的协议字段
- 出现扩展首部时,标志第一个扩展首部的类型
- 跳数限制(hop limit)—— 8 位。源站在数据报发出时即设定跳数限制。路由器在转发数据报时将跳数限制字段中的值减1。当跳数限制的值为零时,就要将此数据报丢弃
- 源地址:128位
- 目的地址:128位
- 对比
IPv6 的扩展首部
- IPv6 把原来 IPv4 首部中选项的功能都放在扩展首部中,并将扩展首部留给路径两端的源站和目的站的主机来处理;另一方面,数据报途中经过的路由器都不处理这些扩展首部(只有一个首部例外,即逐跳选项扩展首部),这样就大大提高了路由器的处理效率
- 六种扩展首部:
- 逐跳选项
- 路由选择
- 分片
- 鉴别
- 封装安全有效载荷
- 目的站选项
- 分片扩展首部举例
IPv6 把分片限制为由源站来完成。源站可以采用保证的最小 MTU(1280字节),或者在发送数据前完成路径最大传送单元发现(Path MTU Discovery),以确定沿着该路径到目的站的最小MTU。
IPv4到IPv6的过渡
-
双协议栈栈 (dual stack)
- 是指在完全过渡到 IPv6 之前,使一部分主机(或路由器)装有两个协议栈,一个 IPv4 和一个 IPv6
- 双协议栈的主机(或路由器)记为 IPv6/IPv4,表明它同时具有两种 IP 地址:一个 IPv6 地址和一个 IPv4 地址
- 双协议栈主机在和 IPv6 主机通信时是采用 IPv6 地址,而和 IPv4主机通信时就采用 IPv4 地址
- 根据 DNS 返回的地址类型可以确定使用 IPv4 地址还是 IPv6 地址
-
隧道技术
- 以上内容均为复习所用,不妥删