网络层提供的两种服务
争论:网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”),实质是在计算机通信中,可靠交付应当由网络还是端系统负责
- 电信网(电话服务)的成功经验:网络用面向连接的通信方式负责可靠交付。因电话机没有差错处理能力。因此电信网必须使用昂贵的程控交换机(其软件也非常复杂)负责可靠地传送话音信号,
- 互联网的设计思路:计算机网络的端系统有很强的差错处理能力。网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。“数据报”(datagram)是互联网的设计者最初使用的名词,其实数据报(或 IP 数据报)就是“分组”。
网络在发送分组时不需要先建立连接。每一个分组独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺,所传送的分组可能出错、丢失、重复和失序,也不保证分组交付的时限。这就使网络中的路由器比较简单,且价格低廉 (与电信网的交换机相比较)。如果主机中的进程之间的通信需要是可靠的, 就由网络的主机中的运输层负责(包括差错处理、流量控制等)。好处是:网络造价大大降低,运行方式灵活,能够适应多种应用。
OSI 体系的支持者曾极力主张在网络层使用可靠传输的虚电路服务,也曾推出过虚电路服务的标准—ITU-T 的 X.25 建议书。但现在 X.25 早已成为历史了。
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组, 一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点的时间不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
网际协议 IP
网际协议 IP 又称为 Kahn-Cerf 协议,因为是 Robert Kahn 和 Vint Cerf 二人共同研发的。严格来说,这里所讲的是 IP 的第 4 个版本, 应记为 IPv4。(版本 1 ~ 3 和版本 5 都未曾使用过)。
由于网际协议 IP 是用来使互连起来的许多计算机网络能够进行通信的,因此 TCP/IP 体系中的网络层常常被称为网际层(internet layer), 或 IP 层。
与 IP 协议配套使用的还有三个协议:
- 地址解析协议 ARP (Address Resolution Protocol)
- 网际控制报文协议 ICMP (Internet Control Message Protocol)
- 网际组管理协议 IGMP (Internet Group Management Protocol)
虚拟互连网络
让大家都使用相同的网络是不现实的。没有单一的网络能够适应所有用户的需求。网络技术不断发展,制造厂家也要经常推出新的网络,因此在市场上总是有很多种不同性能、不同网络协议的网络。
四种网络中间设备:
工作层次 | 设备 | 描述 |
---|---|---|
物理层 | 转发器(repeater) | 又被中继器或放大器,负责物理层的数据中继,实现电气信号的“再生”。用于互连两个相同类型的网段,主要功能是延伸网段和改变传输媒体,从而实现信息位的转发。它本身不执行信号的过滤功能。以太网上的主机之间的距离不能太远(例如,10BASE-T 以太网的两台主机之间的距离不超过 200 米),否则主机发送的信号经过铜线的传输就会衰减到使 CSMA/CD 协议无法正常工作。在过去广泛使用粗缆或细缆以太网时,常使用工作在物理层的转发器来扩展以太网的地理覆盖范围。两个网段可用一个转发器连接起来。IEEE 802.3 标准还规定,任意两个站之间最多可以经过三个电缆网段。但随着双绞线以太网成为以太网的主流类型,扩展以太网的覆盖范围已很少使用转发器了。 |
物理层 | 集线器 | 一种特殊的转发器。每个接口仅仅简单地转发比特,不进行碰撞检测。任一时刻只能由两台计算机之间进行通信。若两个接口同时有信号输入(即发生碰撞),那么所有的接口都将收不到正确的帧。使用集线器可以在物理层扩展以太网(扩展后的以太网仍然是一个网络),它采用共享带宽的工作方式,附接端口的所有计算机采用CSMA/CD方式竞争带宽的使用, 不具有类似于交换机的"记忆"和"学习"能力。它发送数据时采用广播方式发送,把数据包发送到与之相连的所有节点。 |
数据链路层 | 网桥(bridge) | 又称为桥接器,在数据链路层扩展以太网。网桥收到帧时,并不是向所有的接口转发,而是根据此帧的目的 MAC 地址,查找网桥中的地址表,然后确定将该帧转发到哪一个接口,或者是把它丢弃(即过滤)。网桥互连两个独立的、仅在低两层实现上有差异的子网。 将两个局域网(LAN)连起来,根据MAC地址(物理地址)来转发帧,使本地通信限制在本网段内,并转发相应的信号至另一网段。通常用于联接数量不多的、同一类型的网段。网桥的存储和转发功能与中继器相比,克服了物理限制,这意味着构成lan的数据站总数和网段数很容易扩充。网桥纳入存储和转发功能可使其适应于连接使用不同mac协议的两个lan。因而构成一个不同lan混连在一起的混合网络环境。网桥的中继功能仅仅依赖于mac帧的地址,因而对高层协议完全透明。网桥将一个较大的lan分成段,有利于改善可靠性、可用性和安全性。主要缺点是:由于网桥在执行转发前先接收帧并进行缓冲,会引入更多时延。由于网桥不提供流控功能,因此在流量较大时有可能使其过载,从而造成帧的丢失。 |
网络层 | 路由器(router) | 讨论网络互连时,都是指用路由器进行网络互连和路由选择 |
网络层以上 | 网关(gateway) | 用网关连接两个不兼容的系统需要在高层进行协议的转换,由于比较复杂,目前使用得较少 |
路由器其实就是一台专用计算机,用来在互联网中进行路由选择。由于历史的原因,许多有关 TCP/IP 的文献曾经把网络层使用的路由器称为网关。
许多计算机网络通过一些路由器进行互连。由于参加互连的计算机网络都使用相同的网际协议 IP,可以把互连以后的计算机网络看成一个虚拟互连网络(internet)。各种物理网络的异构性本来是客观存在的,但利用 IP 协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。这种使用 IP 协议的虚拟互连网络可简称为 IP 网。当 IP 网上的主机进行通信时,它们看不见互连的各网络的具体异构细节(如具体的编址方案、路由选择协议,等等)。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就是现在的互联网(Internet)。
分类的 IP 地址
有关 IP 最重要的文档就是互联网的正式标准 RFC 791。
IP 地址及其表示方法
整个的互联网就是一个单一的、抽象的网络。IP 地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的 32 位的标识符。IP 地址现在由互联网名字和数字分配机构 ICANN (Internet Corporation for Assigned Names and Numbers)进行分配。
IP 地址的编址方法共经过了三个历史阶段。
编址方法 | 文档 | 备注 |
---|---|---|
分类的 IP 地址 | 1981 年通过了相应的标准协议。 | 最基本的编址方法 |
子网的划分 | 1985 年,RFC 950 | 对最基本的编址方法的改进。 |
构成超网 | 1993 年 | 比较新的无分类编址方法。1提出后很快就得到推广应用。 |
所谓“分类的 IP 地址”就是将 IP 地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成。可以记为:IP 地址 ::= { <网络号>, <主机号>}
- 第一个字段是网络号(net-id),它标志主机(或路由器)所连接到的网络。一个网络号在整个互联网范围内必须是唯一的。
- 第二个字段是主机号(host-id),它标志该主机(或路由器)。一台主机号在它的网络范围内必须是唯一的。
类 | 头几位 | 网络号位数 | 网络数 | 地址数 | 起始 | 结尾 |
---|---|---|---|---|---|---|
A | 0 | 8 | 128 (27) | 231 | 0.0.0.0 | 127.255.255.255 |
B | 10 | 16 | 16,384 (214) | 230 | 128.0.0.0 | 191.255.255.255 |
C | 110 | 24 | 2,097,152 (221) | 229 | 192.0.0.0 | 223.255.255.255 |
D (multicast) | 1110 | not defined | not defined | 228 | 224.0.0.0 | 239.255.255.255 |
E (reserved) | 1111 | not defined | not defined | 228 | 240.0.0.0 | 255.255.255.255 |
最长前缀匹配
在使用 CIDR 时,由于采用了网络前缀这种记法,路由表中每个项目由“网络前缀”和“下一跳地址”组成。但是在查找路由表时可能会得到不止一个匹配结果。此时应当从匹配结果中选择具有最长网络前缀的路由。这叫做最长前缀匹配(longest-prefix matching),这是因为网络前缀越长,其地址块就越小,因而路由就越具体(more specific)。最长前缀匹配又称为最长匹配或最佳匹配。
47 .( 9 分)假设 lnternet 的两个自治系统构成的网络如题 47 图所示,自治系统 AS1 由路由器R1 连接两个子网构成;自治系统 AS2 由路由器 R2 、 R3 互联并连接 3 个子网构成。各子网地址、 R2 的接口名、 R1 与 R3 的部分接口 IP 地址如题 47 图所示。
(1)假设路由表结构如下表所示。请利用路由聚合技术,给出 R2 的路由表,要求包括到达题 47 图中所有子网的路由,且路由表中的路由项尽可能少。
目的网络 | 下一跳 | 接口 |
---|
194.17.20.128/25 和 194.17.21.0/24 的最大共同前缀为:11000010.00010001.0001010 ,即 194.17.20.0/23
十进制 | 二进制 |
---|---|
194.17.20.128/25 | 11000010.00010001.00010100.10000000 |
194.17.21.0/24 | 11000010.00010001.00010101.00000000 |
(2)若 R2 收到一个目的 IP 地址为 194.17.20.200 的 IP 分组, R2 会通过哪个接口转发该 IP分组?
IP 地址与硬件地址
主机的 IP 地址与硬件地址的区别:从层次的角度看,物理地址是数据链路层和物理层使用的地址,而 IP 地址是网络层和以上各层使用的地址,是一种逻辑地址(称 IP 地址为逻辑 地址是因为 IP 地址是用软件实现的)。
在局域网中,由于硬件地址已固化在网卡上的 ROM 中,因此常常将硬件地址称为物理地址。因为在局域网的 MAC 帧中的源地址和目的地址都是硬件地址,因此硬件地址又称为 MAC 地址。
MAC 帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在 MAC 帧的首部中。 连接在通信链路上的设备(主机或路由器)在收到 MAC 帧时,根据 MAC 帧首部中的硬件地址决定收下或丢弃。只有在剥去 MAC 帧的首部和尾部后把 MAC 层的数据上交给网络层后,网络层才能在 IP 数据报的首部中找到源 IP 地址和目的 IP 地址。
几个要点:
- 在 IP 层抽象的互联网上只能看到 IP 数据报。虽然 IP 数据报经过路由器转发时,首部中的源地址和目的地址始终不变。数据报中间经过的路由器的 IP 地址并不出现在 IP 数据报的首部中。
- 虽然在 IP 数据报首部有源站 IP 地址,但路由器只根据目的站的 IP 地址的网络号进行路由选择。
- 在局域网的链路层,只能看见 MAC 帧。IP 数据报被封装在 MAC 帧中。MAC 帧 在不同网络上传送时,其 MAC 帧首部中的源地址和目的地址要发生变化。路由器收到MAC 帧后,在数据链路层,要丢弃原来的 MAC 帧的首部和尾部。在转发时,要重新添加上 MAC 帧的首部和尾部。这时首部中的源地址和目的地址分别 便成为 HA4 和 HA5。MAC 帧的首部的这种变化,在上面的 IP 层上是 看不见的。
- 尽管互连在一起的网络的硬件地址体系各不相同,但 IP 层抽象的互联网却屏蔽了下层这些很复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的 IP 地 址研究主机和主机或路由器之间的通信。
地址解析协议 ARP
地址解析协议 ARP 用来根据机器的 IP 地址找出其相应的硬件地址。
网络层使用的是 IP 地址,但在实际网络的链路上传送数据帧时,最终还是必须使用该网络的硬件地址。但 IP 地址和硬件地址之间由于格式不同而不存在简单的映射关系。网络上会需要新增或撤走主机,网络适配器也会使主机的硬件地址改变。
使用抽象的 IP 地址,而不直接使用硬件地址进行通信的意义:虽然在网络链路上传送的帧最终是按照硬件地址找到目的主机的,但由于全世界各式各样的网络使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,由用户或用户主机来完成这项工作几乎是不可能的事。但 IP 编址把这个复杂问题解决了。连接到互联网的主机只需各自拥有一个唯一的 IP 地址,相互的通信就像连接在同一个网络上那样简单方便,在虚拟的 IP 网络上用 IP 地址进行通信给广大的计算机用户带来很大的方便。
每一台主机都设有一个 ARP 高速缓存(ARP cache),里面有本局域网上的各主机和路由器的 IP 地址到硬件地址的映射表,这个映射表还经常动态更新。 当主机 A 要向本局域网上的某台主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就将其对应的硬件地址写入 MAC 帧,然后通过局域网把该 MAC 帧发往此硬件地址。 若无,原因可能是主机 B 才入网,或是主机 A 刚刚加电,其高速缓存还是空的,则主机 A 就自动运行 ARP, 找出主机 B 的硬件地址 :
- ARP 进程在本局域网上广播发送一个 ARP 请求分组。主要内容是:“我的 IP 地址是 209.0.0.5,硬件地址是 00-00-C0-15-AD-18。我想知道 IP 地址为 209.0.0.6 的主机的硬件地址。
- 在本局域网上的所有主机上运行的 ARP 进程都收到此 ARP 请求分组。
- 主机 B 的IP 地址与 ARP 请求分组中要查询的 IP 地址一致,收下这个 ARP 请求分组,并向主机 A 发送 ARP 响应分组,ARP 响应分组的主要内容是:“我的 IP 地址是 209.0.0.6,我的硬件地址是 08-00-2B-00-EE-0A。”,同时主机 B 还将把主机 A 的这一地址映射写入自己的 ARP 高速缓存中。 虽然 ARP 请求分组是广播发送的,但 ARP 响应分组是普通的单播,即从一个源地址发送到一个目的地址 .其余所有主机不理睬这个 ARP 请求分组。
- 主机 A 收到主机 B 的 ARP 响应分组后,就在其 ARP 高速缓存中写入主机 B 的 IP 地址到硬件地址的映射。
ARP 对保存在高速缓存中的每一个映射地址项目都设置生存时间(例如,10 ~ 20 分钟)。凡超过生存时间的项目就从高速缓存中删除掉。设想 A 的 ARP 高速缓存里保存有 B 的硬件地址。但 B 的网络适配器坏了,更换了一块,因此硬件地址就改变了。A 在其 ARP 高速缓存中查找到 B 原先的硬件地址,向 B 发送数据帧,由于该硬件地址已经失效了,因此 A 无法找到主机 B。但是过了一段不长的生存时间,A 的 ARP 高速缓存中已经删除了 B 原先的硬件地址,于是 A 重新广播发送 ARP 请求分组,又找到了 B 。
注意:ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,就无法解析出硬件地址。实际上主机 H1 也不需要知道远程主机 H2 的硬件地址:IP 数据报首先需要通过同一个局域网上的路由器 R1 转发。因此 H1 需要把 R1 的 IP 地址解析为硬件地址,R1从转发表找出了下一跳路由器 R2, 同时使用 ARP 解析出 R2的 硬件地址,于是 IP 数据报按照该硬件地址转发到路由器 R2。R2 用类似方法解析出目的主机 H2 的硬件地址,使 IP 数据报最终交付主机 H2。
从 IP 地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地把这个 IP 地址解析为链路层所需要的硬件地址。
使用 ARP 的四种典型情况 :
-
主机把 IP 数据报发送到同一个网络上的另一台主机。此时 H1 发送 ARP 请求分组,找到目的主机 H2的硬件地址。
-
主机要把 IP 数据报发送到另一个网络上的一台主机。此时 H1 发送 ARP 请求分组,找到网 1 上的一个路由器 R1 的硬件地址。剩下的工作由路由器 R1 来完成。
-
路由器,要把 IP 数据报转发到同一个网络上 的主机。这时 R1 发送 ARP 请求分组,找到目的主机 H3的硬件地址。
-
发送方是路由器,要把 IP 数据报转发到网 3 上的一台主机。H4与 R1 不是连接在同一个网络上。这时 R1 发送 ARP 请求分组,找到连接在网 2 上的一个路由器 R2 的硬件地址。剩下的工作由这个路由器 R2 来完成
(3) R1 与 R2 之间利用哪个路由协议交换路由信息?该路由协议的报文被封装到哪个协议的分组中进行传输?
网际控制报文协议 ICMP
为了更有效地转发IP数据报和提高交付成功率,网际层使用了网际控制报文协议(Internet Control Message Protocol,ICMP)。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP是互联网的标准协议(RFC 792)。
ICMP报文作为IP数据报的数据部分,加上数据报的首部,组成IP数据报发送出去。但通常我们把ICMP作为IP层的协议,而不是高层协议,因为它配合IP一起完成网络层功能。
ICMP 报文的种类
ICMP报文差错报告报文和询问报文。报文的前四个字节具有统一的格式,共有三个字段,即类型、代码和检验和。接着的四个字节的内容与ICMP报文的类型有关。最后面是数据部分,其长度取决于ICMP报文的类型。
常用的 ICMP 报文类型有:
ICMP 报文 | 类型的值 | ICMP 报文类型 |
---|---|---|
差错报告报文 | 3 | 终点不可达 |
11 | 超时(TTL超时或分片重装超时) | |
12 | 参数问题 | |
5 | 路由重定向(Redirect) | |
询问报文 | 8 或 0 | 回送(Echo)请求或应答 |
13 或 14 | 时间戳(Timestamp)请求或应答 |
ICMP报文的代码字段用于进一步区分某种类型中的几种不同的情况。检验和字段用来检验整个ICMP报文。IP数据报的首部检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP报文无差错。
差错报告报文
(1)终点不可达:路由器或主机不能交付数据报时,就向源点发送终点不可达报文。其具体可根据ICMP的代码字段细分为目的的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知以及需要分片但DF置位等。
(2)超时:TTL减到零或分片重装超时。路由器收到一个IP数据报时,转发前会将该TTL值减1,但当TTL值为1时(收到TTL值为1的IP数据报),除丢弃该数据报外,还要向源点发送超时报文。另外,终点若在预先规定的时间内不能收到一个数据报的全部数据报片,就会把已收到的数据报片都丢弃,并向源点发送超时报文。
(3)参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
(4)路由重定向:路由器把路由重定向报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(提供一条更好的路由)。
重定向报文:互联网的主机中也要有一个路由表。主机要发送数据报时,首先查找自己的路由表,看应当从哪一个接口把数据报发送送出去。在互联网中,主机的数量远大于路由器的数量,出于效率考虑,这些主机不和连接在网络上的路由器定期交换路由信息。主机刚开始工作时,一般都会在路由表中设置一个默认路由器的IP地址。不管数据报要发送到哪个目的地,一律先将数据报传送给网络上的这个默认路由器,而这个默认路由器知道到每一个目的网络的最佳路由(通过和其他路由器交换路由信息)。如果默认路由器发现主机发往某个目的地的数据报的最佳路由不应当经过默认路由器而应当经过网络上的另一个路由器R,默认路由器就用路由重定向报文把这个情况告诉主机。于是,该主机的路由表中增加一项:到某某目的地经过路由器R(而不是默认路由器)。
所有的ICMP差错报告报文中的数据字段都具有同样的格式,把收到的需要进行的差错报告的IP数据报的首部和其数据部分的前8个字节提取出来,作为ICMP差错报告报文的数据字段,再加上相应的ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文。提取收到的IP数据报的数据部分的前8个字节是为了得到运输层的端口号(对于TCP和UDP),以及运输层报文的发送序号(对于TCP)。这些信息对源点通知高层协议是有用的(端口的作用将在5.1.3小节中介绍)。整个ICMP报文作为IP数据报的数据部分发送给源点。
不应发送ICMP差错报告报文的几种情况。
- 对ICMP差错报告报文不再发送ICMP差错报告报文。
- 对第一个分片的数据报片的后续数据报片都不发送ICMP差错报告报文。
- 对具有多播地址的数据报都不发送ICMP差错报告报文。
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文。
询问报文
- 回送请求和回送应答:由主机或路由器向一个特定的目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送应答报文,将ICMP回送请求报文携带的数据原封不动地返回去。用来测试目的站是否可达及了解其有关状态。
- 时间戳请求和时间戳应答:用于请某个主机或路由器应答当前的日期和时间。ICMP时间戳应答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。这种报文可用来进行时钟同步和测量时间。
ICMP 的应用举例
分组网间探测
分组网间探测(Packet Internet Groper,PING)用来测试两个主机之间的连通性。PING使用了ICMP回送请求和回送应答报文。PING是应用层直接使用网络层ICMP的一个例子。它没有通过运输层的TCP或UDP。
连通性的测试结果:PC一连发出四个ICMP回送请求报文。如果邮件服务器正常工作而且响应这个ICMP回送请求报文(有的主机为了防止恶意攻击通过设置防火墙拒绝接收或响应这种报文),那么它就发回ICMP回应答报文。通过记录发送报文和接收报文的时间,很容易得出往返时间。最后显示出的是统计结果:发送到哪个机器(IP地址),发送的、收到的和丢失的分组数(但不给出分组丢失的原因),往返时间的最小值、最大值和平均值。
跟踪分组从源点到终点的路径
traceroute(UNIX操作系统中)用来跟踪一个分组从源点到终点的路径。Windows中对应的命令是tracert。
traceroute 从源主机向目的主机发送一连串IP数据报,数据报中封装的是无法交付的UDP用户数据报(用了非法的端口号)。
- 第一个数据报P1的TTL值设置为1。当R到达路径上的第一个路由器R时,R1先收下并接着把TTL值减1。由于TTL值等于零了,于是丢弃P,并向源主机发送ICMP超时差错报告报文。
- 发送第二个数据报P2,TTL值设置为2。P2先到达路由器R1,R1收下后把TTL值减1,再转发给路由器R2。R2 将TTL值但减1后变为零了,R就丢弃P2,并向源主机发送一个ICMP超时差错报告报文。
- ...
- 以此类推,当最后一个数据报刚刚到达目的的主机时,数据报的TTL值是1。当源主机收到目的主机发送的 ICMP 终点不可达报文时,就知道数据报已到达目的的主机,于是停止继续发送。
这些路由器和最后目的主机发来的ICMP报文给出了到达目的主机所经过的路由器的IP地址,以及到达其中的每一个路由器的往返时间。
与traceroute的实现稍有不同,Windows命令tracert在探测路由时发送的是ICMP回送请求报文而不是UDP用户数据报。
tracert命令结果:每一行有三个时间,是因为对应于每一个TTL值,源主机要发送三次同样的IP数据报。
C:\Users\huaye>tracert huayemao.run 通过最多 30 个跃点跟踪 到 huayemao.run [76.76.21.241] 的路由: 1 1 ms 1 ms <1 毫秒 192.168.1.1 2 5 ms 4 ms 4 ms 10.74.48.1 3 * 24 ms * 183.224.66.9 4 6 ms 3 ms 4 ms 39.129.236.157 5 * * * 请求超时。 6 * * * 请求超时。 7 37 ms 37 ms 36 ms 221.183.166.210 8 46 ms 46 ms 45 ms 221.183.92.206 9 39 ms 38 ms 39 ms 221.183.92.194 10 90 ms 89 ms 89 ms 223.120.14.233 11 * 93 ms 93 ms 223.120.2.246 12 97 ms 96 ms 97 ms 99.83.91.178 13 136 ms 92 ms 120 ms 150.222.90.113 14 * * * 请求超时。 15 103 ms 100 ms 100 ms 54.239.52.99 16 91 ms 95 ms 91 ms 52.95.30.12 17 * * * 请求超时。 18 95 ms 96 ms 95 ms 15.230.152.120 19 96 ms 96 ms 96 ms 76.76.21.241 跟踪完成。
为了防止网络设备被恶意用户探测或攻击,一些主机或路由器被设置为不接收或不响应ICMP回送请求报文,因此在互联网中在使用 PING 命令或 tracert 命令测试目的主机连通性时有可能会超时,但并不代表网络不通。
互联网的路由选择协议
外部网关协议 BGP
边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。BGP 采用了**路径向量(path vector)**路由选择协议,
在不同自治系统 AS 之间的路由选择不能使用内部网关协议的原因:
- 互联网的规模太大,使得 AS 之间路由选择非常困难。目前在互联网的主干网路由器中,一个路由表的项目数早已超过了 5 万个网络前缀。如果使用链路状态协议,则每一个路由器必须维持一个很大的链路状态数据库,用 Dijkstra 算法计算最短路径时花费的时间也太长。另外,由于自治系统 AS 各自运行自己选定的内部路由选择协议,并使用本 AS 指明的路径度量,因此,当一条路径通过几个不同 AS 时,要想对这样的路径计算出有意义的代价,用“代价”作为度量来寻找最佳路由也是很不现实的。比较合理的做法是在自治系统之间交换“可达性”信息(即“可到达”或“不可到达”)。例如,告诉相邻路由器:“到达目的网络 N 可经过自治系统 ASx”
- AS 之间的路由选择必须考虑有关策略,应当允许使用多种路由选择策略。包括政治、安全或经济方面的考虑。例如,我国国内的站点在互相传送数据报时不应经过国外兜圈子,特别是,不要经过某些对我国的安全有威胁的国家。有的路径的使用代价很高或很不安全。还有一种情况,如自 AS1 要发送数据报给 AS2,本来最好是经过 AS3。但 AS3 不愿意让这些数据报通过本自治系统的网络。这些策略都是由网络管理人员对每一个路由器进行设置的,但其并不是自治系统之间的路由选择协议本身。其他策略的例子,如:“仅在到达下列这些地址时才经过 ASx”,“ASx 和 ASy 相比时应优先通过 ASx”,等等。显然,使用这些策略是为了找出较好的路径而不是最佳路径。
在配置 BGP 时,每一个自治系统的管理员要选择至少一个路由器作为该自治系统的 “BGP 发言人”。一般说来,两个 BGP 发言人都是通过一个共享网络连接在一起的,而 BGP 发言人往往就是 BGP 边界路由器,但也可以不是。 一个 BGP 发言人与其他 AS 的 BGP 发言人要交换路由信息,就要先建立 TCP 连接 (端口号为 179),然后在此连接上交换 BGP 报文以建立 BGP 会话,利用 BGP 会话交换路由信息,如增加了新的路由,或撤销过时的路由,以及报告出差错的情况等等。使用 TCP 连接能提供可靠的服务,也简化了路由选择协议。使用 TCP 连接交换路由信息的两 个 BGP 发言人,彼此成为对方的邻站或对等站。每一个 BGP 发言人除了必须运行 BGP 协议外,还必须运行该自治 系统所使用的内部网关协议,如 OSPF 或 RIP。
边界网关协议 BGP 所交换的网络可达性的信息就是要到达某个网络(用网络前缀表示)所要经过的一系列自治系统。各 BGP 发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好路由。
当前互联网的多级结构的网络拓扑决定了 BGP 路由选择协议的特点。 一个 BGP 发言人交换路径向量的例子:自治系统 AS2 的 BGP 发言人通 知主干网的 BGP 发言人:“要到达网络 N1, N2, N3 和 N4 可经过 AS2。”主干网在收到这个通知后,就发出通知:“要到达网络 N1, N2, N3 和 N4 可沿路径(AS1, AS2)。”同理,主干网还 可发出通知:“要到达网络 N5, N6和 N7 可沿路径(AS1, AS3)。”
BGP 协议交换路由信息的结点数量级是自治系统个数的量级, 这要比这些自治系统中的网络数少很多。要在许多自治系统之间寻找一条较好的路径,就是要寻找正确的 BGP 发言人(或边界路由器),这样就使得自治系统之间的路由选择不致过分复杂。 BGP 支持无分类域间路由选择 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的自治系统序列。
使用路径向量避免产生兜圈子的路由:如果一个 BGP 发言人收到了其他 BGP 发言人发来的路径通知,就检查本自治系统是否在此通知的路径中。如果在这条路径中,就不能采用这条路径(因为会兜圈子)。
在 BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销方面都有好处。
在 RFC 4271 中规定了 BGP-4 的四种报文:
-
OPEN(打开)报文,用来与相邻的另一个 BGP 发言人建立关系,使通信初始化。
-
UPDATE(更新)报文,用来通告某一路由的信息,以及列出要撤销的多条路由。 (
-
KEEPALIVE(保活)报文,用来周期性地证实邻站的连通性。
-
NOTIFICATION(通知)报文,用来发送检测到的差错。
-
若两个邻站属于两个不同 AS,而其中一个邻站打算和另一个邻站定期地交换路由信 息,这就应当有一个商谈的过程(因为很可能对方路由器的负荷已很重因而不愿意再加重负担)。因此,一开始向邻站进行商谈时就必须发送 OPEN 报文。
-
如果邻站接受这种邻站关系,就用 KEEPALIVE 报文响应。这样,两个 BGP 发言人的邻站关系就建立了。 一旦邻站关系建立了,就要继续维持这种关系。双方中的每一方都需要确信对方是存在的,且一直在保持这种邻站关系。为此,这两个 BGP 发言人彼此要周期性地交换 KEEPALIVE 报文(一般每隔 30 秒)。KEEPALIVE 报文只有 19 字节长(只用 BGP 报文的 通用首部),因此不会造成网络上太大的开销。
-
UPDATE 报文是 BGP 协议的核心内容。BGP 发言人可以用 UPDATE 报文撤销它以前曾经通知过的路由,也可以宣布增加新的路由。撤销路由可以一次撤销许多条,但增加新路由时,每个更新报文只能增加一条。
BGP 可以很容易地解决距离向量路由选择算法中的“坏消息传播得慢”这一问题。当 某个路由器或链路出故障时,由于 BGP 发言人可以从不止一个邻站获得路由信息,因此很容易选择出新的路由。距离向量算法往往不能给出正确的选择,是因为这些算法不能指出哪些邻站到目的站的路由是独立的。
BGP 报文的格式:四种类型的 BGP 报文具有同样的通用首部,其长度 为 19 字节。通用首部分为三个字段。标记(marker)字段为 16 字节长,用来鉴别收到的 BGP 报文(这是假定将来有人会发明出合理的鉴别方案)。当不使用鉴别时,标记字段要置为全 1。长度字段指出包括通用首部在内的整个 BGP 报文以字节为单位的长度,最小值是 19, 最大值是 4096。类型字段的值为 1 到 4,分别对应于上述四种 BGP 报文中的一种。 OPEN 报文共有 6 个字段,即版本(1 字节,现在的值是 4)、本自治系统号(2 字节, 使用全球唯一的 16 位自治系统号,由 ICANN 地区登记机构分配)、保持时间(2 字节,以 秒计算的保持为邻站关系的时间)、BGP 标识符(4 字节,通常就是该路由器的 IP 地址)、 可选参数长度(1 字节)和可选参数。
虚拟专用网 VPN 和网络地址转换 NAT
虚拟专用网 VPN
由于 IP 地址的紧缺,一个机构能够申请到的 IP 地址数往往远小于本机构所拥有的主机数。
考虑到互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网。假定在机构内部的计算机通信也是采用 TCP/IP 协议,那计算机就可以由本机构自行分配其仅在本机构有效的 IP 地址(称为本地地址),而不需要向互联网的管理机构申请全球地址。为了避免地址的二义性问题,RFC 1918 指明了一些专用地址(private address),只能用于一个机构的内部通信。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。
三个专用地址块分别相当于一个 A 类网络、16 个连续的 B 类网络和 256 个连续的 C 类网络。
A 类地址本已用完, 10.0.0.0 本是分配给 ARPANET 的。但由于其已经关闭停运,因此这个地址就用作专用地址。
IP 地址范围 | CIDR 记法 | 位块 |
---|---|---|
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位块 |
采用这样的专用 IP 地址的互连网络称为专用互联网或本地互联网。专用 IP 地址也叫做可重用地址 (reusable address)。
有时一个机构分布范围很广的许多部门之间通信可以有两种方法:
- 租用电信公司的通信线路为本机构专用。由于线路的租金太高,一般难于承受。
- 利用公用的互联网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网 VPN (Virtual Private Network)。“虚拟”表示“并没有真正使用通信专线,只是在效果上和真正的专用网一样。
如果专用网不同网点之间的通信必须经过公用的互联网,但又有保密的要求,那么所有通过互联网传送的数据都必须加密。
一个机构要构建自己的 VPN 就必须为它的每一个场所购买专门的硬件和软件,并进行配置,使每一个场所的 VPN 系统都知道其他场所的地址。
使用 IP 隧道技术实现虚拟专用网。:假定某个机构在两个相隔较远的场所建立了专用网 A 和 B,其网络地址分别为专用地 址 10.1.0.0 和 10.2.0.0。现在这两个场所需要通过公用的互联网构成一个 VPN。 则每一个场所至少要有一个路由器具有合法的全球 IP 地址。
场所 A 的主机 X 要和另一个场所 B 的主机 Y 通信过程:
- 主机 X 向主机 Y 发送的 IP 数据报先作为本机构的内部数据报发送到与互联网连接的路由器 R1。
- R1 收到内部数据报后,发现其目的网络必须通过互联网才能到达,就把整个的内部数据报进行加密,然后重新加上数据报的首部,封装成为在互联网上发送的外部数据报,其源地址是路由器 R1 的全球地址,而目的地址是路由器 R2 的全球地址。
- 路由器 R2收到数据报后将其数据部分取出进行解密,恢复出原来的内部数据报(目的地址是 10.2.0.3),交付主机 Y。
数据报从 R1 传送到 R2 可能要经过互联网中的很多个网络和路由器。但从逻辑上看,在 R1 到 R2 之间好像是一条直通的点对点链路,“隧道”就是这个意思。
内联网 VPN、外联网 VPN、远程接入 VPN
- 内联网:场所 A 和 B 都属于同一个机构,则由场所 A 和 B 的内部网络所构成的虚拟专用网 VPN 又称为(intranet 或 intranet VPN,即内联网 VPN),
- 外联网:有时一个机构的 VPN 需要有某些外部机构参加进来。这样的 VPN 就称为外联网(extranet 或 extranet VPN,即外联网 VPN)。
- 远程接入 VPN (remote access VPN):有的公司有很多流动员工在外地工作,但没有部门。公司和他们可能需要一起开视频会议。远程接入 VPN 可以满足这种需求。在外地工作的员工通过拨号接入互联网,员工个人电脑中的 VPN 软件可以个人电脑和公司的主机之间建立 VPN 隧道,因而外地员工与公司通信的内容也是保密的,员工们感到好像就是使用公司内部的本地网络。
内联网和外联网都采用了互联网技术,即都是基于 TCP/IP 协议的。
网络地址转换 NAT
在专用网内部的一些主机本来已经分配到了本地 IP 地址(即仅在本专用网内使用的专用地址),又想和互联网上的主机通信(并不需要加密),除了设法再申请一些全球 IP 地址外。还可以采用 网络地址转换 NAT (Network Address Translation) 。 这种方法是在 1994 年提出的。需要在专用网连接到互联网的路由器上安装 NAT 软件。NAT 路由器至少有一个有效的外部全球 IP 地址。这样,使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址。
NAT 路由器的工作原理:
- 专用网 192.168.0.0 内所有主机的 IP地址都是本地 IP 地址 192.168.x.x。
- NAT 路由器有一个全球 IP 地址 172.38.1.5。
- NAT 路由器收到从专用网内部的主机 A 发往互联网上主机 B 的 IP 数据报:而目的 IP 地址是 213.18.2.4。NAT 路由器把 IP 数据报的源 IP 地址 192.168.0.3 换为新的源 IP 地址 172.38.1.5 转发出去。
- 当 B 给 A 发送应答时,IP 数据报的目的 IP 地址是 NAT 路由器的 IP 地址 172.38.1.5。B 并不知道 A 的专用地址 192.168.0.3。实际上,即使知道了,也不能使用,因为互联网上的路由器都不转发目 的地址是专用网本地 IP 地址的 IP 数据报。
- 当 NAT 路由器收到互联网上的主机 B 发来的 IP数据报时,通过 NAT 地址转换表,就把 IP 数据报上的旧的目的 IP 地址 172.38.1.5,转换为 192.168.0.3 。
表 4-11 给出了 NAT 地址转换表的举例。表中的前两行数据对应于图 4-60 中所举的例 子。第一列“方向”中的“出”表示离开专用网,而“入”表示进入专用网。表中后两行数 据(图 4-60 中没有画出对应的 IP 数据报)表示专用网内的另一主机 192.168.0.7 向互联网发 送了 IP 数据报,而 NAT 路由器还有另外一个全球 IP 地址 172.38.1.6。
真题
【2009年 题47】某网络拓扑如下图所示,路由器R1通过接口E1、E2分别连接局域网1、局域网2,通过接口 L0 连接路由器 R2,并通过路由器R2连接域名服务器与互联网。R1 的 L0 接口的 IP 地址是202.118.2.1; R2的L0接口的IP地址是202.118.2.2,L1接口的IP地址是130.11.120.1,E0接口的IP地址是202.118.3.1;域名服务器的 IP 地址是202.118.3.2。
R1 和 R2 的路由表结构为:
目的网络IP地址 | 子网掩码 | 下一跳IP地址 | 接口 |
---|---|---|---|
- | - | - | - |
(1) 将IP地址空间202.118.1.0/24划分为2个子网,分别分配给局域网1、局域网2,每个局域网需分配的IP地址数不少于120个。请给出子网划分结果,说明理由或给出必要的计算过程。
- 划分为2个子网,子网号至少要占用一位。
- 每个局域网需分配的IP地址个数不少于120个,由26—2<120<27—2(主机号不能全0或全1),主机号至少要占用7位。
- 由于源IP地址空间的网络前缀为24位,因此主机号位数+子网号位数=8。综上可得主机号位数为7,子网号位数为1。
- 因此子网的划分结果为:
- 子网1:子网地址为202.118.1.0,子网掩码为 255.255.255.128(或子网1:202.118.1.0/25)
- 子网2:子网地址为202.118.1.128,子网掩码为 255.255.255.128(或子网2:202.118.1.128/25)
(2) 请给出R1的路由表,使其明确包括到局域网1的路由、局域网2的路由、域名服务器的主机路由和互联网的路由。
- 局域网 1、2的网络前缀均为 25 位,因此它们的子网掩码均为 255.255.255.128。
- R1专门为域名服务器设定了一个特定的路由表项,因此该路由表项中的子网掩码应为255.255.255.255。对应的下一跳转发地址是202.118.2.2,转发接口是 LO。 到互联网的路由实质上相当于一个默认路由,默认路由一般写作 0/0,即目的地址为0.0.0.0,子网掩码为 0.0.0.0。对应的下一跳转发地址是202.118.2.2,转发接口是 0
目的网络IP地址 | 子网掩码 | 下一跳IP地址 | 接口 |
---|---|---|---|
202.118.1.0 | 255.255.255.128 | - | E1 |
202.118.1.128 | 255.255.255.128 | - | E2 |
202.118.3.2 | 255.255.255.255 | 202.118.2.2 | L0 |
0.0.0.0 | 0.0.0.0 | 202.118.2.2 | L0 |
(3) 请采用路由聚合技术,给出R2到局域网1和局域网2的路由。
局域网1和局域网2的地址可以聚合为202.118.1.0/24,而对于路由器R2来说,通往局域网1和2的转发路径都是从L0接口转发,因此采用路由聚合技术后,路由器R2到局域网1和局域网2的路由为:
目的网络IP地址 | 子网掩码 | 下一跳IP地址 | 接口 |
---|---|---|---|
202.118.1.0 | 255.255.255.0 | 202.118.2.1 | L0 |