计算机网络-网络层
计算机网络慕课地址:https://www.bilibili.com/video/BV1c4411d7jb?p=41
1- 网络层概述
1.1 基本概念
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。
注意
这些异构型网络N1~N7如果只是需要各自内部通信,他们只要实现各自的物理层和数据链路层即可。
但是如果要将这些异构型网络互连起来,形成一个更大的互联网,就需要实现网络层设备路由器。
1.2 解决主要问题
网络层向运输层提供怎样的服务(“可靠传输”还是“不可靠传输”)?
如果网络层对于上述传输层错误不采取任何措施,则提供的是不可靠传输服务。如果网络层对于上述传输错误采取措施,并使得接收方能正确接收发送方所发送的数据包,则提供的是可靠的传输服务,不同网络体系结构所提供的服务可能是不同。
网络层寻址问题?
线段一(两个IP地址)可以看作是它们所在网络的网络编号,用于区分这两个不同的路由器接口,这是网络上两个路由器接口各自所分配的IP地址。
线段二(两个IP地址)它们的前两个数是相同的,可以看作的他们所在网络的网络编号,而后面两个数不完全相同,用于区分这两个不同的路由器接口。
线段三(两个IP地址)他们两个路由器接口各自所分配的IP地址,它们的第一个数是相同的,可以看作是它们所在网络的网络编号,而后三个数不完全相同,用于区分这两个不同的路由器接口。
路由选择问题?
依据什么来决定将数据包从自己的哪个接口转发出去的呢?依据的是数据包中的目的地址和路由器中的路由表。
路由器是如何得出这样的路由记录呢?
一种是由用户或者网络管理员进行人工配置,这种方法只适用于规模较小,且网络拓扑不改变的小型互联网。
另一种是实现各种路由器选择协议,由路由器执行路由选择协议中所规定的路由选择算法,而自动得出路由表中的路由记录,这种方法更适用于规模较大且网络拓扑经常改变的大型互联网。
1.3 因特网概念
1.4 总结要点
2- 两种服务
2.1 虚电路服务
观点1:让网络负责可靠交付
- 借助于电信网的成功经验,让网络负责可靠交付,计算机网络应模仿电信网络,使用面向连接的通信方式。
- 通信之前先建立虚电路 (Virtual Circuit),以保证双方通信所需的一切网络资源。
- 如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,不丢失、不重复。
步骤实现: 发送方发送给接收方的所有分组都沿着同一条虚电路传送
- 虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。
- 电路交换的电话通信是先建立了一条真正的连接。
- 因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。
2.2 数据报服务
观点2:网络提供数据报服务
- 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
- 网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
- 网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
步骤实现:发送方发送给 接收方的分组可能沿着不同路径传送
- 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责可靠交付(包括差错处理、流量控制等)。
- 采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
- 互连网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。
2.3 两种服务对比
3- IPV4
3.1 IPV4地址概述
3.1.1 基本概述
3.1.2 十进制转二进制
3.1.3 二进制转十进制
3.1.4 总结操作
3.2 分类编制的IPv4地址
3.2.1 基本概念
- 每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。
- 主机号在它前面的网络号所指明的网络范围内必须是唯一的。
- 由此可见,一个 IP 地址在整个互联网范围内是唯一的。
3.2.2 A类地址
3.2.3 B类地址
3.2.3 C类地址
3.2.4 案例示例
3.3 划分子网的IPv4地址
3.3.1 为什么要划分子网
在 ARPANET 的早期,IP 地址的设计确实不够合理:
- IP 地址空间的利用率有时很低。
- 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
- 两级的 IP 地址不够灵活。
将原来的网络划分成三个独立的网路
划分子网
3.3.2 子网掩码
3.3.3 案例分析1
3.3.4 案例分析2
3.3.5 默认子网掩码
3.3.6 总结
- 子网掩码是一个网络或一个子网的重要属性。
- 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
- 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
- 若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩码。
3.4 无分类编址的IPv4地址
3.4.1 为什么使用无分类编址
无分类域间路由选择 CIDR (Classless Inter-Domain Routing)
CIDR特点
- CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
- IP 地址从三级编址(使用子网掩码)又回到了两级编址。
3.4.2 如何使用无分类编址
3.4.3 路由聚合(构造超网)
3.4.4 总结
3.5 IPv4地址的应用规划
给定一个IPv4地址快,如何将其划分成几个更小的地址块,并将这些地址块分配给互联网中不同网络,进而可以给各网络中的主机和路由器接口分配IPv4地址
3.5.1 定长的子网掩码
基本特点
- 使用同一个子网掩码来划分子网。
- 子网划分方式不灵活,只能划分出2^n个子网(n是从主机号部分借用的用来作为子网号的比特数量)。
- 每个子网所分配的IP地址数量相同,容易造成IP地址浪费。
划分子网的IPv4就是定长的子网掩码
3.5.2 得出结论
采用定长的子网掩码划分,只能划分出2^n个子网,其中n是从主机号部分借用的用来作为子网号的比特数量,每个子网所分配的IP地址数量相同。
但是也因为每个子网所分配的IP地址数量相同,不够灵活,容易造成IP地址的浪费。
3.5.3 变长的子网掩码
基本特点
- 使用不同的子网掩码来划分子网。
- 子网划分方式灵活,可以按需分配。
- 每个子网所分配的IP地址数量可以不同,尽可能减少对IP地址的浪费。
无分类编址的IPv4就是变长的子网掩码
注意
在该地址中给上图所示的网络N1~N5分配子块,分配原则是“每个子块的起点位置不能随意选取,只能选取块大小整数倍的地址作为起点”,建议先给大的子块分配。
3.6 IP数据报的发送和转发过程
3.6.1 基本概念
3.6.2 案例分析
步骤一
源主机如何知道目的主机是否与自己在同一个网络中?
假设主机C要给主机F发送IP数据报,主机C将自己的IP地址和子网掩码相与,就可以得到主机C所在网络的网络地址。既然主机C要给主机F发送IP数据报。
那主机C肯定知道主机F的IP地址,否则就没法发送了,主机C将主机F的IP地址与自己的子网掩码相与,就可得到目的网络地址,该地址与主机C的网络地址不相等。因此主机C就知道了主机F与自己不在同一网络,它们之间的通信属于间接交付。
步骤二
主机C如何知道路由器R的存在?
主机C需要将IP数据报传输给路由器,由路由器将IP数据报转发给主机F。那么,主机C又是如何知道应该把IP数据报交给哪个路由器进行转发?
用户为了让本网络中的主机能和其他网络中的主机进行通信,就必须给其指定本网络中的一个路由器,由该路由器帮忙进行转发。所指定的路由器,也被称为默认网关。
可以将路由器接口0的IP地址,指定给该接口所直连网络中的各个主机作为默认网关,可将路由器接口1的IP地址,指定给该接口所直连网络中的各个主机作为默认网关,当本网络中的主机要和其他网络中的主机进行通信时,会将IP数据报传输给默认网关,由默认网关帮主机将IP数据报转发出去。
步骤三
路由器收到IP数据报后如何转发?
假设本例中的主机A要给主机D发送IP数据报,这属于间接交付。主机A会将该IP数据报传输给自己的默认网关,也就是图中所示的路由器。
当路由器收到IP数据报后,路由器首先会检查IP数据报的首部是否出错,若出错则丢弃该IP数据报并且通告源主机,如果没有出错,则进行转发。路由器根据IP数据报首部中的目的地址。
在自己的路由表中查找匹配的路由条目,如果找到匹配的路由条目则转发给路由条目中指示的吓一跳,如果找不到,则丢弃该IP数据报并通告源主机。
步骤四
为了简单起见,假设本例中的IP数据报首部没有出现差错,路由器取出IP数据报首部各地址字段的值。
源地址字段的值为主机A的IP地址,目的地址字段的值为主机D的IP地址。
步骤五
路由器就要对该IP数据报进行查表转发了,当我们给路由器的接口配置IP地址和子网掩码时,路由器就知道了自己的该接口与哪个网络是直连的。
步骤六
路由器根据IP数据报的目的地址,在自己的路由表中查找匹配的路由条目,逐条的检查路由条目。
将目的地址与路由条目中的地址掩码相与得到目的网络地址。
该目的网络地址与路由条目中的目的网络地址不相同,则这条路由条目不匹配。
步骤七
检查下一条路由条目,将目的地址与下一条路由条目中的地址掩码相与得到目的网络地址,该目的网络地址与路由条目中的目的网络地址相同。
则这条路由条目就是匹配的路由条目,按照它的下一跳指示,也就是从接口1转发该IP数据报。
这样,主机D就可以收到路由器转发来的该IP数据报。
3.6.3 不转发原因
案例一
假设主机A给本网络上的各设备发送了一个广播IP数据报,在数据报首部中的目的地址字段,该网络中的各设备都会收到该广播IP数据报。
但是路由器收到后并不会转发该数据报,也就是说,路由器是隔离广播域的,如果因特网中数量巨大的路由器,收到广播IP数据报后都进行转发,则会造成巨大的广播风暴,严重浪费因特网资源。
案例二
主机A给另一个网络发送广播IP数据报,在数据报首部中的目的地址字段,主机A将广播IP数据报传输给路由器,希望由路由器帮其转发,但路由器判断出这是广播IP数据报,不会转发。
3.6.4 总结
3.7 静态路由配置及其可能产生的路由环路
3.7.1 基本概念
3.7.2 静态路由配置
案例说明
3.7.3 默认路由
默认路由可以被所有网络匹配,但路由匹配有优先级,默认路由是优先级最低的。
3.7.4 特定主机路由
有时候,我们可以给路由器添加针对某个主机的特定主机路由条目。
一般用于网络管理人员对网络的管理和测试。
多条路由可选,匹配路由最具体的。
3.7.5 静态路由配置错误导致路由环路
各路路由器人工配置的静态路由。
假设将R2的路由表中第三条目录配置错了下一跳,这导致R2和R3之间产生了路由环路。
注意示例
为了防止IP数据报在路由环路中永久兜圈,在IP数据报首部设有生存时间TTL字段。IP数据报进入路由器后,TTL字段的值减1,如果TTL的值不等于0,则被路由器转发,否则被丢弃。
3.7.6 聚合了不存在的网络而导致路由环路
正常情况
案例分析
它(192.168.0.0/22)是由两个网络地址聚合而来的,具体方法就是找这两个网络地址的共同前缀,然后将共同前缀保持不变,将剩余比特全部取0,写成点分十进制形成,在其后写上斜线,斜线后面写上共同前缀的数量。
错误情况
解决方案
我们可以在R2的路由表中,添加针对所聚合的、不存在的网络的黑洞路由。黑洞路由的下一跳为null0,这是路由器内部的虚拟接口。
可以把它形象地看成是一个黑洞,IP数据报进入它后就有去无回了,也就是路由器丢弃了该IP数据报而不是转发该IP数据报。
3.7.7 网络故障而导致路由环路
解决方案
针对这种情况,我们可以在R1的路由表中,添加针对该直连网络的黑洞路由。
当R2要转发IP数据报到该网络时,进行查表转发,找到匹配的路由头目,下一跳转发给R1的接口1。R1收到该IP数据报后,进行查表转发,找到匹配的路由条目,这是一条黑洞路由,下一跳为虚拟接口null0,因此该IP数据报会进入这个黑洞。
假设一段时间后,之前的故障消失了,则R1又自动得出了其接口0的直连网络的路由条目,并将我们之前人工配置的,针对该直连的网络的黑洞路由条目,设置为失效状态。
自动生效状态
假设R1再次检测到其接口0所直连的网络出现了故障而不可达,则会自动在其路由表中删除该直连网络的路由条目。
并将我们之前人工配置的针对该直连网络的黑洞路由条目,设置为生效状态。
3.7.8 总结
4-路由选择协议
4.1 概述
4.1.1基本概念
4.1.2 路由选择协议特点
4.1.3 分层次的路由选择协议
自治系统 AS
在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。
自治系统之间的路由选择简称为域间路由选择,自治系统内部的路由选择简称为域内路由选择。
-
域间路由选择使用外部网关协议EGP这个类别的路由选择协议。
-
域内路由选择使用内部网关协议IGP这个类别的路由选择协议。
-
网关协议的名称可称为路由协议。
注意事项
外部网关协议EGP和内部网关协议IGP,只是路由选择协议的分类名称,而不是具体的路由选择协议。
在一个自治系统内部使用的具体的内部网关协议,与因特网中其他自治系统中选用何种内部网关协议无关。
常见的路由选择协议
4.1.4 路由器的基本结构
路由器是一种具有多个输入端口,和输出端口的专用计算机,其任务是转发分组。
路由选择部分的核心构件
是路由选择处理机,它的任务是根据所使用的路由选择协议,周期性地与其他路由器进行路由信息的交互,来更新路由表。
分组转发
分组转发部分由三部分构成,分别是交换结构、一组输入端口、一组输出端口。
4.1.5 步骤实现
一组输入端口
信号从某个输入端口进入路由器
物理层将信号转换成比特流,送交数据链路层处理
数据链路层识别从比特流中识别出帧,去掉帧头和帧尾后,送交网络层处理
如果送交网络层的分组是普通待转发的数据分组
则根据分组首部中的目的地址进行查表转发
若找不到匹配的转发条目,则丢弃该分组,否则,按照匹配条目中所指示的端口进行转发。
一组输出端口
网络层更新数据分组首部中某些字段的值,例如将数据分组的生存时间减1,然后送交数据链路层进行封装。
数据链路层将数据分组封装成帧,交给物理层处理。
注意: 物理层将帧看成比特流将其变换成相应的电信号进行发送。
路由选择部分
路由选择部分的核心构件是路由选择处理机,它的任务是根据所使用的路由选择协议。周期性地与其他路由器 进行路由信息的交互,来更新路由表。
如果送交给输入端口的网络层的分组是路由器之间交换路由信息的路由报文,则把这种分组送交给路由选择处理机。
路由选择处理机根据分组的内容来更新自己的路由表
路由选择处理机还会周期性地给其他路由器发送自己所知道的路由信息
路由器的各端口还会有输入缓冲区和输出缓冲区
-
输入缓冲区用来暂存新进入路由器但还来不及处理的分组
-
输出缓冲区用来暂存已经处理完毕但还来不及发送的分组
路由器的端口一般都具有输入和输出功能,这些实例分出了输入端口和输出端口是更好演示路由基本工作过程。
4.1.6 小结
4.2 路由信息协议RIP
4.2.1 基本概念
4.2.2 RIP的基本工作过程
4.2.3 路由条目的更新规则
步骤一
路由器C和D互为相邻路由器,他们之间周期性地交换并更新路由信息,这是路由器C的路由表,其中到达各目的网络的下一跳都记为问号。
可以理解为路由器D并不需要关心路由器C的这些内容,这是路由器D的路由表。假设路由器C的RIP更新报文发送周期到了,则路由器C将自己路由表中相关路由信息封装到RIP更新报文中发送给路由器D。
步骤二
路由器C将自己的路由表发送给了路由器D,路由器D收到后对其进行改造。将到达各目的网络的下一跳都改为C,距离都增加1,因为路由器C告诉D。
它可以到达这些目的网络,那么路由器D作为C的邻居路由器,当然也就可以通过C来到达这些目的网络,只是比C到达这些目的网络的距离大1。
步骤三
路由器D现在可以根据改造好的路由表,来更新自己先前的路由表。路由器D原来到达网络N2的距离是2,下一跳经过路由器C的转发。
现在路由器D知道了,到达网络N2仍然经过C的转发,距离变为了5,C与N2之间的网络拓扑发生了变化,于是将自己这条路由条目中的距离更新为5。
到达目的网络,相同的下一跳,最新的消息,应该更新。
步骤四
路由器D原来不知道网络N3的存在,现在路由器D知道了,可以通过路由器C到达网络N3,于是将该路由条目添加到自己的路由表中,更新路由表的理由可总结为“发现了新的网络, 添加”。
步骤五
路由器D原来到达网络N6的距离是8,下一跳经过路由器F的转发,现在路由器D知道了,到达网络N6如果通过C来转发,则距离可缩短为5,于是将自己这条路由条目中的距离修改为5。下一跳修改为C,更新路由表由表的理由可总结为: "到达目的网络,不同的下一跳,新路由有优势,应该更新!!"
步骤六
路由器D原来到达网络N8的距离是4,下一跳经过路由器E的转发,现在路由器D知道了,达到网络N8还可以通过C来转发,距离也为4。
于是将该路由条目添加到自己的路由表中,更新路由表的理由可总结为"到达目的网络,不同的下一跳,但是距离相等"。
步骤七
路由器D原来到达网络N9的距离是4,下一跳经过路由器F的转发,现在路由器D知道了。到达网络N9如果通过C来转发,则距离扩大为6。
于是不使用这条路由条目来更新自己的路由表,不更新路由表的理由可总结为"到达目的网络,不同的下一跳,新路由劣势,不应该更新!!"
RIP存在“坏消息传播得慢”的问题
4.2.4 解决方案
注意事项
但是,这些方法也不能完全解决“坏消息传播得慢”的问题,这是距离向量的本质决定。
4.2.5 小结
RIP 协议的优缺点
优点:
- 实现简单,开销较小。
缺点:
-
RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
-
路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。
-
“坏消息传播得慢”,使更新过程的收敛时间过长。
4.3 开放最短路径优先OSPF
4.3.1 基本概念
案例说明
4.3.2 问候分组
IP数据报首部中协议号字段的取值应为89,来表明IP数据报的数据载荷为OSPF分组
4.3.3 发送链路状态通告LSA
洪泛法有点类似于广播,就是从一个接口进来,从其他剩余所有接口出去。
4.3.4 链路状态数据库同步
使用SPF算法计算出各自路由器到达其他路由器的最短路径
4.3.5 OSPF五种分组类型
4.3.6 OSPF的基本工作过程
步骤操作
相邻路由器之间周期性发送问候分组,以便建立和维护邻居关系。建立邻居关系后,给邻居路由器发送数据库描述分组,也就是将自己的链路状态数据库中的所有链路状态项目的摘要信息,发送给邻居路由器。
R1收到R2的数据库描述分组后,发现自己缺少其中的某些链路状态项目,于是就给R2发送链路状态请求分组,R2收到后,将R1所缺少的链路状态项目的详细信息。封装在链路状态更新分组中发送给R1,R1收到后,将这些所缺少的链路状态项目的详细信息,添加到自己的链路状态数据库中,并给R2发送链路状态确认分组,需要说明的是,R2也可以向R1请求自己所缺少的链路状态项目的详细信息。
最终R1和R2的链路状态数据库将达到一致,也就是链路状态数据库达到同步,每30分钟或链路状态发生变化时,路由器都会发送链路状态更新分组,收到该分组的其他路由器将洪泛转发该分组,并给该路由器发回链路状态确认分组,这又称为新情况下的链路状态数据库同步。
OSPF在多点接入网络中路由器邻居关系建立
如果不采用其他机制,将会产生大量的多播分组。
区域:为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统再划分为若干个更小的范围。
- 在该自治系统内,所有路由器都使用OSPF协议,OSPF将该自治系统再划分成4个更小的区域
- 每个区域都有一个32比特的区域标识符,其他区域的区域标识符不能为0且不相同。
- 主干区域的区域标识符必须为0,主干区域用于连通其他区域,每个区域一般不应包含路由器超过200个。
- 划分区域的好处就是,利用洪泛法交换链路状态信息局限于每一个区域而不是自治系统,这样减少整个网络上的通信量。
4.3.7 小结
4.4 边界网关协议BGP
BGP(Border Gateway Protocol) 是不同自治系统的路由器之间交换路由信息的协议。
4.4.1 基本原理
4.4.2 外部网关协议EGP
4.4.3 BGP适用于多级结构的因特网
4.4.4 四种报文
4.4.5 小结
4.5 IPv4数据报的首部格式
4.5.1 各字段作用
- 一个 IP 数据报由首部和数据两部分组成。
- 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
- 在首部的固定部分的后面是一些可选字段,其长度是可变的。
图中的每一行都由32个比特(也就是4个字节)构成,每个小格子称为字段或者域,每个字段或某些字段的组合用来表达IP协议的相关功能。
4.5.2 首部长度
IP数据报的首部长度一定是4字节的整数倍
因为首部中的可选字段的长度从1个字节到40个字节不等,那么,当20字节的固定部分加上1到40个字节长度不等的可变部分,会造成首部长度不是4字节整数倍时,就用取值为全0的填充字段填充相应个字节,以确保IP数据报的首部长度是4字节的整数倍。
4.5.3 区分服务
4.5.4 总长度字段
4.5.6 标识、标志、片偏移
具体分析
它们共同用于进行IP数据报分片,它将在数据链路层封装成帧。每一种数据链路层协议都规定了帧的数据载荷的最大长度,称为最大传输单元MTU。
如果某个IP数据报的总长度超过MTU时,将无法封装成帧,需要将原IP数据报分片为更小的IP数据报,再将各分片IP数据报封装成帧。
4.5.7 IPv4数据报进行分片
步骤一
具体分析
假设有这样一个IP数据报,它由20个字节的固定首部和3800字节的数据载荷两部分构成,该IP数据报的总长为3820字节。假设使用以太网传送该IP数据报,以太网的最大传送单元MTU为1500字节。也就是以太网的数据载荷部分最大为1500字节。无法封装3820字节长的IP数据报,需要把该IP数据报分片成几个更小的IP数据报,每个长度不能大于1500个字节。
然后再将每个分片IP数据报封装成一个以太网帧进行传输,为了更好地描述后续的分片工作,将原IP数据报数据载荷部分的每一个字节都编上号。
步骤二
具体分析
第一个字节编号为0,最后一个字节编号为3799。我们可将原IP数据报的数据载荷分成三个更小的分片,第一个分片从0号字节到1399号字节,共1400个字节。
第二个分片从1400号字节到2799号字节,共1400个字节,第三个分片从2800号字节到3799号字节,共有1000个字节。
分片结束后,给每个分片重新添加一个首部,使之成为IP数据报。
步骤三
具体分析
原IP数据报首部中的总长度字段的十进制取值为3800+20;标识字段的十进制取为12345,MF比特的取值为0,表示后面没有分片数据报,这就是最后一个分片数据报。DF比特的取值为0,表示该IP数据报允许被分片,由于这是未分片的原IP数据报,因此片偏移为0。
总长度字段的十进制取值为1400+20。其中1400字节是分片的长度,20字节是固定首部的长度。标识字段的十进制取值与原IP数据报的相同,由于该分片不是最后一个分片,因此MF比特的取值为1,表示该分片后还有分片,因此DF比特的取值为0。
该分片IP数据报报数数据载荷部分的第一字节,就是原IP数据报数据载荷部分的第一个字节,因此片偏移字段的取值为0/8,除以8的原因是偏移字段以8字节为单位。标识字段的十进制取值与原IP数据报的相同。
由于该分片就是最后一个分片,因此MF比特的取值为0,表示该分片后没有其他分片。该分片IP数据报允许被再次分片,因此DF比特的取值为0,该分片IP数据报数据载荷的第一个字节,是原IP数据报数据载荷中编号为2800的字节,因此片偏移字段的取值为2800/8。
步骤四
具体分析
现在假定分片2的IP数据报经过某个网络时还需要再进行分片。其中一个分片长度为800字节,另一个分片长度为600字节。分片结束后,给每个分片重新添加一个首部,使之成为IP数据报。
4.5.8 生存时间TTL
案例说明
4.5.9 协议
具体分析
当首部中协议字段的取值为1时,表明数据部分是ICMP报文。也就是用ICMP协议封装的协议数据单元。当首部中的协议字段的取值为6时,
表明数据部分是TCP报文段,也就是用TCP协议封装的协议数据单元,这是首部检验和字段。
4.5.10 首部检验和
4.4.11 源IP地址和目的IP地址
4.4.12 小结
4.6 网际控制报文协议ICMP
4.6.1 基本概念
架构IP网络时需要特别注意两点:
- 确认网络是否正常工作
- 遇到异常时进行问题诊断
而ICMP就是实现这些问题的协议
ICMP的主要功能包括:
- 确认IP包是否成功送达目标地址
- 通知在发送过程当中IP包被废弃的具体原因
- 改善网络设置等
有了这些功能以后,就可以获得网络是否正常,设置是否有误以及设备有何异常等信息,从而便于进行网络上的问题诊断。
ICMP 报文的格式
4.6.2 ICMP差错报告报文
终点不可达
步骤分析
假设主机H1给H2发送IP数据报,H1会将IP数据报发送给路由器R1,由R1帮其转发。若R1的路由表中没有网络N3的路由记录,默认路由以及主机H2的特定主机路由,则R1就不知道如何转发该数据报,只能将其丢弃。并向发送该数据报的源主机H1发送ICMP差错包裹报文,其类型为终点不可达。
源点抑制
步骤分析1
H1给H2发送IP数据报,当该数据报传输到H2时,由于H2拥塞就丢弃了该数据报,并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为源点抑制。
步骤分析2
H1给H2发送IP数据报,当该数据报传输到路由器R2时,由于R2拥塞也就是R2比较繁忙。R2根据自己的丢包策略丢弃了该数据报。
并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为源点抑制。
时间超过
步骤分析
某个生存时间等于2的IP数据报传输到了路由器R1,R1将其生存时间减1后结果是1,这表明该数据报的生存时间还没有结束,R1将其转发出去。
当该数据报传输到路由器R2后,R2将其生存的时间减1后结果是0,这表明该数据报的生存时间结束了,R2丢弃该数据报,并向发送该数据报的源主机H1发送ICMP差错报告报文。
参数问题
步骤分析
这是H1发送给H2的IP数据报,假设该数据报在传输过程中受到了干扰,其首部出现了误码,当该数据传输到路由器R1后,R1检测出该数据报的首部出错,于是丢弃该数据报并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为参数问题。
改变路由(重定向)
步骤分析
假设给主机H1指定的默认网关是路由器R1,则H1要发往网络N2的IP数据报都会传输给R1,尤其帮忙转发。当R1发送H1发往N2的数据报的最佳路由不应当经过R1而是应当经过R4时,就用改变路由报文把这个情况告诉主机。
H1就在自己的路由表中添加一个项目,到达N2应该经过路由器R4,而不是默认网关R1。之后H1要发往N2的IP数据报都会传输给R4,由其帮忙转发。
4.6.3 不应发送ICMP差错报告报文情况
4.6.4 常用的ICMP询问报文
ICMP 不是高层协议(看起来好像是高层协议,因为 ICMP 报文是装在 IP 数据报中,作为其中的数据部分),而是 IP 层的协议。
4.6.5 ICMP应用举例
分组网间探测PING(Packet InterNet Groper)
跟踪路由(traceroute)
4.6.6 tracert命令的实现原理
步骤一
H1就给H2发送ICMP回送请求报文,该报文被封装载IP数据报中,IP数据报首部中生存时间字段TTL的值被设置为1。
该IP数据报到达R1后,其生存时间减1结果为0
R1丢弃该数据报,并向发送该数据报的源主机H1,发送ICMP差错报告报文,其类型为时间超过,H1就知道了到达H2的路径中的第一个路由器。
步骤二
H1继续发送下一个封装有ICMP回送请求报文的IP数据报,其首部中生存时间字段TTL的值被设置为2。
经过R1的转发后,该数据报的生存时间减少为1,其生存时间减1结果为0。
该IP数据报到达R2后,R2丢弃该数据报并向发送该数据报的源主机H1,发送ICMP差错报告报文,其类型为时间超过。
H1就知道了到达H2的路径中的第二个路由器。
H1继续发送下一个封装有ICMP回送请求报文的IP数据报,其首部中生存时间字段TTL的值被设置为3。
经过R1和R2的转发后,该数据报到达主机2,其生存时间减少为1,H2解析该数据报,发现其内部封装的是ICMP回送请求报文。
于是就给H1发送封装有ICMP回送请求回答报文的IP数据报,H1就知道已经跟踪到路径中的最后一站,也就是目的主机H2。
4.6.7 小结
4.7 VPN和NAT
虚拟专用网VPN(Virtual Private Network)
4.7.1 基本概念
- 由于 IP 地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数。
- 考虑到互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网。
- 假定在一个机构内部的计算机通信也是采用 TCP/IP 协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本机构自行分配其 IP 地址。
因特网数字分配机构IANA官网查看IPv4地址空间中特殊地址的分配方案。
用粉红色标出来的地址就是无需申请的、可自由分配的专用地址,或称私有地址。
私有地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信
私有地址只能用作本地地址而不能用作全球地址
因特网中所有路由器对目的地址是私有地址的IP数据报一律不进行转发
4.7.2 本地地址与全球地址
- 本地地址: 仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
- 全球地址:全球唯一的 IP 地址,必须向互联网的管理机构申请。
- 在内部使用的本地地址就有可能和互联网中某个 IP 地址重合,这样就会出现地址的二义性问题。
步骤实现
下图所示部门A和部门B至少需要一个 路由器具有合法的全球IP地址,这样各自的专用网才能利用公用的因特网进行通信。
部门A向部门B发送数据流程。
IP隧道技术
两个专用网内的主机间发送的数据报是通过了公用的因特网,但在效果上就好像是在本机构的专用网上传送一样。
数据报在因特网中可能要经过多个网络和路由器,但从逻辑上看,R1和R2之间好像是一条直通的点对点链路。
网络地址转换NAT(Network Address Translation)
4.7.2 基本概念
使用私有地址的主机,如何才能与因特网上使用全球IP地址的主机进行通信?
这需要在专用网络连接到因特网的路由器上安装NAT软件
专有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。
这样,所有使用私有地址的主机在和外界通信时,都要在NAT路由器上将其私有地址转换为全球IP地址。
假设,使用私有地址的主机要给因特网上使用全球IP地址的另一台主机发送IP数据报。
因特网上的这台主机给源主机发回数据报。
当专用网中的这两台使用私有地址的主机都要给因特网使用全球地址的另一台主机发送数据报时,在NAT路由器的NAT转换表中就会产生两条记录,分别记录两个私有地址与全球地址的对应关系。
4.7.3 存在问题
解决方法
我们现在用的很多家用路由器都是这种NART路由器。
内网主机与外网主机的通信,是否能由外网主机首先发起?
不能由外网主机首先发起。