计算机网络_04_网络层*
4. 网络层
在计算机网络中,网络层应该向数据链路层提供怎样的服务,“面向连接(打电话)”还是“无连接(写信)”?曾引起长期的争论。争论的实质就是:在计算机网络中,可靠性交付应当由谁来负责?是传输网络负责还是
收发双方负责。
4.1 网络层提供的两种服务*
互联网的先驱提出了一种独特的思路:
网络层只向上提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
网络在发送分组时不需要事先建立连接,每个分组(即IP数据报)独立发送,不进行编号,与其前后的分组无关。
网络层不保证服务质量,即不保证分组不重复、不丢失、不失序,也不保证传送的时限。
4.2 网际协议--IP协议*
- IP协议是TCP/IP协议族中最主要的一个协议。
- 与IP协议配套使用的还有三个协议:
- 地址解析协议ARP*
- 网际控制报文协议ICMP(Internet Control Message Protocol)*
- 网际组管理协议IGMP(Internet Group Management Protocol)

4.2.1 虚拟互连网(Internet)
如何沟通不同类型网络中的设备?-----使用中间设备,路由器,进行互联。

所谓的虚拟互连网也就是逻辑互连网,虽然互连起来的各种物理网络是异构的,但是通过IP协议,它们可以被统一起来。在用户端看来,这就是一个统一的互联网。
使用IP协议的虚拟互联网可以简称为IP网络,如果在这种覆盖全球的IP网络上使用TCP协议,那么就构成了我们众所周知的Internet。

4.2.2 分类的IP地址
IP地址是IP协议规定的地址。
1)IP 地址及其表示方法
把整个因特网看成是一个单一的网络,IP地址就是连接到这个网络的主机(或路由器)被分配的一个独特的32位标识符。IP地址由 互联网名字和数字分配机构 (Internet Corporation for Assigned Names and Numbers, ICANN)分配。
IP地址分为两个固定长度的字段,第一个字段称为网络号net-id,它标志主机(或路由器)所连接的网络,另一个字段是主机号host-id,它标志该主机(或路由器)。
2)常用的三种类别的IP地址

在A-E这五类IP地址中,只有A-C类地址能分配给用户使用。A、B、C类地址能分配的主机数量分别是 2^24-2、2^16-2、2^8-2个。因为要排除全0和全1的情况。
两种特殊的广播:
- 网络号全1+主机号全1(称为受限广播):表示在本网络上进行广播(各路由器均不进行转发)
- 网络号+主机号全1(称为直接广播):表示对某网络内的所有主机进行广播
网络号127+任何非全0或全1的主机号:本地回环测试地址,可以用于检测本地的各层是否正常。
IP地址分为两个组成部分的好处:
1)IP管理机构仅负责管理网络号,而主机号由分配到了网络号的单位负责分配、管理,这样就减少了IP管理机构的负担;
2)路由器只根据网络号进行分组的转发,这样就减少了路由表的内容,节省了路由器的存储成本。
多归属主机:
当一个主机连接到多个网络时,在每一个网络上都要有一个IP地址。对路由器而言,由于它连接了至少两个不同的网络(这样才能将数据报从一个网络发送到另一个网络),因此路由器必须至少有两个不同的IP地址。
用转发器或者网桥连接起来的若干个局域网仍然属于同一个网络,因此这些局域网都有同样的网络号。

IPv4的点分十进制表示方式:
每八位为一组,写成十进制数的形式,用 . 将其区分开。
4.2.3 IP地址与硬件地址
两者的区别:
- 硬件地址是数据链路层和物理层使用的地址,一旦确定便无法再更改;
- IP地址是逻辑地址,由网络层和以上的层使用,有可能改变。例如更换了宽带服务提供商后,网络号会改变,提供商分配的主机号一般也会改变。

