计算机网络网络层IP协议

半城伤御伤魂 提交于 2020-01-23 23:06:02
本文是在学习谢希仁编著的《计算机网络》一书的网络层相关知识后,对某些个人认为是重点内容的部分做出的总结。

本文的将涉及:IP地址划分,CIDR,ARP,IPv4数据报格式,IP层转发分组的过程,ICMP,路由选择协议,IPv6,MPLS.

1. IP地址划分

首先要清楚,IP地址是给互联网上每一台主机或路由器的每一个接口分配一个在全世界范围内是唯一的32位的标识符,而且是一个软件地址(有别于MAC地址)。 IP地址由互联网名字和数字分配机构ICANN(Internet Corporation for Assigned Names and Numbers)进行分配。
IP地址呈现两级结构,第一级为网络号,由IP地址管理机构分配,第二级为主机号,由运行商自行分配。IP地址的结构可以记为:
IP地址 ::= { <网络号>, <主机号> }
传统的IP地址被划分为5类: A, B ,C ,D ,E类。前三类为单播地址,D类为多播地址,E类保留为以后用。每类IP地址的格式详见《计算机网络》(谢希仁著,第七版) P119,这里不多阐述,事实上,由于近年来已经广泛地使用了无分类的IP地址进行路由选择,A, B, C类地址的区分已经成为了历史。这里仅介绍一下IPv4中某些特殊的地址:

网络号 : 主机号 源地址使用 : 目的地址使用 : 意义
0 : 0 可 : 不可 : 用于DHCP协议中向DHCP服务器申请动态IP地址
0 : host-id 可 : 不可 : 本网络上某台主机host-id
全1 : 全1 不可 : 可 : 在本网络上进行广播(各路由器均不转发)
net-id : 全1 不可 : 可 : 对网络net-id中的所有主机进行广播
127 : 非全0或非全1 可: 可 : 用于本地软件loopback测试

对于这部分的内容需要注意的是:
[1] 按照互联网的观点,一个网络是只具有相同网络号net-id的主机的集合,因此,用转发器或网桥连接起来的若干个LAN仍然视为一个网络,因为这些LAN都具有同样的网络号。只有具有不同的网络号的局域网才必须使用路由器进行互连。
[2] 主机或路由器可以有多个IP地址。路由器总是具有2个或2个以上 的IP地址。路由器的每一个接口都有一个不同网络号的IP地址。
[3] 当两个路由器直接相连时,在连线两端的接口处,可以分配也可以不分配IP地址,为了节省IP地址资源,这种情况下现在也常常不分配IP地址。

2. CIDR

由于两级IP地址的空间利用率有时很低,而且不够灵活,因此后来出现了划分子网 (RFC[950]) 的概念,将两级IP地址变为三级IP地址。于是这一时期的IP地址就记为:
IP地址 ::= { <网络号>, <子网号>, <主机号> }
关于划分子网的内容,详见《计算机网络》P135。

尽管划分子网在一定程度上缓解了互联网在发展中遇到的困难,但在1992年互联网仍然面临着三个必须尽早解决的问题:
[1] B类地址在1992年已经分配了近一半,很快就将全部分配完毕。
[2] 互联网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个)。
[3] 整个IPv4的地址空间最终将全部耗尽。在2011年2月3日,IANA宣布IPv4地址已经耗尽了。
当时预计前两个问题将在1994年变得非常严重,因此IETF很快就研究出无分类编址的方法来解决前两个问题。IETF认为上面第三个问题属于更加长远的问题,因此专门成立IPv6工作组负责研究解决新版本IP协议的问题。

无分类编址方法的正式名字就是无分类域间路由选择CIDR (Classless Inter-Domain Routing)。CIDR最主要的特点有两个:
[1] CIDR消除了传统的A类,B类,C类和划分子网的概念,将IP地址🈶三级编址又变为了二级编址,但这已经是无分类的两级编址了,其记法为:
IP地址 ::= { <网络前缀>, <主机号> }
[2] CIDR把网络前缀都相同的连续的IP地址组成一个"CIDR地址块"。一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示原来传统分类地址的很多个路由,有效减少了路由表项,提高查找效率。

对于这部分内容需要注意的是:
[1] 为了更方便地进行路由选择,CIDR使用32位的地址掩玛,这与划分子网中的子网掩码很相似,路由表项匹配的时候也是将地址掩码与目的IP地址进行二进制与运算 (详细见P137)。
[2] 由于在查找路由表的时候可能会得到不止一个匹配结果,因此应当从匹配结果中选择具有最长网络前缀的路由,即最长前缀匹配,详细可见P145。此外,为了提高查找路由表的效率,《计算机网络》一书中还介绍了使用二叉搜索查找路由表,详见P147。

