上一篇:数据链路层:https://blog.csdn.net/pcwl1206/article/details/83863677
下一篇:网络层下篇:https://blog.csdn.net/pcwl1206/article/details/84098381
本章节目录:
4.2.7 IP数据报的格式 --- 重要
第4章:网络层
4.1 网络层提供的两种服务 -- 了解即可
网络层向运输层提供两种服务:虚电路服务和数据报服务。鉴于TCP/IP体系的网络层提供的是数据报服务,因此下面我们讨论都是围绕网络层如何传送IP数据报这个主题。
下面给出一幅图用来说明主机H1向主机H2发送数据的过程:
虚电路服务与数据报服务的主要区别:
4.2 网际协议IP【重点】
网际协议IP是TCP/IP体系中两个最主要的协议之一。
与IP协议配套使用的还有三个协议:
(1)网址解析协议ARP(Address Resolution Protocol);
(2)网际控制报文协议ICMP(Internet Control Message Protocol);
(3)网际组管理协议IGMP(Internet Group Management Protocol)
如下图所示,这三个协议在网络层的位置。ARP在最下面,因为IP协议经常要使用这个协议。ICMP和IGMP在最上面,是因为它们要使用IP协议。
4.2.1 虚拟互联网
4.2.1.1 网络互连的设备
中间设备又称为中间系统或中继系统:
物理层使用的中间设备是:转发器(repeater);
数据链路层的中间设备是:网桥或者桥接器(bridge);
网络层使用的中间设备是:路由器(router);
网络层以上使用的中间设备:网关(gateway),【ps:这是以前的方式,现在的网关一般都指路由器的接口了】
ps:如果计算机没有配置网关【即:没有接路由器】,则访问不了其他网段的计算机,只能访问本网段的。
4.2.1.2 虚拟互联网定义
所谓虚拟互联网也就是逻辑互联网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但我们利用IP协议使这些性能各异的网络在网络层看起来好像是一个统一的网络。如下图所示:
4.2.2 分类的IP地址
IP地址的编址方法共经过了三个历史阶段:分类的IP地址、子网的划分以及构成超网。
4.2.2.1 分类IP地址的概念
分类的IP地址:是将IP地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成,其中一个字段是网络号(net-id),它标志主机(或路由器)所连接到的网络。一个网络号在整个互联网范围内必须是唯一的。第二个字段是主机号(host-id),它标志该主机(或路由器)。一个主机号在它前面的网络号所指明的网络范围内必须是唯一的。因此,一个IP地址在整个互联网范围内是唯一的。
这种两级的IP地址可以记为: IP地址 ::= {<网络号>,<主机号>}
下图用来说明IP地址中的网络号字段和主机号字段,A~E类地址:
下面给出一张二进制和十进制之间的转换的图片,便于直观感受分类的IP地址是怎么计算出来的。
4.2.2.2 常用的三种类别的IP地址
常用的是A类(占总IP地址50%)、B类(占总IP地址25%)和C类(占总IP地址12.5%),下面给出它们的IP地址指派范围:
主机部分不能全为1或者全为0。全为1代表广播,全为0代表这个网段。
说明:特殊的几个IP地址:
127.0.0.1:本地环回测试,网络号为127的都是;
169.254.0.0:动态获取IP失败,零时用的;
下面几个是保留的私网地址:【互联网上的路由器找不到的】
10.0.0.0:保留给一些政府单位或者学校用;
172.16.0.0 --- 172.31.0.0
192.168.0.0 --- 192.168.255.0
4.2.2.3 IP地址的一些重要特点
(1)每一个IP地址都是由网络号和主机号两部分组成。路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间以及查找路由表的时间;
(2)实际上IP地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络上时,该主机就必须具有两个相同的IP地址,必须是网络号不同的。所以,路由器是用来连接不同网络的,所以一个路由器应当至少有2个IP地址。这就好比一个建筑正好处在北京路和上海路的交叉口上,那么这个建筑就可以拥有两个门牌号,例如:北京路4号和上海路37号;
(3)用转发器或网桥连接起来的若干个局域网仍为一个网络,因为它们的网络号相同。具有不同网络号的局域网必须使用路由器进行互联;
(4)在IP地址中,所有分配到的网络号的网络都是平等的。所谓平等,就是指互联网同等对待每一个IP地址。
4.2.3 子网的划分
从两级IP地址到三级IP地址:网络号、子网号、主机号,可以用下面的记法来表示子网的IP形式:
三级IP地址可以表示为:IP地址 ::= {<网络号>, <子网号>, <主机号>}
4.2.3.1 为什么要划分子网呢?
(1)IP地址的利用率有时很低。比如,有的公司申请一个B类地址的网络,但是所连接的主机并不多,但是又不愿意换成C类,因为留着备用,但是一个B类地址可连接的主机数超过了6万,这就造成了很大的浪费;
(2)给每一个物理网络分配一个网络号会使路由表变得太大,因而使网络性能变坏(主机太大,路由表存的就多,每次查找的时候就会变慢);
(3)两级IP地址不够灵活。
4.2.3.2 划分子网的基本思路
(1)划分完子网后,本单位以外的网络是看不见这个子网的,对于它们来说这个单位仍然表现为一个网络;
(2)三级IP地址可以表示为:IP地址 ::= {<网络号>, <子网号>, <主机号>};
(3)凡是从其他网络发送给本单位某台主机的IP数据报,仍然根据数据报的目的网络号找到连接到本单位网络上的路由器。但此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网,将数据报交给目的主机。
4.2.3.3 子网划分的几个案例
划分子网的时候比较关注两个工作:确定子网掩码和能用的IP开始地址和结束地址。
【案例1:C类网络等分成两个子网】下面举个例子,某公司要将现在的192.168.0.0这个网段划分为两个子网段:
【案例2:C类网络等分成四个子网】
【案例3:C类网络等分成八个子网】
说明:点到点的子网掩码是252,因为它划分到[0 4,8, .... 255]一共划分了6次,子网掩码往后移了6位,则子网掩码为:255.255.255.252。
【案例4:判断IP地址所属网段】
【扩展案例5:对B类网络进行划分】
对172.16.0.0网段、子网掩码:255.255.0.0进行子网划分:
第一个子网段为:172.16.0.1 ~ 172.16.127.254
第二个子网段为:172.16.128.1 ~ 172.16.255.254
4.2.3.4 子网掩码
一个网络中的路由器怎么找到子网,将数据报发送给它呢?从IP数据报的首部是无法看出源主机或者目标主机是否进行了子网划分,这个时候就需要使用子网掩码了。
子网掩码的特点:网络号部分都为1,主机部分都为0。所以都是255.255.***,***形式(以B类地址为例)。
使用子网掩码的好处:不管网络有没有划分过子网,只要把子网掩码和IP地址进行逐位的“与”(AND)运算,就可以立即得出网络地址。如下面的例子所示:
上面这个例子比较简单,子网掩码比较简单。在对一个网络进行多次子网划分的时候,子网掩码非常重要,只有先计算出了子网掩码,才能直到对应的子网IP段。
子网掩码是一个网络或一个子网的重要属性。RFC950中规定:路由器在和相邻路由器交换路由信息时,就必须把自己所在网络或者子网的子网掩码告诉相邻的路由器。在路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。(每个子网的第一个和最后一个IP都没法用)
4.2.4 无分类编址CIDR(构造超网)
4.2.4.1 网络前缀
无分类编址的正式名字为:无分类域间路由选择CIDR(Classless Inter-Domain Routing,CIDR读作”sider“)。
CIDR主要的两个特点:
(1)CIDR消除了传统的A类、B类和C类地址以及子网的概念。CIDR将32位的IP地址划分为前后两个部分。前部分是”网络前缀“,用来指明网络,后面的部分用来指明主机。因此无分类的两级编址为:
IP地址 :== {<网络前缀>, <主机部分>}
(2)CIDR将网络前缀都相同的连续的IP地址组成一个”CIDR地址块“。知道CIDR地址快中的任何一个地址,就可以知道这个地址块的最小地址和最大地址,以及地址块中的地址数。如下图所示案例:
路由聚合:
由于一个CIDR块地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合称为路由聚合。
构造超网:
将网络前缀往左移动就可以将一个扩大当前的网络数,向左移动的越多,新构建出的网络数越多,这个过程称为构造超网。
【案例:合并两个网段】
合并网络的规律总结:
4.2.4.2 最长前缀匹配
CIDR中的IP地址用网络前缀和主机两部分表示。因而,路由表中的每个项目由”路由前缀“和”下一跳地址“组成,但是在查找路由表时可能会得到不止一个匹配结果,应当从匹配结果中选择具有最长网络前缀的路由。这叫做最长前缀匹配,因为网络的前缀越长,地址块就越小,因而路由就越具体。故又称为最佳匹配。
4.2.4.3 使用二叉线索查找路由表
为了更加有效的查询,通常是把无分类地址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉索引(binary trie),它是一种特殊结构的树。IP地址中从左到右的比特值决定了从根节点逐层向下层延申的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
说明:图中小圆圈代表中间节点、小方框代表叶子节点(每个叶节点代表唯一前缀)
从二叉线索的根节点自顶向下的深度最多32层,每一层对应IP地址中的一位。一个IP地址存入二叉索引的规则也很简单。先检查IP地址左边的第一位,如果为0,则第一层的节点就在根节点的左下方,如果为1,则在右下方。然后再检查地址的第二位,构造出第二层的结点,以此类推,直至唯一前缀的最后一位。图中加粗的就是前缀0101在这个二叉线索中的路径。
这里需要说明:二叉线索只是提供了一种可以快速在路由表中找到匹配的叶节点的机制。但这是否和网络前缀匹配,还要和子网掩码进行一次逻辑与的运算。
4.2.5 IP地址与硬件地址 ---- 重要
如下图所示,物理地址(MAC地址)是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址。
在发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成了MAC帧了。MAC在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在了MAC帧的首部了。
总之:IP地址放在IP数据报的首部,而硬件地址放在MAC帧的首部。在网络层和网络层以上使用IP地址,而在数据链路层及以下使用硬件地址。当IP数据报放入数据链路层的MAC帧后,整个的IP数据报都成为了MAC帧的数据,因而在数据链路层是看不见数据报的IP地址的。
下面介绍下:计算机A和计算机B通信的过程:
由上图中计算机A和计算机B的通信过程,我们可以得出以下结论:
1、交换机基于数据帧的MAC地址转发数据帧,路由器基于数据包的IP地址转发数据包;
2、数据包在传输过程中不变,过网络设备时,数据帧要用新的物理层地址重新封装;---- 即MAC地址变化
3、MAC地址决定了数据帧下一跳哪个设备接收,而IP地址决定了数据包的起点和终点。
4.2.6 地址解析协议ARP ---- 重要
ARP协议作用:将网络层使用的IP地址解析出数据链路层使用的硬件地址(即:MAC地址)。
RARP协议作用:也叫逆向ARP,它的作用是使只知道自己硬件地址的主机能够通过RARP协议找出其IP地址。但是现在的DHCP协议已经包含了RARP协议的功能了。
如下图所示的ARP和逆向ARP过程:
每一台主机都设有一个ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表。那么主机是怎样知道这些地址的呢?看下面主机A向主机B发送一个数据包的过程:
当主机A向本局域网中的主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如果有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后再通过局域网把该MAC帧发往此硬件地址。
如果在ARP高速缓存中没有查到主机B的IP地址,那么主机A就自动运行ARP,再按照下面的步骤找出主机B的硬件地址:
(1)主机A的ARP进程在本局域网上广播发送一个ARP请求分组,内容包括自己的IP地址和MAC地址以及要找的主机IP地址;
(2)在本局域网上的所有主机上运行的ARP进程都收到ARP请求分组;
(3)主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组,同时将这个ARP相应分组中写入自己的硬件地址,同时也会将主机A的IP到硬件地址的映射写入自己的ARP高速缓存。
(4)主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。
说明:为了防止硬件地址的变更而导致通信故障,ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间,凡超过生存时间的项目就从高速缓存中删掉。
4.2.7 IP数据报的格式
IP数据报的完整格式如下所示:
一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20个字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首部各字段的意义如下所示:
1、版本:占4位,指IP协议的版本,是4还是6;
2、首部长度:占4位,5~15;
3、区分服务:实时性要求高不高决定要不要用;
4、总长度:指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为:2^16 - 1 = 65535字节。但是IP层下面的数据链路层中的一个数据帧中的数据字段最大传输单元MTU为1500,所以,如果数据报的长度超过了MTU,需要进行分片处理;
5、标识:占16位,用于标识分片后的数据报,最后能组装成原来的数据报;
6、标志:MF=1,后面还有分片;MF=0,后面没有分片了;DF:不能分片。(MF:More Fragment DF:Donot Fragment)
7、片偏移:占13位,相对于用户数据起点,该片从何处开始。片偏移以8字节位偏移单位,看后面的图片示例;
8、生存时间:占8位,TTL(Time To Live),单位为跳数。路由器没转发数据报之前就把TTL值减1,最大数值为255;
9、协议:占8位,标记上层需要使用哪个协议进行处理,常用的协议字段如下图所示;
10、首部检验和:占16位,只检验数据报的首部,不包括数据部分;
11、源地址:占32位,4字节;
12、目的地址:占32位,4字节。
13、可变部分:用来支持排错、测量以及安全等措施,很少被使用。
4.2.8 IP层转发分组的流程
在互联网上转发分组的时候,是从一个路由器转发到下一个路由器。
4.2.8.1 路由表
路由表中,每一条路由最主要的两个信息是:目的网络地址和下一跳地址。
说明:
(1)从上图可以看出来,与路由器R2直连的网络不需要路由表,可以之间交付。但是没有直连的网络则需要路由表来指明目的主机所在的网络以及下一跳的地址;
(2)图中每一个路由器都连接两个网络,则每一个路由器都有两个不同的IP地址。
4.2.8.2 分组转发算法
1、从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N;
2、若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他路由器,直接把数据报交付目的主机(这里包括把目的主机地址D转换为具体的硬件地址,把数据报封装为MAC帧,再发送帧);否则就是间接交付,执行3;
3、若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行4;
4、若路由表中没有达到网络N的路由,则把数据报传送给路由表中所指明的下一跳由器;否则,执行5;
5、若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行6;
6、报告转发分组出错。
说明:上诉过程不适用于子网,子网中还需要用各网络的子网掩码和D逐位”与“操作。
说明:路由表并没有给分组指明到某个网络的完整路径(即先经过哪一个路由器,然后再经过哪一个路由器,等等)。路由表指出,到某个网络应该先到某个路由器(即下一跳路由器),在到达下一跳路由器后,再继续查找路由表,知道下一步应当到哪一个路由器。这样一步一步地查找下去,直到最后到达目的网络。
【案例1】如下图所示:计算机PC0如果ping计算机PC1,网络要想通,要求沿途的路由器Router1~Router3都必须有到192.168.0.2/24的路由,这样数据包才能到达PC1。同样,PC1要回应数据给PC0,沿途的路由器必须到192.168.0.0/24网络的路由,这样数据报才能回来。
4.3 网际控制报文协议ICMP
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。
4.3.1 ICMP报文的种类
ICMP报文有两种:ICMP差错报告报文和ICMP询问报文。
几种常用的ICMP报文类型如下表所示:
下面对差错报告报文中的改变路由做个简单的解释:
在互联网的主机中也要有一个路由表。当主机要发送数据报时,首先是查找主机自己的路由表,看应当从哪一个口把数据报发送出去。但是在互联网中的主机的数量远大于路由器的数量,出于效率的考虑,这些主机不和连接在网络上的路由器定期交换路由信息。在主机刚开始工作的时候,一般都在路由表中设置一个默认的路由器的IP地址。不管数据报要发送到哪个目的地址,都一律先把数据报传送给这个默认的路由器,而这个默认的路由器知道到每一个目的网络的最佳路由(通过和其他路由器交换路由信息)。如果默认的路由器发现主机发往某个目的网络的数据报的最佳路由应当经过网络上的另一个路由器R时,就用改变路由报文把这种情况告诉主机。于是,该主机就在其路由表中增加一个项目:到某某目的地址应该经过路由器R(而不是默认路由器)。
4.3.2 ICMP的应用举例
ICMP的一个重要的应用就是分组网间探测PING(Packet InterNet Groper),用来测试两台主机之间的连通性。PING使用了ICMP回送请求和回送回答报文。PING是应用层直接使用网络层ICMP协议的一个例子。它没有通过运输层的TCP或者UDP。
具体应用:
ping 目标主机名/IP : 查看网络通不通、往返时间等等信息
tracert 目标主机IP:跟踪路由,查看从源主机到达目标主机所经过的路由器的IP地址,以及到达其中每一个路由器的往返时间;(说明:Linux下该命令为traceroute)
pathping 目标主机IP:功能同tracert。