网络层根据IP寻址,数据链路层和物理层根据MAC地址寻址。
4.2.4 地址解析协议ARP
通信时使用了两个地址:
- IP地址
- MAC地址
ARP(Address Resolution Protocol)的作用:从网络层使用的IP地址,解析出在数据链路层使用的MAC地址。
地址映射表:每个主机内部都有一个高速ARP缓存,用来存放所在局域网的所有主机和路由器的IP地址-MAC地址映射。
<IP地址;MAC地址;TTL(Time to Live,有效存活时间)>
ARP的工作流程:
当主机A想向网络中的主机B发送数据时,会先在本机的ARP缓存中查找是否有主机B的IP对应的MAC地址,
1)如果有,就将这个MAC地址写入MAC帧,然后通过局域网把MAC帧发送出去。
2)如果没有,就分为3种情况:
- 主机请求-主机回答:主机A在局域网内广播一个ARP请求分组,收到该请求的同局域网内的主机B会把自己的MAC地址封装进ARP响应分组并发送给主机A,收到响应分组后主机A会把这个MAC地址写入自己的ARP高速缓存中。
- 主机请求-路由器回答:主机A在局域网内广播一个ARP请求分组,收到该请求的同局域网内的路由器,如果发现自己连接着目的主机所在网络,会向主机A发送一个响应分组,这个响应分组包含着路由器自己的MAC地址和目的主机的IP。
- 路由器请求-路由器回答:路由器将主机的ARP请求进行转发,在转发多次后,某个路由器发现自己的某个接口在ARP请求的网络内,就将自己的MAC地址封装进ARP响应中,发送回去。
- 路由器请求-主机回答:路由器在接收到数据分组后,如果发现IP地址对应的MAC地址未知,就会发起ARP请求广播,局域网中的目的主机接收到了请后后就会发起响应。
ARP缓存的作用:
1)记录下IP地址-MAC地址的映射,减少ARP请求广播的发送次数;
2)在每次发送ARP请求的时候,主机会将自己的IP地址-MAC地址映射封装进请求分组中。当目的主机接收到请求后,会将这个IP地址-MAC地址映射存进自己的ARP缓存中。
需要注意的问题:
1)如果目的主机和本主机在同一个局域网,那么ARP请求分组发出去后,可以直接得到目的主机的响应分组,进而确定目的主机的MAC地址;
2)如果目的主机和本主机不在同一个局域网,那么ARP请求分组在局域网内发出后,会被路由器进一步转发到其他网络,由其他网络上的路由器再进一步地转发,直到找到目的主机。
4.2.5 IP数据报的格式
- IP数据报分为首部、数据两个部分;
- 首部分为固定部分和可变部分,固定部分的长度为固定的20字节,是所有IP数据报必须具有的,可变部分是一些可选字段,其长度可变。
固定部分的组成:
- 前4个字节:版本号(4位,表示IP协议的版本)+首部长度(4位,值的范围为x=0-15,表示首部有x*4个字节)+区分服务(DiffServ,占8位,用于提升服务质量,几乎不使用)+总长度(该IP数据报的总字节数,占16位,因此IP数据报的总字节数不能超过65535);
- 第二个4字节:标识(identification,占16位,每传送一个数据报该值+1,它并不用于保证可靠传输,它的使用场景是:若总长度>MTU,IP数据报会被分片成多个数据报,每个数据报的标识都一样,以便接收方将它们正确合并)+标志位(占3位,目前只有左边2位有用,最左边一位称为DF(Don't Fragment),当DF=0时允许数据报分片;中间一位称为MF(More Fragment),MF=1表示“后面还有分片”)+片偏移(占13位,它*8表示:当前数据报(片)的左边相比于原数据报缺失的字节数.例如:第一个分片的该值位0);
- 第三个4字节:生存时间(,TTL, Time to Live,共8位,表示数据报文在网络中允许经过的最大路由器数目,每经过一个路由器的转发该值就-1)+协议(占8位,指出此数据报携带的数据使用何种协议,以便目的主机的网络层将数据部分上交给对应的处理过程)+首部校验和(占16位,用于让接收方校验数据报的首部有没有出现错误);
- 第四个4字节:源地址;
- 第五个4字节:目的地址。

4.2.6 IP层转发分组的流程
路由表中最重要的两个属性:目的IP的网络号及其对应的下一跳路由器地址。
路由表没有指明到达某个网络的完整路径,只是指明了到某个网络需要从本路由器到哪个路由器。

根据目的网络号就能确定下一跳的路由器,这样做的结果是:
1)IP数据报最终一定可以被发送到目的主机所在的网络内的路由器上;
2)只有到达最后一个路由器时,才试图向目的主机进行直接交付。
特定主机路由:
1)虽然互联网中所有的分组转发都是基于目的主机所在的网络,但是也允许位特定的主机指定特定的路由;
2)采用特定路由可以让网络管理员可以更方便地控制网络和测试网络。
默认路由:
1)默认路由是指路由器在接收到IP数据报后,直接将报文转发给一些“知识丰富”的路由器,让这些路由器查找自己的路由表进行下一跳的确定;
2)对于一个小网络而言,如果这个网络只有一个路由器和互联网连接,那么使用默认路由是更好的选择,它可以减少路由表所占的空间、减少搜索路由表的用时,最重要的是,减少了找不到下一跳的可能。
需要注意的是:
1. IP数据报的首部没有存放“下一跳路由器的IP地址”; 2. 路由器也不会将“下一跳的IP地址”写入IP数据报,而是会将数据报和下一跳的IP地址一起交给下一层; 3. 数据链路层使用ARP查找到下一跳的IP地址对应的MAC地址,并将MAC地址写入MAC帧的首部里,然后根据这个MAC地址找到下一跳路由器。
路由器的分组转发算法运行流程:
1. 首先解析接收到的IP报文得到目的IP地址,进而得到目的网络号; 2.如果发现本路由器直接连着目的网络,那就进行直接交付,否则进入3.; 3. 如果路由表中设定了目的网络的特定主机路由,就按照这个特定主机路由将报文送到下一跳路由器,否则进入4.; 4. 如果路由表中有到达目的网络的路由,就按照这个路由将报文发给下一跳路由器,否则进入5.; 5. 如果路由表中有默认路由,就将这个报文发送给默认路由指定的默认下一跳路由器。否则,进入6.; 6. 报告转发分组错误。
4.3 划分子网和构造超网*
4.3.1 划分子网
1)从两级IP地址到三级IP地址--新增子网号
IP地址中除了网络号的其他部分被划分为了 子网号subnet-id 和 主机号host-id。因为子网号是从原来的主机号里分出来的,因此三级IP地址中主机号的位数是减少了的。
划分子网纯属一个单位内部的事,单位对外仍然表现为没有划分子网的网络。

