计算机网络学习笔记4-网络层

四、网络层

本章讨论网络互连问题,也就是讨论多个网络通过路由器互连成为一个互联网的各种问题。

 

(题外话:在设计网络时,曾提出采用电信网提供的端到端可靠传输服务。但在电信网中终端为电话机,没有智能也没有差错处理能力,所以电信网必须负责把用户电话机产生的话音信号可靠地传送到对方电话机。但计算机网络的终端是有智能的计算机,计算机有很强的差错处理的能力,因此在最终的网络设计上和采用了和电信网不同的思路。)

 

因特网采用的设计思路如下:网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接。每一个分组(也就是IP数据报)独立发送,与其前后分组无关。网络层不提供服务质量的保证。如果主机中的进程间的通信要求可靠的,那么就由网络中主机的运输层负责(包括差错处理、流量控制等)。

采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活。

 

 

网际协议IP

网际协议IP是TCP/IP体系中两个最主要的协议之一,也是最重要的因特网标准协议之一。与IP协议配套使用的还有三个协议:

l  地址解析协议ARP(Address Resolution Protocol)

l  网际控制报文协议ICMP(Internet Control Message Protocol)

l  网际组管理协议IGMP(Internet Group Management Protocol)

IP需要使用ARP协议,而ICMP、IGMP需要使用IP协议。

 

 

在讨论IP协议之前,需要了解什么是虚拟互连网络。

网络互连需要一些中间设备,根据设备所在层次不同,可以有以下四种不同的中间设备:

1)物理层使用的中间设备叫转发器;

2)数据链路层使用的是网桥;

3)网络层使用的是路由器;

4)网络层以上使用的是网关。

 

TCP/IP体系在网络互连上采用的做法是在网络层采用标准化协议,但相互连接的网络则可以是异构的。因此可以把互连以后的计算机网络看成一个虚拟互连网络。

 

1. IP地址

IP地址就是给因特网上的每一个主机或路由器的每一个接口分配一个在全世界范围是唯一的32位的标识符。

2. IP地址分类

每一类地址都由两个固定长度的字段组成,其中第一个字段是网络号,它标志主机或路由器所连接到的。一个网络号在整个网络中必须是唯一的。第二个字段是主机号,它标志该主机或路由器。一个主机号在它前面指明的网络范围内必须是唯一的。因此,一个IP地址在整个互联网范围内是唯一的。

3. IP地址特点

由于IP地址的分级结构,带来的好处是:IP地址管理机构在分配IP地址时只分配网络号,而剩下的主机号由得到该网络号的单位自行分配;第二,路由器仅根据主机所连接的网络号来转发分组,不考虑主机号,这样可以是路由转发表的项目数大幅减少,从而减少了路由表所占的存储空间,和查找路由表的时间。

 

127.0.0.1保留作为本地软件环回测试本主机的进程之间的通信之用。

 

4. IP地址与MAC地址

IP地址32位,MAC地址48位。

MAC地址又称为硬件地址、物理地址。

MAC地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址。IP地址被封装为帧数据,因此数据链路层看不到IP地址。

 

5. 地址解析协议ARP

已知主机IP地址,通过ARP协议得到该主机MAC地址。ARP协议的用途是为了从网络层使用的IP 地址解析出在数据链路层使用的硬件地址。

在主机ARP高速缓存中存放一个本地局域网上各主机和路由器的IP地址到硬件地址的映射表,并且动态更新该硬件表(新增或超时删除)。

主机A如何获取目的主机B的IP地址的物理地址?

1.)主机A的ARP进程在本地局域网上广播发送一个ARP请求分组。该分组中包含了主机A的IP地址、mac地址以及主机B的IP地址,请求IP地址对应的硬件地址。如“我的IP地址是209.0.0.5,MAC地址是00-00-C0-15-AD-18。我想知道IP地址为209.0.0.6的主机的硬件地址。”

2)在本地局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。

3)主机B的IP地址与ARP请求分组中的IP地址一致,收下该请求,并向主机A发送ARP响应分组,在分组中写入自己的硬件地址。其余主机不理睬该请求。

ARP请求为广播形式,ARP响应分组是普通单播。

 

从IP地址到硬件地址的解析是自动的,主机的用户对这个解析过程是不知道的。只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动把这个IP地址解析为链路数据层所需要的硬件地址。

 

问题:

