- 「计算机网络笔记」第一章 概述
- 「计算机网络笔记」第二章 物理层
- 「计算机网络笔记」第三章 网络层
- 「计算机网络笔记」第四章 介质访问控制子层
- 「计算机网络笔记」第五章 网络层
- 「计算机网络笔记」第六章 传输层
- 「计算机网络笔记」第七章 应用层
5.1 网络层概述
功能
将源端
产生的数据包/数据分组,一路送达目的机
- 信息封装
- 目的机的识别
- 找到
路由
(源机->目的机的路径)
被路由的协议
IP协议
- IP地址:定位目的机
- IP分组:信息的封装
- IPv6协议:新一代IP协议
路由选择协议
找到源机和目的机之间的最优路径
- 距离矢量路由选择协议
- 链路状态路由选择协议
源机和目的机之间的网络
数据报子网 | 虚电路子网 | |
---|---|---|
电路 | 不需要建立 | 一定要建立 |
分组 | 包含完整的源地址和目的地址信息独立寻径 | 包含很短的一个标号 |
路由 | 不需要保留任何连接状态 | 都要保留连接状态 |
路由器 失效影响 |
基本没有影响 | 连接/数据传输中断 |
服务质量 拥塞控制 |
很难实现 | 容易实现 |
5.2 IP地址
- 提供一种尽力而为
best-effort
地把数据从源端传输到接收方的方法 - 为路由提供路由所需要的信息
- IP协议 = 被路由协议
IP地址
32位二进制位
-
点分十进制
32 => 4×8
每个8位组,二进制 => 十进制,0~255
Example:IP地址体现了层次性
[.... ....] Internet
[130.1.0.0] 网络
[130.1.1.0] 子网1
[130.1.1.1] 主机
IP地址的两层结构
- 网络部分:0~15位
- 主机部分:16~31位
A类地址
0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
- 1字节标识
网络地址
,2、3、4字节标识主机地址
- 第1个字节 => [0,127]
- 每个A类地址/A类网络,容纳 224-2 台主机
- 减去的2:用于广播地址和网络地址
B类地址
10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
- 1、2字节标识
网络地址
,3、4字节标识主机地址
- 第1个字节 => [128,191]
- 每个B类地址/B类网络,容纳 216-2 台主机
C类地址
110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
- 1、2、3字节标识
网络地址
,4字节标识主机地址
- 第1个字节 => [192,223]
- 每个C类地址/C类网络,容纳 28-2 台主机
保留的IP地址
不能分配给某个接口/某个主机使用
D类:1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
E类:11110xxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
网络地址:xxxxxxxx.xxxxxxxx.00000000.00000000
广播地址:xxxxxxxx.xxxxxxxx.11111111.11111111
-
0.0.0.0
- 表示:这个主机、这个网络
- 在路由表中,默认路由的目的地址
-
255.255.255.255
- 泛洪广播地址
-
127.0.0.0
- 环回地址
Lookback Network
- 127.0.0.1 => localhost
- 环回地址
-
169.254.0.0
- 非正常地址
- 不能对外正常通信
5.3 子网规划
将大网络分割成小网络
主路由器
边界路由器
负责和外部联系
了解内部网络结构的机制:子网掩码
子网掩码
决定分组往哪个子网转发
点分十进制表示 => 连续的
1
(网络位) + 连续的0
(主机位)-
按位
与
操作- 目的IP地址 AND 子网掩码 = 目的网络地址
- 按位操作后,主机位全为
0
A、B、C类的缺省
A类 | B类 | C类 | |
---|---|---|---|
点分十进制表示 | 255.0.0.0 | 255.255.0.0 | 255.255.255.0 |
网络前缀表示 | /8 | /16 | /24 |
子网位
-
从IP地址的主机部分借位
- 从高位开始借
- 至少保留2位
-
Example:192.168.1.0/24,主机域借2位作为子网位
子网的网络地址:
192.168.1.00 000000 => 192.168.1.0/26
192.168.1.01 000000 => 192.168.1.64/26
192.168.1.10 000000 => 192.168.1.128/26
192.168.1.11 000000 => 192.168.1.192/26
- 第4个子网的网络地址:192.168.1.10 000000 => 192.168.1.64
- 第4个子网的广播地址:192.168.1.10 111111 => 192.168.1.127
5.4 IP寻址
根据目的IP地址,找到目的网络
路由器
执行IP寻址的主要设备
1个路由器
Router
= 1跳Hop
-
收到一个分组
-
打开分组
- 提取到
目的IP地址
- 提取到
-
确定网络,查找路由表
目的IP地址和子网掩码按位与运算,得到
目的网络
用目的网络查找路由表
重新封装,转发
next hop
-
到达最后一个网络
目的网络
,MAC寻址(交换机执行)
不同 | MAC地址 | IP地址 |
---|---|---|
网络范围使用 | 小型网络 | 互联网 |
依赖的地址结构 | 平面地址 | 结构化地址 |
所处OSI模型的层 | 数据链路层 | 网络层 |
地址的格式 | 十六进制 | 点分十进制 |
5.5 IP分组
- IP分组包含12个基本的字段和选项字段
- IP分组分为:头部、数据
报头长度
- 大小:4bit
- 单位:
4Byte
- 0101 ~ 1111
数据报总长
- 大小:16bit
- 单位:
Byte
生存时间 TTL
- 大小:8bit
- 单位:
hop
- 每经过一个路由器,TTL-1
- 当TTL-1=0时,路由器丢弃该分组,向源发回一个超时消息
- 防止分组在网络无限循环
用户协议
- 大小:8bit
- 指明传输层采用的协议
- UDP:17
- TCP:6
目的IP地址
- 大小:32bit
5.6 IPv6概述
IPv4存在问题
- 地址数
- 端到端模式收到破坏
- 地址数匮乏,使用了私人地址
- 私人地址不具有唯一性,和互联网通讯,必须进行转换
- NAT转换器
- 配置复杂
- 安全问题
- 路由表膨胀
- 增加了每一个分组的延迟
- QoS和性能问题
IPv6的目标
- 支持几十亿台主机
- 缩减路由表的规模
- 简化协议,路由器处理分组更快
- 更好的安全性
- ... ...
5.7 IPv6地址
基本概念
- 局域网段:LAN段,最小单位。
交换机
一个接口下的这一条链路 - 链路:
路由器
一个接口下的,若干个局域网段构成的 - 邻接点:一条链路上的两台主机
冒分十六进制
- IPv6地址:128位(v4仅有32位)
- 128 => 8组 × 16位
- 简化规则
- 忽略前导0
- 省略全0 => 双冒号,一个地址里最多只能出现一次双冒号
IPv6地址分类
- 单播地址
Unicast Address
- 一对一通信
- 组播地址
Multicast Address
- 特定组内通信
- 任播地址
Anycast Address
- 特定组内,任意一台计算机
特殊地址
- 未指定
- 二进制前缀:000...0(128bit)
- IPv6:
::/128
- 一台设备未正式的获得地址时,以此代替
- 路由表中目的网络,表示默认路由
- 环回地址
- 二进制前缀:000...1(128bit)
- IPv6:
::1/128
- 类似IPv4中的127.0.0.1
- 组播
- 二进制前缀:11111111
- IPv6:
FF00::/8
- 链路本地地址
- 二进制前缀:1111111010
- IPv6:
FE80::/10
- 属于单播地址
- 网点本地地址
- 二进制前缀:1111111111
- IPv6:
FEC0::/10
链路本地地址
属于单播地址
- 用在单一的链路上
- 如果一个分组的目的地址||源地址是链路本地地址,分组不回转发到其他链路
- IPv6设备启动时,首先生成一个链路本地地址,此时就可以和链路上的其他节点通信
- FE80:0:0:0 + EUI64位地址(合128bit)
- EUI64地址
- 将MAC地址转化成二进制的48位
- 在前24位和后24位中间加上16位的
11111111 11111110
- 从高位起的第7位,0 => 1(U/L位:用于确定该地址是全局管理的还是本地管理的)
可聚合全球单播地址
3bit | 13bit | 8bit | 24bit | 16bit | 64bit |
---|---|---|---|---|---|
001 | TLA 顶级聚类地址 |
RES 保留位 |
NLA 次级聚类地址 |
SLA 站点级聚类地址 |
InterfaceID |
- SLA可用作子网规划
- 如果主机可以和默认网关通讯,就可以从默认网关获取全球IPv6地址的前缀
- 默认网关:和主机直接相连的路由器
- 前缀 + InterfaceID => 全球单播地址
5.8 IPv6分组
IPv6的报头
协议版本(4bit):0110 => IPv6
流标记(20bit):为源端和目的端提供了建立
伪连接
的方式净荷长度(16bit):固定头之后的字节数
-
下一个头
Next Header
(8位)- 指明当前头之后,扩展头的类型
- 若当前头为最后一个头,则用于指明上层传输层指定的用户协议(与IPv4中相同)
跳数限制
Hop Limit
:等同于IPv4中的TTL
与IPv4的不同
-
删除校验和
- 上层传输层和下层数据链路层都有自己的校验和
-
删除分段/分片
源端在一开始必须知道全部路径/网络的
最小MTU
MTU:最大传输单元,Maximum Transmission Unit
PMTU算法
5.9 IPv6过渡技术
- 双栈
- 隧道
- 地址转换
5.10 路由表
路由表的结构
- 目的网络/子网掩码
- 路径代价
- 下一跳(网关)
- 转出接口
- ...
路由信息
直连路由 | 静态路由 | 动态路由 |
---|---|---|
路由器学习感知 | 管理人员人工配置 | 路由选择协议 |
-
直连路由
- 路由器开启了接口,自动发现接口对应的子网,并记录到路由表
-
静态路由
- 常见的静态路由:缺省/默认路由
- 默认路由
- 避免错误丢包
- 缩减路由表的规模
- 减少路由器的运行负担
- 优点
- 适用小型网络
- 安全,不会发送通告
- 稳定,通过同一路径总是到达同一网络
- 不需要CPU、RAM、带宽等开销
- 缺点
- 网络规模增大,配置复杂性增长
- 人工更新维护繁琐
-
动态路由(多数)
- 由
路由选择协议
动态地建立、更新和维护的路由 - 适合大型网络
- 不受网络规模的限制
- 自动更新、维护路由信息
- 量度路径最优
- 跳数
- 带宽
- ...
- 由
5.11 距离矢量路由选择协议
Distance Vector
- 常用于小型网络
- 典型DV算法:路由选择信息协议
- RIP
Routeing Information Protocol
- 早期互联网使用
- RIP
- 矢量/向量:一个有序数组,
n
维向量中存了n
个数,有先后次序之分。
DV的工作原理
-
每个路由器
维护
两个矢量,Di和Si- Di:该路由器到所有其他路由器的距离,{ di1,di2,... ... ,din}
- Si:该路由器到所有其他路由器的下一跳,{ si1,si2,... ... ,sin}
- di1:从
节点i
到节点1
的度量/代价 - si1:从
节点i
到节点1
的最优路几个上的下一跳 - n:网络中路由器的个数
邻居路由器
交换
路由信息(矢量信息)每个路由器根据收到的路由信息,
更新
路由表
DV算法的特点
- 优点
- 简单
- 缺点
- 交换信息大
- 路由信息传播缓慢,可能导致路径信息不一致
- 不适合大型网络
5.12 路由选择信息协议 RIP
特点
- 采用
跳数
作为Si的量度 - 当量度超过15跳,目的网络即作
不可达
- 解决
路由环
问题 - 完全相信邻居路由器,导致的路由环/无穷计数问题
- 解决
- 30秒交换一次路由信息
5.14 链路状态路由选择
Link State Routing
主要思路
- 发现
- 设置
- 构造
- 发送
- 计算
发现
- 发现邻居节点,了解它们的网络地址
- 路由器启动时,向每个邻居路由器发送
Hello数据包
设置
- 到每个邻居的成本度量
- 常见度量:链路带宽(反比),延迟
- 发送特别的
Echo分组
,另一端立即回送应答,通过测量往返时间RTT
,得到延迟估计值
构造
构造链路状态分组LSP
Link State Packet
-
LSP分组
- 发送方的标识
ID of the sender
- 序列号
sequence number
- 32bit的序列号,解决序列号回转问题
- 年龄
age
- 每经过1秒,age-1 => age=0时,丢弃
- 每隔很短的时间(通常大于age),新分组就会到来
- 邻居列表
list of neighbors
- 度量
delay to each neighbor
- 发送方的标识
周期性的构造
-
特殊事件发生时构造
- 线路/邻居down掉
- 出现新的接口
发送
- 这个分组发给所有其他的路由器
- LSP分组的序列号随着新分组的产生,递增
- 路由器记录下所有看见的LSP
- 当新分组到达
- 先放于
保留区
- 新分组(不存在记录中),则
泛洪广播
- 保留区的分组和新分组比较序列号
- 相等 => 丢弃
- 不相等 => 保留新的
- 先放于
计算
- 分组分发完全,构造全网拓扑图
- 基于完整的网络图,计算到每个目标的最短路径(如:最短路径算法)
LS算法特点
- 优点
- 路由器认识一致
- LSP构造的图完全一致
- 收敛快
- 适合大型网络
- 缺点
- 路由器需要较大存储空间
- 计算负担大
5.15 单区域OSPF
- 开放的最短路径优先
- Open Shortest Path First
- 链路状态路由的典型实例
特点
- 适用大型网络
- 解决
路由自环
问题 - 度量:108÷带宽
- 收敛快
相关概念
- RouterID:32位,自治系统内唯一,路由器的唯一标识
- 协议号:89 => OSPF报文
- TTL=1:OSPF通常只传给邻居路由器
OSPF分组的类型
OSPF数据包类型 | 描述 |
---|---|
Hello | 与邻居建立和维护邻居关系keep alive
|
数据库描述包DD
|
描述一个OSPF路由器的链路状态数据库的内容 |
链路状态请求LSR
|
请求相邻路由器,发送其链路状态数据库中的具体条目 |
链路状态更新LSU
|
向邻居路由器发送链路状态通告 |
链路状态确认LSAck
|
确认收到了邻居路由器的LSU |
-
LSU的使用
作为LSR的应答
-
特殊事件发生时
- 线路/邻居down掉
- 出现新的接口
-
LSAck
- 任何时候收到LSU都需要回发LSAck
建立全毗邻关系
- 通过发送问候
Hello
包确认是否连接 - 为了同步路由控制信息,利用数据库描述
Database Description
包相互发送路由摘要信息和版本信息 - 通过DD和自己的数据库比对发现版本老旧,发送链路状态请求
Link State Request
包,请求完整的路由控制信息 - 对面会回发链路状态更新
Link State Update
包,包含完整的路由状态信息 - 最后发送链路状态确认
Link State Acknowledgment
包通知大家,本地已经接收到了路由状态信息
指定路由器
Designated Router
- 在一个比较复杂的网络中,在同一个链路加入新的路由器,不需要在所有相邻的路由器之间都进行控制信息`的交换,而是指定一个DR,并以它作为中心交换路由信息
5.16 无类域间路由 CIDR
- Classless Inter Domain Routing
- 缓解地址枯竭的趋势(尤其是B类地址)
- 缩减了路由表的开销
- 可以进行
路由聚合
,形成超网SuperNet
- 路由聚合和子网规划是相反的行为
- 可以进行
- 隔离了
路由翻动
IP面临的问题
- 分类造成地址的浪费
- 路由表的膨胀
- 路由表动辄几万条
- 分组到达时,查找路由表的时间会增加 => 通信的端到端延迟
基本思想
- 分配IP地址时,不再以A、B、C的类别分类,按照可变长的
地址块
分配
举例:用户需要2000个IP地址
- CIDR之前,只能分配一个B类地址
- CIDR之后,分配一个x.x.x.x/21的块地址
- 网络位:21位
- 主机位:11位 => 211-2,2046个地址
IP地址的最长匹配前缀
- 当一个分组到达路由器
- 匹配到多个目标网络时,选取网络位最长的(子网掩码1最多的)
路由聚合
- 要求直连路由地址连续
- 子网的下一跳是相同的
举例:路由器RTA有4条直连路由,对应4个子网,形成连续的地址空间
- 200.199.48.0/24 => x.x.001100 00.x
- 200.199.49.0/24 => x.x.001100 01.x
- 200.199.50.0/24 => x.x.001100 10.x
- 200.199.51.0/24 => x.x.001100 11.x
第三段里的001100是不变的
=> 聚合结果:200.199.48.0/22(超网)
5.17 网络地址翻译 NAT
- Net Address Translate
- 私人地址和共有IP地址之间的转换
- IP地址枯竭的快速修补方案
私人地址空间
- 不可路由
- 全球不唯一
地址类别 | RFC 1918 Internal Address Range | CIDR前缀 |
---|---|---|
A | 10.0.0.0 ~ 10.255.255.255 | 10.0.0.0/8 |
B | 172.16.0.0 ~ 172.31.255.255 | 172.16.0.0/12 |
C | 192.168.0.0 ~ 192.168.255.255 | 192.168.0.0/16 |
NAT转换器的工作原理
NAT的缺点
- 影响部分协议和应用的同学
- 增加了网络延时
- NAT转换器可能成为网络的瓶颈
5.18 互联网控制消息协议 ICMP
Internet Control Message Protocol
- 一般来说,ICMP消息仅发送给源机
- ICMP消息不生成自己的差错报告
- ICMP消息封装在IP分组中
主要功能
- 确认IP包是否成功送达目标地址
- 通知在发送过程当中IP包被丢弃的具体原因
- 改善网络设置
ICMP的具体应用
- Ping
-
源机向目的站点发送
ICMP回声请求
报文 -
目的站点接收到,必须向源机站点发回一个
ICMP回声应答
报文 - 源机站点收到应答报文,且其中的任选数据和发出去的相同,则判断目的站点可达,否则为不可达
-
源机向目的站点发送
- TraceRoute
- 路径MTU(最大传输单元)
Ping的应用
-
测试TCP/IP是否正常工作
ping 127.0.0.1
-
测试网络设备是否正常
ping <本机的IP地址>
-
检查对外连接的路由器
ping <默认网关IP>
-
检查与某台设备的畅通情况
ping <设备的IP>
5.19 地址解析协议 ARP
Address Resolution Protocol
- 运行在局域网的协议
- 将目标机的IP地址映射到MAC地址上
工作原理
- ARP借助
ARP请求
和ARP响应
,两种对应的包来确定MAC地址 -
ARP表
缓存ARP的结果 - 收到ARP请求,通过源机的IP地址和MAC地址的映射对,更新自己的ARP表
- 免费ARP:每台机器启动时,广播自己的IP-MAC地址对
- Source IP = Target IP
- 如果收到应答,说明自己的IP已被使用
举例:主机A想要获得同局域网下的主机B的MAC地址
A通过广播发送一个ARP请求包
- 请求包:包含请求通信的目标IP地址
- 广播的包可以被同一个链路上所有的主机/路由器接收
主机B接收到广播的ARP请求包,并解析,发现包中的IP地址与自己的一致,则将自己的MAC地址封装到ARP响应中发回。
其余主机解析后,发现目标IP地址不一致,则
- 不做应答
- 用ARP请求中的源信息来更新ARP表
5.20 拥塞控制
Congestion
当一个子网或子网的一部分出现太多分组的时候,网络的性能急剧下降。
-
拥塞控制的措施
- 开环:提前考虑
- 闭环
抑制分组
生效时间慢,逐跳抑制
可以快速缓解拥塞点压力载荷脱落
=> 丢弃分组,根据应用场景选择不同的脱落策略随机早期检测
可以防范于未然
5.20 流量整形
漏桶算法
- 可以让一个不稳定的流,整为一个稳定的流
- 无法突发
- 桶满时,丢弃分组
令牌桶算法
- 当一个分组要发送时,必须从桶中
取出
和获取
到一个令牌 - 令牌桶可以累计令牌,允许有
上限的突发
- 桶满时,丢弃令牌
- 有时候,可以在令牌桶后,再串接一个漏桶