计网-谢希仁-第四章 网络层 读书笔记
本章重点
- 虚拟互连网络的概念.
- IP 地址与物理地址的区别.
- 传统的分类的 IP 地址 (包括子网掩码) 和无分类域间路由选择 CIDR.
- 路由选择协议的工作原理
4.1 网络层提供的两种服务
互联网采用的设计思路是这样的 : 网络层向上只提供简单灵活的, 无连接的, 尽最大努力交付的数据报服务.
网络在发送分组时不需要先建立连接. 每一个分组 (也就是 IP 数据报) 独立发送, 与其前后的分组无关 (不进行编号). 网络层不提供服务质量的承诺. 也就是说, 所传送的分组可能出错, 丢失, 重复和失序 (即不按序列到达终点), 当然也不保证分组交付的时限. 由于传输网络不提供端到端的可靠传输服务, 这就使网络中的路由器比较简单, 且价格低廉. 如果主机 (即端系统) 中的进程之间的通信需要可靠传输, 那么就由网络的主机中传输层负责 (包括差错处理, 流量控制).
如图给出了网络提供数据报服务的示意图. 传输过程可能丢失.
4.2 网际协议 IP
网际协议 IP 是 TCP/IP 体系中最重要的两个协议之一, 也是最重要的互联网标准协议之一.
与 IP 协议配套使用的还有三个协议 :
- 地址解析协议 APP
- 网际控制报文协议 ICMP
- 网际组管理协议 IGMP
如图画出了这三个协议和网际协议 IP 关系. 在这一层中, ARP 画在最下面, 因为 IP 经常要使用这个协议. ICMP 和 IGMP 画在这一层的上部, 因为它们要使用 IP 协议.
4.2. 1 虚拟互连网络
因为用户的需求多种多样, 没有一种单一的网络能够适应所有用户的需求.
在市场上总有很多性能不一, 不同网络协议的网络, 供不同的用户选用.
将网络互连连接起来要使用一些中间设备. 根据中间设备所在的层次, 可以有以下四种不同的中间设备 :
- 物理层使用的中间设备为转发器.
- 数据链路层使用的中间设备叫做网桥或桥接器.
- 网络层使用的中间设备叫做路由器.
- 在网络层以上使用的中间设备叫做网关. 用网关连接两个不兼容的系统需要在高层进行协议的转换.
当中间设备是转发器或网桥时, 这仅仅是把一个网络扩大了, 而从网络层的角度看, 这仍然是一个网络, 一般并不称为网络互连.
图 a 中表示许多计算机网络通过一些路由器进行互连. 由于参加互连的计算机网络都是用相同的网际协议 IP, 因此可以把互连以后的计算机网络看成如图 b 所示的一个虚拟互连网络, 所谓虚拟互连网也就是逻辑互连网络, 它的意思就是互连起来的各种物理网络的异构性本来是客观存在的, 但是我们利用 IP 协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络. 这种使用 IP 协议的虚拟互连网络可简称为 IP 网. 使用 IP 网的好处是 : 当 IP 网上的主机进行通信时, 就好像在一个单一的网络上通信一样, 它们看不见互连的各网络的具体异构细节 (如具体的编址方案, 路由选择协议, 等等). 如果在这种覆盖全球的 IP 网上上层使用 TCP 协议, 那么就是现在的互联网Internet
.
互联网可以由多种异构网络互连组成, 当很多异构网络通过路由器互连起来时, 如果所有的网络都可以使用相同的 IP 协议, 那么在网络层讨论问题就显得很方便.
4.2.2 分类的 IP 地址
1. IP 地址及其表示方法
整个互联网就是一个单一的, 抽象的网络.
IP 地址就是给互联网上的每一台主机 (或路由器) 的每一个接口分配一个在全世界范围内唯一的 32 位的标识符. IP 地址的结构很方便进行寻址, IP 地址现在由互联网名字和数字分配机构 ICANN分配.
IP 地址的编制方式经过了三个历史阶段.
- 分类的 IP 地址. 最基本的编制方式.
- 子网的划分. 对最基本编制方式的改进.
- 构成超网.
所谓 "分类的 IP 地址" 就是将 IP 地址划分位若干个固定类, 每一个类地址都由两个固定长度的字段组成, 其实一个字段是网络号 (net-id), 它标志主机 (或路由器) 所连接到的网络. 一个网络号在整个互联网范围内必须是唯一的. 第二个字段是主机号 (host-id), 它标志该主机 (或路由器). 一台主机号在它前面的网络号所指明的网络范围内必须是唯一的. 由此可见, 一个 IP 地址在整个互联网范围内是唯一的.
这种两级的 IP 地址可以记位 :
$ IP地址 ::={<网络号>,<主机号>}$
如图给出了各种 IP 地址的网络号字段和主机号字段, 这里 A 类, B 类, C 类地址都是单播地址.
- A 类, B 类和 C 类地址的网络号字段 (图中灰色部分) 分别为 1 个, 2 个, 3 个字节长, 而在网络号字段的最前面有 1~3 位的类别位, 其数值分别规定位 0, 10 和 110.
- A 类, B 类和 C 类地址的主机号字段分别为 3 个, 2 个和 1 个字节长.
- D 类地址 (前 4 为是1110) 用于多播 (一对多通信).
- E 类地址 (前 4 为1111) 保留为以后用.
由于近年来已经广泛使用无分类的 IP 地址进行路由选择, A 类, B 类和 C 类地址的区分已经成为历史.
从 IP 地址的结构来看, IP 地址并不仅仅指明一台主机, 而是还指明了主机所连接到的网络.
划分为 ABC, 当初是这样考虑的. 各种网络的差异很大, 有的网络拥有很多主机, 而有的网络上的主机则很少. 把 IP 地址划分为 A类, B类和 C类是为了更好地满足不同用户的要求. 当某个单位申请到一个 IP 地址时, 实际上获得了具有同样网络号的一块地址. 其中具体的各台主机号则由该单位自行分配, 只要做到了在该单位管辖的范围内无重复的主机号即可.
点分十进制 : IP 地址都是 32 位的二进制代码, 把 32 位的 IP 地址中的每 8 位插入一个空格 (机器中没有空格的). 并化为十进制.
2. 常用的三种类别 IP 地址
A 类地址网络号占 1个字节, 只有 7 位可供使用 (第一位固化为 0), 但可指派的网络号为 \(2^7-2\) 个. 减 2 的原因 :
- 全\(0\)表示的 IP 地址是个保留地址, 意思是 "本网络".
- 网络号为 127 (01111111) 保留作为本地软件环回测试本主机的进程之间的通信之用. 若主机发送一个目的地址为环回地址的 IP 数据报, 则本主机中的协议软件就处理数据报中的数据, 而不会把数据报发送到任何网络.
A 类地址的主机号占 3 个字节, 因此每一个 A 类网络中的最大主机数是 \(2^{24}-2\), 这里减 2 的原因是 :
- 全 0 的主机号字段表示该 IP 地址是 "本主机" 所连接到的单个网络地址, (例如, 一主机 IP 地址为 5.6.7.8, 则该主机所在的网络地址就是 5.0.0.0).
- 全 1 的主机号字段表示该网络上的所有主机.
B 类地址的网络号字段有 2 个字节, 但前面两位 (1 0) 已经固化, 因此不存在减 2 的问题, 剩下的 14 位可以自由分配. 可以分配的主机号为 \(2^{16}-2\).
C 类地址有 3 个字节的网络号字段, 最前面的 3 位是 (1 1 0), 还有 21 位可以进行分配. 其中 192.0.0.0 是不指派的, 因此 C 类地址可指派的网络总数 \(2^{21}-1\), C 类地址最大主机数 \(2^8-2\).
IP 地址具有以下特点 :
- 每个 IP 地址由网络号和主机号组成.
- 实际上 IP 地址是标志一台主机 (或路由器) 和一条链路的接口. 当一台主机同时连接到两个网络上, 该主机就必须同时具有两个相应的 IP 地址, 其地址必须是不同的. 这种主机称为多归属主机. 由于一个路由器至少应当连接到两个网络, 因此一个路由器至少应当有两个不同 IP 地址.
- 按照互联网的观点, 一个网络是指具有两个相同网络号 net-id 的主机的集合, 因此, 用转发器或网桥连接起来的若干个局域网仍为一个网络, 因此这些局域网都具有同样的网络号. 具有不同网络号的局域网必须使用路由器进行互连.
- 在 IP 地址中, 所有分配到网络号的网络都是平等的. 所谓平等, 是指互联网同等对待每一个 IP 地址.
如图有三个局域网 (\(LAN_1,LAN_2,LAN_3\)) 通过三个路由器 (\(R_1, R_2, R_3\)) 互连起来所构成的一个互联网. 其中局域网 \(LAB_2\) 是由两个网段通过网桥 B 互连的.
注意 :
- 在同一个局域网的主机或路由器的 IP 地址中网络号必须是一样的.
- 用网桥 (它工作在链路层) 互连的网段仍然是一个局域网, 只能有一个网络号.
- 路由器总是具有两个或两个以上的 IP 地址. 即路由器的每一个接口都有一个不同网络号的 IP 地址.
- 当两个路由器直接相连时, 在连线的两端接口可以分配不同的 IP 地址. 如图中的 \(N_1,N_2,N_3\).
4.2.3 IP 地址与硬件地址
在学习 IP 地址时, 很重要的一点就是要弄懂主机 IP 地址与硬件地址的区别.
如图说明了两种地址区别. 从层次上看 : 物理地址数据链路层和物理层使用的地址, 而 IP 地址是网络层和以上各层使用的地址, 是一种逻辑地址 (称 IP 地址为逻辑地址是因为 IP 地址是用软件实现的).
在发送数据时, 数据会从高层下到底层, 然后才到通信链路上传输. 使用 IP 地址的 IP 数据报一旦交给了数据链路层, 就被封装成了 MAC 帧了. MAC 帧在传送时使用的源地址和目的地址都是硬件地址. 这两个硬件地址都写在 MAC 帧的首部中.
连接在通信链路上的设备 (主机或路由器) 在收到 MAC 帧时, 根据 MAC 帧首部中的硬件地址决定收下或丢弃. 只有在剥去 MAC 帧首部和尾部后把 MAC 帧的数据上交给网络层后, 网络层才能在 IP 数据报的首部找到源 IP 地址和目的 IP 地址.
总之, IP 地址放在 IP 数据报的首部, 而硬件地址则放在 MAC 帧的首部.
如图为主机 H1 与主机 H2 通信过程.
注意 :
- 在 IP 层抽象的互联网上只能看到 IP 数据报. 虽然 IP 数据报要经过路由器 \(R_1\) 和 \(R_2\) 的两次转发, 但在它的首部中的源地址和目的地址始终分别是 \(IP_1\) 和 \(IP_2\).
- 虽然 IP 数据报首部有源站 IP 地址, 但路由器只根据目的地址的网络号进行路由选择.
- 在局域网的链路层, 只能看见 MAC 帧. IP 数据报被封装在 MAC 帧中. MAC 帧在不同网络上传送时, 其 MAC 帧首部中源地址和目的地址要发生变化.
- 尽管互连在一起的网络的硬件地址体系各不相同, 但 IP 层抽象的互联网却屏蔽了下层这些很复杂的细节. 只要我们在网络层上讨论问题, 就能使用统一的, 抽象的 IP 地址研究主机或路由器之间的通信.
4.2.4 地址解析协议 ARP
ARP 协议的用途是为了从网络层使用的 IP 地址解析出数据链路层使用的硬件地址.
网络层使用的是 IP 地址, 但在实际网络的链路上传送数据帧时, 最终还是必须使用该网络的硬件地址.
IP 地址和下面的网络的硬件地址由于格式不同而不存在简单的映射关系. 此外, 一个网络经常会有的新的主机加入, 或撤走一些主机. 更换网络适配器也会使主机的硬件地址改变.
地址解析协议 ARP 解决这些问题的方法是在主机 ARP 高速缓存中存放一个从 IP 地址到硬件地址的映射表, 并且这个映射表还经常动态更新.
每一台主机都有一个 ARP 高速缓存 (ARP cache), 里面有本局域网上各主机和路由器的 IP 地址到硬件地址的映射表, 这是该主机目前的已知.
现在来看主机 A 要向本局域网上某台主机 B 发生 IP 数据报的流程.
若 A 的 ARP 高速缓存中有 B 的 IP 地址, 则就在 ARP 高速缓存中找到对应的硬件地址, 再把这个硬件地址写入 MAC 帧中, 然后通过局域网把该 MAC 帧发送此硬件地址.
若找不到, 就执行以下步骤 :
- ARP 进程在本局域网上广播发送一个 ARP 请求分组.
- 在本局域网上所有主机运行的ARP 进程都收到此 ARP 请求分组.
- 主机 B 的 IP 地址与 ARP 请求分组中要查询的 IP 地址一致, 就收下这个分组, 并向 A 发送 ARP 相应分组, 同时在 ARP 相应分组中写入自已的硬件地址. 其他主机则丢弃 A 发出的分组. 注意 : 虽然 ARP 请求分组是广播发送的, 但 ARP 相应分组是普通的单播 (一对一).
- 主机 A 收到 B 的 ARP 相应分组后, 就在其 ARP 高速缓存中写入主机 B 的 IP 地址到硬件地址的映射.
ARP 对保存在高速缓存中的每一个映射地址项目都设置生存时间, 凡超过生存时间的项目就从高速缓冲中删除掉.
ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题, 如果不在同一个局域网, 就需要路由器跳转.
从 IP 地址到硬件地址的解析是自动进行的, 主机的用户对这种地址解析过程是不知道的. 只要主机或路由器要于本网络上另一个已知 IP 地址的主机或路由器进行通信, ARP 协议就会自动把这各 IP 地址解析为链路层需要的硬件地址.
既然在网络链路上传送的帧最终是按照硬件地址找到目的主机, 那么为什么要使用抽象的 IP 地址, 而不直接使用硬件地址通信 ?
全世界有各种各样的网络, 它们使用不同的硬件地址, 要使这些异构网络通信必须进行非常复杂的硬件地址转换工作, 而 IP 编址解决了这个问题, 每个主机只要各自拥有一个唯一的 IP 地址, 就可以像在同一个网络中通信.
调用 ARP 的复杂过程都是由计算机软件自动进行的, 用户是看不见的.
4.2.5 IP 数据报的格式
在 TCP/IP 标准中, 各种数据格式常常以 32 位 (4 字节) 来描述.
一个 IP 数据报由首部和数据两部分组成. 首部的前一部分是固定长度, 共 20 字节, 是所有数据报必有的, 后面是可选字段. 其长度可变.
1. IP 数据据报首部的固定部分各字段
- 版本, 占 4 位, 目前位 IPV4, 以后会使用 IPV6
- 首部长度, 占 4 位, 可表示的最大十进制数值为 15. 首位长度字段所表示数的单位是 32 位字 (1 个32 位字是 4 字节, 也就是最多表示 4 * 15 = 60 字节). 因为 IP 首部的固定长度是 20 字节, 因此首都长度字段的最小值是 5.
- 区分服务, 占 8 位. 一般不用.
- 总长度, 总长度指首部和数据之和的长度, 单位为字节, 占 16 位, 因此数据报的最大长度为 \(2^{16} -1=65535\) 字节.
- 标识, 占 16 位, IP 软件在存储器中维持一个计数器, 每产生一个数据报, 计数器就加 1, 并将此值赋给标识字段.
- 标志, 占 3 位, 目前只有 2 位有意义.
- 标志字段中的最低位记位 MF. MF = 1 即表示后面 "还有分片" 的数据报. MF = 0 表示这已是若干数据报片中的最后一个.
- 标志字段中间的一位记为 DF, 意思是 "不能分片". 只有 DF = 0 时才允许分片.
- 片偏移, 占 13 位. 片偏移指出 : 较长的分组在分片后, 某片在原分组中的相对位置.
- 生存时间 (TTL) 占 8 位, 表明数据报在网络中的寿命. TTL 的单位是跳数, 意思是指明数据报在互联网中至多可经过多少个路由器. 最大跳数为 255.
- 协议, 占 8 位, 协议字段指出此数据报携带的数据是使用何种协议, 以便使目的主机的 IP 层知道应将数据部分交给哪个协议处理.
- 首部检验和, 占 16 位, 这个字段只检验数据报的首部, 但不包括数据部分. 检验是否有差错.
- 源地址 32 位
- 目的地址 32 位
2. IP数据报首部的可变部分
一般不用.
4.2.6 IP 层转发分组的流程
路由表指出某个网络应如何转发 (而不是具体的主机), 每一行对应一个网络.
每一条路由最主要的是以下两个信息 :
我们根据目的网络地址来确定下一跳路由器, 可以得出以下结果.
- IP 数据报最终一定可以找到目的主机所在的目的网络上的路由器 (也许需要多次间接交付).
- 只有到达最后一个路由器时, 才试图向目的主机进行直接交付.
特定主机路由 : 互联网的所有分组转发都是基于目的主机所在的网络, 但可以对特定目的主机指明一个路由.
默认路由 : 这种方式可以减小路由表所占用的空间和搜索路由表所用的时间.
如图, 本网络 N1 直接交付, 到 N2 下一跳路由器是 R2, 其他情况直接选择默认路由到 R1.
IP 数据报首部并不指明下一跳路由器的 IP 地址, 如何找到下一跳路由器 ?
当路由器收到数据报, 从路由表得出下一跳路由器 IP 地址后, 不是把这个地址填入 IP 数据报, 而是送交数据链路层的网路接口软件. 网络接口软件负责把下一跳的路由器的 IP 地址转换成硬件地址 (必须使用 ARP), 并将此硬件地址放在链路层的 MAC 帧的首部, 根据这个找到下一跳的路由器.
分组算法全过程 :
- 从数据报首部得到目的主机 IP 地址 D, 得出目的网络地址 N.
- 若 N 在本网络, 则直接交付, 否则执行 (3).
- 若路由表有 D 的特定主机路由, 则把数据报转发给指明的路由器. 否则执行 (4).
- 若路由表中有到达网络 N 的路由, 则把数据报传送给路由表中所指明的下一跳路由器, 否则, 执行 (5).
- 若路由表中有默认路由, 则把数据报交给默认路由指明的路由器, 否则, 执行 (6).
- 报告转发分组出错.
4. 3 划分子网和构造超网
4.3.1 划分子网
1. 从两级 IP 地址到三级 IP 地址
划分子网基本思路 :
- 一个拥有许多物理网络的单位, 可将其所属的物理网络划分成若干个子网, 划分子网外部不可见.
- 划分子网的方法是从网络的主机号借用若干位作为子网号 : $$IP地址::={<网络号>,<子网号>,<主机号>}$$, 三级 IP 地址.
- 凡是从其他网络发送给本单位某台主机的 IP 数据报, 仍然是根据 IP 数据报的目的网络号找到连接在本单位网络上的路由器. 但此路由器在收到 IP 数据报后, 再按目的网络号和子网号找到目的子网, 把 IP 数据报交付目的主机.
网络 145.13.0.0 上的路由器 R1 收到外来数据报后, 再根据数据报的目的地址把它转发到相应的子网.
2. 子网掩码
假定有一个数据报 (目的地址 145.13.3.10) 已经到达了路由器 R1, 那么这个路由器如何把它转发到子网 145.13.3.0 ?
从 IP 数据报无法看出源主机或目的主机所连接的网络是否进行了子网划分, 于是就要使用子网掩码.
如图, 子网号为 3 的网络的网络地址是 145.13.3.0 (既不是原来的两级 IP 地址的网络地址 145.13.0.0, 也不是简单的子网号 3). 这时使用三级 IP 地址的子网掩码.
把三级 IP 地址的子网掩码和收到的数据报的目的地震仪 IP 地址 145.13.3.10 做 AND 操作找到子网的网络地址 145.13.3.0.
互联网标准规定 : 所有的网络都必须有子网掩码, 如果不划分子网, 就使用默认子网掩码, 默认子网掩码中 1 的位置和 IP 地址中网络号字段 net-id 正好对应.
子网掩码是一个网络或一个子网的重要属性. 路由器在和路由器交换路由信息时, 必须把自已所在网络 (或子网) 的子网掩码告诉相邻的路由器. 路由表中的每一个项目, 除了目的网络地址外, 还要给出该网络的子网掩码.
划分子网增加了灵活性, 但却减少了能够连接在网络上的主机总数.
4.3.2 使用子网时分组的转发
在子网划分后, 路由表必须包含以下三项内容 : 目的网络地址, 子网掩码, 和下一跳地址.
在划分子网的情况下, 路由器转发分组算法如下 :
- 从收到数据报的首部提取目的 IP 地址 D.
- 判断是否直接交付. 对路由器直接相连的网络逐个检查 : 用各网络的子网掩码和 D 做与操作, 看结果是否与对应的网络地址匹配, 若匹配, 直接交付(先把 D 转换成物理地址, 把数据报封装成帧发送出去). 否则就是间接交付. 执行 (3).
- 若路由表中有目的地址为 D 的特定主机路由, 则把数据报传送给路由表中所指明的下一跳路由器, 否则, 执行 (4).
- 对路由表中每一行 (目的网络地址, 子网掩码, 下一跳地址), 用其中的子网掩码和 D 做 AND 操作, 其结果为 N. 若 N 与该行的目的网络地址匹配, 则把数据报传送给指明的下一跳路由器, 否则, 执行 (5).
- 若有默认路由, 则把数据报发送给默认指定路由器. 否则, 执行 (6).
- 报告转发分组出错.
4.4.3 无分类的编址 CIDR (构造超网)
1. 网络前缀
CIDR 最主要的两个特点 :
- CIDP 消除了传统的 A 类, B 类, C 类地址及其划分子网概念. \(IP地址::={<网络前缀>,<主机号>}\)
- CIDR 把网络前缀都相同的连续的 IP 地址组成一个 "CIDR 地址块", 例如, 已知 IP 地址 128.14.35.7/20 是某 CIDR 地址块中的一个地址, 现在把它写成二进制形式, 前 20 位为网络前缀.
128.14.35.7/20 = 10000000 00001110 00100011 0000011
CIDR 使用 32 位的地址掩码, 也就是它的子网掩码, /20 地址块的子网掩码就是 20 个连续的 1. 斜线记法中, 斜线后面的数字就是地址掩码中 1 的 个数.
2. 最长前缀匹配
查找路由表可能有多个多个匹配结果, 这时需要从匹配结果中选择具有最长的网络前缀的路由.
3. 使用二叉线索查找路由表
为了简化二叉线索的结构, 可以找出对应每一个 IP 地址的唯一前缀.
4.4 网际控制报文协议 ICMP
为了更有效转发 IP 数据报和提高交付成功的机会, 在网际网使用了网际控制报文协议 ICMP. ICMP 允许主机或路由器报告差错情况和提高有关异常情况的报告.
ICMP 装在 IP 数据报中, 作为其中的数据部分.
4.4.1 ICMP 报文的种类
ICMP 报文种类有两种, 即 ICMP 差错报告报文 和 ICMP 询问报文.
ICMP 差错报文有 4 种 :
- 终点不可达.
- 时间超过.
- 参数问题.
- 改变路由 (重定向).
所有 ICMP 差错报告报文中的数据字段都具有同样的格式. 把收到的需要进行差错报告 IP 数据报的首部和数据字段的前 8 个字节提取出来, 作为 ICMP 报文的数据字段. 再加上相应的 ICMP 差错报告报文的前 8 个字节, 就构成了 ICMP 差错报告报文.
下面是不应发送 ICMP 差错报告报文的几种情况 :
- 对 ICMP 差错报告报文, 不再发送 ICMP 差错报告报文.
- 对第一个分片的数据报文的所有后续数据报片, 都不发送 ICMP 差错报告报文.
- 对具有多播地址的数据报, 都不发送 ICMP 差错报告报文.
- 对具有特殊地址 (如 127.0.0.0 或 0.0.0.0) 的数据报, 不发送 ICMP 差错报文.
常见的 ICMP 询问报文有两种, 即 :
- 回送请求和回答.
- 时间戳请求和回答.
4.4.2 ICMP 的应用
- ping 命令.
- traceroute (windows : tracert).
4.5 互联网的路由选择协议
4.5.1 路由器选择协议的几个概念
1.理想的路由算法
2. 分层次的路由选择协议
互联网采用分层次的路由选择协议. 可以把互联网分成许多比较小的自治系统, ISP 就是一个自治系统, 路由选择分为两大类 :
- 内部网关协议 IGP : 自治系统内部使用的路由协议, 主要有 RIP 与 OSPF.
- 外部网关协议 EGP : 跨越自治系统的边界使用, 主要为 EGP.
4.5.2 内部网关协议 RIP
RIP 是一种分布式基于距离向量得到路由选择协议. 基于 Bellman - Ford 算法.
4.5.3 内部网关协议 OSPF
特点 : 所有的路由器都建立一个链路状态数据库, 其实就是全网的拓扑图, 基于 DIjkstar 算法.
4.5.4 外部网关协议 BGP
4.5.5 路由器的构成
路由器是一种具有多个输入端口和多个输出端口的专用计算机, 其任务是分组转发.
由三部分组成 : 交换结构, 输入端口, 输出端口.
4.6 IPv6
IPV6 数据报由两大部分组成 : 基本首部, 有效载荷. 有效载荷也被称为净负荷, 它允许有零个或多个扩展首部, 再后面是数据部分. 如图.
以下为各字段 :
- 版本 : 占 4 位, 该字段为 6.
- 通信量类 : 占 8 位, 为了区分数据报的类别或优先级.
- 流标号 : 占 20 位.
- 有效载荷长度 : 占 16 位, 指明数据报除了基本首部外的字节数, 最大位 64 KB (65536 字节).
- 下一个首部 : 占 8 位. 它相当于 IPv4 数据报的协议字段或可选字段.
- 跳数限制 : 占 8 位.
- 源地址.
- 目的地址.
扩展首部 : 其实很多选项在途中路由器是不需要处理的, IPv6 将原来 IPv4 首部的选项功能放在扩展首部, 并把扩展首部留在路径两端的源点和终点来处理, 而数据报途中的经过的路由器都不处理这些扩展首部, 这样就大大提高了路由器的处理效率.
4.6.2 IPv6 的地址
一个 IPv6 数据报的目的地址可分为三类 :
- 单播.
- 多播.
- 任播.
IPv6 把实现 IPv6 的主机和路由器均称为结点. 一个结点可以使用多条链路与其他的链路相连, IPv6 给结点的每一个接口指派一个 IP 地址.
IPv6 使用 冒号十六进制法, 如 68E6 : 8C64 : FFFF : FFFF : 0 : 1180 : 960A : FFFF
它允许零压缩 :
FF05 : 0 : 0 : 0 : 0 : 0 : 0 :B3
可压缩为 :
FF05 :: B3
.
零压缩只能使用一次.
4.6.3 从 IPv4 到 IPv6 过渡
1. 双协议栈
2.隧道技术
4.6.4 ICMPv6
与 IPv4 一样, IPv6 也不保证数据报的可靠交付, 因此 IPv6 也需要 ICMP 来反馈差错信息.
地址解析协议 ARP 和 网际组管理协议 IGMP 的功能都已经被合并到 ICMPv6 中.
4.7 IP 多播
与单播一样, 在一对多的通信时, 多播可大大节约网络资源.
在互联网上进行的多播叫做IP多播, IP 多播需要使用多播 IP 地址.
多播组的标识符就是 IP 地址中的 D 类地址. 多播数据报与一般的 IP 数据报的区别就是它使用 D 类地址并且首部的协议字段值为 2, 表明使用网际组管理协议 ICMP.
IP 多播可以分为两种, 一种是只能在本局域网上进行硬件多播, 另一种则是在互联网的范围进行多播.
4.7.2 在局域网上进行硬件多播
多播 IP 地址与以太网硬件地址的映射不是唯一的, 还要在 IP 层用软件进行过滤.
4.7.3 网际组管理协议 ICMP 和 多播路由选择协议
1. IP 多播需要两种协议
图中是互联网上传送多播数据报的例子, 有四台主机参与了多播组, 其组地址为 226.15.37.123
, 多播数据报不该传送给 \(R_4\), 这需要用到网际组管理协议 ICMP.
本图强调了 IGMP 的本地使用范围. IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机 (严格讲, 是主机上的某个进程) 参加或退出了某个多播组.
仅有 IGMP 不能实现多播, 连接在局域网上的多播路由器还需要和互联网上的其他多播器协同工作. 这里需要用到多播路由选择协议.
2. 网际管理协议 IGMP
IGMP 的工作有两个阶段 :
- 当某台主机加入新的多播组, 该主机向多播组的多播地址发送一个 IGMP 报文, 表明自已加入. 本地的多播路由器收到后, 还要将组成员关系转发给互联网上的其他多播路由器 (通过多播路由选择协议).
- 组成员关系是动态的, 多次探询仍没有一台主机相应, 就认为本网络上的主机都离开这个组,
3. 多播路由选择协议
4.8 虚拟专用网 VPN 和网络地址转换 NAT
在机构内部使用的计算机可以由本机构自行分配其 IP 地址, 这种称为本地地址, 与之相对的为全球地址.
专用地址 : 只用于机构内部使用, 在互联网的所有路由器, 对目的地址为专用地址的数据报一律不进行转发.
有三个专用网段 :
- 10.0.0.0 到 10.255.255.255 (或记为 10.0.0.0/8, 它又称为 24 位块)
- 172.16.0.0 到 172.31.255.255 (或记为 172.16.0.0/12, 它又称为 20 位块)
- 192.168.0.0 到 192.168.255.255 (或记为 192.168.0.0/16, 它又称为 16 位块)
下面介绍 VPN :
假定某个机构在两个相隔较远的地方建立了专用网 A 和 B, 其网络地址分别位专用地址 10.1.0.0 和 10.2.0.0. 现在这两个场所需要通过公用的互联网构成一个 VPN.
显然每个场所至少要有一个路由器具有合法的全球 IP 地址, 如图 \(R_1. R_2\). 这两个路由器和互联网的接口地址必须是合法的全球 IP 地址. 路由器 \(R_1\) 和 \(R_2\) 在专用网内部网络的接口地址则是专用网的本地地址.
在每个场所 A 或 B 内部的通信量都不经过互联网. 但如果场所 A 的主机 X 要和另一个场所 B 的主机 Y 通信, 那么就必须经过路由器 \(R_1\) 和 \(R_2\).
主机 X 向 主机 Y 发送的 IP 数据报的源地址 10.1.0.1, 而目的地址是 10.2.0.3. 这个数据报先作为本机构的内部数据报从 X 发送到与互联网连接的路由器 \(R_1\), 路由器 \(R_1\) 收到内部数据报后, 发送其目的网络必须通过互联网才能到达, 就把整个内部数据加密, 然后重新加上数据报的首部, 封装成为在互联网上发送的外部数据报, 其源地址是路由器 \(R_1\) 的全球地址 125.1.2.3, 而目的地址是路由器 \(R_2\) 的全球地址 194.4.5.6. 路由器 \(R_2\) 收到其数据部分取出进行解密, 恢复成原来的内部数据报 (目的地址是 10.2.0.3), 交付给主机 Y.
4.8.2 网络地址转换 NAT
如果已经在分配了本地 IP 地址 (即在专用网内使用的专用地址), 又想和互联网上的主机通信 (不加密), 应当采取什么措施 ?
网路地址转换 NAT 方法需要在专用网连接到互联网的路由器上安装 NAT 软件. 装有 NAT 软件的路由器叫做 NAT 路由器, 它至少有一个有效的外部全球 IP 地址. 这样所有使用本地地址的主机在和外界通信时, 都要在 NAT 路由器上将其本地地址转换成全球 IP 地址.
下面是 NAT 的工作原理 :
图中, 专用网 192.168.0.0 内所有主机的 IP 地址都是本地 IP (192.168.x.x). NAT 路由器至少要有一个全球 IP 地址, 才能和互联网相连. 图中 NAT 路由器有一个全球 IP 地址 172.38.1.5 (NAT 路由器也可以有很多全球地址).
NAT 路由器收到从专用网内部的主机 A 发送到互联网上主机 B 的 IP 数据报 : 源地址是 192.168.0.3, 而目的 IP 地址 是 213.18.2.4. NAT 路由器把 IP 数据报的源 IP 地址 192.168.0.3, 转换成新的源 IP 地址(即 NAT 路由器的全球 IP 地址) 172.38.1.5, 然后转发出去. 因此, 主机 B 收到这个 IP 数据报时, 以为 A 的 IP 地址是 172.38.1.5. B 并不知道 A 的专用地址 192.168.0.3. 实际上, 即使知道了, 也不能使用, 因为专用地址的数据报在互联网中不能转发. 当 NAT 路由器收到互联网上的主机 B 发来的 IP 数据报时, 还要进行一次 IP 地址转换. 通过 NAT 地址转换表, 就可把 IP 数据报上的旧的目的地址 IP 地址 172.38.1.5, 转换为新的目的 IP 地址 192.168.0.3 (主机 A 真正的本地 IP 地址).
由此可见当 NAT 路由器具有 n 个全球 IP 地址时, 专用网内最多可以同时有 n 台主机接入到互联网. 这样就可以使专用网内较多数量的主机, 轮流使用 NAT 路由器有限数量的全球 IP 地址.