既然在网络链路上传送的帧最终是按照硬件地址找到目的主机的,那么为什么我们不直接使用硬件地址进行通信,而是要使用抽象的IP地址并调用ARP来寻找出相应的硬件地址呢?

答:由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行复杂的硬件地址转换工作,因此由用户或用户主机来完成这项工作几乎是不可能的。但统一的IP地址把这个复杂问题解决了。连接到因特网的主机只需拥有统一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为上述的ARP解析过程是计算机软件自动完成的,对用户来说不可见。因此在虚拟的IP网络上用IP地址进行通信给广大的计算机用户带来了很大的方便。

 

6. IP数据报的格式

一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度20字节,首部固定部分后面是一些可选字段,长度是可变的。


 

6.1首部

6.1.1首部固定部分各字段

(1)版本   占4位,指IP协议的版本。

(2)首部长度  占4位,可表示的最大十进制数值是15。所以首部最大为60字节,最小为20字节。

(3)区分服务  略。

(4)总长度   指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。但这样长度的数据报很难遇到,因为在数据链路层协议中规定一个数据帧中的数据字段最大长度为最大传送但愿(MTU)。当一个IP数据报封装成链路层的帧时,此数据报的总长度一定不能超过下面的数据链路层规定的MTU。例如,以太网规定MTU为1500字节。若传送的数据报长度超过链路层的MTU值,就必须把过长的数据报进行分片处理。

 

IP协议规定,在因特网中所有的主机和路由器,必须能够接受长度不超过576字节的数据报,这是假定上层交下来的数据长度有512字节,加上最长的IP首部60字节,再加上4字节的富余。当主机需要发送的数据报超过576字节,应当先了解目的主机是否接受超过576字节的数据报,否则进行分片。

 

(5)标识  占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个标识并不是序号,因为IP是无连接服务,不存在按序接收数据报的问题。当数据报的长度超过MTU需要分片时,酒根据此字段将分片后的数据报进行组装。

 

(6)标志   占3位,但目前只有两位有意义

标志字段中的最低位记为MF,MF=1表示后面还有分片。MF=0表示这是若干数据报的最后一个。

标志字段中间的一位记为DF,只有DF=1的时候才允许分片。

 

(7)片偏移   占13位。指较长的分组在分片后,某片在原分组中的相对位置。也就是相对于用户数据字段的起点,该片从何处开始,片偏移以8个字节位偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。

例题给出了如何计算片偏移:



(8)生存时间   占8位,生存时间字段通常缩写为TTL(Time To Live),表明数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子(例如从路由器R1转发到R2,再转发到R3,然后又转发到R1),因而白白浪费了网络资源。

最初的设计TTL是以秒为单位,每经过一个路由器时,就把TTL减去数据报在路由器中消耗的时间,知道TTL为0时,就丢弃这个数据报。

然而,随着技术发展,路由器转发速度越来越快,一般都远远小于1秒,后来就把TTL字段的功能改为“跳数限制”,路由器在转发数据报之前就把TTL减1.若TTL值减小到0,就丢弃。

TTL的意义是指明数据报在因特网中可以经过多少个路由器。显然最大值是255.若把TTL初始值置为1,则数据报只能在本局域网中转发。一传到局域网上的某个路由器,就会被丢弃。

 

(9)协议   占8位。指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。如图为常用协议和相应的协议字段。


(10)首部校验和  占16位。这个字段只校验数据报首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部校验和。校验失败则丢弃。

(11)源地址 占32位。

(12)目的地址  占32位。

 

6.2 IP数据报首部可变部分

增加IP数据报首部的可变字段是为了增加数据报功能。

 

7.IP层转发分组的流程

问题:待转发IP数据报如何找到下一跳路由器?

答:当路由器收到一个待转发的数据报,从路由表中得出下一跳路由器的IP地址后,将其送入数据链路层的网络接口软件。网络接口软件通过ARP,负责把下一跳路由器的IP地址转换成MAC地址,并将此硬件地址放在链路层的MAC帧首部,然后根据这个硬件地址找到下一跳路由器。

因此每发送一串数据报时,会不断重复进行查找路由表、计算硬件地址、写入MAC帧首部等过程。

分组转发算法归纳如下:

1.从数据报的首部获取目的主机的IP地址D,得出目的网络地址为N;如何获取?(答:路由器中有子网掩码,将子网掩码与IP地址相与即可得出网络地址)

