承接上篇说是的链路层,便产生几个问题:
1. 发送者如何知道接收者的MAC地址?
2. 发送者如何知道接收者和自己同属一个子网?
3. 如果接收者和自己不在同一个子网,数据包如何发给对方?
因此为了解决这些问题,网络层引入了三个协议,分别是IP协议、ARP协议、路由协议。
网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。即**“路径选择、路由及逻辑寻址**”。
网络层提供的两种服务
在以前,对于网络层应当提供的服务有过长期的争论。争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统?
有些人认为,计算机网络应借鉴电话所使用的面向连接的通信方式。当两台计算机进行通信时,也应当先建立连接(但在分组交换中是建立一条**虚电路VC (Virtual Circuit) **,以预留双方通信所需的一切网络资源。
但互联网的先驱者却提出一种崭新的网络设计思路。由于计算机有很强的差错处理能力(这点和传统的电话机有本质上的差别),网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
网络在发送分组时不需要先建立连接。每一个分组(也就是IP数据报)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺。也就是说,所传送的分组可能出错、丢失、重复和失序(即不按序到达终点),当然也不保证分组交付的时限。由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器比较简单,且价格低廉 (与电信网的交换机相比较)。
时至今日,虚电路服务已成为历史了,鉴于TCP/IP体系的网络层提供的是数据报服务,因此下面我们的讨论都是围绕网络层如何传送IP数据报。
一、IP(Internet Protocol 网际协议)协议
通过前面的介绍我们知道,MAC地址只与厂商有关,与所处的网络无关,所以无法通过MAC地址来判断两台主机是否属于同一个子网。
因此,网络层引入了IP协议,制定了一套新地址,使得我们能够区分两台主机是否同属一个网络,这套地址就是网络地址,也就是所谓的IP地址。
IP地址目前有两个版本,分别是IPv4和IPv6,IPv4是一个32位的地址,常采用4个十进制数字表示。IP协议将这个32位的地址分为两部分,前面部分代表网络地址,后面部分表示该主机在局域网中的地址。由于各类地址的分法不尽相同,以C类地址192.168.24.1为例,其中前24位就是网络地址,后8位就是主机地址。因此, 如果两个IP地址在同一个子网内,则网络地址一定相同。为了判断IP地址中的网络地址,IP协议还引入了子网掩码, IP地址和子网掩码通过按位与运算后就可以得到网络地址。
由于发送者和接收者的IP地址是已知的(应用层的协议会传入), 因此我们只要通过子网掩码对两个IP地址进行AND运算后就能够判断双方是否在同一个子网了。
与IP协议配套使用的还有三个协议:
1. 地址解析协议ARP (Address Resolution Protocol)
2. 网际控制报文协议ICMP (Internet Control Message Protocol)
3. 网际组管理协议IGMP (Internet Group Management Protocol)
由于网际协议IP是用来使互连起来的许多计算机网络能够进行通信的,因此TCP/IP体系中的网络层常常被称为网际层(internet layer)或IP层。
了解部分:###虚拟互连网络
在讨论网际协议IP之前,必须了解什么是虚拟互连网络。
我们知道,如果要在全世界范围内把数以百万计的网络都互连起来,并且能够互相通信,那么这样的任务一定非常复杂。其中会遇到许多需要解决的问题,如:不同的寻址方案;不同的最大分组长度;不同的网络接入机制;不同的超时控制;不同的差错恢复方法;不同的状态报告方法;不同的路由选择技术;不同的用户接入控制;不同的服务(面向连接服务和无连接服务); 不同的管理与控制方式;等等。
能不能让大家都使用相同的网络,这样可使网络互连变得比较简单。答案是不行的。因为用户的需求是多种多样的,没有一种单一的网络能够适应所有用户的需求。另外,网络技术是不断发展的,网络的制造厂家也要经常推出新的网络,在竞争中求生存。因此在市场上总是有很多种不同性能、不同网络协议的网络,供不同的用户选用。
从一般的概念来讲,将网络互相连接起来要使用一些中间设备。根据中间设备所在的层次,可以有以下四种不同的中间设备:
1)物理层使用的中间设备叫做转发器(repeater)
2)数据链路层使用的中间设备叫做网桥或桥接器((bridge)
3)网络层使用的中间设备叫做路由器(router)
4)在网络层以上使用的中间设备叫做网关(gateway)。用网关连接两个不兼容的系统需要在高层进行协议的转换。
网关由于比较复杂,目前使用得较少。因此现在我们讨论网络互连时,都是指用路由器进行网络互连和路由选择。路由器其实就是一台专用计算机,用来在互联网中进行路由选择。
下图(a)表示有许多计算机网络通过一些路由器进行互连。由于参加互连的计算机网络都使用相同的网际协议IP (Intemet Protocol),因此可以把互连以后的计算机网络看成如下图(b)所示的一个虚拟互连网络(intemet)。所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用IP协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。
当很多异构网络通过路由器互连起来时,如果所有的网络都使用相同的IP协议,那么在网络层讨论问题就显得很方便。举个例子:
如果我们只从网络层考虑问题,那么IP数据报就可以想象是在网络层中传送,其传送路径是:H1→R1→R2→R3→R4→R5→H2 ,这样就不必画出许多完整的协议栈,使问题的描述更加简单。
1.1、ARP协议(地址解析协议)
即地址解析协议,是根据IP地址获取MAC地址的一个网络层协议。其工作原理如下:
ARP首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包会在链路层进行再次包装,生成以太网数据包,最终由以太网广播给子网内的所有主机,每一台主机都会接收到这个数据包,并取出标头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃该数据包。ARP接收返回消息,以此确定目标机的MAC地址;与此同时,ARP还会将返回的MAC地址与对应的IP地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。cmd输入 arp -a 就可以查询本机缓存的ARP数据。
通信时使用了两个地址:
- IP 地址(网络层地址)
- MAC 地址(数据链路层地址)
ARP 作用:从网络层使用的 IP 地址,解析出在数据链路层使用的硬件地址。
地址解析协议 ARP 要点
- 不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
- 每一个主机都设有一个 ARP 高速缓存 (ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
windows系统查看ARP缓存 :在dos中输入 arp -a命令
应当注意的问题
- ARP 用于解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
- 如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
- 从 IP 地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
- 只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址。
为什么不直接使用硬件地址进行通信?
由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。 IP 编址把这个复杂问题解决了。连接到互联网的主机只需各自拥有一个唯一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为上述的调用 ARP 的复杂过程都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。 因此,在虚拟的 IP 网络上用 IP 地址进行通信给广大的计算机用户带来了很大的方便。
1.2、ICMP协议(网际控制报文协议)
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP (Internet Control Message Protocol) [RFC 792]。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP是互联网的标准协议。但ICMP不是高层协议(看起来好像是高层协议,因为ICMP报文是装在IP数据报中,作为其中的数据部分),而是IP层的协议。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。ICMP报文格式如下图所示。
ICMP 报文的种类:
ICMP报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。
ICMP报文的前4个字节是统一的格式,共有三个字段:类型、代码和检验和。接着的4个字节的内容与ICMP的类型有关。最后面是数据字段,其长度取决于ICMP的类型。下图给出了几种常用的ICMP报文类型。
ICMP 差错报告报文的数据字段的内容
不应发送 ICMP 差错报告报文的几种情况
a.对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。 b.对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。 c.对具有多播地址的数据报都不发送 ICMP 差错报告报文。 d.对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
ICMP 询问报文有两种
1.回送请求和回答报文 2.时间戳请求和回答报文
ICMP的应用举例
ICMP的一个重要应用就是分组网间探测PING (Packet InterNet Groper),用来测试两台主机之间的连通性。PING使用了ICMP回送请求与回送回答报文。PING是应用层直接使用网络层ICMP的一个例子。它没有通过运输层的TCP或UDP。
Windows操作系统的用户可在接入互联网后转入MS DOS(点击“开始”,点击“运行”,再键入“cmd “)。看见屏幕上的提示符后。就键入“ping hostname”(这里的hostname是要测试连通性的主机名或它的IP地址),按回车键后就可看到结果。
另一个非常有用的应用是traceroute(这是UNIX操作系统中名字),它用来跟踪一个分组从源点到终点的路径。在Windows操作系统中这个命令是tracert。其工作原理原理有兴趣的话可自行查阅。
1.2、IGMP协议(网际控制报文协议)
IGMP是Internet Group Management Protocol的简称,又被称为互联网组管理协议,是TCP/IP协议族中负责IPv4组播成员管理的协议。IGMP用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。IGMP通过在接收者主机和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中。
目的: IP组播通信的特点是报文从一个源发出,被转发到一组特定的接收者。但在组播通信模型中,发送者不关注接收者的位置信息,只是将数据发送到约定的目的组播地址。要使组播报文最终能够到达接收者,需要某种机制使连接接收者网段的组播路由器能够了解到该网段存在哪些组播接收者,同时保证接收者可以加入相应的组播组中。IGMP就是用来在接收者主机和与其所在网段直接相邻的组播路由器之间建立、维护组播组成员关系的协议。
IGMP版本: 1.IGMPv1中定义了基本的组成员查询和报告过程 2.IGMPv2在此基础上添加了查询器选举和组成员离开的机制 3.IGMPv3中增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文
三个版本在演进过程中对协议报文的处理是向前兼容的,因此尽管各个版本的协议报文格式不同,但是运行IGMP高版本的路由器可以识别低版本的IGMP报文。
所有IGMP版本都支持ASM(Any-Source Multicast)模型。IGMPv3可以直接应用于SSM(Source-Specific Multicast)模型,而IGMPv1和IGMPv2则需要IGMP SSM Mapping技术的支持才可以应用于SSM模型。
IGMP协议详细原理:后续补充
三、IP数据报格式
从上图可看出,一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。下面介绍首部各字段的意义。
1.IP数据报首部的固定部分中的各字段
1)版本
占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。关于以后要使用的IPv6(即版本6的IP协议),我们将在后文讨论。
2)首部长度
长度占4位,可表示的最大十进制数值是15。表明IP数据报的首部长度。最小值0101(5),最大值1111(15),单位是32字(4字节)。
3)区分服务
占8位,用来获得更好的服务。在一般的情况下都不使用这个字段。
4)总长度
总长度字段为16位,表明首部和数据之和的长度,单位为字节。
在上面提到,在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,这称为**最大传送单元MTU (Maximum Transfer Unit)**。当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层所规定的MTU值。例如,最常用的以太网就规定其MTU值是1500字节。若所传送的数据报长度超过数据链路层的MTU值,就必须把过长的数据报进行分片处理。
在进行分片时(见后面的“片偏移”字段),数据报首部中的“总长度”字段是指分片后的每一个分片的首部长度与该分片的数据长度的总和。
5)标识(identification)
占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
6)标志(flag)
占3位,但目前只有两位有意义。标志字段中的最低位记为MF (More Fragment)。MF=1即表示后面“还有分片”的数据报。MF = 0表示这己是若千数据报片中的最后一个。标志字段中间的一位记为DF (Don’t Fragment),意思是“不能分片”。只有当DF = 0时才允许分片。
7)片偏移
占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
8)生存时间
占8位,生存时间字段常用的英文缩写是**TTL (Time To Live)**,表明这是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在互联网中兜圈子(例如从路由器R1,转发到R2,再转发到R3,然后又转发到R1),因而白白消耗网络资源。TTL的意义是指明数据报在互联网中至多可经过多少个
**路由器。**TTL值就减小到零,就会被转发路由器丢弃。
9)协议
占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个协议进行处理。常用的一些协议和相应的协议字段值如下:
10)首部检验和
占16位.这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。为了进一步减小计算检验和的工作量,IP首部的检验和不采用复杂的CRC检验码而采用一种简单的计算
方法。有兴趣的可自行查阅。
11)源地址 占32位。
12)目的地址 占32位。
2.IP数据报首部的可变部分
IP数据报首部的可变部分就是一个选项字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。这里就不讨论这些选项的细节了。有兴趣的读者可自行查阅。
四、路由协议
通过ARP协议的工作原理可以发现,ARP的MAC寻址还是局限在同一个子网中,因此网络层引入了路由协议,首先通过IP协议来判断两台主机是否在同一个子网中,如果在同一个子网,就通过ARP协议查询对应的MAC地址,然后以广播的形式向该子网内的主机发送数据包;如果不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由。网关是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标IP所在的子网中,然后再通过ARP获取目标机MAC,最终也是通过广播形式将数据包发送给接收方。
而完成这个路由协议的物理设备就是路由器,在错综复杂的网络世界里,路由器扮演者交通枢纽的角色,它会根据信道情况,选择并设定路由,以最佳路径来转发数据包。
有关路由选择协议的基本概念
1. 理想的路由算法的特征
路由选择协议的核心就是路由算法,即需要何种算法来获得路由表中的各项目。一个理想的路由算法应具有如下的一些特点:
1)算法必须是正确的和完整的。这里,“正确”的含义是:沿着各路由表所指引的路由,分组一定能够最终到达目的网络和目的主机。
2)算法在计算上应简单。路由选择的计算不应使网络通信量增加太多的额外开销。
3)算法应能适应通信量和网络拓扑的变化,这就是说,要有自适应性。当网络中的通信量发生变化时,算法能自适应地改变路由以均衡各链路的负载。当某个或某些结点、链路发生故障不能工作,或者修理好了再投入运行时,算法也能及时地改变路由。有时称这种自适应性为“稳健性”(robustness)。
4)算法应具有稳定性。在网络通信量和网络拓扑相对稳定的情况下,路由算法应收敛于一个可以接受的解,而不应使得出的路由不停地变化。
5)算法应是公平的。路由选择算法应对所有用户(除对少数优先级高的用户)都是平等的。例如,若仅仅使某一对用户的端到端时延为最小,但却不考虑其他的广大用户,这就明显地不符合公平性的要求。
6)算法应是最佳的。路由选择算法应当能够找出最好的路由,使得分组平均时延最小而网络的吞吐量最大。虽然我们希望得到“最佳”的算法,但这并不总是最重要的。对于某些网络,网络的可靠性有时要比最小的分组平均时延或最大吞吐量更加重要。因此,所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。
应当指出,路由选择是个非常复杂的问题,因为它是网络中的所有结点共同协调工作的结果。其次,路由选择的环境往往是不断变化的,而这种变化有时无法事先知道,例如,网络中出了某些故障。此外,当网络发生拥塞时,就特别需要有能缓解这种拥塞的路由选择策略,但恰好在这种条件下,很难从网络中的各结点获得所需的路由选择信息。
倘若从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,则只有两大类,即静态路由选择策略与动态路由选择策略。静态路由选择也叫做非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化.对于很简单的小网络,完全可以采用静态路由选择,用人工配置每一条路由。动态路由选择也叫做自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。因此,动态路由选择适用于较复杂的大网络。
2. 分层次的路由选择协议
互联网采用的路由选择协议主要是自适应的(即动态的)、分布式路由选择协议。由于以下两个原因,互联网采用分层次的路由选择协议:
1)互联网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需的带宽就会使互联网的通信链路饱和。 2)许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到互联网上。
为此,可以把整个互联网划分为许多较小的自治系统(autonomous system),一般都记为AS。自治系统AS是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。一个AS对其他AS表现出的是一个单一的和一致的路由选择策略[RFC 4271]。
在目前的互联网中,一个大的ISP就是一个自治系统。这样,互联网就把路由选择协议划分为两大类,即:
a)内部网关协议IGP (Interior Gateway Protocol)
即在一个自治系统内部使用的路由选择协议,而这与在互联网中的其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多,如RIP和OSPF协议。
b)外部网关协议EGP (External Gateway Protocol)
若源主机和目的主机处在不同的自治系统中(这两个自治系统可能使用不同的内部网关协议),当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议EGP.目前使用最多的外部网关协议是BGP的版本4 (BGP-4).
自治系统之间的路由选择也叫做域间路由选择(interdomain routing),而在自治系统内部的路由选择叫做**域内路由选择(intradomain routing)**。
下图是两个自治系统互连在一起的示意图。每个自治系统自己决定在本自治系统内部运行哪一个内部路由选择协议(例如,可以是RIP,也可以是OSPF)。但每个自治系统都有一个或多个路由器(图中的路由器R1和R2)除运行本系统的内部路由选择协议外,还要运行自治系统间的路由选择协议(BGP-4) 。
总之,使用分层次的路由选择方法,可将互联网的路由选择协议划分为:
a)内部网关协议IGP:具体的协议有多种,如RIP和OSPF等。 b)外部网关协议EGP:目前使用的协议就是BGP。