Links

网络层

参考

概述

因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。
使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。
图源:CYC2018
与 IP 协议配套使用的还有三个协议:
  • 地址解析协议 ARP(Address Resolution Protocol)
  • 网际控制报文协议 ICMP(Internet Control Message Protocol)
  • 网际组管理协议 IGMP(Internet Group Management Protocol)

IP数据报格式

数据报举例:
图源:《计算机网络》谢希仁
  • 版本 : 占4位,指IP协议的版本。有 4(IPv4)和 6(IPv6)两个值;
  • 首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为固定部分长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
  • 区分服务 : 占8位,用来获得更好的服务,一般情况下不使用。
  • 总长度 : 包括首部长度和数据部分长度。
  • 生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
  • 协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
  • 首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。
  • 标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
  • 片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。
数据报的分片举例:
图源:《计算机网络》谢希仁

IP地址的编址方式

IP 地址的编址方式经历了三个历史阶段:
(1) 分类的IP地址。这是最基本的编址方法,在1981年就通过了相应的标准协议。
(2) 子网的划分。这是对最基本的编址方法的改进,其标准RFC 950在1985年通过。
(3) 构成超网。这是比较新的无分类编址方法。1993年提出后很快就得到推广应用。

1. 分类

由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。
IP 地址定义为 {< 网络号 >, < 主机号 >}
图源:《计算机网络》谢希仁
  • 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地址划分为A类、B类和C类是为了更好地满足不同用户的要求。当某个单位申请到一个IP地址时,实际上是获得了具有同样网络号的一块地址。其中具体的各个主机号则由该单位自行分配,只要做到在该单位管辖的范围内无重复的主机号即可。

2. 子网划分

通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。
IP 地址定义为 {< 网络号 >, < 子网号 >, < 主机号 >}
要使用子网,必须配置子网掩码。
一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0
注意,外部网络看不到子网的存在。

3. 无分类(构成超网)

无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。
IP 地址定义为 {< 网络前缀号 >, < 主机号 >}
CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。
CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。
一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网
在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。

地址解析协议 ARP

地址解析协议 ARP(Address Resolution Protocol)
网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。
ARP 实现由 IP 地址得到 MAC 地址。
图源:《计算机网络》谢希仁
每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。
如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。
图源:《计算机网络》谢希仁

网际控制报文协议 ICMP

网际控制报文协议 ICMP(Internet Control Message Protocol)
ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议。
图源:《计算机网络》谢希仁
ICMP 报文分为差错报告报文和询问报文。
图源:《计算机网络》谢希仁

1. Ping

Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。
Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。

2. Traceroute

Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。
Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文
  • 源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
  • 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
  • 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
  • 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。

虚拟专用网VPN

Virtual Private Network
由于 IP 地址的紧缺,一个机构能申请到的 IP 地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的 IP 地址(专用地址)。
由于IP地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数。考虑到因特网并不很安全,一个机构内也并不需要把所有的主机接入到外部的因特网。实际上,在许多情况下,很多主机主要还是和本机构内的其他主机进行通信(例如,在大型商场或宾馆中,有很多用于营业和管理的计算机。显然这些计算机并不都需要和因特网相连)。假定在一个机构内部的计算机通信也是采用TCP/IP协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本机构自行分配其IP地址。这就是说,让这些计算机使用仅在本机构有效的IP地址(这种地址称为本地地址),而不需要向因特网的管理机构申请全球唯一的IP地址(这种地址称为全球地址)。这样就可以大大节约宝贵的全球IP地址资源。
但是,如果任意选择一些IP地址作为本机构内部使用的本地地址,那么在某种情况下可能会引起一些麻烦。例如,有时机构内部的某个主机需要和因特网连接,那么这种仅在内部使用的本地地址就有可能和因特网中某个IP地址重合,这样就会出现地址的二义性问题。
为了解决这一问题,RFC 1918指明了一些专用地址(private address)。这些地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信。换言之,专用地址只能用作本地地址而不能用作全球地址。在因特网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。
有三个专用地址块:
  • 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位块)
上面的三个地址块分别相当于一个A类网络、16个连续的B类网络和256个连续的C类网络。A类地址本来早已用完了,而上面的地址10.0.0.0本来是分配给ARPANET的。由于ARPANET已经关闭停止运行了,因此这个地址就用作专用地址。
采用这样的专用IP地址的互连网络称为专用互联网或本地互联网,或更简单些,就叫做专用网。显然,全世界可能有很多的专用互连网络具有相同的专用IP地址,但这并不会引起麻烦,因为这些专用地址仅在本机构内部使用。专用IP地址也叫做可重用地址(reusable address)。
有时一个很大的机构有许多部门分布在相距很远的一些地点,而在每一个地点都有自己的专用网。假定这些分布在不同地点的专用网需要经常进行通信。这时,可以有两种方法。第一种方法是租用电信公司的通信线路为本机构专用。这种方法的好处是简单方便,但线路的租金太高。第二种方法是利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网VPN (Virtual Private Network)。
“虚拟”表示“好像是”,但实际上并不是,因为现在并没有使用专线而是通过公用的因特网来连接分散在各场所(site)的本地网络。

如何使用IP隧道技术实现虚拟专用网

