网络层
方老师
网络层和运输层是重点和难点
怎么把世界上无数的局域网连成一个互联网
网络层提供的两种服务
为什么要网络层
-
数据链路层解决了同一局域网计算机间帧的传输问题,但没有解决异构网络之间的连接和资源共享问题
-
异构网络互联,即跨局域网连接和资源共享;
- 互联网络中主机标识问题;
- 互联网中主机间路由选择问题(最佳路径);
-
互联网中数据转发的问题(分组转发)。
-
数据链路层帧的校验没有解决可靠传输的问题,网络层需要解决可靠传输吗?
- 网络层要向传输层提供面向连接的服务,还是无连接的服务?
争论焦点的实质:在计算机通信中,可靠交付应当由网络负责还是端系统负责?
要不要呢?2种观点
网络层要实现可靠有点困难
-
网络层要设计得尽量简单,向其上层只提供简单灵活的、无连接的、尽最大努力交付的数据报服务额
- 网络在发送分组时不需要先建立连接
- 每个分组独立发送,分组不进行编号
- 网络层不提供服务质量的承诺
-
由主机中的运输层负责可靠的通信
网络协议 IP
网络协议IP(Internet Protocol)是TCP/IP体系中最主要的两个协议之一,也是最重要的互联网标准协议之一
虚拟互联网络
如何让信息在不同网络间都能理解?
都使用相同的网络?不行
- 不能满足不同用户需要,没有一种单一的网络能够适应所有用户的需求
- 不适应技术发展
使用中间设备?可以
当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互连的各具体的网络异构细节
Note
网络协议IP是TCP/IP体系中最主要的两个协议之一,也是最重要的互联网标准协议之一
IP数据报的格式

抓包抓的就是这个包
- 前4位:报头,表示版本,IPc4协议的报头,版本字段值\((0100)_2=4\),IPv6的值就是6
- 4-7位:首部长度,4比特最大可表示15,每个1表示4各字节,所以首部最大长度为\(15 \times 4 = 60字节\)
- 8-15:区分服务,不怎么使用
- 16-31:总长度=首部+数据部分总长度,理论最大长度\(2^16 - 1 = 65535Byte\),但实际数据链路层的MTU会限制实际的IP数据报长度
第二层:
- 0-15:同一个IP报分出来的有相同分组
-
16-18:标志:|保留|DF|MF|
- MF:1bit, More Fragment,表示后面还有分组吗,是否是最后一个分组
- DF:1bit, dont Fragment,表示这个数据包是否分组了
-
19-31: 片偏移,每个1代表8bits(就是以Byte为单位)

第3层
- 0-7:生存时间:指示数据报在网络中可通过的路由器数的最大值(最多跳多少下)
- 8-16:协议,往上层交时交给谁(可以是:网络层的ICMP/IGMP/OSPF,运输层的TCP/UDP)

