Web安全
计算机网络
物理层
数据链路层
网络层
运输层(传输层)
应用层
基础漏洞
01前端基础【HTML】
02前端基础【CSS】
03后端基础【PHP速通】
04后端基础【PHP面向对象】
05MySQL基础操作
06前后端联动【代码练习】
07SQL注入概述
07SQL 注入类型
08SQL注入 Labs
08SQL注入速查表
09XSS
09XSS【概述版】
09XSS Labs
10跨站请求伪造【CSRF】
11服务器端请求伪造【SSRF】
12XML 外部实体注入【XXE】
13代码执行漏洞
14命令执行漏洞
15文件包含漏洞
16文件上传漏洞
17反序列化漏洞
18业务逻辑漏洞
19未授权访问漏洞集合
20跨源资源共享【CORS】
21SSTI模板注入
22并发漏洞
23点击劫持【Clickjacking 】
24请求走私
25路径遍历
26访问控制
27身份验证漏洞
28WebSocket
29Web缓存中毒
30HTTP 主机头攻击
31信息泄露漏洞
32原型污染
33NoSQL注入
小程序
小程序抓包
SessionKey
Appsecret与access_token
openid
数据库
MySQL
Oracle
MongoDB
Redis
PostgreSQL
SQL server
中间件
Nginx
Apache HTTP Server
IIS
Tomcat
框架
ThinkPHP
Spring
Spring Boot
Django
访问控制
身份认证(Authentication)
授权(Authorization)
单点登录(SSO)
零信任(ZTA)
分布式身份(DID)
-
+
首页
网络层
网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机,可以将该任务划分为分组转发和路由选择两种重要的功能。  ## 概述 网络层是**OSI 七层模型的第三层**(或 TCP/IP 四层模型的 “互联层”),核心功能是**实现不同网络(子网)间的数据包转发**,解决 “端到端” 的通信路径选择问题,是互联网跨网络互通的关键层级。 ### 核心功能 **路由选择(Routing)**:通过路由协议(如 OSPF、RIP、BGP)计算并选择 “源网络到目标网络” 的最优路径,指导数据包转发。 **逻辑寻址(Logical Addressing)**:分配全局唯一的逻辑地址(如 IPv4、IPv6 地址),用于跨网络定位主机(区别于数据链路层的本地 MAC 地址)。 **数据包分段与重组**:当数据包大小超过目标网络的 MTU(最大传输单元)时,将其拆分;到达目标主机后,再重组为完整数据包。 **拥塞控制**:通过 ICMP 等协议监测网络拥塞状态,调整转发策略(如丢弃部分数据包),避免网络瘫痪。 ### 区别 | 对比维度 | 网络层(Network Layer) | 数据链路层(Data Link Layer) | | -------- | ----------------------- | -------------------------------- | | 作用范围 | 跨网络(端到端) | 同一网络(点到点,如同一局域网) | | 寻址方式 | 逻辑地址(IP 地址) | 物理地址(MAC 地址) | | 核心目标 | 解决 “不同网络如何互通” | 解决 “同一网络内如何传帧” | 网络层的本质是 “**跨网连接器**”—— 它屏蔽了底层不同网络的技术差异(如以太网、WiFi 的区别),通过统一的逻辑地址和路由机制,让全球不同子网中的主机能够实现端到端通信,是互联网 “互联互通” 的核心技术支撑。 ## 网络层向其上层提供的两种服务 ### 无连接服务(Connectionless Service) **核心特征**:无需预先建立连接,直接发送分组;每个分组独立处理,携带完整的目的 IP 地址,由路由器根据路由表单独选路。 关键特点: - 分组可能误码、乱序、丢失或重复(网络层不保证可靠性)。 - 网络层对上层 “无状态”,不记录分组传输的上下文。 **典型实现**:**IP 协议**(IPv4、IPv6 均基于无连接服务),是互联网的主流服务模式。 核心思想是“可靠通信应由用户主机来保证”。 不需要建立网络层连接。 通信结束后,没有需要释放的连接。  ### 面向连接服务(Connection-Oriented Service) **核心特征**:需先通过 “虚电路(Virtual Circuit, VC)” 建立端到端的逻辑连接,再传输分组;分组携带 “虚电路号”,路由器根据虚电路表快速转发。 关键特点: - 分组按发送顺序到达(连接建立时已确定路径)。 - 网络层对上层 “有状态”,需维护虚电路的连接信息。 **典型实现**:早期广域网技术,如**ATM(异步传输模式)**、**帧中继(Frame Relay)**。 核心思想是“可靠通信应由网络自身来保证”。 通信结束后,需要释放之前所建立的虚电路。  ## 网际协议 网际协议(Internet Protocol,IP)是TCP/IP体系结构网际层中的核心协议。 网际协议IP、传输控制协议TCP、TCP/IP体系结构是由“因特网之父”Robert Kalm和Vint Cerf二人共同研发的,1974年5月发布了TCP/IP的第一个版本。 其核心作用是**实现不同类型网络(如以太网、WiFi)之间的互联**,并完成端到端的分组转发。  要将众多的异构型网络都互连起来,并且能够互相通信,则会面临许多需要解决的问题: - 不同的网络接入机制; - 不同的差错恢复方法; - 不同的路由选择技术; - 不同的寻址方案; - 不同的最大分组长度; - 不同的服务(面向连接服务和无连接服务)。 当IP网上的主机进行通信时,就好像在一个单个网络上通信一样,它们看不见互连的各网络的具体异构细节。  ## IPv4地址 IPv4地址是给因特网(Internet)上的每一个主机(或路由器)的每一个接口分配的一个在全世界范围内唯一的32比特的标识符。  IPv4地址由因特网名字和数字分配机构(Internet Corporation for Assigned Names and Numbers,ICANN)进行分配。 我国用户可向亚太网络信息中心(Asia Pacific Network Information Center,APNIC)申请IP地址,需要缴纳相应的费用,一般不接受个人申请。 2011年2月3日,因特网号码分配管理局(Internet Assigned Numbers Authority,IANA)(由ICANN行使职能)宣布,IPv4地址已经分配完毕。 我国在2014至2015年也逐步停止了向新用户和应用分配IPv4地址,同时全面开展商用部署IPv6。 IPv4地址的编址方法经历了三个历史阶段:  ### 表示方法 由于IPv4地址由32比特构成,不方便阅读、记录以及输入等,因此IPv4地址采用点分十进制表示方法以方便用户使用。  ### 分类编址方法 32比特的IPv4地址:网络号+主机号。 网络号:标志主机(或路由器)的接口所连接到的网络;同一个网络中,不同主机(或路由器)的接口的IPv4地址的网络号必须相同,表示它们属于同一个网络。 主机号:标志主机(或路由器)的接口;同一个网络中,不同主机(或路由器)的接口的IPv4地址的主机号必须各不相同,以便区分各主机(或路由器)的接口。   A类、B类和C类地址都是单播地址,只有单播地址可以分配给网络中的主机(或路由器)的各接口。 主机号为“全0”的地址是网络地址,不能分配给主机(或路由器)的各接口。 主机号为“全1”的地址是广播地址,不能分配给主机(或路由器)的各接口。 ### A类地址  最小网络号为0,表示本网络,不能指派; 最小可指派的网络号为1,网络地址为1.0.0.0; 最大网络号为127,作为本地环回测试地址,不能指派; 最小的本地环回测试地址为127.0.0.1; 最大的本地环回测试地址为127.255.255.254; 最大可指派的网络号为126,网络地址为126.0.0.0; 可指派的A类网络数量为2^(8−1)−2=126(减2是去掉最小网络号0和最大网络号127); 每个A类网络中可分配的地址数量为2^24−2=16777214(减2是去掉主机号为全0的网络地址和全1的广播地址)。 ### B类地址  最小可指派的网络号为128.0; 网络地址为128.0.0.0; 最大可指派的网络号为191.255; 网络地址为191.255.0.0; 可指派的B类网络数量为2^(16−2)=16384; 每个B类网络中可分配的地址数量为2^16−2=65534(减2是去掉主机号为全0的网络地址和全1的广播地址)。 ### C类地址  最小可指派的网络号为192.0.0; 网络地址为192.0.0.0; 最大可指派的网络号为223.255.255; 网络地址为223.255.255.0; 可指派的C类网络数量为2^(24−3)=2097152; 每个C类网络中可分配的地址数量为2^8−2=254(减2是去掉主机号为全0的网络地址和全1的广播地址)。 ### 划分子网编址方法 核心作用是**划分 IP 地址中的 “网络位” 和 “主机位”**,从而确定一个 IP 地址属于哪个网络,以及该网络中可容纳的主机数量。 **划分子网**:将一个大的网络分割成多个小的 “子网”,减少网络广播风暴,提升网络效率(如企业将不同部门划分为不同子网)。 子网掩码可以表明分类IPv4地址的主机号部分被借用了几个比特作为子网号。 与IPv4地址类似,子网掩码也是由32比特构成的: - 用左起多个连续的比特1对应IPv4地址中的网络号和子网号; - 之后的多个连续的比特0对应IPv4地址中的主机号。  将划分子网的IPv4地址与相应的子网掩码进行逐比特的**逻辑与运算**,就可得到该IPv4地址所在子网的网络地址。  只要给定了一个分类的IPv4地址及其相应的子网掩码,就可以得出子网划分的全部细节。 **默认子网掩码**是指在未划分子网的情况下使用的子网掩码。  1993年,因特网工程任务组IETF发布了无分类域间路由选择(Classless Inter-Domain Routing,CIDR )的RFC文档[RFC1517~1519,RFC1520]。 CIDR消除了传统A类、B类和C类地址以及划分子网的概念。 CIDR可以更加有效地分配IPv4地址资源,并且可以在IPv6使用之前允许因特网的规模继续增长。  为了简便起见,可以不明确给出配套的地址掩码的点分十进制形式,而是在无分类编址的IPv4地址后面加上斜线“/”,在斜线之后写上网络前缀所占的比特数量(也就是地址掩码中左起连续比特1的数量),这种记法称为**斜线记法**。 传统十进制子网掩码(如 255.255.255.0)需手动换算二进制才能确定网络位,而斜线记法直接体现网络位数量,更简洁、直观,广泛用于 IP 地址规划(如路由器配置、服务器地址分配)。  斜线记法的本质是 “/ 后的数字 = 子网掩码二进制中‘1’的个数”,以下为常见示例: | 斜线记法(CIDR) | 网络位长度(二进制 “1” 的个数) | 子网掩码(二进制) | 子网掩码(十进制) | | ---------------- | ------------------------------- | ----------------------------------- | ------------------------- | | /8 | 8 | 11111111.00000000.00000000.00000000 | 255.0.0.0(A 类默认) | | /16 | 16 | 11111111.11111111.00000000.00000000 | 255.255.0.0(B 类默认) | | /24 | 24 | 11111111.11111111.11111111.00000000 | 255.255.255.0(C 类默认) | | /25 | 25 | 11111111.11111111.11111111.10000000 | 255.255.255.128 | | /26 | 26 | 11111111.11111111.11111111.11000000 | 255.255.255.192 | 使用无分类编址方法,可以根据客户的需要分配适当大小的CIDR地址块,因此可以更加有效地分配IPv4的地址空间。   网络前缀越长,地址块越小,路由越具体; 若路由器查表转发分组时发现有多条路由条目匹配,则选择网络前缀最长的那条路由条目,这称为最长前缀匹配,因为这样的路由更具体。  ### IPv4地址的应用规划 IPv4地址的应用规划是指将给定的IPv4地址块(或分类网络)划分成若干个更小的地址块(或子网),并将这些地址块(或子网)分配给互联网中的不同网络,进而可以给各网络中的主机和路由器的接口分配IPv4地址。 定长的子网掩码(Fixed Length Subnet Mask,FLSM):所划分出的每一个子网都使用同一个子网掩码;每个子网所分配的IP地址数量相同,容易造成地址资源的浪费。 变长的子网掩码(Variable Length Subnet Mask,VLSM):所划分出的每一个子网可以使用不同的子网掩码;每个子网所分配的IP地址数量可以不同,尽可能减少对地址资源的浪费。 ### IPv4地址与MAC地址的封装位置  在数据包的传送过程中,数据包的源IP地址和目的IP地址保持不变; 在数据包的传送过程中,数据包的源MAC地址和目的MAC地址逐链路(或逐网络)改变。  ### IPv4地址与MAC地址的关系 如果仅使用MAC地址进行通信,则会出现以下主要问题: - 因特网中的每台路由器的路由表中就必须记录因特网上所有主机和路由器各接口的MAC地址。 - 手工给各路由器配置路由表几乎是不可能完成的任务,即使使用路由协议让路由器通过相互交换路由信息来自动构建路由表,也会因为路由信息需要包含海量的MAC地址信息而严重占用通信资源。 - 包含海量MAC地址的路由信息需要路由器具备极大的存储空间,并且会给分组的查表转发带来非常大的时延。 因特网的网际层使用IP地址进行寻址,就可使因特网中各路由器的路由表中的路由记录的数量大大减少,因为只需记录部分网络的网络地址,而不是记录每个网络中各通信设备的各接口的MAC地址。 - 路由器收到IP数据报后,根据其首部中的目的IP地址的网络号部分,基于自己的路由表进行查表转发。 ### IPv4数据报的首部格式 IPv4数据报的首部格式及其内容是实现IPv4协议各种功能的基础。 在TCP/IP标准中,各种数据格式常常以32比特(即4字节)为单位来描述。 固定部分是指每个IPv4数据报都必须要包含的部分。 某些IPv4数据报的首部,除了包含20字节的固定部分,还包含一些可选的字段来增加IPv4数据报的功能。  版本:长度为4个比特,用来表示IP协议的版本;通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议的版本号为4(即IPv4)。 首部长度:长度为4个比特,该字段的取值以4字节为单位,用来表示IPv4数据报的首部长度。 区分服务:长度为8个比特,用来获得更好的服务,只有在使用区分服务时该字段才起作用,一般情况下都不使用该字段。 总长度:长度为16个比特,该字段的取值以字节为单位,用来表示IPv4数据报的长度(首部长度+数据载荷长度)。 标识:长度为16个比特,属于同一个IPv4数据报的各分片数据报应该具有相同的标识。 标志:最低位(More Fragment,MF)MF=1表示本分片后面还有分片;MF=0表示本分片后面没有分片。 中间位(Don’t Fragment,DF)DF=1表示不允许分片;DF=0表示允许分片。 片偏移:长度为13个比特,该字段的取值以8字节为单位,用来指出分片IPv4数据报的数据载荷偏移其在原IPv4数据报的位置有多远。 标识+标志+片偏移共同用于IPv4数据报分片。  生存时间(Time To Live,TTL):长度为8个比特,最大取值为二进制的11111111,即十进制的255。该字段的取值最初以秒为单位。因此,IPv4数据报的最大生存时间最初为255秒。路由器转发IPv4数据报时,将其首部中该字段的值减去该数据报在路由器上所耗费的时间,若结果不为0就转发,否则就丢弃。 生存时间字段后来改为以“跳数”为单位,路由器收到待转发的IPv4数据报时,将其首部中的该字段的值减1,若结果不为0就转发,否则就丢弃。 协议:长度为8个比特,用来指明IPv4数据报的数据载荷是何种协议数据单元PDU。 常用的一些协议和相应的协议字段值: | **协议名称** | **ICMP** | **IGMP** | **TCP** | **UDP** | **IPv6** | **OSPF** | | -------------- | -------- | -------- | ------- | ------- | -------- | -------- | | **协议字段值** | **1** | **2** | **6** | **17** | **41** | **89** | 首部检验和:长度为16个比特,用于检测IPv4数据报在传输过程中其首部是否出现了差错。 IPv4数据报每经过一个路由器,其首部中的某些字段的值(例如生存时间TTL、标志以及片偏移等)都可能发生变化,因此路由器都要重新计算一下首部检验和。 ## 地址解析协议ARP  ### 为什么需要 ARP? 网络通信需经过两层地址协作: - **IP 地址**(网络层):用于在跨网段的 “宏观” 路由(如从公司网络到互联网),标识设备的逻辑位置。 - **MAC 地址**(数据链路层):用于在同一局域网内的 “微观” 传输(如同一办公室内的电脑通信),标识设备的物理硬件(网卡)。 由于数据最终要通过物理网卡发送,必须将 IP 地址转换为对应的 MAC 地址,ARP 正是完成这一转换的 “翻译官”。 ### 核心工作流程(以局域网内主机 A→主机 B 通信为例) 1. **查询 ARP 缓存**:主机 A 要向主机 B(IP:192.168.1.10)发送数据时,先检查本地的 “ARP 缓存表”(临时存储 IP 与 MAC 的映射关系)。若已存在 192.168.1.10 对应的 MAC 地址,直接用该 MAC 发送数据。 2. **发送 ARP 请求(广播)**:若 ARP 缓存中无对应记录,主机 A 会发送一个**ARP 请求包**(目标 MAC 为 “FF-FF-FF-FF-FF-FF”,即局域网广播地址),向网段内所有设备询问:“谁的 IP 是 192.168.1.10?请告诉我你的 MAC 地址!” 3. **接收 ARP 响应(单播)**:网段内所有设备收到广播后,仅主机 B(IP 匹配)会回复一个**ARP 响应包**(单播发送给主机 A),包含自身的 MAC 地址(如 “00-11-22-33-44-55”)。 4. **更新 ARP 缓存**:主机 A 收到响应后,将 “192.168.1.10 ↔ 00-11-22-33-44-55” 的映射关系存入 ARP 缓存(通常有 10-20 分钟过期时间,避免无效记录占用空间),后续通信直接使用该 MAC 地址。 ### ARP 缓存 **作用**:临时保存 IP 与 MAC 的映射,减少重复广播请求,提升通信效率。 **查看方式**:在 Windows 系统中,可通过命令 arp -a 查看本地 ARP 缓存表;Linux/macOS 系统中,命令为 arp -n。 **特点**:缓存条目有过期时间,若设备离线或 IP 变更,旧条目会自动失效,避免通信错误。 与 ARP 相反,**RARP** 是通过**MAC 地址解析出对应的 IP 地址**,主要用于无盘工作站(无本地存储的设备):设备启动时仅知道自身 MAC,通过发送 RARP 请求,由局域网内的 RARP 服务器分配并返回 IP 地址。 值得注意的是:由于ARP协议的主要用途是从网际层使用的IP地址解析出在数据链路层使用的MAC地址。因此,有的教材将ARP协议划归在网际层,而有的教材将ARP协议划归在数据链路层。这两种做法都是可以的。 ## 静态路由 **静态路由(Static Routing)** 是由网络管理员**手动在路由器上配置的固定路由条目**,用于明确指定数据包从一个网络到另一个网络的转发路径,核心作用是指导路由器完成跨网段的数据传输。 ### 核心作用 静态路由的本质是 “人工规划转发路径”,主要解决以下问题: **跨网段通信**:当两个或多个不同子网(如 `192.168.1.0/24` 和 `192.168.2.0/24`)需要互通时,需在连接这些子网的路由器上配置静态路由,告知路由器 “目标子网的数据包该发给谁”。 **替代动态路由**:在简单网络中,无需部署复杂的动态路由协议(如 OSPF、RIP),通过静态路由即可实现高效转发,减少路由器资源消耗。 **固定关键路径**:对稳定性要求高的链路(如总部到分部的专线),可通过静态路由强制数据包走指定路径,避免动态路由的路径波动。 ### 核心配置要素(以路由器为例) 每条静态路由需包含 3 个关键信息,缺一不可: | 配置要素 | 作用说明 | 示例值 | | --------------------------- | ------------------------------------------------------------ | --------------------- | | **目标网络** | 数据包要到达的最终网段(需明确 IP 和子网掩码,或用 CIDR 记法) | `192.168.2.0/24` | | **下一跳(Next Hop)** | 数据包的 “下一个转发节点”,通常是相邻路由器的接口 IP(与当前路由器直连) | `192.168.1.2` | | **出接口(Out Interface)** | 数据包从当前路由器的哪个物理接口发出(部分场景可替代 “下一跳”) | `GigabitEthernet 0/0` | ### 优点 无需路由器间交互协议,**占用资源极少**(无带宽和 CPU 消耗); 路由路径固定,**稳定性高**(无动态路由的路径震荡); 配置简单,易理解(适合小型网络)。 ### 缺点 需**手动维护**(网络拓扑变化时,管理员需逐一修改所有相关路由器的静态路由,易出错); 不支持 “故障自愈”(若下一跳链路中断,无法自动切换到备用路径); 不适用于**大型 / 复杂网络**(拓扑多变,配置量极大)。 ## 动态路由 **动态路由**是路由器通过特定**路由协议**(如 OSPF、RIP)自动学习网络拓扑信息、生成并实时更新路由表的技术,无需管理员手动配置每条路由条目。 与静态路由的区别: | 对比维度 | 动态路由 | 静态路由 | | ------------ | ---------------------------------------------- | ------------------------------------------ | | **配置方式** | 仅需配置路由协议,路由条目自动生成 | 管理员手动逐条配置所有路由条目 | | **更新机制** | 网络拓扑变化时自动更新路由表 | 需管理员手动修改,无自动更新能力 | | **适用场景** | 大型、复杂、拓扑频繁变化的网络(如企业骨干网) | 小型、简单、拓扑固定的网络(如家庭局域网) | | **运维成本** | 初始配置复杂,后期运维成本低 | 初始配置简单,后期拓扑变化时运维成本高 | 将整个因特网划分为许多较小的自治系统(Autonomous System,AS),在自治系统内部和外部采用不同类别的路由选择协议,分别进行路由选择。 **内部网关协议(IGP)**:用于同一自治系统(AS,即一个独立管理的网络区域)内的路由学习。 - 代表协议:OSPF(开放式最短路径优先,适用于中大型网络)、RIP(路由信息协议,适用于小型网络)。 **外部网关协议(EGP)**:用于不同自治系统之间的路由学习。 - 代表协议:BGP(边界网关协议,是互联网核心路由协议,用于运营商、大型企业间的路由互通)。 外部网关协议EGP和内部网关协议IGP只是路由选择协议的分类名称,而不是具体的路由选择协议 ## 路由信息协议RIP ### 概述 路由信息协议(Routing Information Protocol,RIP)是内部网关协议中最先得到广泛使用的协议之一,其相关标准文档为[RFC 1058]。 RIP要求自治系统AS内的每一个路由器,都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为距离向量(Distance-Vector,D-V)。 RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。 - RIP将路由器到直连网络的距离定义为1。 - RIP将路由器到非直连网络的距离定义为所经过的路由器数加1。 - RIP允许一条路径最多只能包含15个路由器,距离等于16时相当于不可达。因此RIP只适用于小型互联网。 注意:有些厂商的路由器并没有严格按照RIP标准文档的规定来实现RIP。例如,思科路由器中的RIP,将路由器到直连网络的距离定义为0,但这并不影响RIP的正常运行。  RIP认为好的路由就是“距离短”的路由,也就是所通过路由器数量最少的路由。  当到达同一目的网络有多条RIP距离相等的路由时,可以进行等价负载均衡,也就是将通信量均衡地分布到多条等价的路径上。 ### 三个特点 1、仅和相邻路由器交换信息。 2、路由器自己的路由表,即本路由器到所在自治系统AS中各网络的最短RIP距离,以及到各网络应经过的下一跳路由器。 3、周期性交换(例如,每个约30秒),为了加快RIP的收敛速度,当网络拓扑发生变化时,路由器要及时向相邻路由器通告拓扑变化后的路由信息,这称为触发更新。 RIP相关报文使用运输层的用户数据报协议UDP进行封装,使用的UDP端口号为520。 从RIP报文封装的角度看,RIP属于TCP/IP体系结构的应用层。 但RIP的核心功能是路由选择,这属于TCP/IP体系结构的网际层。 ### 优点 实现简单,路由器开销小。 如果一个路由器发现了RIP距离更短的路由,那么这种更新信息就传播得很快,即“好消息传播得快”。 ### 缺点 RIP限制了最大RIP距离为15,这就限制了使用RIP的自治系统AS的规模。 相邻路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也随之增大。 “坏消息传播得慢”,使更新过程的收敛时间过长。因此,对于规模较大的自治系统AS,应当使用OSPF协议。 ## 开放最短路径优先协议OSPF 开放最短路径优先(Open Shortest Path First,OSPF)协议是为了克服路由信息协议RIP的缺点在1989年开发出来的。 “最短路径优先”是因为使用了Dijkstra提出的最短路径算法(Shortest Path First,SPF)。 注意:“开放最短路径优先”只是一个路由选择协议的名称,但这并不表示其他的路由选择协议不是“最短路径优先”。实际上,用于自治系统AS内部的各种路由选择协议(例如RIP),都要寻找一条“最短”的路径。 OSPF是基于链路状态的,而不像RIP是基于距离向量的。 OSPF基于链路状态并采用最短路径算法计算路由,从算法上保证了不会产生路由环路。 OSPF不限制网络规模,更新效率高,收敛速度快。 链路状态(Link State,LS)是指本路由器都和哪些路由器相邻,以及相应链路的“代价(cost)”。 “代价”用来表示费用、距离、时延和带宽等,这些都由网络管理人员来决定。 OSPF相邻路由器之间通过交互问候(Hello)分组来建立和维护邻居关系。 问候(Hello)分组封装在IP数据报中,发往组播地址224.0.0.5。IP数据报首部中的协议号字段的取值为89,表明IP数据报的数据载荷为OSPF分组。  问候(Hello)分组的发送周期为10秒。 若40秒未收到来自邻居路由器的问候(Hello)分组,则认为邻居路由器不可达。 每个路由器都会建立一张邻居表。 注意:OSPF分组直接使用网际层的IP数据报进行封装,而不像RIP报文需要使用运输层用户数据报协议UDP封装。从数据包按网络体系结构逐层封装的角度看,OSPF属于网际层协议,而RIP属于应用层协议(但其核心功能是路由选择,属于网际层)。 使用OSPF的每个路由器都会产生链路状态通告(Link State Advertisement,LSA)。 LSA中包含以下两类链路状态信息: - 直连网络的链路状态信息 - 邻居路由器的链路状态信息 链路状态通告LSA被封装在链路状态更新(Link State Update,LSU)分组中,采用可靠的洪泛法(Flooding)进行发送。 洪泛法的要点是路由器向自己所有的邻居路由器发送链路状态更新分组,收到该分组的各路由器又将该分组转发给自己所有的邻居路由器(但其上游路由器除外),以此类推。 可靠是指收到链路状态更新分组后要发送确认,收到重复的更新分组无需再次转发,但要发送一次确认。 使用OSPF的每一个路由器都有一个链路状态数据库(Link State Database,LSDB),用于存储链路状态通告LSA。 通过各路由器洪泛发送封装有各自链路状态通告LSA的链路状态更新分组LSU,各路由器的链路状态数据库LSDB最终将达到一致。 使用OSPF的各路由器,基于链路状态数据库LSDB进行最短路径优先计算,构建出各自到达其他各路由器的最短路径,即构建各自的路由表。  当多点接入网络中OSPF路由器邻居关系的建立时,为了减少洪泛发送问候分组和链路状态更新分组的数量,OSPF采用以下措施: - 选举指定路由器(Designated Router,DR)和备用的指定路由器(Backup Designated Router,BDR) 所有的非DR/BDR只与DR/BDR建立邻居关系,非DR/BDR之间通过DR/BDR交换信息。  为了使OSPF协议能够用于规模很大的网络,OSPF把一个自治系统AS再划分为若干个更小的范围,称为区域(area)。  划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域,而不是整个自治系统AS,这样就减少了整个网络上的通信量。 ## 路由器  ### 概述 路由器是一种具有多个输入端口和输出端口的专用计算机,其任务是转发分组。 路由器是连接多个**不同网络**(如家庭局域网与互联网、企业分支网络与总部网络)的设备,其核心工作是**基于目标 IP 地址转发数据包**,实现不同网络间的互联互通。 ### 原理  路由器的工作可概括为 “接收→解析→查表→转发→维护”5 个关键步骤,具体如下: 1、接收数据包:路由器通过物理端口(如以太网口、光口)接收来自某个网络的数据包(数据以 “帧” 为单位传输,帧内包含 “IP 数据包”)。 2、解析数据包,提取目标IP:路由器剥离数据包的二层帧头(包含源 / 目标 MAC 地址,仅用于局域网内传输),解析内部的**IP 头部**,提取出**目标 IP 地址**(这是决定转发方向的核心依据)。 3、查询路由表,确定转发路径:路由器查询自身的核心配置 ——路由表 - 若路由表中存在 “目标 IP 所属网络” 的匹配条目,直接获取对应的 “出接口”(即应转发的端口)和 “下一跳 IP”(下一个接收数据包的设备 IP)。 - 若无匹配条目,路由器会丢弃该数据包(或返回 “目标不可达” 的提示)。 4、封装新帧,转发数据包:路由器为 IP 数据包重新封装二层帧头。 - 源 MAC 地址:改为路由器 “出接口” 的 MAC 地址。 - 目标 MAC 地址:改为 “下一跳设备” 对应端口的 MAC 地址(通过 ARP 协议查询获取)。 - 最后通过 “出接口” 将封装后的数据包转发到下一跳,直至到达目标设备。 5、维护路由表: - 静态路由:需管理员手动添加 / 修改路由条目,适合简单网络。 - 动态路由:路由器通过 OSPF、RIP 等动态路由协议,自动学习网络拓扑变化(如链路中断、新设备加入),实时更新路由表,确保路径始终最优。 ## 网际控制报文协议ICMP ### 概述 为了更有效地转发IP数据报以及提高IP数据报交付成功的机会,TCP/IP体系结构的网际层使用了网际控制报文协议(Internet Control Message Protocol,ICMP)[RFC 792]。 主机或路由器使用ICMP来发送差错报告报文和询问报文。 ICMP 不具备独立的传输能力,其报文**必须封装在 IP 数据包中**(IP 头部的 “协议字段” 设为 1,表示承载的是 ICMP 报文)才能在网络中传输。 核心作用:解决 IP 协议 “无差错控制、无状态反馈” 的缺陷,为网络运维和数据传输提供 “故障诊断” 和 “状态感知” 能力。  ### 常见报文类型 差错报告报文:用来向主机或路由器报告差错情况。 询问报文:用来向主机或路由器询问情况。 ### 差错报告报文 常见的ICMP差错报告报文有以下五种: **终点不可达** 当路由器或主机不能交付IP数据报时,就向源点发送重点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种。  **源点抑制** 当路由器或主机由于拥塞而丢弃IP数据报时,就向发送该IP数据报的源点发送源点抑制报文,使源点知道应当把IP数据报的发送速率放慢。  **时间超过(超时)** 当路由器收到一个目的IP地址不是自己的IP数据报时,会将其首部中生存时间TTL字段的值减1。若结果不为0,则路由器将该数据报转发出去;若结果为0,路由器不但要丢弃该数据报,还要向发送该IP数据报的源点发送时间超过(超时)报文。  当终点在预先规定的时间内未能收到一个数据报的全部数据报分片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过(超时)报文。 **参数问题** 当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段的值发现首部在传送过程中出现了误码,就丢弃该数据报,并向发送该数据报的源点发送参数问题报文。  **改变路由(重定向)** 路由器把改变路由报文发送给主机,让主机知道下次应将IP数据报发送给另外的路由器,这样可以通过更好的路由到达目的主机。   注意,以下情况不应发送ICMP差错报告报文: - 对ICMP差错报告报文不再发送ICMP差错报告报文。 - 对第一个分片的IP数据报片的所有后续数据报片都不发送ICMP差错报告报文。 - 对具有多播地址的IP数据报都不发送ICMP差错报告报文。 - 对具有特殊地址(例如127.0.0.0或0.0.0.0)的IP数据报不发送ICMP差错报告报文。 ### 典型应用 分组网间探测(Packet InterNet Groper,PING)与跟踪路由(traceroute)。 分组网间探测PING用来测试主机或路由器之间的连通性,PING是TCP/IP体系结构的应用层直接使用网际层ICMP的一个例子,它并不使用运输层的TCP或UDP,PING应用所使用的ICMP报文类型为回送请求和回答。  某些主机或服务器为了防止恶意攻击,并会不理睬外界发来的ICMP回送请求报文。 跟踪路由应用traceroute,用于探测IP数据报从源主机到达目的主机要经过哪些路由器。 - 在UNIX版本中,具体命令为“traceroute”,其在运输层使用UDP协议,在网络层使用ICMP报文类型只有差错报告报文。 - 在Windows版本中,具体命令为“tracert”,其应用层直接使用网际层的ICMP协议,所使用的ICMP报文类型有回送请求和回答报文以及差错报告报文。 ```bash C:\Users\root>tracert www.baidu.com 通过最多 30 个跃点跟踪 到 www.a.shifen.com [110.242.70.57] 的路由: 1 <1 毫秒 <1 毫秒 <1 毫秒 192.168.0.1 [192.168.0.1] 2 1 ms 1 ms <1 毫秒 192.168.1.1 [192.168.1.1] 3 4 ms 15 ms 4 ms 10.3.176.1 [10.3.176.1] 4 * * * 请求超时。 5 * * * 请求超时。 6 * * * 请求超时。 7 * * * 请求超时。 8 * * ^C ``` *表示该跳的路由器(或中间设备)**没有返回 ICMP 超时报文**,可能的情况包括: - 设备主动禁用了 ICMP 超时响应(出于安全策略,避免被追踪路径); - 网络拥堵或链路质量差,导致响应报文丢失; - 设备本身不支持或不处理 ICMP 超时请求(极少数情况)。    ## 虚拟专用网 虚拟专用网(Virtual Private Network,VPN):利用公用的因特网作为各机构专用网之间的通信载体,这样形成的网络又称为虚拟专用网。 给专用网内各主机配置的IP地址应该是该专用网所在机构可以自行分配的IP地址,这类IP地址仅在机构内部有效,称为专用地址(Private Address),不需要向因特网的管理机构申请。 [RFC 1918]规定了以下三个CIDR地址块中的地址作为专用地址(私有地址): - 10.0.0.0~10.255.255.255(CIDR地址块10/8) - 172.16.0.0~172.31.255.255(CIDR地址块172.16/12) - 192.168.0.0~192.168.255.255(CIDR地址块192.168/16) 在因特网中的所有路由器,对目的地址是专用地址的IP数据报一律不进行转发,这需要由因特网服务提供者ISP对其拥有的因特网路由器进行设置来实现。 ## 网络地址转换NAT 尽管因特网采用了无分类编址方法来减缓IPv4地址空间耗尽的速度,但由于因特网用户数量的急剧增长,特别是大量小型办公室和家庭网络接入因特网的需求不断增加,IPv4地址空间即将耗尽的危险然仍没有解除(实际上,因特网号码分配管理局IANN于2011年2月3日宣布,IPv4地址已经分配完毕)。 网络地址转换(Network Address Translation,NAT)技术于1994年被提出,用来缓解IPv4地址空间即将耗尽的问题。 网络地址转换(NAT,Network Address Translation)是一种由路由器实现的技术,核心作用是**将内网的私有 IP 地址转换为外网的公有 IP 地址**,从而解决 IPv4 地址资源不足的问题,同时隔离内网与外网以提升安全性。 NAT 通过路由器(或网关设备)在数据包进出内网时,修改 IP 头部的 “源 IP” 或 “目的 IP”,实现私有 IP 与公有 IP 的映射。 将NAT和运输层端口号结合使用,称为网络地址与端口号转换(Network Address and Port Translation,NAPT) ## IPv6 IPv4是在20世纪70年代末期设计的,其IPv4地址的设计存在以下缺陷: - IPv4的设计者最初并没有想到该协议会在全球范围内广泛使用,因此将IPv4地址的长度规定为他们认为足够长的32比特。 - IPv4地址早期的编址方法(分类的IPv4地址和划分子网的IPv4地址)也不够合理,造成IPv4地址资源的浪费。 因特网经过几十年的飞速发展,到2011年2月3日,因特网号码分配管理局IANA宣布IPv4地址已经分配完毕,因特网服务提供者ISP已经不能再申请到新的IPv4地址块。 我国在2014至2015年也逐步停止向新用户和应用分配IPv4地址,同时全面开展商用部署IPv6。 NAT仅仅是为了延长IPv4使用寿命而采取的权宜之计,解决IPv4地址耗尽的根本措施就是采用具有更大地址空间(IP地址的长度为128比特)的新版本IP,即IPv6。 因特网工程任务组IETF早在1992年6月就提出要制定下一代的IP,即IPng(IP Next Generation)。IPng现在正式称为IPv6。 ### 主要变化 IPv6将IPv4的32比特地址空间增大到了128比特,在采用合理编址方法的情况下,在可预见的未来是不会用完的。 可划分为更多的层次,这样可以更好地反映出因特网的拓扑结构,使得对寻址和路由层次的设计更具有灵活性。 与IPv4首部并不兼容:IPv6定义了许多可选的的扩展首部,不仅可提供比IPv4更多的功能,而且还可以提高路由器的处理效率,因为路由器对逐跳扩展首部外的其他扩展首部都不进行处理。 IPv6允许分组包含有选项的控制信息,因而可以包含一些新的选项,然而IPv4规定的选项却是固定不变的。 IPv6支持主机或路由器自动配置IPv6地址及其他网络配置参数。因此IPv6不需要使用DHCP。 IPv6能为实时音视频等要求保证一定带宽和时延的应用,提供更好的服务质量保证。   IPv6将IPv4数据报首部中不必要的功能取消了,这使得IPv6数据报基本首部中的字段数量减少到只有8个。 但由于IPv6地址的长度扩展到了128比特,因此使得IPv6数据报基本首部的长度反而增大到了40字节,比IPv4数据报首部固定部分的长度(20字节)增大了20字节。 取消了首部长度字段,因为IPv6数据报的首部长度是固定的40字节。 取消了区分服务(服务类型)字段,因为IPv6数据报首部中的通信量类和流标号字段实现了区分服务字段的功能。 取消了总长度字段,改用有效载荷长度字段。这是因为IPv6数据报的首部长度是固定的40字节,只有其后面的有效载荷长度是可变的。 取消了标识、标志和片偏移字段,因为这些功能已包含在IPv6数据报的分片扩展首部中。 把生存时间TTL字段改称为跳数限制字段,这样名称与作用更加一致。 取消了协议字段,改用下一个首部字段。 取消了首部检验和字段,这样可以加快路由器处理IPv6数据报的速度。 取消了选项字段,改用扩展首部来实现选项功能。 版本字段:长度为4比特,用来表示IP协议的版本。对于IPv6该字段的值是6。 通信量类字段:长度为8比特,该字段用来区分不同的IPv6数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。 流标号字段:长度为20比特(“流”就是因特网上从特定源点到特定终点(单播或多播)的一系列IPv6数据报(如实时音视频数据的传送),而在这个“流”所经过的路径上的所有路由器都保证指明的服务质量。)。 有效载荷长度字段:长度为16比特,它指明IPv6数据报基本首部后面的有效载荷(包括扩展首部和数据部分)的字节数量(该字段以字节为单位,最大取值为65535,因此IPv6数据报基本首部后面的有效载荷的最大长度为65535字节。)。 下一个首部字段:长度为8比特。该字段相当于IPv4数据报首部中的协议字段或可选字段(当IPv6数据报没有扩展首部时,该字段的作用与IPv4的协议字段一样,它的值指出了IPv6数据报基本首部后面的数据是何种协议数据单元PDU。)。 跳数限制字段:长度为8比特。该字段用来防止IPv6数据报在因特网中永久兜圈(源点在每个IPv6数据报发出时即设定某个跳数限制(最大255跳)。)。 源地址字段和目的地址字段:长度都为128比特。分别用来填写IPv6数据报的发送端的IPv6地址和接收端的IPv6地址。 IPv6地址空间大小为2^128(如果整个地球表面(包括陆地和水面)都覆盖着需要IPv6地址的通信设备,那么IPv6允许每平方米拥有7×10^23个IPv6地址。) 在IPv6地址的冒号十六进制记法的基础上,再使用“左侧零”省略和“连续零”压缩,可使IPv6地址的表示更加简洁。 - “左侧零”省略是指两个冒号间的十六进制数中最前面的一串0可以省略不写。 - “连续零”压缩是指一连串连续的0可以用一对冒号取代。
毛林
2025年9月24日 11:53
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码