目录
一、网络层概述
二、网络层提供的两种服务对比
三、IPv4
3.1、IPv4概述
3.2、分类编制的IPv4地址
3.2.1、A类地址
3.2.2、B类地址
3.2.3、C类地址
3.2.4、总结
3.2.4、练习(趁热打铁)
3.3、划分子网的IPv4地址
3.3.1、划分子网方法
3.3.2、举三个例子
3.3.3、默认的子网掩码
3.4、无分类编址的IPv4地址
3.4.1、CIDR地址块
3.4.2、举三个例子
3.4.3、路由聚合(构造超网)
3.5、IPv4地址的应用规划
3.5.1、定长子网掩码划分
3.5.2、变长子网掩码划分
四、IP数据报的发送和转发流程
五、静态路由器配置及其可能产生的路由环路问题
六、路由协议
1、路由选择协议概述
2、路由信息协议RIP的基本工作原理
2.1、RIP的基本原理
2.2、RIP的基本工作过程
2.3、RIP的路由表条目的更新规则
2.3、坏消息传得慢
3、开放最短路径优先OSPF的基本工作原理
3.1、OSPF的基本原理
3.2、链路状态通告LSA及链路状态数据库LSDB
3.3、OSPF五种分组类型
3.4、路由器DR与备用的指定路由器BDR
4、边界网关协议BGP的基本工作原理
七、IPv4数据报的首部格式
八、网际控制报文协议ICMP
8.1、CMP差错报告报文
8.2、常用的ICMP询问报文
8.3、ICMP两种应用 - PING命令与tracert命令
九、虚拟专用网VPN和网络地址转NAT
1、虚拟专用网VPN
2、网络地址转NAT
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。要实现网络层任务,需要解决以下主要问题:
a、网络层向运输层提供怎样的服务(“可靠传输”还是“不可靠传输”)
b、网络层寻址问题
c、路由选择问题
因特网(Internet) 是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈。由于TCP/IP协议栈的网络层使用网际协议IP,它是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常称为网际层。综上所述,我们通过学习TCP/IP协议栈的网际层来学习网络层的理论知识和实践技术。
由于TCP/IP体系结构的因特网的网际层提供的是简单灵活。无连接的,尽最大努力交付的数据报服务,因此本章主要围绕网际层如何传送IP数据报这个主题进行讨论。
IPv4地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符。IP地址由因特网名字和数字分配机构ICANN进行分配。我国用户可向亚太网络信息中心APNIC申请IP地址,需要缴费。2011年2月3日,互联网号码分配管理局IANA(由ICANN行使职能)宣布,IPv4地址已经分配完毕。我国在2014至2015年也逐步停止了向新用户和应用分配IPv4地址。同时全面开展商用部署IPv6。
IPv4地址的编制方法经历了如下三个历史阶段:分类编制(1981)--> 划分子网(1985) --> 无分类编制(1993)。
32比特的IPv4地址不方便阅读、记录以及输入等,因此IPv4地址采用点分十进制表示方法以方便用户使用。如下例子:
请注意以下三点:
a、只有A类,B类和C类地址可分配给网络中的主机或路由器的各接口。
b、主机号为“全0”的地址是网络地址,不能分配给主机或路由器的各接口。
c、主机号为“全1"的地址是广播地址,不能分配给主机或路由器的各接口。
可指派的网络数量为(减2的原因是除去最小网络号0和最大网络号127)。
每个网络中可分配的IP地址数量为(减2的原因是除去主机号为全0的网络地址和全1的广播地址)。
可指派的网络数量为。
每个网络中可分配的IP地址数量为(减2的原因是除去主机号为全0的网络地址和全1的广播地址)。
注意:有些教材中指出128.0是保留网络号,B类第一个可指派的网络号为128.1。
但根据2002年9月发表的RFC 3330文档, 128.0网络号已经可以分配了。有兴趣的同学可以自行查询以128.0开头的IP地址,看看它们属于哪些国家。
每个网络中可分配的IP地址数量为(减2的原因是除去主机号为全0的网络地址和全1的广播地址)。
注意:有些教材中指出192.0.0是保留网络号,C类第一个可指派的网络号为192.0.1。
但根据2002年9月发表的RFC 3330文档, 192.0.0网络号已经可以分配了,只不过目前还没有分配出去。
(1)、根据地址左起第一个十进制数的值,可以判断出网络类别(小于127的为A类,128~ 191的为B类,192~223的为C类) ;
(2)、根据网络类别,就可找出地址中的网络号部分和主机号部分(A类地址网络号为左起第一个字节,B类地址网络号为左起前两个字节,C类地址网络号为左起前三个字节) ;
(3)、以下三种情况的地址不能指派给主机或路由器接口:A类网络号0和127、主机号为“全0”,这是网络地址、主机号为“全1”,这是广播地址。
下面做一个小测试:
下列IP地址中,只能作为IP分组的源IP地址但不能作为目的IP地址的是 (A)
A、0.0.0.0 B、127.0.0.1 C、20.10.10.3 D、255.255.255.255
解析:地址0.0.0.0是一个特殊的IPv4地址,只能作为源地址使用,表示“在本网络上的本主机”。封装有DHCP Discovery报文的IP分组的源地址使用0.0.0.0。以127开头且后面三个字节非“全0”或“全1”的IP地址是一类特殊的IPv4地址, 既可以作为源地址使用,也可以作为目的地址使用,用于本地软件环回测试,例如常用的环回测试地址127.0.0.1。地址255.255.255.255是一个特殊的IPv4地址,只能作为目的地址使用,表示只在本网络上进行广播(各路由器均不转发)。
下面再做一个练习:请根据本节课所学内容给出”下图各网络的IPv4地址分配方案。请按照节约IP地址的原则进行分配。
(图中,中间为两个路由器,右边是三个交换机和40台主机组成的一个网络)
解题步骤:
1、找出图中有哪些网络;
(如上图,两台路由器通过一段链路直连,它们的直连接口也属于一个网络,则一共四个网络)
2、根据各网络中主机和路由器接口总数量来决定给各网络分配哪个类别的网络号;
本着节约资源,能使用C(B)类网络号就不使用B(A)类网络号的原则。对于黄色的网络,主机数量加上连接它们的路由器接口共65535,大于了一个B类网络号能提供的IP数量(65534),则只能分配一个A类网络号。对于蓝色网络,主机数量加上连接它们的路由器接口共255,大于了一个C类网络号能提供的IP数量,则可分配A、B网络号,本着节约资源,则分配一个B类网络号。对于绿色网络,同理推断,分配A、B、C类网络皆可,本着节约IP地址,就给其分配C类网络号。同理,粉红色网络分配C类网络号。
3、依据所确定的网路号类别,为每个网络挑选一个网络号。
对于A类网络,从1~126中选择一个;对于B类网络,从128.0~191.255中选择一个;对于C类网络,从192.0.0~223.255.255中选择一个。注意粉红色网络和绿色网络的网络都是C类网络,别选同一个网络号。
4、给主机和路由器的各接口分配IP地址
需要注意,分配的I地址应该互不相同,且主机号部分不能出现全0(这是网络地址),也不能出现全1(这是广播地址)。
为新增网络申请新的网络号会带来以下弊端:需要等待时间和花费更多的费用、会增加其他路由器中路由表记录的数量、浪费原有网络中剩余的大量IP地址。
那么解决办法就是从主机号部分借用一部分作为子网号。
32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号。子网掩码使用连续的比特1来对应网络号和子网号,子网掩码使用连续的比特0来对应主机号,将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址。
举第一个例子1:已知某个网络的地址为218.75.230.0,使用子网掩码255.255.255.128对其进行子网划分,请给出划分细节。
划分出的子网数量为。
每个子网可分配地址数量为。(减2是要去掉主机号为“全0"的网络地址和“全1”的广播地址)。
举第二个例子2:已知某个网络的地址为218.75.230.0,使用子网掩码255.255.255.192对其进行子网划分,请给出划分细节。
默认的子网掩码是指在未划分子网的情况下使用的子网掩码。
划分子网在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网因为其地址空间太小并没有得到充分使用,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部耗尽的威胁。为此,因特网工程任务组IETF又提出了采用无分类编址的方法来解决IP地址紧张的问题,同时还专门成立IPv6工作组负责研究新版本IP以彻底解决IP地址耗尽问题。1993年,IETF发布了无分类域间路由选择CIDR的RFC文档: RFC 1517~1519和1520。
CIDR消除了传统的A类、B类和C类地址,以及划分子网的概念。它更加有效地分配IPv4的地址空间,并且可以在新的IPv6使用之前允许因特网的规模继续增长。CIDR使用“斜线记法”,或称CIDR记法。即在IPv4地址后面加上斜线“/” ,在斜线后面写上网络前缀所占的比特数量。比如:
CIDR实际,上是将网络前级都相同的连续的IP地址组成一个“CIDR地址块”。我们只要知道CIDR地址块中任何一个地址,就可以知道该地址块全部细节:地址块的最小地址、地址块的最大地址、地址块中的地址数量、地址块聚合某类网络(A类、B类或C类) 的数量、地址掩码 (也可继续称为子网掩码)。
例题1:请给出CIDR地址块128.14.35.7/20的全部细节(最小地址,最大地址,地址数量,聚合C类网数量,地址掩码)。
例题2:请给出CIDR地址块206.0.64.8/18的全部细节(最小地址,最大地址,地址数量,聚合C类网数量,地址掩码)。
地址掩码为:255.255.192.0
例题3:在子网192.168.4.0/30中, 能接收目的地址为192.1 68.4.3的IP分组的最大主机数是2。
若直接将这些信息转发给R2,则R2要存储5条记录,而路由聚合则采用共同前缀。
聚合地址块为172.1.4.0/22。
网络前缀越长,地址块越小,路由越具体。若路由器查表转发分组时发现有多条路由可选,则选择网络前缀最长的那条,这称为最长前缀匹配,因为这样的路由更具体。
例题:某路由表中有转发接口相同的4条路由表项,其目的网络地址分别为35.230.32.0/21、35.230.40.0/21、35.230.48.0/21和35.230.56.0/21, 将该4条路由聚合后的目的网络地址为35.230.32.0/19。解析如下:
子网掩码的划分分为定长的划分和变长的划分。两者的对比如下。
假设申请到的C类网络为218.75.230.0,请使用定长的子网掩码给下图所示的小型互联网中的各设备分配IP地址。
应用需求:将C类网络218.75.230.0划分成5个子网,每个子网上可分配的IP地址数量不得少于各自的需求。
我们从主机号借用3个比特作为子网号子网数量:。
则每个子网上的地址数量为:(大于每个子网络最大的需求)。
则子网掩码为255.255.255.224(24个连续的比特1对应网络号,3个连续的比特1表示从主机号借用3个比特作为子网号)。
我们只需要选择5个子网分给网络N1~N5,即可。但是,网络N5只需要4个地址,但我们却只能划分出32个给他,即便是空闲下来的,其他网络也不能使用,就造成了IP地址资源的浪费。
假设申请到的地址块为218.75.230.0/24, 请使用变长的子网掩码给下图所示的小型互联网中的各设备分配IP地址。如果我们采用变长的方式划分,则如下:
在该地址块中给上图所示的网络N1~N5分配子块,分配原则是“每个子块的起点位置不能随意选取,只能选取块大小整数倍的地址作为起点”。建议先给大的子块分配。分配如下:
(为了将重点放在TCP/IP协议栈的网际层发送和转发IP数据报的过程上,在后面的举例中,忽略使用ARP协议来获取目的主机或路由器接口的MAC地址的过程以及以太网交换机自学习和转发帧的过程。)
第一种形式,主机直接发送IP数据报;
首先,判断目的主机是否与自己在同一个网络(主机自己的IP地址与自己的掩码相与得到自己所在网络,要发送的目的IP地址与自己的掩码相与得到目的IP地址所在的网络,如果一样,则主机与目的IP地址属于同一个网络,否则不在同一个网络中) 。若在同一个网络,则属于直接交付。 若不在同一个网络,则属于间接交付,传输给主机所在网络的默认网关(连接该网络的路由器的某个接口),有默认网关帮忙转发。
第二种交由路由器帮忙转发。
路由器转发IP数据报。每个网络有一个路由器接口,其接口地址指定给该接口所直连网络中的各个主机作为默认网关。要转发数据时,传给默认网关,然后由默认网关转发出去。检查IP数据报首部是否出错:若出错,则直接丢弃该IP数据报闭并通告源主机;若没有出错,则进行转发;根据IP数据报的目的地址在路由表中查找匹配的条目(后续章节中会详细介绍路由表的建立);若找到匹配的条目,则转发给条目中指示的下一跳;若找不到,则丢弃该IP数据报并通告源主机。
下面看一个例题:下列网络设备中,能够抑制广播风暴的是D
A、中继器 B、集线器 C、网桥 D、路由器
解析:中继器和集线器工作在物理层,既不隔离冲突域也不隔离广播域。网桥和交换机(多端口网桥)工作在数据链路层,可以隔离冲突域,不能隔离广播域。路由器工作在网络层,既隔离冲突域,也隔离广播域。
静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表。这种人工配置方式简单、开销小。但不能及时适应网络状态(流量、拓扑等)的变化。一般只在小规模网络中采用。
使用静态路由配置可能出现以下导致产生路由环路的错误:配置错误、聚合了不存在的网络、网络故障。
为了防止IP数据报在路由环路中永久兜圈,在IP数据报首部设有生存时间TTL字段。IP数据报进入路由器后,TTL字段的值减1。若TTL的值不等于0,则被路由器转发,否则被丢弃。
路由条目的类型:直连网络、静态路由(人工配置)、动态路由(路由选择协议)。
特殊的静态路由条目:默认路由(目的网络为0.0.0.0, 地址掩码为0.0.0.0)、特定主机路由(目的网络为特定主机的IP地址,地址掩码为255.255.255.255)、黑洞路由(下一跳为null0)。
因特网所采用的路由选择协议的主要特点:自适应(动态路由选择,能较好地适应网络状态的变化)、分布式(路由器之间交换路由信息)、分层次(将整个因特网划分为许多较小的自治系统AS)。
常见路由选择协议:
路由器结构分为:路由选择部分、分组转发部分、输入与输出端口三部分。
路由表一般仅包含从目的网络到下一跳的映射,需要对网络拓扑变化的计算最优化。
转发表是从路由表得出的,转发表的结构应当使查找过程最优化。
输入缓冲区(暂存新进入路由器但还来不及处理的分组)、输出缓冲区(暂存处理完毕但还来不及转发的分组)。
路由信息协议RIP是内部网关协议IGP中最先得到广泛使用的协议之一,其相关标准文档为RFC 1058。RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为“距离向量D-V”。RIP使用跳数作为度量来衡量到达目的网络的距离。路由器到直连网络的距离定义为1。路由器到非直连网络的距离定义为所经过的路由器数加1。允许一条路径最多只能包含15个路由器。距离等于16时相当于不可达。因此,RIP只适用于小型互联网。
RIP认为好的路由就是“距离短”的路由,也就是所通过路由器数量最少的路由。当到达同一目的网络有多条“距离相等”的路由时,可以进行等价负载均衡(平均分摊分组到每条路径)。RIP包含以下三个要点:和谁交换信息 - 仅和相邻路由器交换信息、交换什么信息 - 自己的路由表、何时交换信息 - 周期性交换(例如每30秒)。
路由器刚开始工作时,只知道自己到直连网络的距离为1。每个路由器仅和相邻路由器周期性地交换井更新路由信息。若干次交换和更新后,每个路由器都知道到达本AS内各网络的最短距离和下一跳地址,称为收敛。
1、到达目的网络,相同下一跳,最新消息,更新;
2、发现了新的网络,添加;
3、到达目的网络,不同下一跳,新路由优势,更新;
4、到达目的网络,不同下一跳,等价负载均衡;
5、到达目的网络,不同下一跳,新路由劣势,不更新。
举一个例子:请给出路由器B更新后的路由表。
RIP存在“坏消息传播得慢”的问题,“坏消息传播得慢”又称为路由环路或距离无穷计数问题,这是距离向量算法的一个固有问题。可以采取多种措施减少出现该问题的概率或减小该问题带来的危害。限制最大路径距离为15 (16表示不可达);当路由表发生变化时就立即发送更新报文(即“触发更新”),而不仅是周期性发送;让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即“水平分割”)。
开放最短路径优先OSPF,是为克服RIP的缺点在1989年开发出来的。“开放”表明OSPF协议不是受某一家厂商控制,而是公开发表的。“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。OSPF是基于链路状态的,而不像RIP那样是基于距离向量的。采用SPF算法计算路由,从算法上保证了不会产生路由环路。不限制网络规模,更新效率高,收敛速度快。链路状态是指本路由器都和哪些路由器相邻,以及相应链路的“代价”,"代价” 用来表示费用、距离、时延、带宽等。这些都由网络管理人员来决定。
举例:思科路由器中OSPF计算代价的方法:100Mbps / 链路带宽。计算结果小于1的值仍记为1;大于1且有小数的,舍去小数。如下图:
OSPF相邻路由器之间通过交互问候(Hello)分组,建立和维护邻居关系。Hello分组封装在IP数据报中,发往组播地址224.0.0.5,发送周期为10秒,40秒未收到来自邻居路由器的Hello分组,则认为该邻居路由器不可达。如下图:
使用OSPF的每个路由器都会产生链路状态通告LSA。LSA中包含以下内容:直连网络的链路状态信息、邻居路由器的链路状态信息。LSA被封装在链路状态更新分组LSU中,采用洪泛法发送。使用OSPF的每个路由器都有一个链路状态数据库LSDB, 用于存储LSA。通过各路由器洪泛发送封装有自己LSA的LSU分组,各路由器的LSDB最终将达到一致。
使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其他各路由器的最短路径,即构建各自的路由表。
OSPF有以下五种分组类型:
类型1,问候(Hello))分组,用来发现和维护邻居路由器的可达性。
类型2,数据库描述(Database Description)分组,向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
类型3,链路状态请求(Link State Request)分组,向邻居路由器请求发送某些链路状态项目的详细信息。
类型4,链路状态更新(Link State Update)分组,路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态。
类型5, 链路状态确认(Link State Acknowledgment)分组,这是对链路状态更新分组的确认分组。
OSPF在多点接入网络中路由器邻居关系的建立。选举指定路由器DR和备用的指定路由器BDR;所有的非DR/BDR只与DR/BDR建立邻居关系;非DR/BDR之间通过DR/BDR交换信息。为了使OSPF能够用于规模很大的网络, OSPF把一个自治系统再划分为若干个更小的范围,叫做区域。划分区域的好处就是把利用洪泛法交换链路状体信息的范围局限于每一个区域而不是整个自治系统,这就减少了整个网络上的通信量。如下图:
在不同自治系统内,度量路由的“代价”(距离,带宽,费用等)可能不同。因此,对于自治系统之间的路由选择,使用“代价”作为度量来寻找最佳路由是不行的。自治系统之间的路由选择必须考虑相关策略(政治,经济,安全等)。BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”。不同自治系统的BGP发言人要交换路由信息,必须首先建立TCP连接,端口号为179。在此TCP连接上交换BGP报文以建立BGP会话;利用BGP会话交换路由信息(例如,增加新的路由,或撤销过时的路由,以及报告出错的情况等);使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站或对等站。BGP发言人除了运行BGP外,还必须运行自己所在自治系统所使用的内部网关协议IGP,例如OSPF或RIP。发言人交换网络可达性的信息(要到达某个网络所要经过的一系列自治系统),当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信,息中找出到达各自治系统的较好的路由。也就是构造出树形结构、不存在回路的自治系统连通图。
BGP-4有以下四种报文:
OPEN(打开)报文:用来与相邻的另一个BGP发言人建立关系,使通信初始化。
UPDATE(更新)报文:用来通告某一路由的信息, 以及列出要撤销的多条路由。
KEEPALIVE(保活)报文:用来周期性地证实邻站的连通性。
NOTIFICATION(通知)报文:用来发送检测到的差错。
例题1:R1与R2之间利用哪个路由协议交换路由信息?该路由协议的报文被封装到哪个协议的分组中进行传输?
解析:R1和R2分别位于两个不同的自治系统AS1和AS2中;自治系统之间需要使用外部网关协议EGP这一类协议,具体为边界网关协议BGP,目前使用最多的版本是BGP-4;BGP-4报文被封装在TCP报文段中进行传输。
例题2:直接封装RIP、OSPF、BGP报文的协议分别是:UDP、IP、 TCP。
1、版本
占4比特,表示IP协议的版本;通信双方使用的IP协议的版本必须一致,目前广泛使用的IP协议版本号为4 (即IPv4)。
2、首部长度
占4比特,表示IP数据报首部的长度,该字段的取值以4字节为单位;最小十进制取值为5,表示IP数据报首部只有20字节固定部分;最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分。
3、可选字段
长度从1个字节到40个字节不等。用来支持排错、测量及安全等措施。可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理IP数据报的开销。实际上可选字段很少被使用。
4、填充字段
确保首部长度为4字节的整数倍,使用全0进行填充。
5、区分服务
占8比特,用来获得更好的服务。该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。
1998年,因特网工程任务组IETF把这个字段改名为区分服务。利用该字段的不同数值可提供不同等级的服务质量。只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。
6、总长度
占16比特,表示IP数据报的总长度(首部+数据载荷)。最大取值为十进制的65535,以字节为单位。
7、标识
占16比特,属于同一个数据报的各分片数据报应该具有相同的标识。IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将此值赋给标识字段。
8、标志
占3个比特,各比特含义如下:DF位:1表示不允许分片;0表示允许分片、MF位:1表示“后面还有分片”;0表示“这是最后一个分片”
9、片偏移(必须为整数)
占13比特,指出分片数据报的数据载荷部分偏移其在元数据报的位置有多少单位,片偏移以8个字节为单位。
举例:加入MTU最大为1500比特,则如下IPv4数据报划分为三部分,每部分信息为:
10、生存时间TTL(生存时间TTL字段的作用一防止IP数据报在网络中永久兜圈)
占8比特,最初以秒为单位,最大生存周期为255秒;路由器转发IP数据报时,将IP数据报首部中的该字段的值减去IP数据报在本路由器上所耗费的时间,若不为0就转发,否则就丢弃。若以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。
11、协议
占8比特,指明IPv4数据报的数据部分是何种协议数据单元,常用的以些协议和相应的协议字段值如下。
协议名称 | ICMP | IGMP | TCP | UDP | IPv6 | OSPF |
协议字段值 | 1 | 2 | 6 | 17 | 41 | 89 |
12、首部检验和
占16比特,用来检测首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和。
IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是以项耗时的操作,因此在IPv6中,路由器不再计算首部校验和,从而更快转发IP数据报。
13、源IP地址和目的IP地址
各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址。
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP。主机或路由器使用ICMP来发送差错报告报文和询问报文。ICMP报文被封装在IP数据报中发送。
CMP差错报告报文共有以下五种:
1、终点不可达
当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种错误。
2、源点抑制
当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
3、时间超过
当路由器收到一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段的值减1。若结果不为0,则将该IP数据报转发出去;若结果为0,除丢弃该IP数据报外,还要向源点发送时间超过报文。另外,当终点在预先规定的时间内不能收到一一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文。
4、参数问题
当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。
5、改变路由(重定向)
路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
以下情况不应发送ICMP差错报告报文:对ICMP差错报告报文不再发送ICMP差错报告报文;对第以个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文;对具有多播地址的数据报都不发送ICMP差错报告报文;对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文。
常用的ICMP询问报文有以下两种:
1、回送请求和回答
ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达及了解其有关状态。
2、时间戳请求和回答
ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。这种询问报用来进行时钟同步和测量时间。
ICMP两种应用举例:
1、分组网间探测PING
用来测试主机或路由器之间的连通性,应用层直接使用网际层的ICMP(没有通过运输层的TP或UDP),使用ICMP回送请求和回答报文。
2、跟踪路由traceroute
用来测试IP数据报从源主机到达目的主机要经过哪些路由器
Windows版本(tracert命令,应用层直接使用网际层ICMP,使用了ICMP回送请求和回答报文以及差错报告报文)、Unix版本(traceroute命令,在运输层使用UDP协议,仅使用ICMP差错报告报文)
虚拟专用网VPN:利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。由于IPv4地址的紧缺,一个机构能够申请到的IPv4地址数量往往远小于本机构所拥有的主机数量。因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要申请的、在因特网,上使用的公有地址。(我们可以在因特网数字分配机构IANA的官方网站查看IPv4地址空间中特殊地址的分配方案,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16这三个地址块是无需申请的,是可分配的专用地址,或称私有地址)
需要注意:私有地址只能用于一个机构的内部通信,不能用于因特网上的主机通信,即私有地址只能用作本地地址不能用作全球地址,在因特网中的所有路由器,对目的地址是私有地址的IP数据报一律不进行转发 。
R1收到部门A内部主机的某数据报,发现需要经过因特网,则对数据报进行加密,重新添加数据报的首部,封装成为在因特网上的外部数据包,其首部的源地址为R1的全球地址,目的地址为R2的全球地址,R2收到后,去掉首部,进行解密,恢复出原来的内部IP数据报。(上图所示,同一机构内不同部门的内部网络所构成的虚拟专用网VPN又称为内联网VPN。有时一个机构的VPN需要有某些外部机构(通常就是合作伙伴)参加进来。这样的VPN就称为外联网VPN,在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,即可访问专用网络中的资源。这种VPN称为远程接入VPN。)
虽然因特网采用了无分类编址方式来减缓IPv4地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv4地址空间即将面临耗尽的危险仍然没有被解除。1994年提出了一种网络地址转换NAT的方法再次缓解了IPv4地址空间即将耗尽的问题。NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。
使用私有地址的主机如何才能与因特网上的主机进行通信呢?
这需要在专用网络连接到因特网的路由器上安装NAT软件,装有NAT软件的路由器叫NAT路由器,他至少有一个有效的全球PI地址,这样,所有使用私有地址的主机在和外界通信时,都要在路由器上将其私有地址转换成全球IP地址。
如下:
内部主机发送数据报时,源地址为主机的内部地址,目的地址为全球的某IP地址,NAT路由器收到即将发送的数据报时,为其在全球IP地址池中分配一个临时的全球IP地址替换它的源地址;然后将私有地址与全球IP地址转换关系记录在NAT转换表中;之后就可以转发数据报了。
接收时,则把对应的全球IP地址转换成对应的私有地址,发送给对应的内部主机:
但是,该转换方法存在一个问题:如果NAT路由器具有N个全球IP地址,那么至多只能有N个内网主机能够同时和因特网上的主机通信。
由于绝大多数的网络应用都是使用运输层协议TCP或UDP来传送数据,因此可以利用运输层的端口号和IP地址一起进行转换。这样,用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信。这种将端口号和IP地址一起进行转换的技术叫作网络地址与端口号转换NAPT(Network Address and Port Translation)。如下:
这时需要注意:外网主机不能首先发起通信, 因此,专用内网不能直接充当服务器。对于一些P2P网络应用,需要外网主机主动与内网主机进行通信,在通过NAT时会遇到问题,需要网络应用自已使用一些特殊的NAT穿越技术来解决问题。另外,由于NAT对外网屏蔽了内网主机的网络地址,能为内网的主机提供一定的安全保护。