# 三、网络层
# 1. IP 协议
# 1.1 IP 报文
- 版本:IP 报文中,版本占了 4 位,用来表示该协议采用的是那一个版本的 IP,相同版本的 IP 才能进行通信。一般此处的值为 4,表示 IPv4。
- 头长度:该字段用四位表示,表示整个 IP 包头的长度,其中数的单位是 4 字节。即二进制数 0000-1111(十进制数 0-15),其中一个最小长度为 0 字节,最大长度为 60 字节。一般来说此处的值为 0101,表示头长度为 20 字节。
- TOS 服务字段:该字段用 8 位表示。该字段一般情况下不使用。
- 总长度:该字段表示整个 IP 报文的长度,单位是字节。能表示的最大字节为 2^16-1=65535 字节。不过由于链路层的 MTU 限制。超过 1480 字节后就会被分片(以太帧 MTU 为 1500 的情况下,除去 20 字节的包头)
- 标识:该字段是 IP 软件实现的时候自动产生的,该字段的目的不是为了接受方的按序接受而设置的,而是在 IP 分片以后,用来标识同一片分片的,方便 IP 分片的重组。
- 标志:该字段是与 IP 分片有关的。其中有三位,但只有两位是有效的,分别为 MF、DF。MF 标识后面是否还有分片,为 1 时,表示后面还有分片。DF 标识是否能分片,为 0 表示可以分片。
- 片偏移:该字段是与 IP 分片后,相应的 IP 片在总的 IP 片的位置。该字段的单位是 8 字节。比如,一个长度为 4000 字节的 IP 报文,到达路由器。这是超过了链路层的 MTU,需要进行分片,4000 字节中,20 字节为包头,3980 字节为数据,需要分成 3 个 IP 片(链路层 MTU 为 1500),那么第一个分片的片偏移就是0,表示该分片在3980的第0位开始,第1479位结束。第二个ip片的片偏移为185(1480/8),表示该分片开始的位置在原来ip的第1480位,结束在2959。第三片的片偏移为 370(2960/8),表示开始的时候是 2960 位,结束的时候在 3979 位。
- TTL:该片表示生存周期,该值占 8 位。IP 分片每经过一个路由器该值减一,它的出现是为了防止路由环路,浪费带宽的问题。比如,该 IP 在 R1 路由器发送到 R2 路由器。R2 路由器又发给 R1 路由器。防止这种循环。window 系统默认为 128。
- 协议:该值标识上层的协议。占 8 位。其中 1,标识 ICMP、2 标识 IGMP、6 标识 TCP、17 标识 UDP、89 标识 OSPF。
- 校验和:该值是对整个数据包的包头进行的校验。占 16 位。
- 源地址和目的地址:标识发送 IP 片的源和目的 IP,32 位。
- 可选的部分:一般一些特殊的要求会加在这个部分。
- 数据。
# 1.2 分类 IP 地址
规律:最多4位,且1越来越多,0只能在后。
# 一般不使用的特殊的 IP 地址
# 常用的3种类别的 IP 地址
- A 网络号个数减 2 的原因:
- 网络号全0,是个保留地址,表示”本网络“。
- 网络号全1,保留作文本地软件”环回测试“本主机的进程之间的通信之用。
- 不会发送到任何网络。
- A 主机号个数减 2 的原因:
- 全 0 的主机号字段表示该 IP 地址是“本主机”所连接到的单个网络地址。
- 全 1 的主机号字段表示该网络上的所有主机。
- B 网络号减 1 的原因
- 不存在全 0 和 全 1
- 但是128.0.0.0 是不指派的,而可以指派的 B 类最小网络地址是 128.1.0.0
- B 主机号 减 2 的原因同 A
- C 网络号 减 1 的原因同 B
- C 主机号 减 2 的原因同 A
# 1.3 IP 协议的转发流程
# 1.4 子网划分
# 划分思路
划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。
凡是从其他网络发送给本单位某个主机的 IP 数 据报,仍然是根据 IP 数据报的目的网络号 net- id,先找到连接在本单位网络上的路由器。
然后此路由器在收到 IP 数据报后,再按目的网 络号 net-id 和子网号 subnet-id 找到目的子网。
最后就将 IP 数据报直接交付目的主机。
# 子网掩码
从一个 IP 数据包的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。
使用子网掩码可以找出 IP 地址的子网部分。
- 子网掩码长度 = 32 位
- 某位 = 1:IP 地址对应位为网络号和子网号
- 某位 = 0:IP 地址对应位为主机号
# 1.5 无分类编址 CIDR
- CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
- CIDR使用各种长度的“网络前缀”**(network- prefix)**来代替分类地址中的网络号和子网号。
- IP 地址从三级编址(使用子网掩码)又回到了 两级编址。
# 1.5.1 格式
# [1] 使用“斜线记法”
- 220.78.168.0 / 24
- 表明网络前缀占了24位
- 这样就剩下8位主机号了
# [2] 其他记法
10.0.0.0/10 可简写为 10/10,也就是把点分十进制中低位连续的 0 省略。
10.0.0.0/10 隐含地指出 IP 地址 10.0.0.0 的掩码是255.192.0.0。
网络前缀的后面加一个星号 ***** 的表示方法,如 00001010 00*,在星号 ***** 之前是网络前缀,而星号 ***** 表示 IP 地址中的主机号,可以是任意值。
# 1.5.2 常用的 CIDR 地址块
# 【例题】
# 1.5.3 构成超网
前缀长度不超过 23 位的 CIDR 地址块都包含了多个 C 类地址。这些 C 类地址合起来就构成了超网。
# 1.5.4 CIDR 地址块划分举例
# 1.5.5 最长前缀匹配
从匹配结果中选择具有最长网络前缀的路由。
这里选择第2个项目。
# 1.5.6 使用二叉线索查找路由表
下面例题的唯一前缀有 5 位
# 1.6 网络地址转换 NAT
NAT 技术用于多个主机通过一个公有 IP 访问互联网的私有网络中。
# 2. ARP 协议
ARP 协议在 TCP/IP 模型中属于 IP 层(网络层),在 OSI 模型中属于链路层。ARP 协议即地址解析协议,是根据 IP 地址获取物理地址的一个 TCP/IP 协议。它可以解决同一个局域网内主机或路由器的IP地址和 MAC 地址的映射问题
# 2.1 作用
通过一个机器(主机或路由器)的 IP 地址,找出其相应的硬件地址。
# 2.2 工作原理
# 3. RARP 协议
将 MAC 地址转为 IP 地址。
# 4. ICMP 协议
网际控制报文协议(Internet Control Message Protocal)。
# 4.1 作用
- ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。
# 4.2 ICMP 报文的格式
PS: ICMP 不是高层协议
# 4.3 ICMP 报文的种类
# ICMP 差错报告报文
- 终点不可达
- 重定向
- 超时
- 参数问题
几种不应该发送 ICMP 差错报告报文的情况
- 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
- 对具有多播地址的数据报都不发送 ICMP 差错报告报文。
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
# ICMP 询问报文
- 回送请求和回答请求
- 时间戳请求和回答报文
# 4.4 应用
# PING(Packet InterNet Groper)
作用:测试两个主机之间的连通性。
PING 使用了 ICMP 的回显请求报文与回显应答报文。
利用网络上机器 IP 地址的唯一性,给目标 IP 地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。
ping 详细过程
- 现在我们用主机 A ping 局域网内的主机 B,A 会先看看自己有没有 B 的 MAC 地址,如果没有就向外发送一个 ARP 广播包。
- 交换机收到这个 ARP 广播包后,会检索自己有没有保存 B 的 MAC 地址,如果有则直接返回给主机 A,如果没有则向所有端口发送 ARP 广播。
- 局域网内的其它主机收到这个 ARP 广播包,会去看看是不是在找自己,如果不是,就丢弃掉这个包。B 会立即响应自己的 MAC 地址是多少,按同样的 ARP 报文格式返回给 A,并且自己也学习到了 A 的 MAC 地址。
- 有了 B 的 MAC 地址后,A 就可以将其封装到 ICMP 报文中,然后向主机 B 发送该报文,报文格式如:[IP首部,ICMP报文]
- B 收到 A 发送的 ICMP 回显请求后,再按照同样的格式返回一个值给 A,这样就完成了局域网内的 ping 过程。
- 需要注意的是,完成这个过程后主机 A 就学习到了 B 的 MAC 地址,在接下来的一段时间内再次 ping,就不需要发送 ARP 广播包了。
- 如果 A ping 的是另一网段的主机 C,那么发送的 ARP 广播包会到路由器,路由器会把原来的 MAC 头部换成自己的 MAC 地址,然后查找自己已经学习到的路由表,找到相应的出口转发出去。
- 主机 C 学到了路由器一个端口的 MAC 地址,该端口转发给另一端口,而另一个端口学到了 A 的地址,这样就不需要再次做 ARP 解析了,直接将 ICMP 回显的请求回复过去。
- PING 是应用层直接使用网络层 ICMP 的例子, 它没有通过运输层的 TCP 或UDP。
# Traceroute
用来跟踪一个分组从源点到终点的路径。
它利用 IP 数据报中的 TTL 字段和 ICMP 时间超时差错报告报文实现对从源点到终点的路径的跟踪。
traceroute 详细过程
- 客户端发送一个 TTL 为 1 的 ICMP 请求回显数据包,在第一跳的时候超时并返回一个 ICMP 超时数据包,得到第一跳的地址。
- 客户端发送一个 TTL 为 2 的 ICMP 请求回显数据包,得到第二跳的地址。
- 客户端发送一个 TTL 为 3 的 ICMP 请求回显数据包,到达 目标主机,目标主机返回一个 ICMP 回显应答,traceroute 结束。
# 5. 路由
# 5.1 自治系统
尽管 一个 AS 使用了多种内部路由选择协议和度量,但重要的是一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。
# 5.2 内部网关协议 RIP —— 路由信息协议
# 5.2.1 工作原理
RIP 是一种分布式的、基于距离向量的路由选择协议。
RIP 协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的==距离记录==。
RIP 协议中的“距离”也称为“跳数”(hop count),因为每经过一个路由器,跳数就加 1。
“距离”=“最短距离”
△ 距离
- RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”。
- RIP 允许一条路径最多只能包含 15 个路由器。
- “距离”的最大值为 16 时即相当于不可达。可见 RIP 只适用于==小型互联网==。
- RIP 不能在两个网络之间同时使用多条路由。 RIP 选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速**(低时延)**但路由器较多的路由。
# 5.2.2 特点
(1) 仅和==相邻路由器==交换信息。
(2) 交换的信息是当前本路由器所知道的全部信息,即自己的==路由表==。
(3) 按==固定的时间间隔==交换路由信息,
例如,每隔 30 秒。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。
# 5.2.3 路由表的建立
一开始是空的,边交换边更新,很快就知道自己所在的自治系统的所有结点的信息了。
# 【★】距离向量算法
其实就是一个不断试验不断优化的过程。
# 【例题】
第一行在表 4-9(a) 中没有,因此要把这一行添加到表 4-9(a) 中;
第二行的 Net2 在表 4-9(a) 中有,且下一条路由器也是 R~4~,因此要更新(距离变大了);
第三行的 Net3 在表 4-9(a) 中有,但是下一条路由器不一样。于是就要比较举例。新的路由信息的距离是 2,小于原来表中的 4,因此要更新。
# 5.2.4 RIP2 协议的报文格式
- 特点
- 具有简单的鉴别功能
# 5.2.5 特点
好消息传播得快,坏消息传播得慢
# 5.2.6 存在的问题
当网络出现故障时,要经过比较长的时间 (例如数分钟) 才能将此信息传送到所有的路由器。
# 5.3 内部网关协议 OSPF —— 开放最短路径优先
# 5.3.1 特点
- 向本自治系统中所有路由器发送信息(洪泛法);
- 发送的信息就是本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息;
- 只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息。
- RIP 是不管有没有变化,都要定期交换信息。
- OSPF 允许管理员(根据业务不同)给每条路由指派不同的代价;
- 如果到同一个目的网络有多条代价相同的路径,那么可以分摊——==负载平衡==;
- 所有在 OSPF 路由器之间交换的分租都具有==鉴别==的功能;
- OSPF 支持可变长度的子网划分和无分类的编址 CIDR
- 由于网络中的链路状态可能经常发生变化,因此 OSPF 让每一个链路状态都带上一个 32 位的序号
- 序号越大,状态越新
- 序号增长速率不得超过 5s 中 1 次
# 5.3.2 划分区域
# 5.3.3 报文格式
# 5.3.3 5种类型
- 问候分组
- 数据库描述分组
- 链路状态请求分组
- 链路状态更新分组
- 洪泛法
- 最核心
- 链路状态确认分组
# 5.3.4 Dijkstra(迪杰斯特拉)算法
# 5.4 外部网关协议 BGP
# 5.4.1 出现的原因
- 互联网规模太大,使得自治系统 AS 之间路由选择非常困难;
- 自治系统 AS 之间的路由选择必须考虑有关策略。
# 5.4.2 路径向量路由选择协议
思想:
只是力求寻找一条能够==达到目的网络==且==比较好==的路由(不能兜圈子)。
BGP 协议交换路由信息的结点数量级是自治系统个数的量级
# 5.4.3 路由表
- 目的网络前缀(说明支持CIDR);
- 下一跳路由器;
- 到达该目的网络所要经过的自治系统序列。
# 5.4.4 4种报文
- OPEN:打开,用来与相邻的另一个 BGP 发言人建立关系,使通信初始化;
- UPDATE:更新,用来告知某一路由的信息,以及列出要撤销的多条路由;
- KEEPALIVE:保活,用来周期性地证实邻站的连通性;
- NOTIFACATION:通知,用来发送检测到的差错。
# 5.4.5 报文格式
# 5.5 路由器的构成
# 5.5.1 路由器的结构
# 5.5.2 路由器的两大部分
# (1) 路由选择
- 根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。
# (2) 分组转发
交换结构
根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去;
输入端口
输出端口
△ 这里的端口都是硬件端口
# 5.5.3 “转发”和“路由选择”的区别
# (1) 涉及的路由器个数
- 转发仅仅涉及到一个路由器
- 路由选择涉及多个路由器
# (2) 表
- 路由表
- 一般仅包含从目的网络到下一跳(IP地址)的映射
- 转发表
- 转发表由路由表得出;
- 必须包含完成转发功能所需的信息
- 要到达的目的网络
- 输出端口
- 某些MAC地址信息
- △ 在讨论“路由选择”的时候,可笼统使用路由表,不区分这两种表
# 5.5.4 交换结构
# (1) 通过存储器
# (2) 通过总线
# (3) 通过互连网络
# 6. IPv6
# 6.1 IPv6 的基本首部
① 更大的地址空间
IPv6 是 128 位
IPv4 是 32 位
② 扩展的地址层次结构
③ 灵活的首部格式
- IPv6 有很多可选的扩展首部
④ 改进的选项
IPv6 允许数据报含有选项的控制信息。
- 但 IPv6 的首部长度是固定的,其选项放在有效载荷中。
IPv4 的选项是固定不变的,放在首部的可变部分中。
⑤ 允许协议继续扩充
⑥ 支持即插即用
- 自动配置
- 不需要使用DHCP
⑦ 支持资源的预分配
⑧ 首部改为 8 字节对齐
- IPv4 首部是 4 字节对齐
# 6.2 IPv6 的地址
# 6.2.1 冒号十六进制记法
# (1) 基础版
0000 : 0000 : FFFF : 0000 : 0000 : 1180 : 960A : FFFF
# (2) 0000 → 0
0 : 0 : FFFF : 0 : 0 : 1180 : 960A : FFFF
# (3) 零压缩 (只允许一次)
==: :== FFFF : 0 : 0 : 1180 : 960A : FFFF (√)
0 : 0 : FFFF ==: :== 1180 : 960A : FFFF(√)
: : FFFF : : 1180 : 960A : FFFF(×)
# (4) 与前缀结合
# 【例题】
# 6.2.2 单播
点对点
# 6.2.3 多播
一对多
# 6.2.4 任播
新类型,终点是==一组==计算机,但数据报只交付给最近(通常是)的一个。
# 6.2.5 地址分类
# 6.3 从 IPv4 向 IPv6 过渡
# 6.3.1 双协议栈
见人说人话,见鬼说鬼话。
# 6.3.2 隧道技术
# 6.4 ICMPv6
# 6.4.1 作用
- 利用报文来报告差错
- 获取信息
- 探测邻站
- 管理多播通信
# 6.4.2 分类
# 【例题】
# 6.5 与 IPv4 进行比较
# 1. 报头
1. IPv6报头占40字节,较IPv4报头(变长的24字节)长,但是结构简单
2. IPv6报头去掉了IPv4报头中许多不常用的域,放入了可选项和报头扩展,其可选项有更严格的定义
3. IPv6报头中有6个域和2个地址空间,相对于IPv4中的10个固定长度的域、2个地址空间和若干个选项的结构来说IPV6更简单
# 2. 地址
1. IPv6协议的地址长度是128位,全部可分配地址数为2的128次方(2^128)个,不再存在地址匮乏问题
2. IPv6地址表示方式和IPv4也不同:
IPv4地址表示为点分十进制格式
IPv6采用的是冒号十六进制格式
# 3. 地址配置
1. IPv6协议支持地址自动配置,这是一种即插即用的机制
2. IPv6节点通过地址自动配置得到IPv6地址和网关地址
3. IPv6支持无状态地址自动配置和状态地址自动配置两种地址自动配置方式。它会给配置128位的地址带来很大的方便,特别是无状态地址自动配置
如何实现:
“即插即用”是指无需人为干涉,将一个节点插入IPv6网络并在网络中启动,IPv6使用了两种不同的机制来支持即插即用网络连接:启动协议(BOOTstrap Protocol,BOOTP)和动态主机配置协议(DHCP)。 这两种机制允许IP节点从特殊的BOOTP服务器或DHCP服务器获取配置信息。这些协议采用“状态自动配置”(Stateful Autoconfiguration),即服务器必须保持每个节点的状态信息,并管理这些保存的信息。
# 4. 域名解析
1. IPv6中的DNS与IPv4的在体系结构上相同,都采用树型结构域名空间。
2. IPv4和IPv6共同拥有统一的域名空间。
3. IPv6可以自动发现提供解析服务的DNS,有两种方式:
(1) 无状态的DNS服务器发现;
(2) 有状态的DNS服务器发现。
有状态的DNS服务器发现方式是通过类似DHCP的服务器把DNS服务器地址、域名和搜索路径等DNS信息告知节点。无状态DNS服务器自动发现有多种方式。
# 5. 网上邻居
IPv6定义了邻居发现协议NDP,它使用一系列IPv6控制信息报文(ICMPv6)来实现相邻节点(同一链路上的节点)的交互管理,并在一个子网中保持网络层地址和链路层地址之间的映射。
# 6. 路由技术
Pv6主要使用三种路由协议:RIPv6(路由信息协议)、OSPFv6(开放最短路径优先)和IDRPv2(域间路由协议),以及可能的EIGRP和双层的IS-IS。
IPv4可路由的协议有IP、IPX等,不可路由的主要有DEC,NETBIOS等。