网络层提供主机与主机之间的数据传输服务,网络层的数据单位是分组,常用的网络层协议有 IP 协议。网络层向上只提供简单的、无连接的、尽最大努力的数据传输服务
- IP 协议:Internet 网络层核心协议
- 路由协议:RIP,OSPF 和 BGP
- ICMP 协议:提供 IP 协议传输过程中的差错报告
核心功能
- 路由:通过路由算法计算转发表,确定分组从源到目的通过的路径。在检索转发表时使用最长前缀匹配原则,优先选择与目的地址匹配前缀最长的输出端口
- 转发:将分组从路由器的输入端口转移到正确的输出端口
- 连接建立:不是所有网络层都需要实现连接建立的功能。在数据分组传输之前源主机和目的主机要建立一个虚拟 / 逻辑连接
- 网络层连接:两个主机之间,路径上的路由器需要参与
- 传输层连接:两个进程之间建立逻辑连接,仿佛进程和进程之间能够直接通信,路径上的路由器不需要参与
服务模型
- 无连接服务:不事先为分组的传输确定传输路径,每个分组独立确定路径,不同分组的路径可能不同。常见的无连接服务网络有数据报网络
- 连接服务:事先为分组的传输确定传输路径,并且每个分组的路径确定且相同。常见的连接服务网络有虚电路网络
数据报网络 & 虚电路网路
- 数据报网络没有严格时间要求;虚电路网络从电话网络演变而来,通常有严格的时间要求和可靠数据传输
- 数据报网络简化网络,复杂边缘,让网络边缘完成更多的功能;虚电路网络复杂网络,简化边缘
IPV4
IP 数据报格式
- 版本号:IP 协议版本,IPV4 的版本号是 4, IPV6 的版本号是 6
- 首部长度:首部长度×4 表示真正的首部字节数,比如首部占 20 字节,那么首部长度存储 5
- 区分服务:将 IP 数据报分成不同的类型,不同类型表示不同的服务
- 总长度:首部部分和数据部分的和
- 标识:IP 分片相关
- 标志:IP 分片相关
- 片偏移:IP 分片相关
- 生存时间:IP 分组可以通过的路由器数,每通过一次路由器,生存时间减 1 。当生存时间等于 0 时,路由器丢失该分组并向源主机发送 ICMP 报文
- 协议:标识上层协议的数,比如 TCP 为 6,UDP 为 17
- 首部校验和:与 UDP 相同,每次路由转发都要重新计算,因为 IP 数据报的首部字段会变
IP 分片
网络链路存在最大传输单元(MTU),不同链路的 MTU 不同,MTU 可以认为是数据链路层的数据帧运行的最大数据部分的长度。当大 IP 分组向小 MTU 链路转发时可以被分片,IP 分片到达目的主机后进行重组,路由器不会进行 IP 重组。如果接收端主机没有收到全部的分片,它会丢弃所有的分片
- 标识:标识一个 IP 分组
- 标志位包括保留、
DF
和MF
DF
:DF
等于 1 表示禁止分片,当 IP 分组超过链路 MTU 时,路由器丢掉分组并向原主机发送 ICMP 报文;DF
等于 0 表示允许分片MF
:MF
等于 1 表示非最后一片,MF
等于 0 表示最后一片
- 片偏移:以 8 字节为单位,表示 IP 分组数据的偏移量
IP 地址
IP 编码是对主机、路由器或交换机的网络接口进行编码。路由器的网络接口有多个,所以要对路由器的各个网络接口设置 IP 地址。IP 地址包括网络号和主机号
有类 IP
- A 类地址:网络号占 8 位,并且最高位是 0 ,范围是 $0.0.0.0 \sim 127.255.255.255$
- B 类地址:网络号占 16 位,并且最高位是 10,范围是$128.0.0.0 \sim 191.255.255.255$
- C 类地址:网络号占 24 位,并且最高位是 110,范围是$192.0.0.0 \sim 223.255.255.255$
- D 类地址:最高位是 1110,范围是$224.0.0.0 \sim 239.255.255.255$
- E 类地址:最高位是 1111,范围是$240.0.0.0 \sim 255.255.255.255$
A B C 类地址可以用于标识网络主机的 IP 地址
特殊地址:
0.0.0.0
:只能作为源地址,不能作为目的地址。在本子网范围内表示本机,在路由表中表示默认路由(相当于整个 Internet )0.0.0.23
:网络号全 0,主机号特定值,表示本网内某个特定主机255.255.255.255
:只能作为目的地址,不能作为源地址,表示本网广播地址- 网路号特定值,主机号全 0 ,表示一个网络
- 网络号特定值,主机号全 1 ,表示对特定网络进行广播
- 网络号 127,主机号非全 0 且 非全 1 的任何数,用于本地软件回环测试
私有地址:
- A 类中网络号是 10
- B 类中 $172.16 \sim 172.31$
- C 类中 $192.168.0 \sim 192.168.255$
子网
- IP 地址分为网络号、子网号和主机号
- 外部网络看不到子网,必须通过子网掩码进行区分
- 子网掩码的网络号和子网号全是 1
无类域间路由
无类域间路由(CIDR)消除了 A B C 类地址的划分,CIDR 的 IP 地址包括网络前缀和主机地址,融合了子网地址和子网掩码,方便子网划分。无类地址的格式是$a.b.c.d/x$ ,其中 $x$ 表示网络前缀的长度
- 提高了 IPV4 地址空间的分配效率
- 提高了路由效率,将多个子网构造成更大的子网,在路由表中可以面向更大的子网记录路由转发信息,进行路由聚合从而让路由表大小有了很大的减少
NAT
IPV4 的地址已经分配殆尽,为了保证所有主机能够正常通信,可以不为所有主机分配公有地址,而是在子网内使用私有地址进行通信。私有地址不能与外来网络进行通信,为了保证能够通信,需要使用网络地址转换 NAT ,将源地址替换为公共 IP 地址
好处
- 解决 IPV4 耗尽问题
- 内网 IP 地址对外网透明,本地网络变更无需通告外界网络
- 外部网络无法直接寻址,保证内网安全
实现
内网访问外网的流程:
- 内网向外网发送数据:利用
NAT IP地址,新端口号
替换每个外出 IP 分组的源IP地址,源端口号
,并在 NAT 转换表中记录NAT IP地址,新端口号
和源IP地址,源端口号
的替换关系 - 外网返回数据给内网:根据 NAT 转换表,利用
源IP地址,源端口号
替换 IP 分组中的目的IP地址,目的端口号
NAT 穿透
外网无法直接访问内网。如果内网有服务器,客户端无法访问内网 IP ,需要穿透 NAT 去请求服务,NAT 穿透问题的解决方案有:
静态配置:静态配置 NAT,将特定端口的服务转发给服务器。比如,$(138.76.29.7,2500)$ 总是转发给 $(10.0.0.1,25000)$
利用 UPNP 协议自动配置,动态配置映射,和静态配置达到相同的效果
中继
ICMP
互联网控制报文协议(ICMP)支持主机和路由器,能够进行差错报告和网络探询。根据 ICMP 的功能将 ICMP 报文分为两大类:
- 差错报告报文(5种)
- 目的不可达:当目的主机不可达时,会发送 ICMP 报文通知源主机
- 源抑制:当网络阻塞时,路由器可以通过向源主机发送 ICMP 报文,源主机收到该报文可以选择降低自己的发送速率(Internet 未使用)
- 超时:当 IP 分组超时时,会向源主机发送 ICMP 报文
- 参数问题:IP 分组头部出问题
- 重定向:当路由器发现自己无法转发 IP 分组时,向源主机发送 ICMP 报文进行重定向
- 网络探询报文
- 回声请求和应答报文:
ping
命令 - 时间戳请求和应答报文
- 回声请求和应答报文:
ICMP 格式
ICMP 封装在 IP 数据报中,但是不属于高层协议
IPV6
解决 IPV4 地址紧缺的问题
- 固定长度的 40 字节基本首部
- 路由器不进行分片,如果 IP 分组太大由发送端进行分片,接收端进行重组
- 移除校验和
IPV6 的地址长度占 128 位,使用冒分十六进制表示法和 0 位压缩表示法
路由
路由算法将网络抽象成有权无向图,权重可以是拥塞程度或带宽的倒数等,通常是权重越小路径越好。
分类
- 静态路由 & 动态路由
- 静态路由:人工配置,路由更新慢,优先级高
- 动态路由:根据路由算法计算得到的,路由更新快
- 全局信息 & 分散信息
- 全局信息:所有路由器必须掌握完整的网络拓扑和链路费用信息,比如链路状态路由算法
- 分散信息:只掌握物理相连的临街及其对应的链路费用,比如距离向量路由算法
路由算法
链路状态路由算法
- 通过广播获取网络拓扑和链路费用
- 计算源节点到其他所有节点的最短路径(Dijkstra 算法)
- 存在路由震荡问题
距离向量路由算法
动态规划思想,存在无穷计数问题
$$
d_x(y) = min{c(x,v)+d_{v}(y)}
$$
层次路由
将路由器进行聚合,产生一个区域,称为自治系统。自治系统内部和自治系统间可以使用不同的路由。为了实现自治系统,需要有一个对外的路由器,称为网关路由器,网关路由器的转发表由自治系统内路由算法和自治系统间路由算法决定
Internet 路由
Internet 网路采用层次路由,分为自治系统内路由和自治系统间路由
自治系统内部路由协议包括
- 路由信息协议(RIP)
- 使用距离向量路由算法,RIP 比较简单
- 距离度量:跳数,最大 15 跳
- 每隔 30s 更新 DV
- 使用距离向量路由算法,RIP 比较简单
- 开放最短路径优先(OSPF)
- 使用链路状态路由算法, OSPF 性能更优
自治系统间路由协议包括
- BGP