图源:《计算机网络》谢希仁
假定某个机构在两个相隔较远的场所建立了专用网A和B,其网络地址分别为专用地址10.1.0.0和10.2.0.0。现在这两个场所需要通过公用的因特网构成一个VPN。
显然,每一个场所至少要有一个路由器具有合法的全球IP地址,如图4-52(a)中的路由器R1和R2。这两个路由器和因特网的接口地址必须是合法的全球IP地址。路由器R1和R2在专用网内部网络的接口地址则是专用网的本地地址。
在每一个场所A或B内部的通信量都不经过因特网。但如果场所A的主机X要和另一个场所B的主机Y通信,那么就必须经过路由器R1和R2。主机X向主机Y发送的IP数据报的源地址是10.1.0.1,而目的地址是10.2.0.3。这个数据报先作为本机构的内部数据报从X发送到与因特网连接的路由器R1。路由器R1收到内部数据报后,发现其目的网络必须通过因特网才能到达,就把整个的内部数据报进行加密(这样就保证了内部数据报的安全),然后重新加上数据报的首部,封装成为在因特网上发送的外部数据报,其源地址是路由器R1的全球地址125.1.2.3,而目的地址是路由器R2的全球地址194.4.5.6。路由器R2收到数据报后将其数据部分取出进行解密,恢复出原来的内部数据报(目的地址是10.2.0.3),交付主机Y。
可见,虽然X向Y发送的数据报是通过了公用的因特网,但在效果上就好像是在本部门的专用网上传送一样。如果主机Y要向X发送数据报,那么所经过的步骤也是类似的。
请注意,数据报从R1传送到R2可能要经过因特网中的很多个网络和路由器。但从逻辑上看,在R1到R2之间好像是一条直通的点对点链路,上图中的“隧道”就是这个意思。

内联网VPN

图中由场所A和B的内部网络所构成的虚拟专用网VPN又称为内联网(intranet或intranet VPN,即内联网VPN),表示场所A和B都属于同一个机构。

外联网VPN

有时一个机构的VPN需要有某些外部机构(通常就是合作伙伴)参加进来。这样的VPN就称为外联网(extranet或extranet VPN,即外联网VPN)。请注意,内联网和外联网都采用了因特网技术,即都是基于TCP/IP协议的。

远程接入VPN

还有一种类型的VPN,就是远程接入VPN (remote access VPN)。我们知道,有的公司可能并没有分布在不同场所的部门,但却有很多流动员工在外地工作。公司需要和他们保持联系,有时还可能一起开电话会议或视频会议。远程接入VPN可以满足这种需求。在外地工作的员工通过拨号接入因特网,而驻留在员工PC中的VPN软件可以在员工的PC和公司的主机之间建立VPN隧道,因而外地员工与公司通信的内容是保密的,员工们感到好像就是使用公司内部的本地网络。

网络地址转换 NAT

专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP。
网络地址转换NAT (Network Address Translation)方法是在1994年提出的。这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
在以前,NAT 将本地 IP 和全球 IP 一一对应,这种方式下拥有 n 个全球 IP 地址的专用网内最多只可以同时有 n 台主机接入互联网。为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把传输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT。
图源:《计算机网络》谢希仁

路由器的结构

路由器从功能上可以划分为:路由选择和分组转发。
分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。
图源:《计算机网络》谢希仁

路由器分组转发流程

  • 从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。
  • 若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付;
  • 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;
  • 若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器;
  • 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;
  • 报告转发分组出错。

路由选择协议

路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。
互联网可以划分为许多较小的自治系统 AS(Autonomous system),一个 AS 可以使用一种和别的 AS 不同的路由选择协议。
在目前的因特网中,一个大的ISP就是一个自治系统。这样,因特网就把路由选择协议划分为两大类,即:
  • 内部网关协议IGP (Interior Gateway Protocol) 即在一个自治系统内部使用的路由选择协议,而这与在互联网中的其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多,如RIP和OSPF协议。
  • 外部网关协议EGP (External Gateway Protocol) 若源主机和目的主机处在不同的自治系统中(这两个自治系统可能使用不同的内部网关协议),当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议EGP。目前使用最多的外部网关协议是BGP的版本4(BGP-4)。
自治系统之间的路由选择也叫做域间路由选择(interdomain routing),而在自治系统内部的路由选择叫做域内路由选择(intradomain routing)。
总之,使用分层次的路由选择方法,可将因特网的路由选择协议划分为:
  • 内部网关协议 IGP:具体的协议有多种,如RIP和OSPF等。
  • 外部网关协议 EGP:目前使用的协议就是BGP。

1. 路由信息协议 RIP

RIP (Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议[RFC 1058],它的中文名称很少使用,叫做路由信息协议。RIP是一种分布式的基于距离向量的路由选择协议,是因特网的标准协议,其最大优点就是简单。
RIP 是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。
RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。
距离向量算法:
  • 对地址为 X 的相邻路由器发来的 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加 1;
  • 对修改后的 RIP 报文中的每一个项目,进行以下步骤:
  • 若原来的路由表中没有目的网络 N,则把该项目添加到路由表中;
  • 否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目;否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。
  • 若 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16。
RIP 协议实现简单,开销小。但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。

2. 开放最短路径优先 OSPF

开放最短路径优先 OSPF(Open Shortest PathFirst),是为了克服 RIP 的缺点而开发出来的。
开放表示 OSPF 不受某一家厂商控制,而是公开发表的;最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。
OSPF 具有以下特点:
  • 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。
  • 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。
  • 只有当链路状态发生变化时,路由器才会发送信息。
所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。

3. 边界网关协议 BGP

BGP(Border Gateway Protocol,边界网关协议)
AS 之间的路由选择很困难,主要是由于:
  • 互联网规模很大;
  • 各个 AS 内部使用不同的路由选择协议,无法准确定义路径的度量;
  • AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。
BGP 只能寻找一条比较好的路由,而不是最佳路由。
每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。
图源:《计算机网络》谢希仁