2)子网掩码
从IP数据报的首部,我们无法看出源地址或目标地址所连网络是否进行了子网划分,因此引入了子网掩码,使用它可以确定IP地址中的子网部分。
子网掩码的形式:
子网掩码为32位二进制数,
若当前位=1,表示IP地址对应位属于网络号或子网号
若当前位=0,表示IP地址对应位属于主机号

在不划分子网的情况下,默认子网号的形式如下:

与子网掩码相关的重要事项:
1. 路由器在和相邻路由器交换路由信息的时候,必须将自己所在网络(或子网)的子网掩码告诉对方; 2. 路由表的项目里,必须记录目的网络的子网掩码; 3. 若路由器连接在两个网络中,就具有两个网络号和两个子网掩码。
4.3.2 使用子网时分组的转发
- 在划分子网的情况下,从IP地址并不能唯一地得出网络地址来,因为网络地址取决于网络采用的子网掩码,但数据报的首部并没有提供子网掩码的信息。因此路由表中必须存储网络号对应的子网掩码,当路由器接收到IP数据报,解析出目的IP地址后,将目的IP地址与子网掩码进行按位与,得到的结果如果匹配子网掩码对应的网络号,那说明目的IP就在这个网络。
4.3.3 无分类编址CIDR(IP地址 = 网络前缀+主机号)
- CIDR消除了传统的A-C类地址和划分子网的概念,因而可以更加高效地分配IPv4的地址空间。
- CIDR使用各种长度的“网络前缀”来代替分类地址中的网络号和子网号,让IP地址从三级编址又回到了两级编址、
- CIDR使用斜线记法,即在IP地址后面加上/然后写上网络前缀所占的位数,例如:220.78.168.0/24。
CIDR地址块:
CIDR把网络前缀都相同的连续的IP地址组成“CIDR地址块”,例如:128.14.32.0/20表示的地址块共有2^12个地址。
路由聚合(route aggregation):
- 一个CIDR地址块可以表示很多地址,这种地址的聚合通常称为路由聚合(或构成超网),它使得路由表中的一个项目可以表示很多个原来传统分类地址的路由。
- 路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高整个互联网的性能。
最长匹配:
使用CIDR时,路由表中每一行由“网络前缀“和”下一跳地址“组成。在查找路由表时可能会得到不止一个匹配结果,这时应当从所有匹配结果中选择前缀最长的的路由,因为前缀越长,其地址块就越小,路由就越具体。
4.4 网际控制报文协议ICMP*
4.4.1 ICMP报文的种类
- 为了更有效地转发IP数据报和提高交付成功的机会,在网络层使用了ICMP;
- ICMP允许主机或路由器报告差错情况并提供有关异常情况的报告;
- 但ICMP不是高层协议二是网络层的协议,虽然ICMP报文是装在IP数据报里。