3. ARP协议

地址解析协议ARP是用来将一个已知的IP地址映射成相应的MAC地址。
ARP协议解决这个问题的方法是在主机的ARP高速缓存, ARP cache中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或删除)。
ARP协议的工作流程如下:
[1] 当主机A需要知道与其相连的某个局域网上的某台主机B的硬件地址时,先在ARP cache中查找是否有主机B的硬件地址,若有则直接取出使用,若找不到,则进行下面的操作。
[2] 主机A生成一个ARP请求分组在该局域网上进行广播,ARP请求分组的内容大致为:本主机的IP地址+MAC地址,和目的主机的IP地址。
[3] 当该局域网上的主机B收到该ARP请求分组后,检测到目的IP地址与它的IP地址相匹配,于是将源主机的IP地址和MAC地址写进ARP cache当中,再生成ARP响应分组,向主机A单播。
[4] 主机A收到主机B的ARP响应分组后,将主机B的IP地址和MAC地址写进ARP cache中。

这部分内容需要注意的是:
[1] ARP对保存在ARP cache中的每一个映射项目都设置了生存时间(例如,10~20分钟)。
[2] ARP协议是用来解决同一个局域网上的主机或路由器的IP地址到MAC地址的映射问题。对于不同局域网的主机或路由器,将无法解析出对应的MAC地址(事实上也完全没必要)。

4. IPv4数据报格式

一个IPv4数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节。具体首部格式和各字段的意义详细见《计算机网络》P128。注意一下标识(identification)字段和片位移字段的作用,前者是为了识别分片后的数据报是否属于原来同一份数据报,后者是为了识别分片后的数据报的数据字段在原报文的数据字段中的相对位置

5. IP层转发分组的过程

首先需要清楚,路由器转发分组在大多数情况下是根据IP地址的网络号进行查找转发的,但也存在一些路由表项是面向特定主机的。这里假设采用CIDR编址,因此路由表每个路由项中至少有3项内容:目的网络号/特定主机IP,目的网络的网络前缀,下一跳位置。
路由器转发分组的过程如下:
[1] 取出IP数据报中的目的IP地址D。
[2] 首先将D与直连网络的网络前缀逐项进行匹配,具体是执行二进制与运算,成功则执行[7],失败则进入下一步。
[3] 将D与特定主机的IP地址逐项进行匹配,成功则执行[7],失败则进入下一步。
[4] 将D与非直连网络的网络前缀逐项进行匹配,成功则执行[7],失败则进入下一步。
[5] 若路由表中具有默认路由,则执行[7],否则执行[6],
[6] 发送ICMP不可达报文。
[7] 取出下一跳的IP地址,送交给数据链路层的网络接口软件,利用ARP协议解析出对应MAC地址,并将该MAC地址写进MAC帧的首部,根据这个MAC地址就能找到下一跳路由器/主机的位置。

6. ICMP协议

为了更有效地转发IP数据报和提高交付成功的机会,在网络层使用了网际控制报文协议ICMP (Internet Control Message Protocol) 。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP报文作为IP数据报中的数据部分,加上首部后组成IP数据报发出去。
ICMP报文的格式,类型详见《计算机网络》P147,这里只简单罗列四种常见的ICMP报文类型。

类型值 类型
3 终点不可达
11 时间超过
8 回送(Echo)请求
0 回送(Echo)回答
13 时间戳(Timestamp)请求
14 时间戳(Timestamp)回答

其中,回送请求和回答报文可以用来测试目的地是否可达以及了解其有关状态,时间戳请求和回答报文可用于时钟同步和时间测量。
ICMP的一个重要应用就是分组网间探测PING(Packet InterNet Groper),用来测试两台主机之间的连通性。PING使用了ICMP回送请求会回答报文,由于往返的ICMP报文上都有时间戳,因此也很容易就能算出往返时间。
另一个非常有用的应用就是traceroute(这是UNIX中的名称),它用来跟踪一个分组从源点到终点的路径。traceroute从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报(因为使用了非法端口号),第一个数据报的TTL设置为1,路径上第一个路由器是收下它后,将TTL-1变为0,便发送了ICMP时间超过的报文。这样一直下去,直到到达目的主机,由于IP数据报中的UDP用户数据报无法交付,因此目的主机要向源主机发送终点不可达的ICMP报文。