2.若N就是此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他路由器,直接把数据报交付给目的主机。(这里包括把目的主机地址D转换为MAC地址,把数据报封装为MAC帧,再发送此帧);否则就是间接交付,执行3;

3.若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由;否则,执行4;

4.若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器。否则执行5;

5.若路由表中有一个默认路由,则把数据报传送给默认路由器。否则执行6;

6.报告转发分组出错。

 

8. 划分子网和构造超网

8.1划分子网

由于网络号+主机号的两级地址存在以下问题:

1.IP地址空间的利用率有时很低。

2.给每一个物理网络分配一个网络号会使路由表变得太大,因而使网络性能变坏。

3.两级IP地址不够灵活。有时某个单位需要紧急开通一个新的网络,但是在申请到一个新的IP地址之前,新增加的网络无法连接到因特网上开始工作。为了能够随时灵活地增加本单位的网络,在IP地址中增加子网号字段,变为三级地址。这种做法叫做划分子网或子网寻址或子网路由选择。

 

A类地址:前1个字节为网络号,后3个为主机号

B类地址:前2个字节为网络号,后2个字节为主机号

 

划分子网

1)一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网,划分子网纯属一个单位内部的事,本单位以外的网络看不见这个网络是由多少个子网组成,因为这个单位对外表现仍然为一个网络。

2)具体操作事在网络的主机号中借用若干位作为子网号。于是IP地址在本单位由二级地址变为三级地址。

3)凡是从其他网络发送给本单位某个主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接到本单位网络上的路由器。但此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网,把IP数据报交付给目的主机。

例子如图



 

8.2子网掩码

子网掩码是一个网络或一个子网的重要属性。

子网掩码格式:网络地址对应的位为1,主机号对应的位为0

例如A类地址的子网掩码为255.0.0.0.B类地址的子网掩码为255.255.0.0.

问题:假定上图中有一个数据报(目的地址是145.13.3.10)已经到达了路由器R1,那么这个路由器如何把它转发到子网145.13.3.0上呢?

答:从IP数据报的首部无法看出源主机或目的主机所连接的网络是否进行了子网划分。因此使用子网掩码来解决这个问题。

将子网掩码与IP地址相与,就可以立即得到网络地址。

子网数的求法

若子网号有n位,则共有2n种可能的排列,再除去全0和全1两种情况。

 

同样的IP地址和不同的子网掩码可以得到相同的网络地址,但具体的子网主机号不同。

 

8.3使用子网时的分组转发

在划分子网后,路由器必须包含以下内容:子网掩码、目的网络地址和下一跳地址。

在划分子网的情况下,路由器分组转发算法如下:

1)从收到的数据报的首部提取目的IP地址D;

2)先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D相与,看结果是否和相应的网络地址匹配。若匹配,则直接交付(当然还需要把D转换为MAC地址,把数据报封装成帧发送出去),否则执行3。

3)若路由表中有目的地址D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器。否则,执行4。

4)对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D相与,其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则执行5.

5)若有默认路由,则传送给默认路由,否则执行6;

6)报告转发分组出错。

 

8.4无分类编址CIDR

由于IP地址面临着被分配完的威胁。于是提出了无分类编址方法,全称无分类域间路由选择CIDR。特点如下:

1)CIDR消除了传统的A类、B类、C类地址以及划分子网的概念。CIDR把IP地址划分为两个部分,前面的部分为网络前缀,后面的部分用来指明主机。使用“斜线记法”即在IP地址后面加上斜线‘/’,然后写上网络前缀所占的位数。

2)CIDR把网络前缀都相同的连续IP地址组成一个CIDR地址块。只要知道CIDR地址块中一个地址,就可以知道这个地址块的起始地址和最大地址,以及地址块中的地址数。

 

8.4.1最长前缀匹配

使用CIDR时,路由表的项目由“网络前缀”和“下一跳地址”组成

。但是在查找路由表时可能会得到不止一个匹配结果。因此应当从匹配结果中选择具有最长网络前缀的路由。这叫做最长前缀匹配。

 

8.4.2使用二叉线索树查找路由表

 

8.5网际控制报文协议ICMP

为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP为IP层协议,其报文装在IP数据报的数据部分,加上数据报的首部,组成IP数据报发送出去。

ICMP报文格式如图所示:


8.5.1 ICMP报文的种类

ICMP报文有两种:ICMP差错报告报文和ICMP询问报文。

ICMP报文前四个字节是统一的格式,共有三个字段:即类型、代码和校验和。接着的四个字节与类型有关,最后是数据部分,其长度取决于ICMP报文的类型。

 

几种常用的ICMP报文类型


ICMP差错报告报文一共有五种:

1)终点不可达   当路由器或主机不能交付数据报时就向源点发送终点不可达报文。

2)源点抑制  当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。

3)时间超过   当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据片时,就把已收到的数据报片全部丢弃,并向源点发送时间超过报文。

4)参数问题   当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。

5)改变路由(重定向)   路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器。

改变路由解释:

在因特网中的每一个主机也要有一个路由表,因为网络中主机数远大于路由器数,所以出于效率的考虑,这些主机不和连接在网络上的路由器交换信息。在主机刚开始工作时,一般都在路由表中设置一个默认路由器的IP地址,不管数据报要发送到哪个网络,都需要经过这个路由器。而这个路由器知道每一个目的网络的最佳路由。如果默认路由器发现主机发往某个目的地址的数据报的最佳路由不应当经过默认路由器,而是经过网络上的另一个路由器R1时,就用改变路由报文发送给主机。主机就在其路由表中增加一个项目。到某某地址应经过路由器R1.

 

以下情况不发送ICMP差错报文:

1)对ICMP差错报文不发送

2)对第一个分片的数据报片的所有后序数据报文都不发送

3)对具有多播地址的数据报都不发送

4)对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送

 

常用的ICMP询问报文

1)回送请求和回答   收到回送请求报文的主机,必须给源主机或路由器发送一个回送回答报文。用来测试目的站是否可达。

2)时间戳请求和回答  用来进行时钟同步。

 

8.5.2 ICMP应用

分组网间探测PING,用来测试两个主机之间的连通性。Ping使用了ICMP回送请求与回送回答报文。Ping是应用层直接使用网络层ICMP的一个例子。它没有通过运输层的TCP或UDP。

ping通


ping不通


8.6 因特网的路由选择协议

本节将讨论几种常用的路由选择协议,也就是要讨论路由表中的路由是怎样得出的。

由于因特网规模较大,如果让所有路由器知道所有网络的连接情况,花费时间和流量;许多单位不愿意让外界了解自己单位的网络布局。基于上述两点,因特网采用分层的路由选择协议。

因特网将整个互联网划分为许多较小的自治系统,记为AS。一个大的ISP就是一个AS。

路由选择协议划分为两大类:
1)内部网关协议IGP  即在一个自治系统内部使用的路由选择协议。如RIP、OSPF等协议

2)外部网关协议EGP  若源主机和目的主机处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要一种协议将路由选择信息传递给另一个自治系统。如BGP-4.


8.6.1内部网关协议RIP(Routing Information Protocol)

RIP是一种分布式的基于距离向量的路由选择协议,最大优点是简单。

RIP协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离纪录。RIP任务好的路由就是经过的距离最小的路由。

RIP协议将“距离”定义如下:(距离也称为跳数)
1)从路由器到直接连接的网络的距离为1。从路由器到非直接连接的网络的距离定义为所经过的路由器数加1。

2)RIP允许一条路径不超过15跳。因此大于16等于不可达。因此RIP只适用于小型网络。

注意:RIP不能在两个网络之间同时使用多条路由。RIP选择一条具有最少路由器的路由,哪怕还存在一条高速低时延但路由器较多的路由。

 

RIP协议的特点是:

1)仅和相邻路由器交换信息。

2)交换的信息是当前本路由器所知道的全部信息,即自己的路由表。也就是“我到本自治系统中所有网络的最短距离,以及到每个网络应经过的下一跳路由器。”

3)按固定时间间隔交换路由信息。

距离向量算法



例题



 

 


RIP报文格式(略)

RIP协议缺点:限制了网络规模。其次路由器之间交换的是完整路由表,随着网络规模的增大,开销会增大。最后“坏消息传播得慢”,使更新过程的收敛时间较长。因此为了解决存在的问题,提出了OSPF。

 

8.6.2内部网关协议OSPF

OSPF开放最短路径优先。使用了dijkstra算法。

OSPF最主要的特征就是使用分布式的链路状态协议。