ICMP报文的种类有两种:ICMP差错报告报文 (路由器丢掉数据报后会发送,不需要回复)和 ICMP询问报文 (需要回复)。
ICMP报文的前四个字节是统一的格式,即:类型(8 bit)+代码(8 bit) +检验和(16 bit)。紧接着的4个字节的内容和ICMP的类型有关。
ICMP差错报告报文:
- 终点不可达
- 超时
- 参数问题
- 改变路由(重定向,redirect)
ICMP差错报文的数据字段的内容:

不发送ICMP差错报告报文的几种情况:
- 对ICMP差错报告报文不再发送ICMP差错报告报文;
- 除第一个分片以外的后续所有数据报文都不发送ICMP差错报告报文;
- 具有多播地址的数据报文都不发送给ICMP差错报告报文;
- 对具有特殊地质(如127.0.0.0或0.0.0.0)的数据报文不发送ICMP差错报告报文。
ICMP询问报文的分类:
- 回送请求和回答报文(例如ping,Packet InterNet Groper,测试两个主机之间的连通性);
- 时间戳请求和回答报文。
4.4.2 ICMP的应用举例
1)使用traceroute来找到一个分组从源主机到目的主机中间经过的路径。它利用了IP数据报的TTL字段和ICMP时间超过差错报告报文实现路径追踪。在windows中这个命令是 tracert ip地址。
4.5 互联网的路由选择协议*
4.5.1 有关路由选择协议的几个基本概念
1)自治系统(Autonomous System, AS):
自治系统是指:在单一的技术管理下的一组路由器,而这些路由器使用一种AS内部的路由选择协议和共同的度量以确定分组在该AS内的路由。同时,还使用一种AS之间的路由选择协议用以确定分组在AS之间的路由。
现在对AS的定义强调了以下的事实:尽管AS内部使用了多种路由选择协议和度量,但一个AS对其他AS表现出的是一个单一的和一致的路由选择策略。
4.5.2 内部网关协议RIP
1)工作原理:路由信息协议(Routing Information Protocol, RIP)是内部网关协议IGP中最先得到广泛使用的协议。RIP是一种分布式的、基于距离向量 的路由选择协议。RIP协议要求网络中每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。
距离的定义:
- 从一个路由器到其直接连接的网络的距离定义为1;
- 从一个路由器到其非直接连接的网络的距离定义为所经过的路由器数+1;
RIP认为一个好的路由就是它通过的路由器数目少。RIP允许一条路径最多只能包含15个路由器。距离的最大值>=16就相当于不可达。
RIP协议的特点:
- 仅和相邻路由器交换信息;
- 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
- 按照固定的时间间隔交换路由信息。
路由表的建立:
- 路由器在刚开始工作时,它的路由表是空的。它只知道到自己直接连接的网络的距离为1.
- 以后每个路由器也之和数目有限的相邻路由器交换并更新路由信息。
- 经过若干次更新后,所有路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
路由表更新范例:

4.5.3 内部网关协议OSPF
4.5.4 外部网关协议BGP
4.5.5 路由器的构成
- 路由器是一种典型的网络层设备,其主要作用是:
- 联通不同的网络;
- 选择信息传送的线路。选择通畅快捷的近路,能大大提高通信速度,减轻网络系统通信负载,节约系统资源,从而让网络系统发挥出更大的效益来。
分组丢弃:
若路由器处理分组的速度赶不上分组进入分组队列的速度,那么,当分组队列满了之后,再进来的分组将被丢弃。
4.6 IPv6
4.6.1 IPv6的基本首部
IPv6仍然支持无连接传送,但将协议数据单元PDU称为 分组。相比于IPv4,主要的变化在于:
- 更大的地址空间。地址空间从32位扩充到了128位。
- 扩展的地址层次结构。
- 灵活的首部格式。IPv6定义了许多可选的扩展首部。
- 改进的选项。IPv6允许数据报包含有选项的控制信息,其选项放在有效载荷中。
IPv6数据报的一般格式:
- 基本首部(固定40字节)+有效载荷。有效载荷也称为净载荷。有效载荷允许0个或多个扩展首部,再后面是数据部分。

- IPv6对首部中的某些字段进行了如下的修改:
- 取消了首部长度字段,因为首部长度是固定的40字节;
- 取消了服务类型字段;
- 取消了总长度字段,改为有效载荷长度字段;
- 把TTL字段改称为跳数限制字段;
- 取消了协议字段,改为下一个首部字段;
- 取消了检验和字段;
- 取消了选项字段,用扩展首部来实现选项功能。
IPv6数据报的固定首部的组成:
- 前4个字节:版本(4 bit)+通信量类(8 bit,用以区分不同的IPv6数据报的类别或优先级)+流标号(20 bit. "流"指互联网上特定源点到特定终点的一系列数据报,“流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有相同的流标号);
- 第二个4字节:有效载荷长度(16 bit, 它指明IPv6数据报除了基本首部外的字节数(包括了所有的扩展首部),最大值是64KB)+下一个首部(8 bit,相当于IPv4的协议字段,用以指明本数据报的上层协议是哪个)+跳数限制(8 bit,源站在数据报发出时即设定最大跳数,每次转发该值都-1,当该值变为0时此数据报应当被丢掉);
- 第三个16字节:源地址;
- 第四个16字节:目的地址。

4.6.2 IPv6的地址
IPv6的目的地址可以是以下三种基本类型地址之一:
- 单播:传统的点对点通信;
- 多播:一对多的通信;
- 任播:这是IPv6增加的一种类型。任播的目的站是一组计算机,但数据报在交付时只交付其中的一个,通常是距离最近的一个。
冒号十六进制记法:
每个地址分为8组,组间用:分隔,每组16位二进制数,每4位二进制数表示为一个十六进制数。例如:68E6:824E:FF45:DA01:0:0:0:1.
为了简便起见:
- 可以将同一组内前面的0省略,例如01A6可以写为1A6.
- 零压缩:可以将一连串的0用::取代,例如FF05:0:0:0:0:0:9801:0981可以写为:FF05::9801:0981。需要注意的是,地址只能进行一次零压缩。
4.6.3 从IPv4向IPv6过渡
- IPv6必须能够接收和转发IPv4的分组,并且能够为IPv4分组选择路由。
- 两种向IPv6过渡的策略:
- 使用双协议栈;
- 使用隧道技术。
4.6.4 ICMPv6
地址解析协议ARP和网际组管理协议IGMP的功能都已经被合并到了ICMPv6中。
4.7 IP多播
4.7.1 IP多播的基本概念
多播是指一对多通信。
4.8 虚拟专用网VPN和网络地址转换NAT
4.8.1 虚拟专用网VPN
用隧道技术实现VPN: VPN软件给数据报套上一层封装,发送给接收方后,接收方会去除这层封装,然后把数据报转发给目的地。
4.8.2 网络地址转换NAT
问题:在专用网上使用专用地址的主机如何与互联网上的主机通信?
解决方案:
- 再申请一些全球IP地址。这种方案成本很大。
- 采用NAT,这是目前使用最多的方法。

4.9 多协议标记交换MPLS

浙公网安备 33010602011771号