7. 路由选择协议

从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,则只有两大类:静态路由选择策略和动态路由选择策略。 静态路由选择也叫做非自适应路由选择,其特点就是简单和开销小,但不能及时适应网络状态变化,适用于简单的小网络。动态路由选择又叫做自适应路由选择,特点就是能够较好地适应网络状态变化,但实现起来较复杂,开销也比较大。动态路由选择适用于复杂的大网络。
互联网采用的路由选择协议主要是自适应的,分布式的路由选择协议,并采用了分层次的路由选择协议,即把整个互联网划分为许多较小的自治系统(autonomous system, AS)。 AS是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。一个AS对其他AS表现出的是一个单一的和一致的路由选择策略。
在目前的互联网中,一个大的ISP就是一个自治系统。互联网把路由选择协议划分为两大类:
[1] 内部网关协议IGP(Interior Gateway Protocol): 常见的有RIP, OSPF, IS-IS等。
[2] 外部网关协议EGP(External Gateway Protocol): 目前使用的协议是BGP,但目前尚未成为互联网标准。
自治系统内的路由选择称为域内路由选择(intradomain routing),自治系统间的路由选择成为域间路由选择(interdomain routing)。
关于RIP的描述,P153页开始就已经进行了详细的描述。若想大致了解关于OSPF,BGP,分别可见P159,P163。想要深入地了解OSPF,BGP最好还是看相关介绍文档或书籍(如RFC文件)。

8. IPv6

解决IP地址耗尽的根本措施就是采用具有更大地址空间的新版本IP,即IPv6。不过IPv6目前还只是草案标准 (RFC 2460, 4443, 4862)。
IPv6所引进的主要变化如下:
(1) 更大的地址空间。IPv6把地址从IPv4的32位增大到128位,使空间增大了296倍。
(2) 扩展的地址层次结构。IPv6由于地址空间很大,因此可以划分为更多的层次。
(3) 灵活的首部格式。IPv6数据报的首部与IPv4的首部并不兼容。IPv6定义了许多可选的扩展首部,不仅可提供比IPv4更多的功能,而且可以提高路由器的处理效率 (这是因为路由器对扩展首部,除逐跳扩展首部外,并不进行处理)。
(4) 改进的选项。IPv6的首部长度是固定的,数据包中含有的选项信息被放在有效载荷中,这与IPv4是放在首部中是不同的。
(5) 允许协议继续扩充。这一点很重要,因为技术总是在不断地发展,而新的应用也还会出现。
(6) 支持即插即用,即自动配置。因此IPv6不需要使用DHCP。
(7) 支持资源的预分配。IPv6支持实时视像等要求保证一定的带宽和时延的应用。
(8) IPv6首部改为8字节对齐。原来的IPv4是4字节对齐的。
IPv6数据报由两大部分组成,即基本首部(base header)和后面的有效载荷(payload)。有效载荷也称为净载荷,其允许有零个或多个扩展首部(extension header),再后面就是数据部分。需要注意的是,所有扩展首部并不属于IPv6数据报的首部。
IPv6首部的长度固定为40字节,分为8个字段。IPv6数据包虽然可以支持许多功能,但是首部并不复杂,因为它只有8个字段。关于IPv6的首部格式及各字段的意义,详见P172。若想要更加深入地了解IPv6,建议阅读相关专业文档或书籍。

IPv6的地址分类

IPv6地址有三种基本类型:
(1) 单播(unicast):单播就是传统的点对点通信。
(2) 多播(multicast):多播是一对多的通信。IPv6没有广播的术语,而是将广播看作多播的一个特例。
(3) 任播(anycast):IPv6新增的一种类型。任播的终点是一组计算机,但数据报是交付给其中一个,通常是距离最近的一个。
IPv6的地址分类如下表(RFC 4291):

地址类型 二进制前缀
未指明地址 0:0:0:0:0:0:0:0,或记为::/128
环回(loopback)地址 0:0:0:0:0:0:0:1,或::1/128
多播地址 FF00::/8
本地链路单播地址 FE80::/10
全球单播地址 除上述四种外,所有其他二进制前缀

其中未指明地址只能为某台主机当作源地址使用,条件是这台主机还没有配置到一个标准的IP地址;本地链路单播地址(Link-Local Unicast Address)用于专用网。

