网络层
网络层提供的两种服务
-
虚电路服务
- 当两台计算机进行通信时,也应当先建立连接(但在分组交换中是建立一条虚电路),以预留双方通信所需的一切网络资源。
- 双方沿着已经建立的虚电路发送分组,这样分组的首部不需要填写完整的目的主机地址,而只需要填写这条虚电路的编号,因而减少了分组的开销。
-
数据报服务
- 网络层向上只提供简单灵活的、无连接的、精良大努力交付的数据报服务。
- 网络在发送时不需要先建立连接,分一个分组独立发送,其前后的分组无关。网络层不提供服务质量的承诺。
- 可靠通信由高层控制(运输层)
- 采用这种设计思路的优点是:网络造价大大降低,运行方式灵活,能够适应多种应用。
-
两种服务的对比
网际协议IP
- 与IP协议配套的还有三个协议:
- 地址解析协议ARP
- 网际控制报文协议ICMP
- 网际组管理协议IGMP
虚拟互连网络
- 中间设备根据所在层次的划分:
- 物理层使用的设备叫转发器
- 数据链路层使用的设备叫网桥或者桥接器
- 网络层使用的中间设备叫路由器
- 在网络层以上使用的中间设备叫网关
- 所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用IP协议就可以使这些性能各异的网络在网络层看起来好像是一个统一的网络。
分类的IP地址
- IP地址及其表示方法
- 整个互联网就是一个单一的、抽象的网络
- IP地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32位(IPv4)标识符。
- IP地址编址的三个阶段
- 分类的IP地址
- 子网的划分
- 构成超网
- 分类的IP地址
就是将IP地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成,其中第一个为网络号,第二个字段是主机号,可以记为:
IP地址 ::={<网络号>,<主机号>}
如下图:
- A,B,C类地址都是单播地址
- D类地址用于多播
- E类地址保留
- 常用的三种IP地址
- A类地址
- A类地址网络号字段占一个字节,第一位固定为0。
- 网络号全为0代表这是个保留地址,意思是本网络。
- 网络号全1(127)保留作为本地软件环回测试本机进程之间的通信之用。
- 可指派的网络号为126个(即27-2)
- A类地址主机号字段占三个字节
- 全0的主机号表示该IP地址是“本主机”所连接到的单个地址网络
- 全1表示所有的,全1的主机号字段表示该网络上的所有主机。
- 可指派的网络号是16777214(即224-2)
- B类地址
- B类地址网络号字段占2个字节,前两位固定为10.
- B类地址的128.0.0.0并不指派,所以B类的最小地址为128.1.0.0.
- 最大网络数为16383(即214-1)。
- 最大主机数为65534(即216-2),扣除全0和全1的主机号。
- C类地址
- C类地址的网络号字段占3个字节,前三位固定为110.
- C类网络192.0.0.0也是不指派的,最小的网络地址是192.0.1.0。
- 最大网络数为2097151(即221-1)
- 最大主机数为254(即28-2),扣除全0和全1的主机号。
- IP地址的指派范围
- A类地址
- IP地址的特点
- 每一个IP地址都由网络号和主机号两部分组成。
- IP地址是标志一台主机(或路由器)和一条链路的接口。
- 具有相同网络号的主机的集合是一个网络。
- 在IP地址中,所有分配到网络号的网络都是平等的,所谓平等是指互联网同等对待每一个IP地址。
IP地址与硬件地址
- 从层次上看IP地址和硬件地址的区别
- 物理地址是数据链路层和物理层使用的地址
- IP地址是网络层和以上各层使用的地址,是一种逻辑地址。
- 在IP层抽象的互联网上只能看到IP数据报
虽然IP数据报会经过路由器的转发,但是在它首部中的源地址和目的地址始终不变。 - 虽然在IP数据报首部有源站IP地址,但路由器只根据目的站的IP地址的网络号进行路由选择。
- 在局域网的链路层,只能看见MAC帧。
路由器在转发MAC帧的时候,在数据链路层会改变MAC帧的首部和尾部,换上不同的目的地址和源地址。 - 尽管连在一起的网络硬件地址体系各不相同,但IP层抽象的互联网却屏蔽了下层这些很复杂的细节。只要在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或者路由器之间的通信。
地址解析协议ARP
- ARP的作用:由IP地址解析出MAC地址
- ARP在主机APR高速缓存存放一个从IP地址到硬件地址的映射表,并且还经常动态更新这个表(新增或超时删除)。
- 每台主机都设有一个ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表。
- ARP的工作流程:
- 当主机A要向本局域网上的某台主机B发送IP数据报时,就先查看本地ARP高速缓存中有无B的IP地址,如果有,就在ARP高速缓存中查出B的硬件地址,然后把这个硬件地址和自己的硬件地址写入MAC帧,再发送给B。
- 当本地ARP高速缓存没有B的IP地址时,就进行以下步骤找到B的硬件地址:
- ARP进程在本局域网广播一个APR请求分组:“我的IP是
209.0.0.5
,硬件地址是00-00-C0-15-AD-18
,我想知道IP为209.0.0.6
的主机的IP地址” - 本局域网上所有运行的ARP进程都收到此ARP请求分组。
- 主机B的IP地址与请求中的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组(单播),同时写入自己的硬件地址。
- 主机A收到B的ARP响应分组后就在ARP高速缓存中写入B的IP和硬件地址。
- ARP进程在本局域网广播一个APR请求分组:“我的IP是
- ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间,凡超过生存时间的项目就从高速缓存中删除掉。
- ARP只能解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。若想解决不再同一个局域网的地址映射,必须先由路由器转发到同一个局域网再使用ARP进行解析。
IP数据报的格式
- IP数据报首部的固定部分中的各字段
- 版本 4位,指IP协议的版本。
- 首部长度 4位,最大为15。首部最长为15*32位子(4字节)= 60字节。
- 区分服务 8位,用来获得更好的服务。
- 总长度 16位,指首部和数据之和的长度。
- 标识 16位,IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加一,然后被赋值给标识字段。
- 标志 3位,目前只有前两位有意义。
- 最低位为MF,MF=1表示后面还有分片,MF=0表示这是最后一个分片。
- 中间一位为DF,DF=1时表示不能分片,DF=0表示可以分片。
- 片偏移 13位,片偏移指出:较长的分组在分片后,谋篇在原分组中的相对位置。
- 生存时间 8位,生存时间字段是TTL,表示在网络中的寿命(跳数)。每进过一个路由器跳数就减一,如果TTL小于0还没有到达目的主机,就丢弃。
- 协议 8位,指出数据报携带的数据时使用何种协议。
- 首部校验和 16位,只检验数据报的首部,但不包括数据部分。
- 源地址 32位。
- 目的地址 32位。
IP层转发分组的流程
- 分组转发算法
- 从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N。
- 若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据交付目的主机;否则就是间接交付,执行3。
- 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一条路由器;否则,执行4。
- 若路由器表中有达到网络N的路由,则把数据传送给路由表中所指明的下一跳路由器;否则,执行5。
- 若路由器表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行6。
- 报告转发分组出错。
划分子网和构造超网
划分子网
-
两级IP地址的缺点
- IP地址的空间利用率很低
- 给每一个物理网络分配一个网络号会使路由表变得太大而使网络性能变坏。
- 两级IP地址不够灵活
-
解决两级IP地址的问题
- 从两级IP地址到三级IP地址
- 在两级IP地址中增加一个子网号字段
- 这种做法叫做划分子网或者子网寻址或子网路由选择。
-
划分子网的基本思路
- 一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网。划分子网纯属一个单位内部的事情。本单位以外的网络看不见这个网络是由多少个子网组成,因为这个单位对外仍然表现为一个网络。
- 划分子网的方法是从网络的主机号借用若干位作为子网号,主机位就相应的减少若干位。所以两级IP地址也就变为了三级IP地址:
IP地址 ::= {<网络号>,<子网号>,<主机号>}
- 凡是从其他网络发送给本单位某台主机的IP数据报,仍然是根据IP数据报的目的网络好找到链接在本单位网络上的路由器。但此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网,把数据报交付目的主机。
-
子网掩码
- 组成:由连续的1和连续的组成
- 作用:根据IP地址得出子网的网络地址。(判断一个IP地址是属于哪一个子网的)
- 方法:将IP地址与子网掩码进行“与”运算(按位与),就能得到该IP的属于的子网的网络地址。
-
默认子网掩码
使用子网时的分组转发
- 使用子网划分后,路右边必须包含三项内容:目的网络地址、子网掩码和下一条地址。
- 分组转发算法如下:
- 从收到的数据报首部提取目的IP地址D
- 先判断是否为直接交付。对路由器直接相连的网络逐个检查:用各网络的子网掩码和D逐位“与”,看结果是否和相应的网络地址匹配。若匹配,则把分组直接交付,否则就间接交付,执行3。
- 若路由表中有目的地址为D的特定主机路由,则把数据传送给路由表中所指明的下一条路由器;否则执行4。
- 对路由表每一行,用其中的子网掩码和D逐位“与”,其结果为N,若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一条路由器,否则执行5.
- 若路右边中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器,否则执行6.
- 报告转发分组出错。
无分类编址CIDR(构造超网)
-
CIDR的特点
- CIDR消除了传统的A类、B类、C类地址以及其划分子网的概念。CIDR把32位的IP地址分为前后两个部分,前面部分是网络前缀,用来指明网络,后面部分用来指明主机。CIDR的记法是:
IP地址 ::= {<网络前缀>,<主机号>}
- CIDR还是用斜线记法,即在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数(如128.14.35.7/20)
- CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址快”。
- CIDR消除了传统的A类、B类、C类地址以及其划分子网的概念。CIDR把32位的IP地址分为前后两个部分,前面部分是网络前缀,用来指明网络,后面部分用来指明主机。CIDR的记法是:
-
地址掩码
- 为了更方便的进行路由选择,CIDR使用32位的地址掩码。地址掩码由一串1和一串0组成,而1的个数就是网络前缀的长度。在斜线记法中,斜线后面的数字就是地址掩码中1的个数。
-
路由聚合(构成超网)
- 由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址快来查找目的网络,这种地址的聚合常称为路由聚合,也叫构成超网。
-
最长前缀匹配
- 在用CIDR时,由于采用了网络前缀这种记法,因此在路由表中的项目也应该有响应的改变,这时候每个项目由网络前缀和下一条地址组成。但是在查找路由表的时候可能会出现可能会的不到不止一个匹配的结果。
- 出现上述情况应当从匹配结果中选择具有最长网络前缀的路由。,这叫最长前缀匹配。
- 例子:
网际控制报文协议ICMP
- 作用:为了更有效地转发IP数据报和提高交付的机会,在网际层使用了网际控制报文协议ICMP。
ICMP报文的种类
-
种类分两种
- ICMP差错报告报文和ICMP询问报文
-
差错报告报文
- 终点不可达 当路由器或主机不能交付数据报时就向源点发送终点不可达报文。
- 时间超过 当路由器收到生存时间为0的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。
- 参数问题 当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点到发送参数问题报文。
- 改变路由(重定向) 路由器吧改变路由报文发送给主机,让主机知道下次应该将数据报发送给另外的路由器。
-
询问报文
- 回送请求和回答 ICMP回送请求报文时由主机或路由器向一个特定的目的主机发出的询问。收到报文的主机必须给远主机或路由器发送ICMP回答报文,这种报文用来探测目的站是否可达以及了解其有关状态。
- 时间戳请求和回答 时间戳请求回与回答可用于时钟同步和时间测量。
ICMP的应用举例
- PING
- 分组网间探测PING,用来探测两态主机间的连通性。
- 直接使用ICMP,没有使用TCP和UDP
- traceroute
- 用来跟踪一个分组从源点到终点的路径。
互联网的路由选择协议
有关路由选择协议的几个基本概念
- 理想的路由算法
- 算法必须是正确的和完整的。
- 算法在计算上应简单
- 算法能适应通信量个网络拓扑的变化
- 算法应具有稳定性
- 算法应是公平的
- 算法应是最佳的
- 分层次的路由选择协议
-
互联网采用的路由选择协议主要是自适应的(动态的)、分布式路由选择协议。
-
采用分层路由协议的原因:
- 互联网的规模非常大
- 许多单位不愿意外界了解到自己单位网络的布局细节和本部门所采用的路由选择协议,但同时还希望连接到互联网。
-
自治系统AS是在单一技术管理下的一组路由器。
-
互联网把路由协议分为两大类:
- 内部网关协议IGP 即在一个自治系统内部使用的路由选择协议,而这在与互联网中的其他的自治系统选用什么路由协议无关。
- 外部网关协议EGP 若源主机和目的主机处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中,这样的协议就是外部网关协议EGP。
-
自治系统之间的路由选择也叫域间路由选择
-
自治系统内部的路由选择叫做域内路由选择
-
内部网关协议RIP
- RIP是一种分布式的基于距离向量的路由选择协议。
- RIP要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。
- RIP允许一条路径最多只能包含15个路由器,当“距离”等于16时即表示不可达。RIP只适用于小型互联网
- RIP选择一条具有最少路由器的路由(即最短路由),哪怕还存在一条高速(低时延)但路由器较多的路由。
- RIP的特点
- 仅和相邻路由器交换信息。
- 路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表
- 按固定的时间间隔交换路由信息
- 距离向量算法
对每一个相邻路由器发来的RIP报文:- 对地址为X的相邻路由器发来的RIP报文,先修改此报文中的所有项目,把“下一跳”字段中的地址都改为X,并把所有的距离都加1,每一个项目都有三个关键数据:到目的网络N,距离是d,下一跳路由器是X。
- 对修改后的RIP报文中的每一个项目,执行以下步骤:
若原来的路由表中没有目的网络N,则把该项目添加到路由表中
否则(即在路由表中有目的网络N,这时就查看下一跳路由器地址)- 若下一跳路由器地址是X,则把收到的项目替换原路由表中的项目
- 否则(即这个项目是:到目的网络N,但下一跳路由器不是X)
- 若收到项目中的距离d小于路由表中的距离,则进行更新
- 否则什么也不做
- 若3分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,即把距离设为16.
- RIP存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。
- RIP使用运输层的用户数据报UDP进行传送。
内部网关协议OSPF
- 开放最短路径优先OSPF使用分布式的链路状态协议
- OSPF的特点
- 向本自治系统中的所有路由器发送消息。这里使用洪泛法,路由器通过所有输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再将此信息发往其他所有相邻的路由器。
- 发送的信息就是本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
- 只有当链路状态发生变化时,路由器才向所有路由器使用洪泛法发送此信息。
- OSPF协议可以使所有的路由器都建立一个链路状态数据库,这个数据可实际上就是全网的拓扑结构图。
- OSPF不使用UDP而是直接用IP数据报传送。
外部网关协议BGP
BGP-4是不同AS的路由器之间交换路由信息的协议,是一种路径向量路由选择协议。BGP力求寻找一条能够到达目的网络(可达)且比较好的路由(不兜圈子),而并非要寻找一条最佳路由。
路由器的构成
-
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。
-
路由器结构可分为两大部分:
- 路由选择
- 分组转发
-
分组转发
- 交换结构
- 输入端口
- 输出端口
IPv6
IPv6的基本首部
- IPv6所引进的主要变化
- 更大的地址空间 地址空间从232到2128
- 扩展的地址层次结构
- 灵活的首部格式
- 改进的选项
- 允许协议继续扩充
- 支持即插即用
- 支持资源的预分配
- 首部改为8字节对齐
- IPv6数据报由两大部分组成,即基本首部和后面的有效载荷。
IPv6地址
-
IPv6的目的地址
- 单播
- 多播
- 任播 终点是一组计算机,但数据报只交付其中的一个,通常是距离最近的一个。
-
IPv6使用冒号十六进制记法
- 把每个16位的值用16进制值表示,各值之间用冒号分隔。如
68E6:8C64:FFFF:FFFF:0:1180:9601:FFF
。 - 允许使用零压缩,记一串连续的0可以为一对冒号所取代。如
FF05:0:0:0:0:0:0:B3
可压缩为FF05::B3
。 - 规定在任一地址上只能使用一次零压缩。
- 把每个16位的值用16进制值表示,各值之间用冒号分隔。如
从IPv4到IPv6过渡
- 向IPv6过渡只能采用逐步演进的办法,同时还必须使新装的IPv6系统能够向后兼容。