1)向本自治系统的所有路由器发送消息。使用泛洪法(flooding),也就是路由器通过所有输出端口向所有相邻的路由器发送消息。而每一个相邻路由器又再将此消息发往其所有的相邻路由器(除了刚刚发来消息的路由器),最终整个区域中所有路由器都得到这个消息的副本。

2)发送的消息是与本路由器相邻的所有路由器的链路状态。链路状态是说明本路由器都和哪些路由器相邻,以及该链路的“度量”,这里的“度量”用来表示费用、距离、时延、带宽等等。在Dijkstra算法中称为“代价”。这些由网络管理员来决定。

3)只有当链路状态发生变化时,路由器才向所有路由器泛洪。

 

所有的路由器最终都能建立一个全网统一的链路状态数据库,并且能够及时更新。为了使OSPF能够用于较大规模的网络,将一个自治系统层次划分为若干个更小的范围,叫区域。只在本区域内泛洪,减少了整个网络上的通信量。

OSPF使用IP数据报进行传送,而RIP使用UDP进行传输。

 

8.7 外部网关协议BGP

BGP力求寻找一条能够到达目的网络且比较好的路由,而并非寻找一条最佳路径。因此采用了路径向量路由选择协议。

 

8.8路由器的构成

如图为路由器的结构


从图中可以看粗路由器主要分为两个部分:路由选择和分组转发。关于路由选择前面已经介绍过了,本节介绍分组转发。

分组转发由三部分构成:交换结构、一组输入端口、一组输出端口。

交换结构:根据转发表堆分组进行处理,将某一个输入端口进入的分组从一个合适的端口输出。

在上图中,路由器的输入和输出端口里面都各有三个方框,用方框中的1,2,3分别代表物理层、数据链路层和网络层的处理模块。物理层进行比特的接收。数据链路层则按照链路层协议接收传送分组的帧。在把帧的首部和尾部剥去后。分组被送入网络层的处理模块。若接收到的分组时路由器之间交换路由信息的分组(如RIP或OSPF分组等),则把这种分组送交路由器的路由选择部分中的路由选择处理机。若接收到的是数据分组,则按照分组首部中的目的地址查找转发表,根据得到的结果选择合适的输出端口。

当一个分组正在查找转发表时,后面又紧跟着从这个输入端口收到另一个分组。这个后到的分组就必须在队列中排队等待,因而产生了一定的时延,如图所示。


输出端口上也同样会有产生时延的情况发生。这就会使队列的存储空间减为0,而后面进入队列的分组由于没有存储空间只能丢弃。这就是我们所说的分组丢失,发生在路由器中输入或输出队列产生溢出的时候。设备或线路出故障也可能使分组丢失。


8.9 IP多播

IP多播即一对多通信。

8.10 IGMP协议

略。

8.11虚拟专用网VPN和地址转换NAT

由于IP地址的紧缺,一个机构能申请到的IP地址数往往小于本机构所拥有的主机数。因此RFC指明了一些专用地址,用于内部自行分配IP,而不能与互联网相连。在因特网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。

三个专用地址块:

1)10.0.0.0到10.255.255.255(或记为10.0.0.0/8)

2)172.16.0.0到172.31.255.255(或记为172.16.0.0/12)

3)192.168.0.0到192.168.255.255(或记为192.168.0.0/16)

 

有时一个很大的机构有许多部门分布在相距很远的一些地点,而在诶一个地点都有自己的专用网,若这些不同地点的专用网要进行通信,有两种办法:

1)租用电信公司的通信线路,租金贵;

2)利用公网的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网VPN。

 

如果专用网不同网店之间通信必须经过公用的因特网,那么所有通过因特网传送的数据都必须加密。使用IP隧道技术实现虚拟专用网。

 

VPN有以下三种类型:

内联VPN  同一机构构成的VPN

外联VPN   需要外部击鼓加入的VPN

远程接入VPN  公司远程接入。

 

网络地址转换NAT

有一种情况是,在专用网内部的一些主机本来已经分配到了本地IP地址,但现在又想和因特网进行通信(并不需要加密),那么应该采取什么措施?

答:最简单的是再申请一个全球IP,但IP地址不容易申请,目前采用最多的方法是NAT地址转换。

 

NAT需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换为全球IP地址。

 

猜你喜欢

转载自blog.csdn.net/qq_34364995/article/details/80743496
今日推荐