网络层
概述
1、目的:实现网络互连,进而实现数据包在各网络之间的传输
2、解决以下主要问题
(2)网络层向运输层提供怎样的服务:可靠传输 / 不可靠传输
(2)网络层寻址问题
(3)路由选择问题
3、因特网(lnternet),使用 TCP / IP 协议栈,由于 TCP / IP 协议栈的网络层使用网际协议 IP,它是整个协议栈的核心协议,因此在 TCP / IP 协议栈中网络层常称为网际层
网络层提供的两种服务
1、面向连接的虚电路服务
(1)可靠通信由网络来保证
(2)必须建立网络层的连接:虚电路 VC(Virtual Circuit),逻辑连接,而不是物理连接
(3)通信双方沿着已建立的虚电路发送分组
(4)目的主机的地址仅在连接建立阶段使用,之后每个分组的首部只需携带一条虚电路的编号(构成虚电路的每一段链路都有一个虚电路编号)
(5)这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组最终正确到达接收方(无差错按序到达、不丢失、不重复)
(6)通信结束后,需要释放之前所建立的虚电路
(7)广域分组交换网,例如,X.25、帧中继 FR、异步传输模式 ATM 等
2、无连接的数据报服务
(1)可靠通信应当由用户主机来保证
(2)不需要建立网络层连接
(3)每个分组可走不同的路径
(4)每个分组的首部必须携带目的主机的完整地址
(5)所传送的分组可能误码、丢失、重复、失序
(6)由于网络本身不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉
(7)因特网采用了这种设计思想,将复杂的网络处理功能置于因特网的边缘(用户主机和其内部的运输层),而将相对简单的尽最大努力的分组交付功能置于因特网核心
对比 | 虚电路服务 | 数据包服务 |
思路 | 可靠通信由网络保证 | 可靠通信由用户主机保证 |
建立连接 | 必须建立网络层连接 | 不需要建立网络层连接 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
转发分组 | 属于同一条虚拟电路的分组,均按照同一路由进行转发 | 每个分组可走不同路由 |
结点故障 | 所有通过故障的结点的虚电路均不能工作 | 出现故障的结点可能丢失分组,一些路由可能会发生变化 |
分组顺序 | 总是按发送顺序到达终点 | 不一定按发送顺序到达终点 |
服务质量保证 | 将通信资源提前分配给每一个虚电路,容易实现 | 难实现 |
IPv4 地址
1、给 Internet 上的每一台主机 / 路由器的每一个接口,分配一个在全世界范围内,唯一的 32 比特标识符
2、编址方法
(1)分类编址
(2)划分子网
(3)无分类编址
3、表示方法:点分十进制,每 8 比特分为一组,每组转为十进制,每个十进制之间用 . 分隔
分类编址
A类 | 网络号:0 + 7位 + 主机号:24位 | 0.0.0.0 ~ 127.255.255.255 |
B类 | 网络号:10 + 14位 + 主机号:16位 | 128.0.0.0 ~ 191.255.255.255 |
C类 | 网络号:110 + 21位 + 主机号:8位 | 192.0.0.0 ~ 223.255.255.255 |
D类 | 1110 + 多播组号:28位 | 224.0.0.0 ~ 239.255.255.255 |
E类 | 11110 + 27位(保留地址) | 240.0.0.0 ~ 247.255.255.255 |
1、事项
(1)只有 A 类、B 类、C 类地址可分配给网络中的主机,或路由器的各接口
(2)主机号全为 0 的地址是网络地址,主机号全为 1 的地址是广播地址,都不能分配给主机,或路由器的各接口
(3)0.0.0.0 是一个特殊的 IPv4 地址,只能作为源地址使用,表示在本网络上的本主机,如,封装有 DHCP Discovery 报文的 IP 分组的源地址使用 0.0.0.0
(4)255.255.255.255 是一个特殊的 IPv4 地址,只能作为目的地址使用,表示只在本网络上进行广播(各路由器均不转发)
一般不使用的特殊 IP 地址 | ||||
网络号 | 主机号 | 作为源地址 | 作为目的地址 | 代表 |
0 | 0 | 可以 | 不可以 | 在本网络上的本主机(DHCP 协议) |
0 | host-id | 可以 | 不可以 | 在本网络上的某台主机 host-id |
全 1 | 全 1 | 不可以 | 可以 | 只在本网络上进行广播,各路由器均不转发 |
net-id | 全 1 | 不可以 | 可以 | 对 net-id 上的所有主机进行广播 |
127 | 非全 0 或全 1 | 可以 | 可以 | 用于本地软件环回测试 |
2、A 类
(1)最小网络号 0,保留不指派
(2)第一个可指派的网络号:1,网络地址: 1.0.0.0
(3)最大网络号:127,后三字节既非全 0、也非全 1,作为本地环回测试地址,不指派,既可以作为源地址,也可以作为目的地址
(4)最小的本地环回测试地址:127.0.0.1
(5)最大的本地环回测试地址:127.255.255.254
(6)最后一个可指派的网络号:126,网络地址:126.0.0.0
(7)可指派的网络数量:2(8 - 1) - 2 = 126(减 2 原因:除去最小网络号 0 和最大网络号 127 )
(8)每个网络中可分配的 IP 地址数量:224 - 2 = 16777214(减 2 原因:除去主机号为全 0 的网络地址和全 1 的广播地址)
3、B 类
(1)最小网络号、第一个可指派的网络号:128.0,网络地址:128.0.0.0
(2)最大网络号、最后一个可指派的网络号:191.255,网络地址:191.255.0.0
(3)可指派的网络数量:2(16 - 2) = 16384
(4)每个网络中可分配的 IP 地址数量:216 - 2 = 65534(减 2 原因:除去主机号为全 0 的网络地址和全 1 的广播地址)
4、C 类
(1)最小网络号、第一个可指派的网络号:192.0.0,网络地址:192.0.0.0
(2)最大网络号、最后一个可指派的网络号:223.255.255,网络地址:223.255.255.0
(3)可指派的网络数量:2(24 - 3) = 2097152
(4)每个网络中可分配的 IP 地址数量:28 - 2 = 254(减 2 原因:除去主机号为全 0 的网络地址和全 1 的广播地址)
划分子网
1、充分利用 IP 地址
2、网络号 + 子网号 + 主机号,子网号占用主机号的比特
3、子网掩码:32 比特,表明分类 IP 地址的主机号部分,被借用了几个比特作为子网号
(1)使用连续的比特 1 来对应网络号和子网号
(2)使用连续的比特 0 来对应主机号
(3)将划分子网的 IPv4 地址,与其相应的子网掩码,进行逻辑与运算,就可得到 IPv4 地址所在子网的网络地址
(4)假设原主机号占 m 位,子网号有 n 个 1,代表占用主机号 n 位,主机号剩余 m - n 位;划分出的子网数量:2n;每个子网可分配的 IP 地址数量:2(m - n) - 2(减 2 原因:除去主机号为全 0 的网络地址和全 1 的广播地址)
4、默认的子网掩码:在未划分子网的情况下使用的子网掩码
(1)A 类地址的默认子网掩码:255.0.0.0
(2)B 类地址的默认子网掩码:255.255.0.0
(3)C 类地址的默认子网掩码:255.255.255.0
无分类编址
1、解决 IP 地址紧张问题
2、无分类域间路由选择(CIDR:Classless Inter-Domain Routing)
3、CIDR 消除了传统的 A 类、B 类、C 类地址,以及划分子网的概念
4、CIDR 可以更加有效地分配 IPv4 的地址空间,并且可以在新的 IPv6 使用之前允许因特网的规模继续增长
5、CIDR 使用斜线记法 / CIDR 记法,即在 IPv4 地址后面加上斜线 /,在斜线后面写上网络前缀所占的比特数量
6、CIDR 实际上是将网络前缀都相同的,连续的 IP 地址组成一个 CIDR 地址块
7、只要知道 CIDR 地址块中的任何一个地址,就可以知道该地址块的全部细节
(1)地址块的最小地址
(2)地址块的最大地址
(3)地址块中的地址数量
(4)地址块聚合某类网络(A 类、B 类、C 类)的数量
(5)地址掩码 / 子网掩码
(例 1)128.14.35.7/20
(1)20 比特网络前缀 + 12 比特主机号
(2)128.14.0010 + 0011.00000111
(3)最小地址 / 网络地址:128.14.32.0 <-> 128.14.00100000.00000000
(4)最大地址 / 广播地址:128.14.47.255 <-> 128.14.00101111.11111111
(5)地址数量:2(32 - 20) = 212
(6)聚合 C 类网的数量:2(32 - 20) / 28 = 24
(7)地址掩码:255.255.240.0 <-> 11111111.11111111.11110000.00000000
(例 2)206.0.64.8/18
(1)18 比特网络前缀 + 14 比特主机号
(2)206.0.01000000.00001000
(3)最小地址 / 网络地址:206.0.64.0 <-> 206.0.01000000.00000000
(4)最大地址 / 广播地址:206.0.127.255 <-> 206.0.01111111.11111111
(5)地址数量:2(32 - 18) = 214
(6)聚合 C 类网的数量:2(32 - 18) / 28 = 26
(7)地址掩码:255.255.192.0 <-> 11111111.11111111.11000000.00000000
8、路由聚合(构造超网)
(1)路由聚合(构造超网)的方法:找共同前缀
(2)网络前缀越长,地址块越小,路由越具体
(3)最长前缀匹配:若路由器查表转发分组时,发现有多条路由可选,则选择网络前缀最长的那条,因为这样的路由更具体
(例)35.230.32.0/21、35.230.40.0/21、35.230.48.0/21、35.230.56.0/21
(1)共同前缀:35.230.001,共 19 位
(2)路由聚合后的网络地址:35.230.32.0/19 <-> 35.230.00100000.00000000
应用规划
1、给定一个 IPv4 地址块,将其划分为几个更小的地址块,并将这些地址分配给互联网中的不同网络,进而给各网络中的主机、路由器接口分配 IPv4 地址
2、方法
(1)定长的子网掩码
(2)变长的子网掩码
3、定长的子网掩码
(1)FLSM:Fixed Length Subnet Mask
(2)使用同一个子网掩码来划分子网
(3)子网划分方式不灵活:只能划分出 2n 个子网(n:从主机号部分借用,用来作为子网号的比特数量)
(4)每个子网所分配的 IP 地址数量相同,造成 IP 地址的浪费
4、变长的子网掩码
(1)VLSM:Variable Length Subnet Mask
(2)使用不同的子网掩码来划分子网
(3)子网划分方式灵活:可以按需分配
(4)每个子网所分配的 IP 地址数量可以不同,尽可能减少对 IP 地址的浪费
(5)分配原则:每个子块的起点位置不能随意选取,只能选取块大小整数倍的地址作为起点,建议先给大的子块分配
IP 数据报
1、重点在 TCP/IP 协议栈的网际层发送和转发IP数据报的过程上,以下忽略使用 ARP 协议来获取目的主机或路由器接口的 MAC 地址的过程,以及以太网交换机自学习和转发帧的过程
2、IP 数据报的发送和转发过程
(1)主机发送 IP 数据报
(2)路由器转发 IP 数据报
3、主机发送 IP 数据报
(1)判断目的主机是否与自己在同一个网络
(2)若在同一个网络,则属于直接交付
(3)若不在同一个网络,则属于间接交付,传输给主机所在网络的默认网关(路由器),由默认网关帮忙转发
4、路由器转发 IP 数据报
(1)检查 IP 数据报首部是否出错
(2)若出错,则直接丢弃该 IP 数据报并通告源主机
(3)若没有出错,则进行转发
(4)根据 IP 数据报的目的地址在路由表中查找匹配的条目
(5)若找到匹配的条目,则转发给条目中指示的下一跳
(6)若找不到,则丢弃该 IP 数据报并通告源主机
4、判断目的主机是否与自己在同一个网络
(1)源主机 IP 地址与源主机的子网掩码逻辑与运算,得到源主机所在网络的网络地址
(2)目的主机 IP 地址与源主机的子网掩码逻辑与运算,得到的网络地址与(1)相比较
5、网关
(1)一个网络通向其他网络的 IP 地址
(2)默认网关:计算机网络中将数据包转发到其他网络中的节点
6、路由器根据 IP 数据报的目的地址,在路由表中查找匹配的条目
(1)IP 数据报首部中的目的地址,依次与路由器的路由表中的目的网络地址,对应的地址掩码逻辑与运算
(2)逻辑与运算得到的目的网络地址,与路由表中的目的网络地址匹配
(3)不匹配,则向下匹配;匹配,则根据下一跳指示,在指定端口转发
静态路由配置
1、用户或网络管理员使用路由器的相关命令,给路由器人工配置路由表
(1)这种人工配置方式简单、开销小,但不能及时适应网络状态(流量、拓扑等)的变化
(2)一般只在小规模网络中采用
2、以下情况导致产生路由环路的错误
(1)配置错误
(2)聚合了不存在的网络
(3)网络故障
3、TTL 字段
(1)生存时间值:Time To Live
(2)防止 IP 数据报在路由环路中永久循环,在 IP 数据报首部设有生存时间 TTL 字段
(3)IP 数据报进入路由器后,TTL 字段的值减 1,若 TTL 的值不等于 0,则被路由器转发,否则被丢弃
4、路由条目的类型
(1)直连网络
(2)静态路由(人工配置)
(3)动态路由(路由选择协议)
5、特殊的静态路由条目
(1)默认路由(目的网络:0.0.0.0,地址掩码:0.0.0.0)
(2)特定主机路由(目的网络为特定主机的 IP 地址,地址掩码:255.255.255.255)
(3)黑洞路由(下一跳:null0)
动态路由选择
1、路由器通过路由选择协议自动获取路由信息
2、比较复杂、开销比较大,能较好地适应网络状态的变化
3、适用于大规模网络
4、Internet 所采用的路由选择协议的主要特点
(1)自适应:动态路由选择,能较好地适应网络状态的变化
(2)分布式:路由器之间交换路由信息
(3)分层次:将整个因特网划分为许多较小的自治系统(AS:Autonomous System)
5、自治系统
(1)域间路由选择:自治系统之间的路由选择,外部路由协议 ERP(分类名称,非具体协议)
(2)域内路由选择:自治系统内部的路由选择,内部路由协议 IRP(分类名称,非具体协议)
路由选择协议
1、内部路由协议 IRP
(1)路由信息协议 RIP:基于距离向量,在因特网上最早使用
(2)内部网关路由协议 IGRP:基于距离向量,思科早期私有的协议,现在已被为 EIGRP 取代
(3)增强型内部网关路由协议 EIGRP:思科私有,取代 IGRP 的混合型路由协议,结合距离向量和链路状态
(4)开放式最短路径优先 OSPF:基于链路状态,在各种网络中广泛使用
(5)中间系统到中间系统 IS-IS:集成化 IS-IS 是 ISP 骨干网上最长常用的 IRP 协议
2、外部路由协议 ERP
(1)边界网关协议 BGP
路由器基本结构
1、路由选择部分
(1)路由选择处理机:根据路由选择协议,周期性与其他路由器进行路由信息交互,更新路由表
(2)路由表:一般仅包含从目的网络,到下一跳的映射,需要对网络拓扑变化的计算最优化
2、分组转发部分
(1)交换结构:进行分组处理,转发表:由路由表得出,结构应当使查找过程最优化
(2)一组端口:一般都具有输入、输出功能
(3)各端口具有:输入缓冲区:新进入但未处理分组;输出缓冲区:已处理但未发生分组
3、对于电信号
(1)输入端口:物理层将信号转换为比特流,数据链路层从比特流中识别出帧,去掉帧头、帧尾,网络层根据待转发的数据分组的首部的目的地址,进行查表,按照匹配条目指示的端口,进行转发
(2)输出端口:网络层更新数据分组首部某些字段值,数据链路层封装成帧,物理层将帧看作比特流,变换成相应电信号,进行发送
4、对于路由报文
(1)路由报文:路由器之间交换路由信息
(2)把此种分组交给路由选择处理机,根据分组内容,更新路由表
(3)路由选择处理机,周期性发出路由报文
路由信息协议
1、RIP:Routing Information Protocol
2、距离向量(D-V:Distance-Vector):AS 内的每一个路由器,都要维护从它自己到 AS 内其他每一个网络的距离记录
3、使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离
(1)路由器到直连网络的距离定义为 1
(2)路由器到非直连网络的距离定义为所经过的路由器数加 1
(3)允许一条路径最多只能包含 15 个路由器,距离等于 16 时相当于不可达,因此,RIP 只适用于小型互联网
4、RIP 认为好的路由就是“距离短”的路由,即所通过路由器数量最少的路由,当到达同一自的网络有多条“距离相等”的路由时,可以进行等价负载均衡
5、交换三个要点
(1)交换对象:相邻路由器
(2)交换信息:自己的路由表,UDP 协议封装 RIP 报文
(3)交换时机:周期性交换
6、基本工作过程
(1)路由器刚开始工作时,只知道自己到直连网络的距离为 1
(2)每个路由器仅和相邻路由器周期性地交换并更新路由信息
(3)收敛:若干次交换和更新后,每个路由器都知道到达本 AS 内各网络的最短距离和下一跳地址
7、路由条目更新规则
(1)发送的路由表,所有下一跳修改为发送路由,所有距离 + 1
(2)直接添加新网络
(3)距离不同,下一跳相同,则更新距离
(4)距离相同,下一跳不同,则添加该路由条目到路由表,即等价负载均衡
(5)新距离更短,下一跳不同,则更新距离、下一跳
(6)新距离更远,下一跳不同,则不更新
8、坏消息传播慢的问题 / 路由环路问题 / 距离无穷计数问题
(1)距离向量算法的一个固有问题
(2)以下措施减少出现该问题的概率,减小该问题带来的危害,但不能彻底避免
(3)限制最大路径距离为15(16 表示不可达)
(4)当路由表发生变化时,就立即发送更新报文(即触发更新),而不仅是周期性发送
(5)让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即水平分割)
开放式最短路径优先
1、OSPF:Open Shortest Path First
(1)开放:公开发表
(2)最短路径优先:使用 Dikstra 最短路径算法
2、基于链路状态
(1)链路状态:指本路由器都和哪些路由器相邻,以及相应链路的代价
(2)代价:来表示费用、距离、时延、带宽等,由网络管理人员来决定
3、从算法上保证了不会产生路由环路
4、不限制网络规模,更新效率高,收敛速度快
5、相邻路由器之间通过交互问候(Hello)分组,建立和维护邻居关系
(1)源 IP:路由器接口 IP + 目的 IP:224.0.0.5 + 协议号:89 + OSPF 首部 + OSPF 分组载荷
(2)Hello 分组封装在 IP 数据报中,发往组播地址 224.0.0.5,协议号 89 表示 IP 数据报的数据载荷为 OSPF 分组
(3)发送周期为 10 秒
(4)40 秒未收到来自邻居路由器的 Hello 分组,则认为该邻居路由器不可达
6、每个路由器都会产生链路状态通告 LSA(Link State Advertisement)
(1)LSA 包含:直连网络的链路状态信息,邻居路由器的链路状态信息
(2)LSA 被封装在链路状态更新分组 LSU 中,采用洪泛法发送
7、每个路由器都有一个链路状态数据库 LSDB(Link State DataBase)
(1)用于存储 LSA
(2)各路由器通过洪泛,发送封装有自己 LSA 的 LSU 分组,各路由器的 LSDB 最终将达到一致
(3)各路由器基于 LSDB,使用迪杰斯特拉算法,构建出各自到达其他各路由器的最短路径,即构建各自的路由表
8、五种分组类型,IP 协议封装 OSPF 报文
(1)问候(Hello)分组:用来发现和维护邻居路由器的可达性
(2)数据库描述(Database Description)分组:向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
(3)链路状态请求(Link State Request)分组:向邻居路由器请求发送某些链路状态项目的详细信息
(4)链路状态更新(Link State Update)分组:路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态
(5)链路状态确认(Link State Acknowledgment)分组:这是对链路状态更新分组的确认分组
9、使用分组
(1)建立、维护邻居关系:双方互发问候分组
(2)链路状态数据库同步:双方互发数据库描述分组,链路状态请求分组 -> 链路状态更新分组 -> 链路状态确认分组
(3)新情况下:30 分钟或链路状态发生变化,链路状态数据库同步:链路状态更新分组 -> 链路状态确认分组
10、建立多点接入网络中路由器邻居关系
(1)选举指定路由器 DR(designated router)、备用的指定路由器 BDR(backup designated router)
(2)所有的非 DR / BDR 只与 DR / BDR 建立邻居关系
(3)假设有 n 个路由器,邻居关系数量 = 2 * (n - 2) + 1
(4)非 DR / BDR 之间通过 DR / BDR 交换信息
(5)实现:交换参数,如,路由器优先级、路由器 ID、接口 IP 地址等,根据选举规则选出,类似交换机生成树协议选举根交换机
11、区域(Area)
(1)把 AS 在划分为若干个更小的范围
(2)目的:使 OSPF 能够用于规模更大的网络,利用洪泛法交换链路状态信息的范围,局限于每个区域而不是整个自治系统,减少整个网络通信量
(3)每个区域都有一个 32 比特的区域标识符,用点分十进制表示
(4)主干区域:标识符必须为 0.0.0.0,连通其他区域
(5)其他区域标识符不能为 0 且互不相同
(6)一般区域所包含的路由器不超过 200 个
(7)区域路由器(IR:Internal Router):路由器的所有接口都在同一个区域内
(8)区域边界路由器(ABR:Area Border Router):一个接口连接自身所在区域,另一个接口连接主干区域,每个区域配备一个,交换本区域与自治系统内其他区域的链路状态通过
(9)主干路由器(BBR:Backbone Router):在主干区域内,区域边界路由器可以看作主干路由器
(10)自治系统边界路由器(ASBR:Autonomous System Border Router)专门与本自治系统外的其他自治系统交换路由信息
边界网关协议 BGP
1、在不同自治系统内,度量路由的代价(距离,带宽,费用等)可能不同,因此,对于自治系统之间的路由选择,使用代价作为度量来寻找最佳路由是不行的
2、自治系统之间的路由选择必须考虑相关策略(政治,经济,安全等)
3、BGP 只能是寻找一条能够到达目的网络且比较好的路由(不能循环),而并非寻找一条最佳路由
4、配置 BGP 时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的 BGP 发言人
5、不同自治系统的 BGP 发言人要交换路由信息,首先必须建立 TCP 连接,端口号为 179
(1)在此 TCP 连接上交换 BGP 报文以建立 BGP 会话
(2)利用 BGP 会话交换路由信息,例如,增加新的路由,撤销过时的路由,报告出错的情况等
(3)使用 TCP 连接交换路由信息的两个 BGP 发言人,彼此称为对方的邻站(neighbor)或对等站(peer)
6、BGP 发言人除了运行 BGP 外,还必须运行自己所在自治系统所使用的内部路由协议 IRP
7、BGP 发言人交换网络可达性的信息(要到达某个网络所要经过的一系列自治系统)
8、当 BGP 发言人互相交换了网络可达性的信息后,各 BGP 发言人就根据所采用的策略,从收到的路由信息中,找出到达各自治系统的较好的路由,即构造出树形结构、不存在回路的自治系统连通图
9、BGP 适用于多级结构的因特网:主干网 -> 地区 ISP -> 本地 ISP
10、BGP-4 四种报文,封装在 TCP 报文段
(1)OPEN(打开)报文:用来与相邻的另一个 BGP 发言人建立关系,使通信初始化
(2)UPDATE(更新)报文:用来通告某一路由的信息,以及列出要撤销的多条路由
(3)KEEPALIVE(保活)报文:用来周期性地证实邻站的连通性
(4)NOTIFICATION(通知)报文:用来发送检测到的差错
IPv4 数据报的首部格式
位 | 0 | 4 | 8 | 16 | 19 | 24 | 31 |
固定部分(20 字节) | 版本 | 首部长度 | 区分服务 | 总长度 | |||
标识 | 标志 | 片偏移 | |||||
生存时间 | 协议 | 首部检验和 | |||||
源 IP 地址 | |||||||
目的 IP 地址 | |||||||
可变部分(40 字节) | 可选字段(长度可变) | 填充 |
1、每一行都占用 32 比特,即 4 字节(表格中可变部分未划分行)
2、每格称为字段 / 域
3、版本
(1)占 4 比特,表示 IP 协议的版本
(2)通信双方使用的 IP 协议的版本必须一致,目前广泛使用 IPv4
4、首部长度
(1)占 4 比特,表示 IP 数据报首部的长度,该字段的取值以 4 字节为单位,首部长度一定是 4 字节的整数倍
(2)最小十进制取值:5,即最小二进制:0101,表示 IP 数据报首部只有 20 字节固定部分,每行 4 字节,共 5 行
(3)最大十进制取值:15,即最大二进制:1111,表示 IP 数据报首部包含 20 字节固定部分和最大 40 字节可变部分,每行 4 字节,共 15 行
5、可选字段
(1)长度从 1 个字节到 40 个字节不等,用于支持排错、测量、安全等措施
(2)可选字段增加了 IP 数据报的功能,同时也使得 IP 数据报的首部长度是可变的,增加了每一个路由器处理 IP 数据报的开销,实际上可选字段很少被使用
6、填充字段
(1)确保首部长度为 4 字节的整数倍
(2)固定部分 + 可选字段,造成首部不是 4 字节的整数倍时,使用全 0 填充相应字节
7、区分服务
(1)占 8 比特,用来获得更好的服务,但实际上一直没有被使用过
(2)利用该字段的不同数值可提供不同等级的服务质量,只有在使用区分服务时,该字段才起作用,一般情况下都不使用该字段
8、总长度
(1)占 16 比特,表示 IP 数据报总长度:首部 + 数据载荷
(2)最大十进制取值:65535,以字节为单位
9、标识
(1)占 16 比特,属于同一个数据报的各分片数据报,应该具有相同的标识
(2)IP 软件维持一个计数器,每产生一个数据报,计数器值加 1,并将此值赋给标识字段
10、标志
(1)占 3 比特,各比特含义如下
(1)DF 位:1 表示不允许分片;0 表示允许分片
(2)MF 位:1 表示后面还有分片;0 表示这是最后一个分片
(3)保留位:必须为 0
11、片偏移
(1)占 13 比特,指出分片数据报的数据载荷部分,偏移其在原数据报的位置有多少个单位
(2)片偏移以 8 个字节为单位,必须为整数,等于分片数据载荷首个字节编号 / 8(编号从 0 开始,编号是便于理解,实际不存在)
12、生存时间
(1)TTL:Time To Live
(2)占 8 比特,最初以秒为单位,最大生存周期为 255 秒,路由器转发 IP 数据报时,将 IP 数据报首部中的该字段的值,减去 IP 数据报在本路由器上所耗费的时间,若不为 0 就转发,否则就丢弃
(3)现在以“跳数”为单位,路由器转发 IP 数据报时,将 IP 数据报首部中的该字段的值减 1,若不为 0 就转发,否则就丢弃
13、协议
(1)占 8 比特,指明 IPv4 数据报的数据部分是何种协议数据单元
(2)常用的协议和相应的协议字段值如下
协议名称 | ICMP | IGMP | TCP | UDP | IPv6 | OSPF |
协议字段值 | 1 | 2 | 6 | 17 | 41 | 89 |
14、首部检验和 / 因特网检验和
(1)占 16 比特,用来检测首部在传输过程中是否出现差错,比 CRC 检验码简单
(2)IP 数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化
(3)由于 IP 层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在 IPv6 中路由器不再计算首部校验和,从而更快转发 IP 数据报
15、源 IP 地址、目的 IP 地址:各占 32 比特,填写发送该 IP 数据报的源主机的 IP 地址,和接收该 IP 数据报的目的主机的 IP 地址
IP 数据报分片:标识、标志、片偏移
1、网络层封装出 IP 数据报,交给数据链路层封装成帧
2、每一种数据链路层协议,都规定了帧的数据载荷的最大长度,称为最大传输单元 MTU,如,以太网的数据链路层规定 MTU 值:1500 字节
3、当 IPv4 数据报长度超过 MTU 时,无法封装成帧,需要分片为更小的数据报,再将各分片 IP 数据报封装成帧
例 | 数据载荷 + 首部 | 标识 | MF | DF | 片偏移 |
原始数据报 | 3800 + 20 | 12345 | 0 | 0 | 0 |
分片 1 的数据报 | 1400 + 20 | 12345 | 1 | 0 | 0 / 8 |
分片 2 的数据报 | 1400 + 20 | 12345 | 1 | 0 | 1400 / 8 |
分片 3 的数据报 | 1000 + 20 | 12345 | 0 | 0 | 2800 / 8 |
分片 2 的分片 1 数据报 | 800 +20 | 12345 | 1 | 0 | 1400 / 8 |
分片 2 的分片 2 数据报 | 600 + 20 | 12345 | 1 | 0 | 2200 / 8 |
网际控制报文协议
1、ICMP:Internet Control Message Protocol
2、在网络层使用,更有效地转发 IP 数据报和提高交付成功的机会
3、主机或路由器使用 ICMP 来发送差错报告报文和询问报文
4、ICMP 报文被封装在 IP 数据报中发送
ICMP 五种差错报告报文
1、终点不可达
(1)当路由器或主机不能交付数据报时,就向源点发送终点不可达报文
(2)具体可再根据 ICMP 的代码字段细分:目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等 13 种错误
2、源点抑制
(1)当路由器或主机由于拥塞,而丢弃数据报时,就向源点发送源点抑制报文
(2)使源点知道应当把数据报的发送速率放慢
3、时间超过
(1)当路由器收到一个目的 IP 地址不是自己的 IP 数据报,会将其生存时间 TTL 字段的值减 1,若结果不为 0,则将该 IP 数据报转发出去;若结果为 0,除丢弃该 IP 数据报外,还要向源点发送时间超过报文
(2)另外,当终点在预先规定的时间内,不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文
4、参数问题
(1)当路由器或目的主机收到 IP 数据报后,根据其首部中的检验和字段,发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文
5、改变路由(重定向)
(1)路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)
6、以下情况不应发送 ICMP 差错报告报文
(1)对 ICMP 差错报告报文不再发送 ICMP 差错报告报文
(2)对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文
(3)对具有多播地址的数据报都不发送 ICMP 差错报告报文
(4)对具有特殊地址(如 127.0.0.0、0.0.0.0)的数据报不发送 ICMP 差错报告报文
常用的 ICMP 询问报文
1、回送请求和回答
(1)ICMP 回送请求报文是由主机或路由器向一个特定的目的主机发出的询问
(2)收到此报文的主机必须给源主机或路由器发送 ICMP 回送回答报文
(3)这种询问报文用来测试目的站是否可达,以及了解其有关状态
2、时间截请求和回答
(1)ICMP 时间截请求报文是请某个主机或路由器回答当前的日期和时间
(2)在 ICMP 时间截回答报文中有一个 32 位的字段,其中写入的整数代表从 1900 年 1 月 1 日起,到当前时刻一共有多少秒
(3)这种询问报文用来进行时钟同步和测量时间
ICMP 应用举例
1、分组网间探测
(1)PING:Packet InterNet Groper
(2)用来测试主机或路由器间的连通性
(3)应用层直接使用网络层的 ICMP,没有通过运输层的 TCP 或 UDP
(3)使用 ICMP 回送请求和回答报文
2、跟踪路由
(1)traceroute
(2)用来测试IP数据报从源主机到达自的主机要经过哪些路由器
(3)Windows:tracert 命令,应用层直接使用网络层 ICMP,使用 ICMP 回送请求和回答报文以及差错报告报文
(4)Unix:traceroute 命令,在运输层使用 UDP 协议,仅使用 ICMP 差错报告报文
虚拟专用网
1、VPN:Virtual Private Network
2、利用公用的因特网作为本机构各专用网之间的通信载体,只能用于本地地址,不能用于全球地址
3、由于 IPv4 地址的紧缺,一个机构能够申请到的IPV4地址数量往往远小于本机构所拥有的主机数量
4、因此,虚拟专用网中的各主机所分配的地址,应该是本机构可自由分配的专用地址,而不是需要申请的、在因特网上使用的公有地址
5、专用(私有)地址
(1)10/8 地址块:10.0.0.0 ~ 10.255.255.255
(2)172.16/12 地址块:172.16.0.0 ~ 172.31.255.255
(3)192.168/16 地址块:192.168.0.0 ~ 192.168.255.255
6、类别
(1)内联网 VPN:同一机构内不同部门的内部网络所构成的虚拟专用网
(2)外联网 VPN:有时一个机构的 VPN 需要有某些外部机构(通常是合作伙伴)参加进来
(3)远程接入VPN:在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工 PC 中的 VPN 软件,在员工的 PC 和公司的主机之间建立 VPN 隧道,即可访问专用网络中的资源
网络地址转换
1、NAT:Network Address Translation
2、缓解了 IPv4 地址空间即将耗尽的问题
3、NAT 能使大量使用内部专用地址的专用网络用户,共享少量外部全球地址来访问因特网上的主机和资源
4、网络地址与端口号转换
(1)NAPT:Network Address and Port Translation
(2)端口号、IP 地址进行转换
(3)由于绝大多数的网络应用都是使用运输层协议 TCP 或 UDP 来传送数据,因此可以利用运输层的端口号和 IP 地址一起进行转换,这样,用一个全球 IP 地址就可以使多个拥有本地地址的主机,同时和因特网上的主机进行通信
(4)外网主机不能首先发起通信,外网的 IP 数据报,在 NAPT 转换表中找不到相应记录,即使用私网地址的主机不能充当因特网服务器
5、对于一些 P2P 网络应用,需要外网主机主动与内网主机进行通信,在通过 NAT 时会遇到问题,需要网络应用自己使用一些特殊的 NAT 穿越技术来解决问题
6、由于 NAT 对外网屏蔽了内网主机的网络地址,能为内网的主机提供一定的安全保护
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战