- 16-31:首部检验和,只检验首部(例如总长度数据),不精确检测数据,毕竟网络层不保证可靠传输
总结:
网络层基本功能
- 支持多跳寻路将IP数据报送达目的端:目的IP地址
- 表名发送端身份:源IP地址
- 根据IP头部协议类型,提交给不同上层协议处理:协议
其他相关问题:
- 数据报长度大于传输链路MTU的问题,通过分片基址解决:标识、标志、片偏移
- 防止循环转发浪费网络资源(路由错误、设备故障),通过跳数限制解决:生存时间TTL
- IP报头错误导致无效传输,通过头部机校验解决:首部校验和
IP地址
网络号+主机号,共32位
- 网络号全0,表示本网络
- 网络号第一个0其余1,用于本地软件环回测试
- 主机号全0,表示该主机所在的网络地址
- 主机号全1,表示该网络的所有主机(广播)
假设这是一个A类地址(有ABCDE类,后续使用无分类编址方法CIDR(Classless Inter-Domain Routing)后就废弃分类了),网络号8位,主机号24位,则有\(2^7 - 2\)个可用网络,\(2^24 - 2\)个可分配地址
子网划分
把主机号的前几位划为子网号
子网掩码
网络号和子网号的位置全1,主机号全0,和IP地址做按位与运算,得到的就是子网的网络地址,路由器之后就拿着这个进行IP数据报的转发
斜线记法:IP地址/n,例如:200.1.0.0/20
无分类编制方法CIDR(Classless Inter-Domain Routing)(意思是掩码可以随便多长)
3个特殊的CIDR地址块:
- 网络前缀长度:
/32;就是一个IP地址,这个特殊地址用于主机路由 /31;只有两个IP地址,其主机号分别为0和1,这个地址块用于点对点链路/0;同时IP地址也全是0,即0.0.0.0/0,用于默认路由
可以把CIDR地址块进行拆分/合并,叫做构成超网/路由聚合
ip地址,好抽象,主机可以有一个ip地址,路由器的接口也可以有ip地址,不同网络段的一个交换机和路由器接口直接电线连接部位连接
- 主机的ip是和他的网口对应的,ip地址都是和接口对应的
- 交换机的接口是没有ip的(毕竟是数据链路层的)
- ip的规则是人为定义的一套逻辑
ip 分组的转发
要开始讲路由器了
基于终点的转发
- 分组在互联网中是逐跳转发的,路由器通过查转发表确定下一跳
- 基于终点的转发:基于分组首部中的目的地址传送和转发
为了实现这个功能,路由转发表中可能包含哪些信息?
最初的想法:
- 目的地址
- 下一跳地址
但是IP地址太多了,不可能把所有目的IP地址记录下来,因此改变成:
- 目的网络地址
- 下一跳地址
不同网段的主机通过路由器进行连接的流程:
- 找到目标地址所在网络:IP地址和掩码进行与运算,得到地址所在的网络
- 与路由表中列出的网络地址,逐行匹配:目标网络和路由表列出的网络地址是同一个
- 找到正确的条目,进行下一跳转发
IP首部中只有目的地址,没有掩码,怎么办?
最早设计IP地址的时候不存在掩码,他的网络号长度是固定的,而后来网络号长度不固定了才需要掩码
一个数据包发到路由器,数据包里只有IP地址,而路由表里只有网络号
我必须要IP地址 按位与 子网掩码才能和网络号比较
解决办法:
- 首部已经固定了,没法修改,没法把子网掩码加进去
- 选择把掩码加到路由器的转发表里
但是使用CIDR时,在查找转发表时可能会有不止一个匹配结果
我们要找的是最长前缀匹配,因为越长就类似于信息越详细
强调:最长前缀匹配
转发表中2种特殊的路由
转发表中其他特地写的IP地址,都是管理员指定写进去的,叫静态路由,之后还有动态路由选择协议,可以自动寻找某一个网络在哪里
-
主机路由
-
又叫特定主机路由
- a.b.c.d/32
- 放在转发表的最前面
-
其实是最长前缀匹配的一种特殊情况,主机路由只匹配单个主机
-
默认路由
-
不管分组的最终目的网络在哪里,都由指定的路由器R来处理
- 用特殊前缀0.0.0.0/0
- 放在转发表的最后面
路由器分组转发算法流程
- 提取目标地址IP地址
D -
查找转发表
- 找到
D的特定主机路由 - 没找到就继续
D的最长前缀匹配 - 还没找到就找默认路由
- 没有默认路由就丢弃分组
- 找到
-
上述过程中找到后,就转发分组到下一跳路由器
255.255.255.255
这是一个广播分组,路由器一般来说不允许转发广播分组,会产生指数级的分组
这种广播地址就叫受限广播
不过255.255.255.255/8是可以转发的的,这个广播地址叫直接广播地址
路由器根据目的IP地址转发分组,那MAC地址还有用吗?
为什么会问这个问题?因为看起来路由器只要有IP地址就已经能知道要去哪了
一定是有用的
计网分层结构:把功能分到不同层次里,上一层不管下一层干了什么,但是上一层的工作要靠下一层的支持和下一层提供的服务来实现
网络层要工作,肯定要考数据链路层的工作,而数据链路层就是靠MAC地址在工作