IPv4向IPv6过渡

IPv4向IPv6过渡的策略 (介绍两种):
(1) 双协议栈(dual stack): 指在完全过渡到IPv6之前,使一部分主机或路由器装有IPv4和IPv6的协议栈。因此双协议栈主机 (路由器)即能够和IPv6的系统通信,又能够和IPv4的系统通信。
(2) 隧道技术(tunneling): 在IPv6数据报要进入IPv4网络之前,把IPv6的数据报封装成为IPv4,IPv6整个数据报作为IPv4的数据部分。
关于这两种技术的详介,见P176。

ICMPv6

IPv6同IPv4一样也需要使用ICMP来反馈一些差错信息。新的版本称为ICMPv6,它比ICMPv4复杂得多,地址解析协议ARP和网际管理协议IGMP的功能都已被合并到了ICMPv6
ICMPv6是面向报文的协议,它利用报文来报告差错,获取信息,探测邻站或管理多播通信。ICMPv6增加了几个定义报文功能及含义的其他协议。

MPLS

MPLS全称为多协议标记交换(MultiProtocol Label Switching),“多协议"表示MPLS的上层可以采用多种协议。MPLS作为一种IP增强技术,被广泛地应用在互联网中。
MPLS的一个重要特点就是在MPLS域入口结点处,给每一个IP数据报打上固定长度的"标记”,然后对打上标记的IP数据报用硬件进行转发,这使得IP数据报转发的过程大大加快了。采用硬件技术对打上标记的IP数据报进行转发就称为标记交换。"交换"表示在转发时不必上升到第三层查找转发表,而是根据标记在第二层用硬件进行转发
MPLS域(MPLS domain)是指该域中有许多彼此相邻的路由器,并且所有路由器都是支持MPLS技术的标记交换路由器LSR(Label Switching Router)。LSR同时具有标记交换和路由选择两种功能,标记交换功能是为了快速转发,但在这之前LSR需要使用路由选择功能进行构造转发表

MPLS的基本工作流程

(1) MPLS域中各LSR用专门的标记分配协议LDP(Label Distribution Protocol) 交换报文,并找出和特定标记相对应的路径,即标记交换路径LSP(Label Switching Path)。构造转发表的详细步骤可阅读RFC 3031。
需要注意,MPLS是面向连接的,因为在LSP上的第一个LSR就根据IP数据报的初始标记确定了整个LSP,就向虚连接一样。这种"由入口结点确定转发路径"称为显式路由选择(explicit routing)
(2) 当一个IP数据报进入到MPLS时,MPLS入口结点(ingress node) 就给它打上标记 (实则是插入MPLS首部),并按照转发表转发给下一个LSR,以后所有的LSR都按照标记来进行转发。打上标记的过程叫做分类(classification)
(3) LSP上各LSR对数据报进行转发和标记对换(label swapping)
(4) 当IP数据报离开MPLS域时,MPLS出口结点(egress node) 就把MPLS标记去掉,把IP数据报交付给非MPLS的主机或路由器,以后就按照普通方法转发数据报。

转发等价类FEC

MPLS有一个很重要的概念就是转发等价类FEC(Forwarding Equivalence Class)。所谓FEC,就是路由器按照同样方式对待的IP数据报的集合。这里"按照同样方式对待"表示从同样接口转发到同样的下一跳地址,并且具有同样服务类别和同样丢弃优先级。
FEC的例子时:
(1) 目的IP地址与某一个特定IP地址的前缀匹配的IP数据报(相当于普通的IP路由器)。
(2) 所有源地址域目的地址都相同的IP数据报。
(3) 具有某种服务质量需求的IP数据报。
划分FEC的方法不受限制,由网络管理员来控制,因此非常灵活。入口结点ingress node并不是给每一个IP数据报都指派不同的标记,而是将属于同样FEC的IP数据报都指派同样的标记。FEC和标记时一一对应的关系。

MPLS首部的位置和格式

MPLS首部就在第二层和第三层之间。在把加上MPLS首部的IP数据报封装成以太网帧时,以太网的类型字段在单播的情况下设置为8846(16),在多播情况下为8848(16)。这样,接收方可以用帧的类型来判决这个帧时携带了MPLS标记还是一个常规的IP数据报。
"给IP数据报打上标记"其实就是在以太网帧的首部和IP数据报的首部之间插入一个4字节的MPLS首部。具体的标记就在"标记值"这个字段中。
MPLS首部的格式详见P193。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!