自己悟去吧,mac地址在网络层传输过程中的拆-查-重新组装
其实这里只是强调出了mac地址改变的这个过程,而各个层之间由于抽象过二互不打扰是不变的
但是还没结束
知道对方的ip地址,怎么知道对方的mac地址
问题需要理解一下
刚才我们谈到:
- 尽管互连在一起的网络的MAC地址体系各不相同,但IP层抽象的互联网却屏蔽了下层这些很复杂的细节。
- 只要我们在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或路由器之间的通信。
那主机或路由怎样知道应当在MAC帧的首部填入什么样的MAC地址
路由器是要负责:拆MAC层、取出IP包、查路由(决定从哪个口发、下一跳是谁、ARP查下一跳IP对应的MAC地址)、给原来没动过的IP包套上新的MAC首部
地址解析协议ARP的作用
- ARP(Address Resolution Protocol):已知主机或路由器的IP地址,解析出其相应的MAC地址
有ARP cache
因此主机A向本局域网上的某个主机B发送IP数据报时的工作流程:

2台主机不在同一局域网上的地址解析
路由器会回复并承担转发的责任

总结:使用ARP的四种典型情况
- 发送方是主机,要把IP数据包发送到本网络上的另一个主机,这是用ARP找到目的主机的硬件地址
- 发送方是主机,要把IP数据包发送到另一个网络上的一个主机,这时用ARP找到本网络上的一个路由器的硬件地址,剩下的工作由路由器来完成
- 发送方是路由器,要把IP数据报转发到本网络上的一个主机,这是用ARP找到目的主机的硬件地址
- 发送方是路由器,要把IP数据报转发到另一个网络上的一个主机。这时用ARP找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成。
为什么要使用两种地址:IP地址和MAC地址?
- MAC地址之间的转换非常复杂,对以太网MAC地址进行寻址也是极其困难的。MAC地址不适合跨网络寻址使用。
- IP编址(网络位+主机位)把这个复杂问题解决了,即使必须多次调用ARP来找到MAC地址,但这个过程都是由计算机软件自动进行的,对用户来说是看不见的。
- 虚拟互联网使用IP,各局域网使用MAC。
网络控制报文协议 ICMP
IPv6
路由选择协议
-
自治系统内部使用内部网关路由协议
- 每个自治系统域内路由算法可不同
- OSPF, RIP, IS-IS, IGRP...
-
自治系统之间使用外部网关路由协议
- 各自治系统域之间的路由需统一
- BGP
这里讲的就是动态路由协议了
-
互联网路由选择协议
-
域内路由选择
- 距离向量 RIP
- 链路状态 OSPF
-
域间路由选择
- 路径向量 BGP-4
-
RIP
是一种分布式的、基于距离向量的路由选择协议,优点是简单,要求网络中每个路由器维护从他自己到其他每一个目的网络的距离记录
对距离的定义:路由器到之间链接的网络的距离为
1;到飞直接连接的网络的距离为所经过的路由器数 + 1;RIP中的距离也称为跳数
- 以距离最短为最佳
- 一条路径最多经过的路由器数量有规定
- RIP不能在两个网络之间同时使用多条路由,只选择距离最短的路由
3个特点:
- 之和相邻的路由器交换信息
- 交换自己的路由表
- 按固定的时间间隔交换卤藕信息
RIP路由表的建立
- 路由器在刚刚开始工作时,只知道直接连接的网络的距离
- 之后每一个路由器之和相邻路由器交换并更新路由信息
- 经过若干次更新后,所有路由器最终都会知道到达本自治系统中每个目的网络的最短距离和下一跳路由器的地址
- RIP路由表项:目的网络,距离,下一跳
了解RIP路由算法的伪代码

优点:简单
缺点:
- 网络规模有限
- 交换的路由信息为完整路由表,开销大
- 坏消息传播的慢,收敛时间过长
OSPF
使用了最短路径算法SPF,只有当链路状态发生变化时路由器才用泛洪法发送该信息
OSPF适用于更大的网络,为加快收敛、便于管理,使用层次结构的区域划分,以缩小LSDB规模,减少网络流量