OSI七层模型中的第3层,网络层的主要职责是处理数据的路由、转发以及寻址问题,确保数据从源主机到目标主机的顺利传输
网络层的核心功能
| 功能名称 | 解释 |
|---|---|
| 1. 路由选择(Routing) | 找一条最优路径把数据包从源送到目的地,涉及路由协议(如 OSPF、BGP) |
| 2. 逻辑寻址(IP地址) | 给每台设备分配全球唯一的地址(如 IPv4 / IPv6 地址) |
| 3. 分段与重组 | 将较大的数据包切分为适合链路层传输的片段,接收端再重组 |
| 4. 差错处理 | 一些最基本的错误检查(如 IP头部的校验和) |
| 5. 拥塞控制(可选) | 不是核心职责,但有时配合其他层(如 ICMP 源抑制)参与拥塞管理 |
1.路由选择(Routing)
网络层的核心任务之一是路由选择。路由选择是指通过网络中的路由器选择一条最优路径来传输数据包。路由选择并非是一个孤立的过程,而是依赖于一系列的路由协议,这些协议帮助路由器在复杂的网络拓扑中找到最优路径
常见的路由协议包括:
- RIP(Routing Information Protocol):基于跳数的路由协议,简单易懂,但不适用于大型网络
- OSPF(Open Shortest Path First):基于链路状态的协议,能够更有效地找到最短路径
- BGP(Border Gateway Protocol):用于自治系统(AS)之间的路由选择,是互联网的骨干协议
2.逻辑寻址(IP地址)
IP地址是网络层进行设备标识和路由选择的基础。每台设备都需要一个唯一的IP地址,这个地址分为两个部分:网络号和主机号。网络号标识设备所在的网络,而主机号则标识网络中的具体设备
IP地址不仅仅是用于标识设备的唯一身份,它还帮助路由器在网络间转发数据包。例如,当一个数据包从源主机发送到目标主机时,网络层会检查目标主机的IP地址,根据路由表决定数据包的转发途径
3.分段与重组
由于每个链路层(如以太网)对传输的数据包大小有一定的限制,而数据包可能会因为应用层发送的数据量过大而无法直接传输。网络层负责将数据包进行分段,将过大的数据包分割成更小的片段以适应链路的传输。接收端的网络层再进行重组,将数据恢复成原始数据包
这一过程是透明的,用户和应用层并不需要关心数据包是否被分段,网络层会自动处理
4.差错处理
虽然IP协议本身并不负责重传丢失的数据包,但它会进行简单的差错检测。例如,IP头部中的校验和字段帮助检查数据包在传输过程中是否损坏。如果发现错误,数据包会被丢弃,发送方通常通过高层协议(如TCP)请求重传
5.拥塞控制(可选)
虽然拥塞控制通常是传输层的职责(如TCP协议),但网络层也可以参与其中。例如,ICMP协议中有源抑制消息,告诉源主机当前网络发生了拥塞,建议它减慢发送速度
路由协议
RIP协议
RIP是一种用于动态路由选择的协议,它通过交换路由表来计算和更新网络中到达目的地的最短路径。RIP是距离向量路由协议的一种,它基于“跳数”作为衡量路径距离的标准,通常用于小型或中型网络中
RIP的工作原理非常简单,并且通过周期性地交换路由表来维护路由信息。RIP版本有多个,其中最常用的是RIP v1和RIP v2,此外还有RIPng(适用于IPv6)
RIP工作原理
RIP使用距离向量算法,通过以下步骤来计算和更新路由表:
距离度量: RIP使用跳数作为衡量距离的标准。跳数表示从源设备到目的设备经过的路由器数量。最大跳数为15,超过15跳的目标被认为是不可达的
路由更新: RIP协议通过周期性地交换路由表(每30秒一次)来更新网络中的路由信息。每个路由器会将自己的路由表发送给相邻的路由器,更新它们的信息
路由表更新: 路由器根据接收到的路由信息来更新自己的路由表。如果某个目的地的路由表中的跳数变小,路由器会选择更新该路由。如果目的地不可达,它会从路由表中删除该条目
路由的计算: 路由器根据跳数来选择最佳路径。如果两个路径的跳数相同,路由器可能根据其他标准(如路由的带宽)来选择路径
定期更新: RIP会定期向相邻的路由器发送更新包,以便在网络拓扑发生时,及时更新路由表
RIP协议的特点
距离向量算法 RIP是一种距离向量路由协议,通过不断交换路由表来计算每个网络的最短路径。每个路由器只知道与邻居路由器的距离,不知道其他路由器的完整网络拓扑
跳数限制 路由计算的最大跳数为15跳,如果两个网络之间的跳数超过15,那么它们就被认为是不可达的。这意味着RIP协议仅适用于小型到中型的网络
收敛速度较慢 由于RIP是基于周期性路由更新的,因此收敛速度较慢。如果网络拓扑发生变化(如链路失败),RIP可能需要较长的时间才能更新路由信息
适用于小型网络 由于跳数限制和较慢的收敛速度,RIP更适合用于较小的网络,不能满足大规模网络的路由需求。对于大型或复杂的网络,通常会选择OSPF或BGP等更高级的协议
广播更新 RIP协议每隔一段时间向所有路由器广播自己的路由表,这回导致网络带宽的浪费。特别是在大型网络中,广播更新可能会带来性能问题
RIP版本
- RIP v1:
- 协议类型:使用广播方式发送更新消息
- 缺点:不支持子网掩码,因此只能支持类地址的网络。这使得RIP v1无法进行CIDR的路由选择,也不支持VLSM(变长子网掩码)
- 网络设计:RIP v1不支持路由认证和多播更新(广播传输)
- RIP v2:
- 协议类型:使用多播方式发送路由更新包,减少了广播的负担
- 新特性:
- 支持CIDR和VLSM,使得RIP v2更加灵活,可以支持不同的子网掩码
- 支持路由认证,增强了安全性
- 支持多播,即通过多播地址
224.0.0.9发送路由更新包,从而减少了网络上的广播流量
- 缺点:仍然存在跳数限制和收敛速度慢的问题
- RIPng:
- 支持IPv6:RIPng是RIP协议的扩展,专门用于支持IPv6地址的网络
- 特点:与RIP v2相似,但RIPng使用了多播地址
FF02::9来发送路由更新包
RIP的路由表更新过程
发送更新: 每30秒,路由器回想所有相邻的路由器发送包含自己路由表信息的更新包
接收更新: 当一个路由器接收到来自邻居的更新信息时,它会更新自己的路由表,选择最短的路径
触发更新: 如果网络拓扑发生变化(如路由器或链路故障),路由器会在180秒内发送一个触发更新(Trigger Update),使网络更快地收敛
路由表项的过期: 如果路由器长时间没有接收到某条路由的信息,路由表中的该条路由会被标记为不再有效,并被删除。RIP使用30秒的间隔来定期更新路由
RIP协议的优缺点
优点:
- 简单易懂
- 易于配置
- 广泛支持
缺点:
- 跳数限制
- 收敛速度慢
- 浪费带宽
- 网络负载:频繁的路由更新包会增加网络负载,影响网络性能
OSPF协议
OSPF(Open Shortest Path First)是一种链路状态路由协议,广泛用于大型企业网络和ISP(Internet Service Providers)的内部网路由协议i。它是RIP协议的替代品,并且比RIP更适合大规模网络
OSPF协议由IETF(Internet Engineering Task Force)开发,属于内部网关协议(IGP),其设计目标是根据网络拓扑信息动态计算并选择最佳路径
OSPF的基本特点
- 链路状态协议:
- 与RIP不同,OSPF是链路状态协议。每个路由器只向相邻路由器广播其链路状态,而不是整个路由表。所有路由器基于接收到的状态信息构建出相同的路由表
- 使用Dijkstra算法:
- OSPF使用Dijkstra算法(也成为SPF算法,Shortest Path First)来计算最短路径
- 无环路协议
- OSPF可以确保计算出的路由是无环的
- 分层设计:
- OSPF允许将一个大的网络分割成多个区域(Area),以减少路由器的负担。通常,区域0是核心区域(也叫骨干区域),其他区域必须通过区域0连接
支持VLSM和CIDR
支持负载均衡
- OSPF支持等价负载均衡,可以在多个路由之间进行负载均衡,优化带宽的利用
- 按成本计算路径:
- OSPF使用一个称为成本(Cost)的度量来表示路径的开销,成本与链路带宽成反比。成本较低的路径更为优选
- 支持认证:
- OSPF支持路由认证,可以在增加路由器之间的安全性,确保只有授权的路由器才能参与路由计算
OSPF的工作原理
- OSPF邻居关系建立
- OSPF路由器首先通过Hello协议相互发现邻居。Hello包是OSPF用来发现和维护邻居关系的协议。路由器通过交换Hello包建立邻居关系,确保彼此可以通信
- 邻居状态机(Neighbor State Machine)描述了OSPF建立邻居关系的过程。邻居关系有不同的状态,常见的状态有:
- Down:没有接收到Hello包
- Attempt:正在尝试发送Hello包,建立连接
- Init:收到对方的Hello包,但尚未交换数据
- 2-Way:双方已经交换Hello包,确定对方是有效的邻居
- ExStart:准备交换LSA(Link-State Advertisement)信息
- Exchange:交换LSA信息
- Loading:加载LSA信息
- Full:邻居关系完全建立,路由表同步
- LSR(Link-State Request)和LSA(Link-State Advertisement)交换
- 当邻居关系建立后,路由器开始交换链路状态信息。每个路由器会生成一个LSA,其中包含了该路由器的链路状态(如接口的状态和带宽等信息)。LSA信息是OSPF的核心
- 路由器通过LSR请求邻居路由器提供链路状态信息,并根据收到的LSA生成自己的拓扑数据库
- 计算最短路径
- 每个路由器根据接收到的LSA信息,使用Dijkstra算法计算从自己到其他网络的最短路径
- SPF树:每个路由器会根据链路状态信息生成最短路径树,这棵树的根节点是该路由器,树中的每一条边表示一条路径
- 更新路由表
- 根据计算出的最短路径树,路由器将计算出的路由信息(即最短路径)加入到自己的路由表中
- 如果网络拓扑发生变化(例如链路故障或路由器重启),路由器会重新计算SPF树并更新路由表
OSPF的区域划分
OSPF支持将网络分为多个区域(Area),这有助于减轻路由器的负担并优化路由计算。每个区域内的路由器只与该区域内的路由器交换链路状态信息,而区域之间的路由信息由骨干区域(Area0)传递
- 区域0(骨干区域):所有其他区域都必须直接或间接连接到区域0
- 非骨干区域:可以是多个子区域,用于分割大型网络以减少路由表的规模
OSPF路由器类型
- 内部路由器(Internal Router, IR)
- 只在同一区域内操作的路由器
- 边界路由器(ABR,Area Border Router)
- 连接多个区域的路由器,负责在区域之间传递路由信息
- 骨干路由器(Backbone Router)
- 属于区域0的路由器,负责核心网络的路由信息交换
- AS边界路由器(ASBR,Autonomous System Boundary Router)
- 连接OSPF与其他自治系统(例如,BGP)之间的路由器
OSPF的LSA类型
OSPF使用LSA(链路状态通告)来交换链路状态信息,LSA的类型由多个,最常用的包括:
- Type 1 LSA (Router LSA)
- 路由器生成自己的LSA,描述其所有直接连接的链路(接口)
- Type 2 LSA (Network LSA)
- 用于描述网络中所有交换机与路由器之间的连接
- Type 3 LSA (Summary LSA)
- 边界路由器生成,用于将其他区域的路由信息汇总并传播到其他区域
- Type 4 LSA (ASBR Summary LSA)
- 用于将ASBR的路由信息传播到其他区域
- Type 5 LSA (External LSA)
- ASBR用于传播外部网络的路由信息(通常来自BGP)
OSPF的优缺点
优点
- 快速收敛
- 支持大规模网络:OSPF支持区域划分
- 使用最短路径算法
- VLSM支持
缺点
- 复杂度较高
- 开销较大:OSPF需要更多的计算资源和内存
- 初始配置复杂:需要规划区域和接口设置,初始部署较为复杂
BGP协议
BGP(Border Gateway Protocol)是互联网的核心路由协议,用于在不同的自治系统(AS)之间交换路由信息。它是一种路径向量协议,不同于传统的链路状态协议和距离矢量协议。BGP在全球范围内的互联网路由选择中起着至关重要的作用,负责选择跨自治系统(AS)的最佳路径
BGP的基本特点
- 路径向量协议
- BGP是路径向量协议,路由器交换信息时不仅包含目的网络地址,还包括到达目标网络的路径信息(即AS路径)。路径向量协议中的路径信息是一系列自治系统的标识符
- 基于AS(自治系统)
- BGP的核心概念是自治系统,它代表一个由单一技术管理的网络。每个AS都有一个唯一的AS号,BGP通过交换AS号信息来确定路由的路径
- 用于跨自治系统的路由:
- BGP是外部网关协议(EGP),用于在不同自治系统之间交换路由信息。与OSPF和RIP等内部网关协议(IGP)不同,BGP负责管理跨域路由
- 不使用度量值
- 与其他协议不同,BGP选择路径时,并不依赖于像带宽、延迟等度量标准,而是使用路径的AS路径长度、策略和其他属性来决定最佳路径
- 支持策略控制
- BGP允许使用策略来影响路由的选择,比如通过AS路径过滤、前缀过滤、路由聚合等手段控制路由的选择,这使得BGP成为管理互联网路由的灵活工具
- 支持聚合:
- BGP支持IP地址前缀聚合,使得多个网络段可以合并成一个更简洁的网络前缀,从而减少路由表的规模
BGP的工作原理
BGP的工作原理可以概括为以下几个步骤:
- BGP邻居关系的建立(Session Estabishment)
- BGP是一个基于TCP连接的协议,通常使用179端口
- 在BGP邻居之间建立连接时,首先会进行握手,通过OPEN报文来交换必要的配置信息,如AS号、BGP版本、路由器ID等
- 在邻居之间建立起BGP会话后,路由器就可以开始交换路由信息
- BGP路由信息交换(Route Advertisement)
- 在BGP会话建立后,路由器通过UPDATE报文交换路由信息。每个路由通告包含了目标网络(即IP前缀)以及与该目标网络相关的AS路径和其他属性
- AS路径:指明了数据包从源到达目的网络时所经过的自治系统的序列。AS路径用于避免环路,作为为路由选择的一部分
- BGP属性:BGP路由中包含多个属性,常见的有:
- AS路径(AS Path):列出了到达目标网络所经过的AS
- 下一跳(Next Hop):指明了到达目标网络的下一跳地址
- 前缀长度(Prefix Length):指明网络地址的位数
- 多路径(Multipath):如果BGP路由器支持多路径,可能有多个有效路径
- 本地优先级(Local Preference):用于在同一个AS内选择最佳路径
- MED(Multi-Exit Discriminator):用于影响跨多个AS的路由选择
- 路由选择与更新
- 路由器根据AS路径和BGP属性来选择最佳路径。BGP采用的路径选择规则如下(优先级从高到低)
- 优先选择本地优先级(Local Preference)
- 选择AS路径最短的路径
- 选择路由跳数最少的路径(即“下一跳”)
- 选择MED值最小的路径
- 根据BGP协议的配置选择,如某些路由的可靠性、带宽等
- 一旦选择了最佳路径,路由器会将其添加到本地路由表,并根据该路径转发流量
- BGP路由的撤销与更新
- 如果网络拓扑发生变化,比如某个AS无法到达,BGP会通过UPDATE报文将无效路由撤销,并通过新的路径信息更新路由表
- BGP收敛:BGP的收敛速度相对较慢,尤其是在全球互联网规模下,可能需要几分钟或更长时间才能重新计算并传播新的路由信息
BGP的路由类型
BGP路由分为两种类型:
- 内部BGP(即iBGP): - iBGP用于同一自治系统内的路由器之间,通过iBGP交换的路由信息不会直接传递给外部,只在AS内传播
- 外部BGP(即eBGP) - eBGP用于不同自治系统之间的路由器之间交换路由信息。通常,互联网服务商(ISP)会使用eBGP与其他AS交换路由信息
BGP的路由属性
BGP路由的选择不仅依赖于路径信息,还依赖于一些路由属性:
- AS Path(AS路径):
- AS路径是BGP最重要的路由属性之一。它记录了路由信息通过所有自治系统的标识。AS路径长度越短,表示路径越优选
- Next Hop(下一跳):
- 下一跳的地址是BGP路由信息中的一项重要属性,它表示从当前路由器到目的地网络的下一跳点的IP地址
- Local Preference(本地优先级):
- 本地优先级是BGP内部(iBGP)使用的一个属性,用于指示不同路径之间的优先级。值越大,优先级越高,路由器会选择具有较高本地优先级的路径
- Multi-Exit Discriminator(MED)(多出口区分符):
- MED用于指示不同自治系统之间的优先级,它告诉BGP路由器如何选择通过多个出口通道进入某个AS的路径
- Communities(社区属性):
- 社区属性用于BGP路由策略的分组,它可以对多个路由进行标记,便于网络管理员对不同类型的流量进行控制
BGP的优缺点
优点
- 大规模网络支持
- 灵活的策略控制
- BGP根据AS路径、前缀长度、优先级等多种因素对路由器进行灵活的控制和定制
- 支持路由聚合
- BGP支持路由聚合,可以将多个网络地址合并成一个较小的地址块,从而减少路由表的规模
- 支持冗余与负载均衡
- BGP支持多路径负载均衡,能够选择多个路由用于同一目的网络,增强网络的可靠性和带宽利用率
缺点
- 收敛速度较慢
- 配置复杂
- 依赖TCP协议
- BGP依赖于TCP连接(端口179),这使得BGP在某些环境下可能面临连接不稳定或带宽消耗的问题
路由器(Router)
定义
路由器是网络层的设备,它的主要功能是根据数据包的目标地址,决定如何将数据包从源主机转发到目标主机。路由器通过查阅路由表来决定数据包的最佳转发路径
功能
- 数据包转发:路由器根据目标IP地址和路由表,选择适合的下一跳设备,将数据包转发到正确的网络
- 网络互联:路由器负责连接不同类型的网络,例如局域网(LAN)与广域网(WAN)之间的通信,或者两个不同的子网之间的数据传输
- 地址解析:通过ARP协议,路由器将IP地址解析为MAC地址,用于链路层的数据传输
- 选择最优路径:使用动态或静态路由协议(如OSPF、BGP),路由器可以选择最优路径进行数据转发
路由器的工作流程
- 接收数据包:路由器接收到来自源主机的数据包
- 查看IP头部:路由器查看数据包的目标IP地址,依据目标地址决定数据包的转发路径
- 查阅路由表:路由器根据目标IP地址查阅路由表,选择下一跳
- 转发数据包:路由器将数据包转发到下一个路由器或目标主机
路由器的类型:
- 传统路由器:用于局域网、广域网、企业网络等,负责内部网络和外部网络的连接
- 三层交换机:结合了路由器和交换机的功能,能够在数据链路层和网络层之间进行高速转发
- 核心路由器:用于互联网骨干网络中,负责不同网络之间的大规模数据转发
- 边缘路由器:位于网络的边缘,主要负责用户访问外部网络
路由(Routing)
路由是指数据包从源主机到目标主机在不同网络之间的传输过程。具体来说,路由时指数据包的选择路径,通常由路由协议和路由表决定。简而言之,路由器是决定数据包如何从一个网络传输到另一个网络的过程
路由的过程
- 路径选择:路由的核心目标时选择数据包从源头到目的地的最佳路径。路径的选择依赖于多个因素,如网络拓扑、链路状态、带宽、延迟等
- 路由协议:动态路由协议(如OSPF、BGP、RIP等)负责计算最优路径并更新路由表,确保数据包能沿着最佳路径进行传输
- 静态路由:管理员手动配置的固定路径,通常用于简单的网络中,或当动态路由协议不可用时使用
路由的实现方式
- 静态路由:管理员手动设置路由路径。这种方式简单且节省资源,但当网络拓扑发生变化时,需要手动更新路由配置
在一个简单的网络中,管理员可能手动配置路由器,使得数据包从源主机到目标主机有一个固定的路径
特点: - 不可变
- 优先级高:静态路由通常优于动态路由
- 灵活性差
例如:
Network 192.168.1.0/24 -> Next Hop 192.168.2.1
路由器会根据这个配置,直接将数据包发送到下一个跳点192.169.2.1
动态路由:由路由协议自动计算并维护路由路径。动态路由根据网络状态的变化自动调整路由路径,适用于大规模或经常变化的网络 在一个较大的网络中,路由器可能无法事先配置所有的路由。相反,路由器会使用动态路由协议来计算最佳路径,并根据网络状态变化动态更新路由表
例如,假设某个路由器发现到达某个网络的路径变得不可达,它会通过BGP协议通知相邻路由器,并选择一条新的路径来替代原有的路径
特点:自动更新
灵活性强
开销较高
默认路由(Default Route) 默认路由是当数据包的目标地址不再路由表中时使用的路由。它相当于一个“备选”路由。通常,默认路由会将数据包发送到一个网关,这个网关负责转发数据包到目标网络。默认路由的目标网络通常是
0.0.0.0/0
默认路由的配置示例
ip route add default via 192.168.1.1
这意味着任何目的地址不在路由表中的数据包都会被发送到192.168.1.1,通常是网络的出口路由器
路由表(Routing Table)
路由表时网络设备用来决定数据包转发路径的重要数据。每个路由器都有自己的路由表,路由表记录了网络中不同目标地址的路由信息,帮助路由器决定将数据包转发到哪个下一跳。
路由表的核心任务是决定数据包的最佳转发路径
路由表的基本结构
| 字段 | 描述 |
|---|---|
| 目标网络(Destination Network) | 数据包的目标地址所在的网络。例如,192.168.1.0/24。 |
| 子网掩码(Netmask) | 用来指定目标网络的大小,即地址范围。例如,255.255.255.0。 |
| 下一跳(Next Hop) | 下一个路由器的IP地址或目标设备的地址。如果目标设备在本地子网,下一跳可能是直接连接的接口。 |
| 出接口(Interface) | 路由器将通过哪个接口发送数据包。每个网络接口(如以太网口、Wi-Fi口)都有一个唯一的标识。 |
| 路由类型(Route Type) | 指明该路由是静态路由(手动配置)还是动态路由(由路由协议动态计算得出)。 |
| 度量值(Metric) | 路由的“成本”,用于比较不同路径的优劣。度量值越小,路径越优先。通常,动态路由协议会使用度量值来选择最优路径。 |
举例
假设有以下路由表条目
| 目标网络 | 子网掩码 | 下一跳 | 出接口 | 路由类型 |
|---|---|---|---|---|
192.168.1.0 | 255.255.255.0 | 192.168.0.1 | eth0 | 静态路由 |
0.0.0.0 | 0.0.0.0 | 192.168.0.1 | eth0 | 默认路由 |
192.168.2.0 | 255.255.255.0 | 192.168.1.1 | eth1 | 动态路由 |
解释:
- 第一条路由条目指示,任何目的地址是
192.168.1.0/24网络的数据包都应该通过下一跳192.168.0.1,并使用eth0接口转发 - 第二条条目是一个默认路由,表示所有不在其它网络范围内的目标地址都会通过
192.168.0.1发送 - 第三条条目是一个动态路由,目的地址是
192.168.2.0/24,下一跳是192.168.1.1,出接口是eth1
路由表的工作原理
- 接收数据包:当路由器接收到一个数据包时,首先查看数据包的目标IP地址
- 查找路由表:路由器会在自己的路由表中查找一个匹配目标地址的路由条目。路由表中的目标网络通常使用子网掩码于数据包目标地址进行匹配
- 选择路径:一旦找到匹配的路由条目,路由器会根据路由表中的信息选择一个下一跳地址和出接口。路由器使用这个信息将数据包转发到下一跳路由器或目标设备
最长前缀匹配(Longest Prefix Match)
当目标IP地址有多个匹配的路由条目时,路由器会选择最长前缀匹配的路由。最长前缀匹配原则意味着,如果有多个路由条目与目标地址匹配,路由器会选择子网掩码最长的那一条规则
例如,如果目标地址是192.168.1.100,路由器的路由表有以下两条规则:
- 192.168.0.0/24
- 192.168.1.0/24
路由器会选择192.168.1.0/24路由条目,因为它的子网掩码(255.255.255.0)比192.168.0.0/24的子网掩码更长,匹配度更高
网络层中的典型协议
| 协议名 | 功能 |
|---|---|
| IP | Internet Protocol,提供不可靠的包传输服务,是网络层的核心协议 |
| ICMP | 用于报告差错信息和诊断问题(如 ping) |
| IGMP | 管理组播组成员(组播=一个发给多个) |
| ARP/RARP | 虽属于链路层,但与IP地址紧密协作(地址解析协议) |
| IPSec | 用于加密IP包(网络层的安全协议) |
IP协议
IP协议(Internet Protocol)是网络层的核心协议,它负责为数据包添加源IP和目标IP地址,实现数据包的路由和转发。IP协议有两个版本
- IPv4:32位地址空间,广泛应用于全球大部分网络
- IPv6:128位空间地址,逐渐替代IPv4,解决了IPv4地址短缺的问题
IP协议在提供跨网络的数据传输时非常有效,但它本身是不可靠的。这意味着,IP协议并不保证数据包的到达、顺序或重传
IPv4协议
IPv4是目前最广泛使用的IP协议版本,它使用32位地址,支持的地址范围为0.0.0.0到255.255.255.255,即理论上支持大约43亿个唯一地址
IPv4地址结构
IPv4地址由32位二进制数构成,通常使用四个十进制数表示,每个数代表8位二进制数。每个十进制数的范围是0~255,例如192.168.1.1
IP地址 = 网络号 + 主机号
- 网络号(Network Portion):标识网络的部分,用于将不同的设备分组到同一网络中
- 主机号(Host Portion):标识网络中各个设备的部分,唯一地标识一个设备
IPv4包格式
IPv4数据包包括以下几个字段:
| 字段名 | 长度 | 说明 |
|---|---|---|
| 版本(Version) | 4位 | 表示IP协议的版本,IPv4的值为4。 |
| 头部长度(Header Length) | 4位 | 表示IP包头部的长度,以4字节为单位。 |
| 服务类型(Type of Service) | 8位 | 用于指定数据包的优先级和处理要求。 |
| 总长度(Total Length) | 16位 | 数据包的总长度(包括头部和数据)。 |
| 标识(Identification) | 16位 | 用于标识数据包分片的序列号。 |
| 标志(Flags) | 3位 | 用于控制和标识数据包是否可以分片。 |
| 片偏移(Fragment Offset) | 13位 | 指示数据包分片的位置。 |
| 生存时间(TTL,Time to Live) | 8位 | 表示数据包在网络中存活的最大跳数。 |
| 协议(Protocol) | 8位 | 表示数据包的上层协议(例如TCP、UDP等)。 |
| 头部校验和(Header Checksum) | 16位 | 用于检查IP头部是否出错。 |
| 源IP地址(Source IP Address) | 32位 | 发送数据包的设备的IP地址。 |
| 目的IP地址(Destination IP Address) | 32位 | 目标设备的IP地址。 |
| 选项(Options) | 可变 | 可选字段,提供附加的控制信息。 |
| 数据(Data) | 可变 | 数据部分,包含上层协议的数据(例如TCP/UDP数据)。 |
IPv4的重要特性
- 无连接:IP协议本身不建立连接,不保证数据的可靠性和顺序
- 不可靠:数据包可能会丢失、重复、顺序错乱
- 分片和重组:IPv4可以在数据包大小超过链路MTU(最大传输单元)时进行分片,并在接收端重组
特殊IP地址
- 网络地址
- 是子网中的第一个地址,用来表示整个子网。它的主机部分全是0
- 对于任何子网,网络地址都是该子网段的首地址
- 不可分配给主机
- 广播地址
- 是子网中的最后一个地址,用来进行广播通信,它的主机部分全是1
- 对于任何子网,广播地址都是该子网段的尾地址
- 不可分配给主机
- 默认网关地址
- 默认网关(Default Gateway)是一个特殊的地址,用于在主机无法通过本地网络通信时,将数据包发送到外部网络。通常,默认网关是本地网络的路由器地址
- 默认网关通常设置为子网中的第一个可用主机地址(例如,
192.168.1.1,如果子网是192.168.1.0/24)。路由器将通过这个地址与其他子网或互联网进行通信
- 0.0.0.0
0.0.0.0是一个非常特殊的地址,它有几个用途:- 源地址:在网络通信中,
0.0.0.0可以表示“无效”或“未知”源地址,通常在路由表中用于表示默认路由 - 默认路由:在路由器的路由表中,
0.0.0.0通常用于表示默认路由,即当没有其他匹配的路由时,数据包会被发送到这个路由
- 源地址:在网络通信中,
- 在实际使用中,
0.0.0.0并不代表一个特定的主机,而是一个表示“任意地址”的占位符
- 127.0.0.0/8
环回地址(Loopback Address):
127.0.0.0/8范围内的地址被保留用于本地通信,通常127.0.0.1被称为本地回环地址(localhost),它用于指向发送者本身。任何发往127.x.x.x地址的数据包都会被路由器发送到发送者用途:
- 用于测试本机的网络协议栈,不经过网络硬件
- 比如
ping 127.0.0.1可以测试本机的网络连通性
- 私有地址
- 私有IP地址是为内部网络保留的,不能直接在互联网上路由。私有地址段的定义如下:
- 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)
- A类私有地址:
- 这些地址可以在局域网中使用,但不能直接在互联网中使用。为了让私有地址与公网通信,通常需要使用NAT(网络地址转换)技术
- 多播地址
多播地址用于支持一对多的通信,不同于广播(全网通信),多播允许数据包仅发送到特定的接收者组。多播地址的范围通常是
224.0.0.0 - 233.255.255.255特征:
- 多播数据包仅发送给指定组的成员,而非整个网络中的每个设备
- 使用IGMP来管理多播组
- 链路本地地址
- 链路本地地址是指用于在单一网络段内进行通信的地址。在IPv6中,链路本地地址的范围是
fe80::/10- 链路本地地址是由操作系统自动配置的,不需要由DHCP或其他方式分配,它通常用于局域网内的自动配置
- 在IPv4中,链路本地地址通常是
169.254.0.0/16,这种地址通常在设备无法获取有效的DHCP地址时自动配置(APIPA地址)
子网掩码(Subnet Mask)
为了划分网络,IPv4地址使用了子网掩码,它与IP地址配合使用,决定了网络中哪些部分是网络号,哪些部分是主机号。
子网掩码是一个32位的二进制数,与IP地址进行按位与操作,帮助识别IP地址中的网络部分和主机部分。
子网掩码决定了一个网络的大小(即子网中主机的数量)
子网掩码并不单独用于标识某个网络,而是与IP地址配合使用,以指示该地址的网络部分和主机部分
子网掩码通常以点分十进制标识,与IP地址结构相同,例如:255.255.255.0。每个十进制数表示8位二进制
子网掩码的结构
子网掩码由连续的1部分(表示网络部分)和连续的0部分(表示主机部分)组成。网络部分的1表示网络号,主机部分的0表示主机号
例如:
- IP地址:192.168.1.0
- 子网掩码:255.255.255.0
二进制表示如下:
- IP地址:11000000.10101000.00000001.00000000
- 子网掩码:11111111.11111111.11111111.00000000
通过对IP地址和子网掩码进行按位与运算,可以得到该地址所属的网络部分。例如,192.168.1.0/24表示一个拥有256个地址(包括网络地址和广播地址)的子网,/24表示子网掩码为255.255.255.0,即前24位是网络部分
CIDR(Classless Inter-Domain Routing)
CIDR是IPv4的一种地址分配方式,避免了传统的类A、类B、类C地址的限制。CIDR表示法通过斜杠后跟随一个数字来表示子网掩码的长度
CIDR和子网掩码本质上是相同的
通过CIDR表示法,路由器和设备能够更加方便地进行路由选择和网络划分。CIDR允许使用任何前缀长度。这使得IP地址的分配更加灵活,尤其在IPv4地址资源枯竭的今天,CIDR提供了一个有效的解决方案
例如:
192.168.1.0/24表示网络192.168.1.0,子网掩码为255.255.255.0,其中/24代表前24位是网络号
类地址系统
在IPv4的早期设计中,网络地址分配采用了类地址系统,这种系统通过将IP地址划分为不同的类别,来组织和分配IP地址。每个类别定义了特定的网络大小和主机数量
类地址系统的划分方式并不灵活,固定了每个类别的子网掩码,因此在分配地址时容易造成浪费,尤其是当某些网络的设备数少于分配给它的IP地址时。
类地址系统在当时简化了网络的设计和配置
类地址系统的分类
类地址系统将IPv4地址划分为五个主要类别:A类,B类,C类,D类,E类。每个类别的网络号和主机号部分的分配不同,导致每个类别可容纳的主机数量也不同
ChatGPT said: 类地址系统(Classful Addressing System)概述 在IPv4地址的早期设计中,网络地址分配采用了类地址系统(Classful Addressing),这种系统通过将IP地址划分为不同的“类别”(Class)来组织和分配IP地址。每个类别定义了特定的网络大小和主机数量。
类地址系统的划分方式并不灵活,固定了每个类别的子网掩码,因此在分配地址时容易造成浪费,尤其是当某些网络的设备数少于分配给它的IP地址时。不过,类地址系统在当时简化了网络的设计和配置。
类地址系统的分类 类地址系统将IPv4地址(32位)划分为五个主要类别:A类、B类、C类、D类和E类。每个类别的网络号和主机号部分的分配不同,导致每个类别可容纳的主机数量也不同。
- A类地址(Class A)
- 地址范围:0.0.0.0 到 127.255.255.255
- 网络号:前 8 位(即第 1 字节)
- 主机号:剩余 24 位
- 默认子网掩码:255.0.0.0(即 /8)
- 可用网络数:128 个(2^7 - 2 = 128个,减去 0.0.0.0 和 127.0.0.0 作为保留地址)
- 每个网络的主机数:16,777,214 个(2^24 - 2)
- 用途:适用于大型企业或数据中心,网络中可以有大量的主机。A类地址分配给了全球最大的网络。
- 示例:10.0.0.0/8
- B类地址(Class B)
- 地址范围:128.0.0.0 到 191.255.255.255
- 网络号:前 16 位(即前 2 字节)
- 主机号:剩余 16 位
- 默认子网掩码:255.255.0.0(即 /16)
- 可用网络数:16,384 个(2^14 - 2)
- 每个网络的主机数:65,534 个(2^16 - 2)
- 用途:适用于中型到大型网络。B类地址分配给了中型组织,支持较多的设备。
- 示例:172.16.0.0/16
- C类地址(Class C)
- 地址范围:192.0.0.0 到 223.255.255.255
- 网络号:前 24 位(即前 3 字节)
- 主机号:剩余 8 位
- 默认子网掩码:255.255.255.0(即 /24)
- 可用网络数:2,097,152 个(2^21 - 2)
- 每个网络的主机数:254 个(2^8 - 2)
- 用途:适用于小型网络。C类地址用于家庭、办公室、学校等小型局域网,每个网络最多容纳 254 台设备。
- 示例:192.168.1.0/24
- D类地址(Class D)(多播地址)
- 地址范围:224.0.0.0 到 239.255.255.255
- 用途:D类地址用于 多播(Multicast),即向一组特定设备发送数据,而不是单独向某一设备发送。多播技术常用于音视频流传输等应用。
- 示例:224.0.0.0/4(通常没有子网掩码)
- E类地址(Class E)(保留地址)
- 地址范围:240.0.0.0 到 255.255.255.255
- 用途:E类地址是为 实验和研究用途 保留的,不用于公开的网络通信。它通常不会在实际的网络中使用。
- 示例:240.0.0.0/4
类地址系统的优势与局限
优势:
- 简单易懂:类地址系统通过固定的网络号和主机号位数,使得地址分配变得相对简单,适合早期的网络架构。
- 快速配置:网络管理员可以通过简单的 IP地址范围和子网掩码 来划分网络,无需进行复杂的计算。
局限:
- 地址浪费:
- 类A、类B、类C地址的固定大小导致了 IP地址的浪费,尤其是在类A和类B地址范围内。当一个小型公司申请一个类A或类B地址时,可能会有大量未使用的IP地址。例如,类A网络可以容纳约 1677 万个主机,而许多实际需求远远小于此,导致大量的地址无法利用。
- 无法灵活划分:
- 类地址系统基于固定的网络和主机部分,无法灵活地适应不同规模的网络需求。例如,类C只能有254个设备,这对于一些需要更多主机的网络来说是不够的,而类B或类A又存在地址浪费问题。
- 不适合大规模的互联网:
- 随着互联网的发展,全球对IPv4地址的需求激增,类地址系统的限制显得尤为突出。由于IP地址空间有限,互联网运营商不得不采取其他技术(如 CIDR)来有效利用地址空间,避免大量浪费。
CIDR与子网掩码例子和计算
IP地址:192.168.1.0/24
- 前24位固定,即
192.168.1表示网络号,后8位为主机号 - 可容纳256个IP地址(从192.168.1.0到192.168.1.255)
- 可用主机范围为
192.168.1.1到192.168.1.254 192.168.1.0是网络地址,表示该网络本身,不能用于分配给网络中的设备192.168.1.255是广播地址,用于给子网中所有设备发送数据
IP地址:10.0.0.0/8
- 前8位固定,即
10代表网络号,主机号为后24位 - 可用主机范围
10.0.0.1到10.0.0.254
子网掩码与CIDR的相互转换
子网掩码转换为CIDR
- 数1的数量
255.255.255.0转换为/24255.255.255.128转换位/25
CIDR转换为子网掩码
/24转换为255.255.255.0/26转换位255.255.255.192
可以看到,网络号每增加一位,即子网掩码的前缀长度增加一位,每个子网的可容纳设备数会大大减少,这种做法具有以下几个重要的优点,特别是在IP地址管理和网络优化方面:
- 提高地址利用率
- 减少浪费:在传统的类地址系统中,A类,B类,C类等地址范围常常会导致地址浪费。例如,使用
A类地址(/8)为一个小型办公室分配了几百万个地址,而实际上只需要很少的IP地址,这种情况在IP地址资源紧张时尤为突出。通过子网划分,管理员可以根据实际需求分配适当大小的子网,避免大量IP地址浪费 - 更灵活的分配:通过CIDR,管理员可以将IP地址划分为不同规模的子网,灵活调整每个子网的大小,确保每个子网只包含必要的设备,从而更有效地利用地址空间
- 提高网络安全性
- 隔离不同的网络:将大型网络划分为多个小型子网(比如通过增加子网掩码的位数),可以有效地隔离不同的网络区域。每个子网中的设备仅能与该子网中的其他设备通信,减少了不必要的广播和潜在的安全风险。例如,将企业内部不同部门(如财务、研发、销售等)分别划分到不同的子网,这样即便某个部门的设备遭到攻击,其他部门也可以相对安全
- 安全策略和访问控制:子网划分后,可以更精细地为不同子网配置安全策略和访问控制,控制哪些子网可以互相访问,哪些子网对外部访问受限,从而提高网络的安全性
- 优化网络性能
- 减少广播域的大小:在没有子网划分的网络中,广播数据会在整个网络中传播,所有设备都会收到广播请求(例如ARP请求)。如果网络规模很大,广播流量会导致网络带宽的浪费,并且影响整体的性能。通过将网络划分为多个小子网,可以有效减少广播域的大小,从而减轻广播流量的影响,提升网络的整体性能
- 简化路由表:网络被划分成多个小子网后,路由器只需要维护每个子网的路由信息,而不是整个大网络的路由信息,这不仅减小的路由表的规模,还提高了路由效率,使得数据包的转发更加快速
- 提高网络的灵活性
- 简化故障排查:当网络出现问题时,通过子网划分,网络管理者可以快速定位故障,因为问题通常会局限在某个子网中。网络故障不再影响整个网络的运行,减少了排错的难度
- 更高效的IP地址分配:每个子网分配的IP地址数量由需求决定,这使得管理员可以根据设备数量动态调整子网大小,更加灵活。比如,在办公区域划分一个子网,而在工厂车间划分另一个子网,这样可以根据各个部门或区域的实际需求来分配IP地址,避免了大规模地址分配的浪费
- 便于网络扩展
- 便于网络拓展和规划:通过子网划分,可以将整个网络分成多个相对独立的区域,使得网络 扩展和规划 更加容易。当网络规模增加时,只需要在现有的子网结构基础上增加新的子网,避免了重新规划整个网络架构。
- 便于未来扩展:在设计网络时,管理员可以根据需要将每个子网留出一定的扩展空间。比如,如果某个部门或区域预计会增长,可以预留一定的IP地址范围,以便未来无缝扩展,而不会影响到现有网络。
- 支持VLAN和QoS(服务质量)
- 支持VLAN(虚拟局域网):子网划分是 VLAN的基础,可以通过子网划分将不同的部门、区域、功能等设备分配到不同的虚拟局域网中。VLAN提供了逻辑上的网络隔离,进而提高了网络的安全性和管理效率。
- 更好的服务质量控制(QoS):通过子网划分,可以为不同的子网配置不同的 优先级和带宽分配,更好地实现QoS。例如,办公区域的子网可以配置较高的优先级,而设备监控区域则可以配置较低的优先级,这样可以保证网络资源的合理分配。
- 满足IP地址规划需求
- 跨网络的通信:子网划分后,即使某个区域的设备数量不多,管理员也可以灵活选择不同的子网大小进行规划。这样,在整个企业网络中可以实现合理的 跨网络通信,既节省了IP地址,又保证了网络内部的通信质量。
- 为不同区域分配不同网络号:通过子网划分,管理员可以为不同的网络区域分配不同的IP网络号。例如,分配给办公室一个子网,分配给生产设备的工厂一个子网,分配给管理层的子网,所有这些子网可以共享一个大的IP地址范围,同时又能够保持合理的分配。
VLSM(Variable Length Subnet Mask,变长子网掩码)
VLSM是IP地址子网划分的一种技术,它允许根据网络的需要,灵活地使用不同长度的子网掩码。通过这种方法,可以为网络的不同部分分配适当大小的子网,从而更有效地利用IP地址空间
VLSM是基于CIDR的思想,它解决了传统类地址系统的局限性,在IP地址分配时不再使用固定的子网掩码长度,而是允许不同的子网使用不同的掩码长度
VLSM的工作原理
VLSM的基本思想是:
根据需要划分子网:将一个网络划分为多个子网,并根据每个子网的实际需求(如设备数量)选择适当的子网掩码
节省IP地址:通过为不同规模的子网分配大小不同的地址块,可以更高效地利用有限的IP地址空间,避免了子网地址的浪费
VLSM的优势
- 更高效的IP地址利用:VLSM允许网络管理员根据每个子网的需求分配IP地址,避免了不必要的浪费。比如,一个有10台设备的小网络不需要分配
255.255.255.0这样的较大子网掩码,而是可以使用255.255.255.240 - 灵活性:与传统的固定子网掩码不同,VLSM可以为网络的不同部分使用不同长度的子网掩码,提高更灵活的子网划分方式
- 适应不同网络规模:VLSM可以根据不同子网的需求灵活调整网络规模,在减少浪费的同时,避免了过多的IP地址分配给较小的网络
VLSM的计算步骤
假设有以下需求:
- 一个大网络
192.168.1.0/24,我们需要将其划分为多个子网,其中每个子网的主机数分别如下:- 子网1:50个
- 子网2:30
- 子网3:10
- 子网4:5
则对于子网1:可分配2 ^ 6 = 64,即后六位是设备号,子网掩码:255.255.255.192,CIDR:/26
对于子网2:可分配2 ^ 5 = 32,即后5位是设备号,子网掩码:255.255.255.224,CIDR:/27
其他同理
IPv6协议
IPv6是为了弥补IPv4地址耗尽问题而设计的,它使用128位地址,支持2的128次方(约340万亿个)地址,极大地扩展了可用的地址空间
IPv6地址结构
IPv6地址由8个16位的十六进制数构成,每个数字范围为0000到FFFF。IPv6地址通常表示为8个由冒号分隔的4位16进制数字
例如:
2001:0db8:0000:0042:0000:8a2e:0370:7334
可压缩写法规则
- 前导0可以省略:
0042→42 - 连续的0段可以用
::表示(只能出现一次)
最终简写为:
2001:db8::42:0:8a2e:370:7334
地址类型
| 类型 | 前缀或格式 | 描述 |
|---|---|---|
| 单播地址 | Global Unicast | 类似 IPv4 公网地址 |
| 链路本地地址 | fe80::/10 | 本地网络通信,不可路由 |
| 多播地址 | ff00::/8 | 一对多通信 |
| 任播地址 | 与单播类似 | 发给最近的接收者(路由最近) |
| 回环地址 | ::1 | 相当于 IPv4 的 127.0.0.1 |
IPv6的主要特点:
- 更大的地址空间:IPv6的地址空间大大超越了IPv4,使得每个设备都能拥有一个全球唯一的地址
- 简化的头部格式:IPv6的头部比IPv4更简洁,去除了许多不必要的字段,优化了路由器处理的效率
- 内建的安全性:IPv6通过IPsec协议提供端到端的加密和认证支持,增加了网络通信的安全性
- 自动配置:IPv6支持无状态地址自动配置(SLAAC),可以使用设备自动获取IP地址,而不依赖DHCP
IPv6包格式
与IPv4相比,IPv6的包头更简洁
| 字段名 | 长度 | 说明 |
|---|---|---|
| 版本(Version) | 4位 | 表示协议版本,IPv6的值为6。 |
| 流量类别(Traffic Class) | 8位 | 用于定义数据包的优先级。 |
| 流标签(Flow Label) | 20位 | 用于标识属于同一流的数据包。 |
| 有效载荷长度(Payload Length) | 16位 | 数据部分的长度。 |
| 下一个头部(Next Header) | 8位 | 表示上层协议(如TCP、UDP等)。 |
| 跳数限制(Hop Limit) | 8位 | 与TTL类似,限制数据包在网络中的跳数。 |
| 源地址(Source Address) | 128位 | 发送数据包的设备的IPv6地址。 |
| 目的地址(Destination Address) | 128位 | 目标设备的IPv6地址。 |
IPv4 vs IPv6
| 特性 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 位 | 128 位 |
| 地址表示 | 十进制(如 192.168.1.1) | 十六进制,冒号分隔(如 2001:0db8:85a3::8a2e:0370:7334) |
| 地址数量 | ~42 亿 | 2¹²⁸ ≈ 3.4×10³⁸ |
| 配置方式 | 需手动或通过 DHCP | 支持自动地址配置(SLAAC) |
| 广播支持 | 有广播 | 没有广播,改为多播(Multicast) |
| 分片与重组 | 源端或中间路由器都可分片 | 只允许发送端分片 |
| 安全 | 选配 IPsec | 强制支持 IPsec |
| NAT 支持 | 广泛依赖 | 不再需要 NAT(地址够用) |
IPv6的问题
- 部署成本高:需要升级硬件、操作系统、网络设备
- 防火墙/NAT改变了策略
- 应用兼容性问题:有些老应用不支持IPv6
- 安全性问题:虽然支持IPsec,但也带来更复杂的攻击面(NDP伪造等)
IPv6过渡方案
因为全球IPv6并未完全部署,现阶段主要使用过渡机制:
- 双栈(Dual Stack)
- 主机和路由器同时运行IPv4和IPv6协议,谁能同就用谁
- 目前最常见的过渡方式
- 隧道机制(Tunneling)
- 把IPv6封装在IPv4中传输,适合IPv4-only网络中传输IPv6
- NAT64/DNS64
- 让IPv6-only主机访问IPv4-only服务,靠翻译来完成通信
IPv6关键协议
| 协议名 | 功能描述 |
|---|---|
| ICMPv6 | 替代 ICMP,支持 NDP、Ping 等功能 |
| NDP | 邻居发现协议,替代 ARP、Router Discovery |
| DHCPv6 | IPv6 的动态地址配置协议 |
| SLAAC | 无状态地址自动配置 |
| IPSec | 安全协议,强制支持,加密 IPv6 流量 |
分片与重组(Fragmentation and Reassembly)
分片与重组是计算机网络中在数据传输过程中,尤其是在IP层,处理大数据包或网络层数据包的一个重要机制。它用于确保在不同网络技术中(例如不同的链路协议)之间传输时,数据包能够适应格子的最大传输单元(MUT, Maximum Transmission Unit)限制
分片
分片是指将一个过大的数据包(通常是 IP 数据包)切割成多个更小的片段(Fragment),每个片段都符合链路层的最大传输单元(MTU)要求。分片通常发生在 发送端的 网络层,当数据包的大小超过了某个网络段的 MTU 限制时。
分片原因
不同的网络技术支持不同大小的数据包(MTU)。例如,以太网的默认 MTU 是 1500 字节,而 PPPoE(Point-to-Point Protocol over Ethernet)则可能只有 1492 字节。如果数据包的大小超过了某一网络的 MTU,则需要分片。
当一个数据包无法通过一个链路传输时,必须将其拆分成多个小片段,通过链路逐个传送。
分片过程
当IP数据包需要进行分片时,以下几个字段会被处理:
- ID(Identification):分片数据包会使用相同的ID,这样接收端可以识别它们属于同一个原始数据包
- Flags(标志位):标志位中有一个
More Fragment(MF)字段,用于指示该数据包是否为最后一个片段 - Offset(片偏移量):每个片段会记录它在原始数据包中的位置,偏移量单位为8字节(即64位),用于接收端重组时判断各片段的位置
分片细节
- 数据包头部:分片后,原始IP数据包的头部仍然存在,每个片段会包含其原始头部的一部分,但每个片段的负载数据会有所不同
- 分片大小:每个片段的大小通常是固定的,除最后一个片段外,都会是MTU-20字节(IP头部大小)。最后一个片段可能会小于这个大小
重组
重组是指接收端根据收到的分片数据包,按照一定的顺序将它们拼接成原始的完整数据包。重组的过程发生在 接收端的网络层,它会将所有的数据片段重新组合成完整的 IP 数据包,然后将其传递给上层协议(如 TCP 或 UDP)
重组的条件
- ID(Identification):所有分片都包含相同的 ID,因此接收端可以通过这个 ID 来识别哪些片段属于同一个数据包。
- Flags(标志位):接收端通过标志位中的
More Fragment (MF)字段来判断数据包是否完整。如果接收到的片段中MF标志为 0,则说明这是最后一个片段。 - Offset(片偏移量):每个片段包含一个偏移量,用于指示该片段在原始数据包中的位置。接收端通过这个偏移量重新组合数据包。
重组的步骤
- 接收分片:接收端接收来自不同路径的数据片段,它们可能到达的顺序不一致
- 检查ID和Flags:接收端通过分片的 ID 和标志位判断这些分片是否属于同一个数据包。如果 ID 不同,说明它们不是同一个数据包,不能进行重组
- 排序片段:接收端根据每个片段的偏移量来排序所有片段,确保它们按正确顺序进行组合
- 重组数据包:接收端将所有片段的数据按照顺序拼接起来,形成原始的数据包
- 传递给上层:数据包重组完成后,接收端将完整的数据包传递给上层协议(如 TCP 或 UDP)
重组的局限性
- 分片丢失:如果在传输过程中有某个片段丢失,接收端无法完成重组,整个数据包的接收将失败,直到丢失的片段被重传
- 分片顺序问题:分片到达的顺序可能不一致,接收端需要根据偏移量重排片段,确保数据包的完整性
- 重组延迟:大量分片的重组需要时间,尤其是当片段较多时,重组的过程可能会增加延迟
IP分片的例子
假设有一个原始的IP数据包大小为3000字节,而网络的MTU为1500字节,分片过程如下:
- 第一个片段:
- 包含IP头部和前1480字节的数据
- 偏移量为0,MF标志位为1(表示后面还有分片)
- 该片段的大小为1500字节(包含头部)
- 第二个片段:
- 包含IP头部和接下来的1480字节数据
- 偏移量为1480 / 8 = 185(单位为8字节)
- MF标志位为1
- 片段大小1500字节
- 第三个片段:
- 包含IP头部和剩余的数据部分,最后的40字节数据
- 偏移量为2960 / 8 = 370(单位为8字节)
- MF标志位为0(表示这是最后一个片段)
- 该片段大小为520字节
分片与重组的优缺点
优点
- 适应不同的MTU:分片允许大数据包在不同MTU的网络上进行传输,避免了因MTU限制导致的数据丢失或传输失败
- 灵活性:分片和重组使得网络通信在不同类型的物理介质(如以太网、无限网络)之间变得更加灵活
缺点
- 效率低下:分片和重组需要额外的处理和带宽开销,尤其是在需要频繁分片和重组的情况下,可能会影响网络的效率
- 丢包问题:如果一个片段丢失,整个数据包就无法成功重组,导致整个数据包丢失,需要重传
- 复杂性:分片和重组增加了协议栈的复杂性,并且在高负载或复杂网络环境下,可能会引发更多的问题
分片重组的应用
- IP网络中:分片和重组是IPv4协议的核心功能之一。在现代网络中,虽然IPv6通过路径MTU发现(PMTUD)避免了分片,但IPv4网络依然依赖于分片来适应不同的链路层MTU
- VPN和隧道协议:在一些VPN或隧道协议中,分片和重组机制用来确保数据在不同的网络中安全、有效地传输
ICMP协议
ICMP(Internet Control Message Protocol)是互联网协议族中的一个核心协议,主要用于设备网络(如路由器、主机)之间交换控制消息和错误报告。IC辑以其简洁高效的设计,成为IP协议族的重要补充,它帮助网络设备进行故障诊断、路径控制、报告错误等
ICMP协议与IP协议紧密关联,通常作为IP协议的一部分来工作,提供了网络通信中的必要支持。常见的工具如ping和traceroute就是利用ICMP协议来诊断网络连接问题的
ICMP的基本特点
- 控制消息和错误报告:
- ICMP被设计用来报告网络中发生的错误和异常情况。它通过回馈ICMP消息来告知发起主机或路由器网络通信中的问题
- 无连接协议:
- ICMP不提供端到端的连接,它只是发送简单的控制消息,完成基本的网络诊断和错误报告
- 与IP协议共同工作:
- ICMP通过IP协议承载,且与IP协议紧密相关,它的消息通常嵌入在IP数据包中传输
- 用于网络诊断和管理:
- ICMP常用于检查主机和路由器之间的连通性,诊断网络问题,分析延迟和丢包率
- 简单性和高效性:
- ICMP消息通常很简短,不包含复杂的字段,因此其处理效率较高
ICMP的工作原理
- ICMP消息类型:
- ICMP消息有多种类型,最常见的类型包括回显请求/回显应答(ping)和目标不可达(Destination Unreachable)等
- ICMP封包格式:
- ICMP报文通常是嵌入在IP数据包中传输的,其结构较为简单。ICMP数据包的基本格式如下:
| 字段名 | 长度 | 说明 |
|---|---|---|
| 类型 | 1字节 | 消息类型标识,决定消息的种类 |
| 代码 | 1字节 | 与类型一起决定错误的具体类型 |
| 校验和 | 2字节 | 用于验证ICMP数据包的完整性 |
| 附加数据 | 可变 | 根据ICMP类型,附加相关信息 |
- 常见的ICMP消息类型:
回显请求和回显应答(Echo Request and Echo Reply):
- 这类ICMP消息用于测试网络的连通性。ping工具就是通过发送ICMP回显请求消息,接收回显应答消息来验证目标主机的可达性
- 回显请求:发起方向目标主机发送的请求消息
- 回显应答:目标主机收到回显请求后,向发起方返回的响应消息
- 格式:
- 类型(8)表示回显请求,类型(0)表示回显应答
- 代码字段通常为0
- 数据部分通常会包含一些时间戳、标识符等信息
目标不可达(Destination Unreachable):
- 该消息用于通知源主机数据包无法到达目标地址的情况。根据具体的错误原因,目标不可达消息有多个子类型,例如:
- 网络不可达:数据包无法找到目标网络
- 主机不可达:目标主机无法访问
- 端口不可达:目标主机的特定端口无法访问
- 格式:
- 类型(3)表示目标不可达
- 代码字段表示具体的错误类型,如网络不可达、主机不可达等
- 其附加数据部分通常会携带触发该错误的数据包头部,以便接收方能够定位问题
- 该消息用于通知源主机数据包无法到达目标地址的情况。根据具体的错误原因,目标不可达消息有多个子类型,例如:
时间超过(Time Exceeded): - 用于通知源主机其数据包在传输过程中超出了TTL。TTL字段用于限制数据包在网络中的生命周期,防止数据包在网络中无限循环 - 格式:
- 类型(11)表示时间超过
- 代码字段通常为0
- 数据部分携带导致超时的原始IP数据包信息
参数问题(Parameter Problem): - 当IP包头中的某些字段出现错误或缺失时,目标路由器会发送这种ICMP消息来报告问题 - 格式:
- 类型(12)表示参数问题
- 代码字段为0
- 数据部分通常会包含出现问题的IP数据包的相关信息
重定向(Redirect): - 当路由器发现某个数据包的转发路径不合适时,会发送这种消息要求发送方更新路由 - 格式:
- 类型(5)表示重定向
- 代码字段指定重定向的原因
- 数据部分包含用于改进路由选择的信息
ICMP协议的作用
- 网络诊断:
- ping工具使用ICMP回显请求和回显应答消息,来检测目标主机是否可达
- traceroute 使用ICMP的“时间超过”消息来确定数据包从源主机到目标主机经过的路由路径
- 错误报告:
- ICMP通过目标不可达、时间超过、参数问题等消息向源主机报告网络中的各种错误信息,帮助定位问题所在
- 网络管理:
- ICMP通过向路由器发送重定向消息,帮助源主机改进路由选择。网络管理员也可以使用ICMP来分析网络拓扑、性能等
ICMP的局限性和安全问题
- ICMP被用于DDos攻击:
- Ping of Death:攻击者发送恶意的ICMP回显请求包,导致目标主机的系统崩溃
- Smurf Attack:攻击者利用ICMP广播请求和伪造的源地址,通过网络广播请求发送给大量设备,造成目标服务器的DDos攻击
- ICMP不可用于复杂通信:
- ICMP协议是无连接的,适用于简单的网络控制消息和诊断,无法提供可靠的通信服务,且不支持数据的传输
- ICMP封包可能被防火墙阻止:
- 由于ICMP容易被用于攻击,很多防火墙和路由器会限制或过滤ICMP消息,尤其是在公共网络和企业网络中。防火墙可能会屏蔽ICMP回显请求,防止Ping扫描
ICMP的安全性增强
- ICMP的认证:
- 一些网络设备和系统支持对ICMP报文进行认证,以防止伪造的ICMP报文攻击。通常,ICMP报文的认证机制基于共享密钥或公钥加密技术
- ICMP限制:
- 为防止ICMP被滥用,管理员通常会在路由器或防火墙上限制ICMP的传输,尤其是公共区域和公网IP的ICMP消息
ping
ping是一种非常常见的网络工具,主要用于检测网络连接的可达性,并通过发送ICMP回显请求来检查另一台计算机或网络设备是否在线。它广泛用于故障排查和网络调试
工作原理
当你在中断输入ping<destination address>时,系统会执行一下步骤:
发送Echo Request:你的计算机向目标地址发送一个ICMP Echo Request包。通常,这个包会包含一些信息,如发包时间、包的大小、序列号等
目标主机响应Echo Reply:目标地址收到请求后,会回复一个ICMP Echo Reply包,内容通常与请求的包一样
计算时延:
ping计算从发送请求到收到回复所花费的时间,这个时间通常以毫秒为单位。这个过程会进行多次,以便获得更精确的延迟信息返回统计信息:通常,
ping会返回:
- 发送的包数
- 成功接收到的包数
- 丢包率
- 平均往返时延
ping输出的内容
在Linux或Windows上执行ping命令时,常见的输出信息通常如下所示:
Pinging google.com [8.8.8.8] with 32 bytes of data:
Reply from 8.8.8.8: bytes=32 time=10ms TTL=56
Reply from 8.8.8.8: bytes=32 time=9ms TTL=56
Reply from 8.8.8.8: bytes=32 time=11ms TTL=56
Reply from 8.8.8.8: bytes=32 time=12ms TTL=56
Ping statistics for 8.8.8.8:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 9ms, Maximum = 12ms, Average = 10ms
解释:
- Reply from:显示返回响应的IP地址
- bytes:数据包的大小(通常为32字节)
- time:往返时间(RTT,Round Trip Time),即从发送请求到收到响应所需的时间
- TTL:Time To Live,指示数据包在网络中存活的最大跃点数,防止数据包在网络中永远循环
ping的用途
- 网络连通性检查:最常见的用途之一:确保目标主机或设备在网络中是可达的
- 延迟检查:可以检测目标主机的网络延迟,通常用于诊断性能问题
- 丢包检测:如果在多次请求中有部分丢包,这就意味着存在网络问题,可能是路由器或交换机出现了故障,或者网络带宽不足
- 防火墙设置检查:如果目标主机不响应ping请求,可能是目标主机的防火墙设置了阻止ICMP请求的规则
ping的常用参数
在执行ping时,除了基本的目标地址参数外,还可以使用一些常见的选项来控制ping的行为:
-t(Windows):持续ping目标,直到手动停止-c <count>(Linux):指定ping的次数-l <size>(Windows):指定发送的包的大小-i <TTL>(Linux):指定数据包的TTL
ping的常见问题
- 丢包:丢包可能由网络拥塞、设备故障或错误的路由配置引起。丢包导致应用程序或服务的性能下降
- 延迟过高:高延迟通常指示网络中存在瓶颈。可能是由于网络路径长、路由不优化、或中间网络设备的性能问题
- 防火墙问题:某些网络设备或防火墙可能会阻止ICMP流量,因此无法响应ping请求。很多服务器会出于安全考虑关闭ICMP响应
ping的局限性
- 不能证明服务可用:虽然ping可以验证设备是否在线,但它不能证明目标服务正常允许。例如,ping通过的服务器可能没有启动Web服务
- 防火墙与过滤器:一些防火墙或安全设备专门过滤ICMP流量,从而导致ping请求失败,但这不一定意味着目标主机不可达
traceroute
traceroute是另一个非常有用的网络工具,它和ping类似,但它提供了更详细的信息,主要用于追踪数据包从源主机到目标主机的路径,并显示沿途经过的每个路由器(或称为“跃点”)
traceroute的工作原理
traceroute的核心工作原理基于TTL值得逐跳递增机制。TTL是一个限制数据包在网络中传输得最大跳数,防止数据包在环路中无限循环。traceroute通过发送多个带有不同TTL的数据包,逐步增加TTL的值,并在每个跃点上请求ICMP超时消息来获得路径信息
步骤:
初始TTL = 1:
traceroute发送第一个数据包,TTL设置为1.当数据包到达第一个路由器时,TTL被减1,变成0,路由器无法转发该数据包,于是返回一个ICMP Time Exceeded消息,告知源主机数据包超时TTL递增:
traceroute会发送第二个数据包,将TTL设置为2,这时数据包会经过第一个路由器并到达第二个路由器。在第二个路由器,TTL再次减1,变成0,导致第二个路由器返回一个ICMP Time Exceeded消息重复过程:这个过程不断进行,TTL从1递增到最大值,直到目标主机收到数据包并返回一个ICMP Echo Reply消息,表示目标主机可达
traceroute命令的输出
在Linux上使用traceroute命令时,Windows上是tracert,输出的第一行代表一个跃点(路由器),通常看起来像这样:
traceroute to google.com (8.8.8.8), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 1.098 ms 0.967 ms 0.872 ms
2 10.0.0.1 (10.0.0.1) 3.145 ms 2.976 ms 3.321 ms
3 72.14.235.45 (72.14.235.45) 9.710 ms 9.587 ms 9.470 ms
4 108.170.242.129 (108.170.242.129) 13.128 ms 13.010 ms 13.091 ms
5 72.14.233.34 (72.14.233.34) 15.998 ms 15.823 ms 15.931 ms
6 8.8.8.8 (8.8.8.8) 17.912 ms 17.852 ms 17.980 ms
解释输出:
- 跳数:每一行的开头是跃点的编号
- IP地址:跃点的IP地址
- 延迟:每个跃点的延迟时间,通常以毫秒为单位。在输出中,会显示三个延迟值,代表三次发送数据包的时间。这个数字有助于检测网络拥堵或路由问题
traceroute的常用选项
traceroute命令也提供了很多选项,帮助我们定制追踪过程
-m <max_hops>:设置最大跳数。默认情况下,traceroute会设置为30跳-w <wait_time>:设置等待每个响应的超时时间(默认1秒)-q <num_queries>:设置每个跳点发送的数据包数量。默认是三个数据包-p <port>:指定发送的端口(默认为33434),通常用于防火墙绕过-I:使用ICMP数据包而不是默认的UDP数据包,适用于防火墙配置限制UDP的场景
traceroute的用途
- 网络路径诊断:
traceroute可以帮助我们查看从源主机到目标主机的具体路径,特别是在网络出现问题时,能够帮助定位故障发生的路由器或设备网络 - 分析延迟:通过查看每个跃点的延迟,我们可以分析网络的瓶颈位置。如果某个跃点的延迟突然增高,可能表明该设备出现了性能问题或网络拥堵
- 检测丢包和路由环路:如果在某些跃点上丢包,或某个跃点的延迟异常高,可能说明网络中某个设备由问题。如果路径出现环路,
traceroute会表现为某个跃点IP地址不断重复
traceroute的局限性
- 防火墙拦截:许多防火墙或路由器会拦截
traceroute的探测包,导致其无法获取精确的路径信息。这是因为traceroute默认发送的时UDP数据包(或者ICMP),很多设备会限制这些包 - 跨越多个路由器:
traceroute显示的路径信息是从源主机到目标主机的路径中所有跃点的信息,但这些跃点并不一定反映真实的网络拓扑,尤其是在使用多个路由器的复杂网络中
ARP协议
ARP协议(Address Resolution Protocol)用于将IP地址映射到MAC地址,这是一个桥接网络层和链路层的协议。在局域网中,数据链路层使用MAC地址进行通信,而网络层则使用IP地址。ARP协议通过广播请求来查询某个IP地址对应的MAC地址,设备响应并进行地址解析
简单来说,ARP允许设备在本地网络中通过IP地址找到目标设备的MAC地址,进而进行数据帧的发送
ARP主要应用于局域网(LAN),在IPv4网络中尤其重要。在现代网络中,几乎所有设备都会以来ARP来通信
ARP基本原理
当一个设备需要向另一个设备发送数据时,它会使用目标设备的 IP 地址,但是数据链路层(例如以太网)需要的是 MAC 地址。因此,如果源设备不知道目标设备的 MAC 地址,它就会使用 ARP 协议来查询目标设备的 MAC 地址。
具体流程如下:
- 发送 ARP 请求:当设备 A(源设备)需要与设备 B(目标设备)通信时,它会查看 ARP 缓存,看看是否已经存在目标设备的 IP 地址与 MAC 地址的映射。如果没有,它就会发送一个广播 ARP 请求包:
- 请求包内容:询问“谁拥有 IP 地址 x.x.x.x?请告诉我你的 MAC 地址”。
- ARP 响应:目标设备 B 收到请求后,会检查自己是否对应请求中的 IP 地址。如果是,它会发送一个 ARP 响应包,告诉设备 A 它的 MAC 地址。
- 响应包内容:发送者设备的 IP 地址和对应的 MAC 地址。
- 更新 ARP 缓存:设备 A 收到响应后,会将目标设备的 IP 地址和 MAC 地址的映射信息保存在自己的 ARP 缓存中。这样,以后设备 A 就可以直接使用这个 MAC 地址与设备 B 通信。
ARP数据包结构
ARP请求和响应都是以特定格式的ARP数据包进行交换的。每个ARP数据包包含以下字段:
| 字段名称 | 长度 | 描述 |
|---|---|---|
| 硬件类型 (HTYPE) | 2 字节 | 表示硬件类型,Ethernet 的硬件类型为 1。 |
| 协议类型 (PTYPE) | 2 字节 | 表示协议类型,IPv4 的协议类型为 0x0800。 |
| 硬件地址长度 (HLEN) | 1 字节 | 硬件地址(即 MAC 地址)的长度,Ethernet 为 6 字节。 |
| 协议地址长度 (PLEN) | 1 字节 | 协议地址(即 IP 地址)的长度,IPv4 为 4 字节。 |
| 操作 (OP) | 2 字节 | 请求或响应类型,1 表示请求,2 表示响应。 |
| 发送方硬件地址 (SHA) | 6 字节 | 发送方的 MAC 地址。 |
| 发送方协议地址 (SPA) | 4 字节 | 发送方的 IP 地址。 |
| 目标硬件地址 (THA) | 6 字节 | 目标方的 MAC 地址(在请求中为空,响应中为目标设备的 MAC 地址)。 |
| 目标协议地址 (TPA) | 4 字节 | 目标方的 IP 地址。 |
ARP请求与响应
ARP请求示例: 假设设备A需要查询设备B的MAC地址,A的IP地址为
192.168.1.1, B的IP地址为192.168.1.2,则A会向网络中广播一个ARP请求:请求: 设拥有IP地址192.168.1.2?请告诉我你的MAC地址ARP响应示例: 设备B收到请求后,如果它的IP地址为
192.168.1.2,则会返回:响应: 192.168.1.2的MAC地址是00:1A:2B:3C:4D:5E
ARP缓存
ARP 请求和响应会被存储在设备的 ARP 缓存中。ARP 缓存是一个映射表,用来缓存 IP 地址和 MAC 地址的对应关系,以便设备不需要每次都广播 ARP 请求。
Linux和Windows中通过arp -a查看ARP缓存
ARP协议的工作场景
局域网内的通信:例如,当你向局域网内的某个设备发送数据时,设备必须知道目标设备的 MAC 地址。此时,ARP 负责解析 IP 地址和 MAC 地址的映射关系。
网关通信:如果设备需要与不同子网的设备通信,它会将数据发送到网关(路由器),网关的 IP 地址与 MAC 地址也需要通过 ARP 解析。
ARP欺骗(ARP Spoofing)
ARP 协议没有验证数据的机制,这就给了攻击者可乘之机,ARP 欺骗 是一种常见的攻击方式。在 ARP 欺骗中,攻击者伪造 ARP 响应,欺骗网络中的设备,使其认为攻击者的 MAC 地址是目标设备的 MAC 地址。
这种攻击的后果可能包括:
中间人攻击(MITM):攻击者可以拦截并修改通信内容。
网络嗅探:攻击者获取敏感信息(如密码、账号等)。
为了防止 ARP 欺骗,一些网络安全技术可以使用静态 ARP 表或基于协议的认证机制。
ARP与IPv6
在IPv6中,ARP被邻居发现协议(Neighbor Discovery Protocol, NDP)取代。NDP使用ICMPv6消息来哦代替ARP请求和响应。NDP与ARP有相似的功能,但它更加安全且功能强大
ARP与路由器
路由器也会使用 ARP 来确定其网关设备的 MAC 地址。例如,路由器通常有多个网络接口,每个接口都有一个 IP 地址。当它需要通过某个接口发送数据时,必须先通过 ARP 确定目标接口的 MAC 地址。
RARP协议
RARP(Reverse Address Resolution Protocol,反向地址解析协议)是一个用于将MAC地址映射到IP地址的协议。它是ARP协议的反向操作,主要用于通过已知的物理地址查找IP地址
工作原理
RARP的工作原理和ARP类似,但是它们的目标相反
通常,RARP协议用于那些没有硬盘或其他存储设备的计算机或设备,尤其是在启动时(如网络启动的情况)。这些设备只知道自己的MAC地址,不能直接获取IP地址,RARP就是解决这一问题的协议
RARP请求 当一台设备(比如一台无硬盘的工作站)启动时,它通过广播 RARP 请求,请求网络中某台服务器为它提供对应的 IP 地址。RARP 请求包包含了设备的 MAC 地址,这个地址是设备的物理硬件地址。
RARP响应 在接收到 RARP 请求后,网络中的 RARP 服务器(通常是一个专门的服务器或路由器)会查询其映射表,查找该 MAC 地址对应的 IP 地址。如果找到对应的 IP 地址,RARP 服务器会通过 RARP 响应 将该 IP 地址返回给请求的设备。
网络启动 一旦设备收到 RARP 响应,它就可以使用这个 IP 地址继续进行网络上的通信,完成启动过程。这对于那些没有存储设备,无法预先设置 IP 地址的设备(例如一些嵌入式系统、旧式的终端设备)尤为重要。
RARP消息格式
| 字段 | 长度 | 描述 |
|---|---|---|
| 硬件类型(HTYPE) | 2 字节 | 描述网络设备的硬件类型,通常为 1(Ethernet)。 |
| 协议类型(PTYPE) | 2 字节 | 描述协议类型,通常为 0x0800(IPv4)。 |
| 硬件地址长度(HLEN) | 1 字节 | 硬件地址长度,Ethernet 为 6 字节。 |
| 协议地址长度(PLEN) | 1 字节 | 协议地址长度,IPv4 为 4 字节。 |
| 操作(OPER) | 2 字节 | 请求类型(1 表示请求,2 表示响应)。 |
| 发送者硬件地址 | 6 字节 | 发送者的 MAC 地址(设备的物理地址)。 |
| 发送者协议地址 | 4 字节 | 发送者的 IP 地址(在 RARP 响应中为空)。 |
| 目标硬件地址 | 6 字节 | 目标设备的 MAC 地址。 |
| 目标协议地址 | 4 字节 | 目标设备的 IP 地址(在 RARP 请求中为空)。 |
RARP应用场景
- 无硬盘设备:某些设备(如工作站、网络打印机等)没有硬盘或其他持久存储,无法预存 IP 地址。它们只能在网络启动时通过 RARP 获取自己的 IP 地址。
- 嵌入式设备:一些嵌入式设备(如路由器、传感器等)可能会在启动时使用 RARP 协议获取 IP 地址。
- 网络启动(PXE Boot):在没有本地存储的计算机上,使用 RARP 获取 IP 地址后,可以通过网络启动操作系统(例如 PXE 启动)。
RARP的局限性
只有一个 RARP 服务器 RARP 协议依赖于专门的 RARP 服务器,这个服务器需要为每台设备维护一个 MAC 地址与 IP 地址的映射表。RARP 的使用要求网络中有专门的服务器来管理这些映射,限制了它的扩展性和灵活性。
无法跨子网 RARP 协议只适用于同一子网内的设备。由于 RARP 是基于 MAC 地址进行请求和响应的,而 MAC 地址是局域网内的唯一标识,因此,RARP 无法在不同子网之间工作。
没有 IP 地址的动态分配机制 RARP 协议要求在网络中为每个设备预配置 MAC 地址与 IP 地址的映射表。这使得 RARP 不如现代的 DHCP(动态主机配置协议)灵活。DHCP 可以动态地为设备分配 IP 地址,而不需要预先配置映射表。
RARP的替代协议:DHCP
由于 RARP 的局限性,DHCP(动态主机配置协议) 成为了更为广泛和高效的替代协议。DHCP 不仅可以提供 IP 地址,还可以动态地分配子网掩码、网关地址、DNS 服务器等信息。
与 RARP 不同,DHCP 允许设备从网络中的 DHCP 服务器获取配置,而无需依赖单个专门的服务器来维护 MAC 地址和 IP 地址的静态映射表。DHCP 还可以跨子网工作,提供更多的配置选项,极大提高了灵活性和管理效率。
DHCP协议
DHCP(Dynamic Host COnfiguration Protocol), 动态主机配置协议,它的核心职责是:自动给网络中的设备分配IP地址、子网掩码、默认网关以及DNS服务器等配置信息
工作流程
- DHCP Discover:客户端广播寻找DHCP服务器
- DHCP Offer:服务器回应一个可用的IP地址和配置信息
- DHCP Request:客户端请求使用服务器提供的IP地址
- DHCP ACK:服务器确认客户端可以使用该地址
协议细节
- 使用UDP协议:客户端发Discover消息使用UDP 68端口,服务器响应用UDP 67端口
- 租约机制:IP地址不是永久分配的,而是“租用”,过期了要续约或释放,避免地址浪费
- 支持自动/手动/静态分配:
- 自动分配:随机给空闲地址
- 手动分配:管理员预设映射,特定设备固定IP
- 静态分配:绑定MAC地址,保证设备永远用同一个IP
DHCP提供的其他信息
除了IP地址,DHCP还能下发:子网掩码、默认网关、DNS服务器地址、域名、NTP服务器、代理服务器等
这让设备连上网络后立即能正常工作,零配置上线
DHCP的意义
- 简化管理:设备上网自动拿地址,减少人工配置错误
- 灵活分配:适应设备频繁上线下线、移动办公等环境
- 节约资源:地址复用防止地址浪费和冲突
- 支持大规模网络:校园网、企业网、ISP都靠它运转
IPSec协议
IPSec协议提供了对IP数据包的加密、认证和完整性保护,是网络层的安全协议。IPSec能够保护IP层的数据流,常用于虚拟专用网络(VPN)中,保障数据的隐私和安全
概述
IPSec对IP数据包提供加密和认证服务,确保数据在传输过程中不被篡改、窃取或伪造
它是基于IP协议之上工作的,能够与国中应用协议兼容,无论是HTTP、FTP还是其他应用
IPSec是一个非常灵活的协议,它支持多种加密和认证算法,可以根据实际需求进行配置
IPSec的基本目标
IPSec的主要目标是提供以下几种功能:
- 数据保密性(Confidentiality):确保数据内容在传输过程中不被未经授权的第三方查看。
- 数据完整性(Integrity):确保数据在传输过程中没有被篡改。
- 身份验证(Authentication):确保通信双方的身份是可信的。
- 重放攻击防护(Anti-Replay Protection):防止攻击者通过重发已捕获的数据包来干扰通信。
IPSec的工作原理
IPSec 通过两种模式工作:传输模式(Transport Mode) 和 隧道模式(Tunnel Mode)
传输模式(Transport Mode)
在传输模式下,IPSec 仅加密数据部分(即 IP 数据包的负载部分),而不会对整个数据包进行加密。IP 头部仍然保持原样,只有负载(数据部分)被加密和认证。
- 优点:传输模式对性能影响较小,因为只加密数据部分。
- 缺点:IP 头部信息(如源 IP 和目的 IP 地址)不被加密,可能暴露一些敏感信息。
这种模式通常用于 端到端通信,例如两个设备之间直接的安全通信。
隧道模式(Tunnel Mode)
在隧道模式下,IPSec 会加密整个数据包,包括 IP 头和数据部分。它在原始 IP 数据包外包裹一个新的 IP 头,从而隐藏原始数据包的所有信息。
- 优点:隧道模式提供更强的隐私保护,整个 IP 数据包(包括源地址和目的地址)都被加密。
- 缺点:由于加密了整个数据包,性能开销较大。
这种模式通常用于 网关到网关 或 远程访问 VPN,即在两个不同网络之间建立安全隧道。
IPSec的核心协议
IPSec 由两个核心协议组成,分别为 AH(Authentication Header)和 ESP(Encapsulating Security Payload)
AH(Authentication Header)
AH 主要用于数据包的认证,它提供数据的完整性、身份验证和防止重放攻击功能。AH 在数据包头和负载中添加了认证信息,以确保数据未被篡改并且源 IP 地址可信。
- 功能:提供数据完整性和身份验证,但不加密数据。
- 缺点:由于 AH 不加密数据,它并不能提供数据的保密性,因此通常不单独使用。
ESP(Encapsulating Sercurity Payload)
ESP 提供数据的加密、数据完整性和身份验证。与 AH 不同,ESP 能够保护数据的保密性,它会加密数据部分并为数据提供完整性验证。
- 功能:提供数据的加密、身份验证、完整性保护以及防止重放攻击。
- 优点:它能有效保护数据内容的保密性,因此 ESP 通常用于大多数 VPN 方案中。
IPSec的认证与加密算法
IPSec支持多种认证和加密算法,以下是常见的几种:
认证算法
- HMAC(Hash-Based Message Authentication Code):用于生成消息认证码,确保数据完整性和身份验证。
- SHA-1、SHA-2:哈希算法,用于生成数据的哈希值进行认证。
加密算法
- AES(Advanced Encryption Standard):目前最常用的对称加密算法,提供高安全性。
- 3DES(Triple DES):一种较为老旧的加密算法,三重数据加密标准。
- Blowfish:也是一种对称加密算法,但由于安全性问题,已经逐渐被替代。
密钥交换协议
- Diffie-Hellman(DH):用于安全地交换加密密钥,通常在建立 IPSec 连接时使用。
- RSA:常用于数字签名和加密过程中的公钥加密。
IPSec VPN
IPSec 是创建 VPN(虚拟专用网络)的常见协议之一。它通过加密和认证提供安全的远程访问或站点到站点通信。
站点到站点 VPN(Site-to-Site VPN) 在这种模式下,两个不同的网络通过网关设备建立安全隧道。每个网关使用 IPSec 协议来加密通过公共网络(如互联网)传输的流量。这种 VPN 通常用于连接分支机构、远程办事处或数据中心。
远程访问 VPN(Remote Access VPN) 远程访问 VPN 允许远程用户通过公共网络(如互联网)安全地连接到公司或组织的内部网络。用户可以使用 IPSec VPN 客户端软件与组织的网关建立安全连接。
IPSec VPN的工作流程
- IKE(Internet Key Exchange)协议:在建立 IPSec 连接之前,设备需要通过 IKE 协议交换加密密钥。IKE 协议通过协商身份验证方法、加密算法和密钥来建立安全的通信隧道。
- IPSec 隧道建立:一旦密钥交换完成,设备就可以使用 IPSec 来加密和认证数据。通信双方之间的数据流量会通过 IPSec 隧道进行加密、解密、认证,确保数据安全。
IPSec的优缺点
优点:
- 强大的安全性:通过加密、身份验证、数据完整性保护等机制,IPSec 提供了高等级的安全保障。
- 灵活性:IPSec 支持多种加密和认证算法,可以根据需求进行配置。
- 透明性:IPSec 在网络层工作,因此对应用程序和操作系统透明,几乎不需要应用层的修改。
- 广泛支持:IPSec 是 VPN 技术中广泛支持的协议,几乎所有现代操作系统和网络设备都支持 IPSec。
缺点:
- 性能开销:加密和解密操作会消耗计算资源,可能对性能产生影响,尤其是在低性能设备上。
- 配置复杂:虽然 IPSec 提供了强大的安全性,但其配置过程可能较为复杂,尤其是在密钥管理和 VPN 连接配置方面。
- 难以穿越防火墙和 NAT:由于 IPSec 会修改数据包的头部,它在一些网络环境(如防火墙或 NAT)后面可能遇到问题,需要使用 NAT-T(Network Address Translation Traversal)技术进行支持。
IGMP协议
IGMP协议(Internet Group Management Protocol)用于IPv4网络中管理组播组成员。
组播是一种“一对多”或“多对多”的通信方式,允许一个数据源同时向多个接收者发送数据。
IGMP协议帮助路由器确定哪些主机属于同一组播组,从而实现高效的组播通信
组播(Multicast)与广播(Broadcast)的区别
- 广播:将数据发送给同一网络上的所有主机,无论它们是否需要这些数据
- 组播:将数据发送给一组特定的主机,只有那些明确加入某个组播组的主机才会接收到数据
组播通过组播地址(例如IPv4中的224.0.0.0到239.255.255.255)来标识数据接收者,这些地址是预先定义好的,并且分配给特定的组播组
IGMP的工作原理
IGMP主要用于以下操作:
- 主机加入组播组:当主机希望接收某个组播地址的数据时,主机通过IGMP向路由器发送加入组播组的请求
- 主机离开组播组:当主机不再需要接收某个组播组的数据,主机通过IGMP向路由器发送离开组播组的请求
- 路由器查询主机的组播成员状态:路由器定期向网络上的所有主机发送IGMP查询请求,询问它们是否需要继续接收特定的组播流量
IGMP版本
IGMP v1
- 发布:1989年
- 功能:IGMP v1 允许主机加入组播组并通知路由器,但没有离开组播组的机制。因此,如果主机不再需要某个组播流量,路由器仍然会继续转发数据。
- 查询方式:路由器定期发送 IGMP 查询请求,主机响应是否需要该组的数据。
IGMP v2
- 发布:1997年
- 改进:IGMP v2 增加了主机主动离开组播组的功能。主机可以发送离开组播组的请求,这样路由器可以立即停止将组播流量转发给该主机。
- 离开机制:IGMP v2 允许主机通过发送
IGMP Leave消息来告知路由器它不再需要该组的数据。这加速了路由器停止转发数据的过程。
IGMP v3
- 发布:2002年
- 改进:IGMP v3 增加了对 源特定组播(SSM,Source-Specific Multicast)的支持。SSM 允许主机指定它只对来自某个特定源的组播流量感兴趣,从而减少了不必要的组播流量。
- 源特定组播:在 IGMP v3 中,主机不仅可以加入特定的组播组,还可以指定它希望接收来自哪些源的流量。
- 增强的查询:IGMP v3 支持多播源和目标的更精细化控制,使得路由器可以根据具体需求转发数据。
IGMP消息格式
| 字段名称 | 长度 | 描述 |
|---|---|---|
| 类型(Type) | 1 字节 | 消息的类型,如查询(0x11)、加入(0x16)、离开(0x17)等。 |
| 最大响应时间(Max Resp Time) | 1 字节 | 表示接收方在发送响应消息之前的最大等待时间(只对查询消息有效)。 |
| 检验和(Checksum) | 2 字节 | 用于消息完整性校验。 |
| 组播地址(Group Address) | 4 字节 | 指定所请求加入或离开的组播地址。 |
| 源地址(Source Address) | 4 字节(仅在 IGMPv3 中) | 仅在 IGMP v3 中使用,指定特定的源 IP 地址。 |
IGMP在网络中的作用
- 动态管理组播成员:IGMP 使得路由器能够知道哪些主机需要接收哪些组播数据,从而避免不必要的组播流量。
- 减少带宽浪费:通过 IGMP,只有加入特定组播组的主机才能接收到相关的数据,减少了带宽浪费。
- 支持高效的组播通信:通过 IGMP,网络能够实现高效的组播通信,减少了广播流量,提高了网络性能。
IGMP的应用场景
- IPTV(互联网电视):IPTV 服务依赖组播来向多个用户发送视频流,IGMP 用于管理用户的订阅,确保视频流只发送给需要的用户。
- 视频会议:在大规模视频会议中,使用组播技术来发送实时的视频流,IGMP 用于管理哪些主机(用户)接收视频流。
- 在线游戏:某些在线游戏可能使用组播技术来广播游戏状态,IGMP 可以用来确保游戏的更新只传送给需要的玩家。
IGMP的优缺点
优点:
- 节省带宽:IGMP 通过允许只有需要接收特定组播流量的主机加入组播组,从而避免了不必要的数据流量。
- 提高网络效率:通过减少广播流量,IGMP 可以提高网络的整体性能。
- 灵活的组播管理:IGMP 提供了灵活的组播加入和离开机制,使得组播通信更加高效。
缺点:
- 安全性问题:IGMP 协议本身没有内建的安全机制,可能会遭遇如 IGMP 欺骗 等攻击。攻击者可能伪造 IGMP 消息,加入或离开组播组,从而影响网络流量或进行拒绝服务(DoS)攻击。
- 资源消耗:IGMP 查询和响应会增加网络中的通信量,尤其是在网络中有大量主机和组播流量的情况下。
NAT协议
NAT(Network Address Translation,网络地址转换)是一种在 IP 层(第 3 层)对 IP 地址进行修改的技术,主要用于解决 IPv4 地址不足的问题,允许多个设备共享一个公网 IP 地址与外部网络通信。NAT 能够在网络地址之间建立映射关系,将内部私有地址与外部公网地址进行转换,从而节省公网 IP 地址的使用,并增加网络的安全性。
NAT的基本原理
NAT 的基本工作原理是,当一台设备(例如一台计算机或路由器)向外部网络发送数据时,它会将自己内部的私有 IP 地址转换为路由器的公网 IP 地址,并将该请求的端口号一起记录在 NAT 表中。返回的数据会根据该表反向映射回原始设备。
具体过程如下:
- 发起请求:设备发送数据包到外部网络,请求数据时,它的源 IP 地址是一个私有 IP 地址(例如
192.168.1.100) - 地址转换:路由器接收到请求后,将私有 IP 地址转换为自己的公网 IP 地址(例如 203.0.113.1),并将源端口号映射到一个新的端口上
- 响应回传:外部网络的服务器响应该请求时,数据包的目标 IP 地址为公网 IP 地址(203.0.113.1),目标端口为刚才映射的端口号。路由器通过 NAT 表找到原始设备的私有 IP 地址和端口,将数据包正确地转发给设备
NAT的种类
- 静态NAT(Static NAT) 静态 NAT 会将内部网络中的一个私有 IP 地址与一个公网 IP 地址进行一对一的永久映射。这种映射是静态的,即内部的某个私有 IP 地址总是映射到相同的公网 IP 地址。
- 优点:容易配置,适用于需要通过公网访问内部设备的场景,例如 Web 服务器。
- 缺点:每个私有 IP 地址需要一个公网 IP 地址,这在公网 IP 地址有限时不太实用。
- 动态NAT(Dynamic NAT) 动态 NAT 会在私有网络和公网之间进行动态映射。内部的私有 IP 地址会与一组公网 IP 地址进行映射,这些公网 IP 地址是从一个地址池中动态分配的。
- 优点:不需要为每个私有 IP 地址分配一个公网 IP 地址。
- 缺点:如果公网 IP 地址池用尽,可能无法为新的设备提供公网 IP 地址。
- 端口地址转换(PAT, Port Address Translation) PAT 是 NAT 最常见的一种实现方式,通常也称为 NAT Overloading。在 PAT 中,多个内部设备的私有 IP 地址共享一个公网 IP 地址,但使用不同的端口号来区分不同的连接。也就是说,路由器通过记录每个连接的源 IP 地址和源端口号来进行 NAT 操作。
- 优点:多个内部设备可以共享一个公网 IP 地址,大大节省了公网 IP 地址。
- 缺点:所有设备共享一个公网 IP 地址,可能会出现端口冲突或连接数限制。
NAT的工作过程
NAT 的工作过程可以分为以下几个步骤:
- 数据发送:
- 内部设备(如计算机)向外部网络(如互联网)发送请求。请求的数据包的源 IP 地址是私有 IP 地址。
- 地址转换:
- 路由器接收到数据包后,将源 IP 地址转换为公网 IP 地址,并为每个连接分配一个唯一的端口号(如果是 PAT)。路由器会记录这些映射信息到 NAT 表中。
- 数据返回:
- 外部网络的响应数据包会返回给公网 IP 地址和端口号。路由器根据 NAT 表找到原始的私有 IP 地址和端口号,然后将数据包转发到正确的内部设备。
- 映射解除:
- 当连接关闭或超时后,路由器会删除 NAT 表中的映射信息。
NAT表
NAT 表是路由器用于存储转换信息的表格。它包含以下几个关键字段:
| 字段 | 描述 |
|---|---|
| 源 IP 地址 | 内部设备的私有 IP 地址。 |
| 源端口号 | 内部设备发起请求时的源端口号(在 PAT 中使用)。 |
| 目标 IP 地址 | 外部网络的目标 IP 地址。 |
| 目标端口号 | 外部网络服务器的目标端口号。 |
| 映射的公网 IP 地址 | 将内部私有 IP 地址转换为的公网 IP 地址。 |
| 映射的公网端口号 | 在 PAT 中,外部连接的公网端口号。 |
NAT的优缺点
优点:
- 节省公网 IP 地址:NAT 允许多个设备共享一个公网 IP 地址,这大大缓解了 IPv4 地址不足的问题。
- 提高安全性:NAT 可以隐藏内部网络的结构,使得外部网络无法直接访问内部设备。外部数据包必须通过路由器进行处理,从而增加了安全性。
- 简化管理:内部网络设备使用私有 IP 地址,无需每台设备都有一个公网 IP 地址,减少了网络管理复杂度。
缺点:
- 影响点对点连接:由于 NAT 将多个内部设备映射到一个公网 IP 地址,外部设备通常无法直接与内部设备建立点对点连接。需要借助端口映射或特殊协议(如 UPnP)来解决。
- 协议兼容性问题:一些应用协议(如 FTP、SIP、IPsec)可能与 NAT 不兼容,需要进行特殊配置或 NAT 穿透。
- 性能瓶颈:NAT 路由器需要处理大量的连接和转换,可能会成为性能瓶颈,尤其在高流量网络中。
- NAT 表的管理:当网络中有大量的设备时,NAT 表可能会变得非常庞大,管理和维护也变得更加困难。
NAT穿透
有时,由于 NAT 的存在,设备之间的点对点连接变得困难。这种问题常见于对等网络(如 P2P 文件共享、VoIP 通话、在线游戏等)。NAT 穿透(NAT Traversal)技术被用来解决这个问题。常见的 NAT 穿透技术包括:
- UPnP(Universal Plug and Play):允许设备自动配置 NAT 设备(如路由器),以便使外部设备能够访问内部设备。
- STUN(Session Traversal Utilities for NAT):一种协议,帮助设备在 NAT 网络下确定自己在公网中的可达性。
- TURN(Traversal Using Relays around NAT):在 NAT 网络中通过中继服务器转发数据,以绕过 NAT。
NAT的应用场景
- 家庭和小型办公室网络:家庭或小型办公室通常使用一个公网 IP 地址,通过 NAT 将多个设备连接到互联网。大多数家庭路由器都支持 NAT 功能。
- 企业网络:大型企业可能会使用 NAT 来管理大量设备访问互联网,同时保护内部网络的安全。
- IPv6 过渡:在从 IPv4 向 IPv6 过渡过程中,NAT 可能被用作临时解决方案来连接 IPv4 网络和 IPv6 网络。
网络层工作流程
数据包在网络层的处理流程
以浏览器发送HTTP请求为例,数据包在网络层的传输过程如下:
[应用层:HTTP报文]
↓
[传输层:TCP添加端口号]
↓
[网络层:IP添加源地址和目的地址]
↓
[数据链路层:封装为帧,添加MAC地址]
↓
[物理层:比特流传输]
在这个过程中,网络层的主要任务是为数据包添加源IP地址和目标IP地址,然后将其交给下层的数据链路层进行封装。到达目标主机时,数据包会按照相反的顺序进行拆解和解码
子网划分与子网
它们涉及到如何将一个大范围的IP地址分割成多个更小的、更易管理的子网
什么是子网
子网 是一个小型的网络,它是通过将一个更大的网络(通常是一个类C、类B或类A网络)划分成多个部分来创建的。这种划分是为了提高网络管理的灵活性和效率。每个子网都拥有自己的网络地址范围、子网掩码和广播地址,每个子网是一个独立的广播域,限制了广播流量的范围
子网通过将“主机部分”分割成更多的部分来创建更多的网络,使得网络内的设备分布更加合理,减少冲突,提高性能,子网划分可以提高网络的安全性,通过隔离不同的网络区域,减少潜在的安全风险
子网划分
子网划分 是指将一个网络划分为多个子网络的过程。通过子网划分,网络管理员可以更高效地管理 IP 地址、减少广播风暴、提高网络的安全性、并使得网络的拓扑更加清晰。
子网划分的核心在于合理利用子网掩码,将 IP 地址空间划分成更小的子网。我们通过修改子网掩码来决定“网络部分”和“主机部分”的边界,从而将原本一个大的网络拆分成多个小的子网。
网关(GateWay)
网关(Gateway) 是一个网络设备或系统,它充当不同网络之间的桥梁,允许数据在不同协议、不同地址范围的网络之间转发。简而言之,网关是不同网络间的“中介”,它帮助网络之间进行通信,尤其是当网络采用不同的通信协议时。
网关通常位于不同子网或不同网络的边缘,负责接收从一个网络发出的数据包,并将其转发到目标网络或外部网络。它不仅处理路由,还可能涉及协议转换、数据封装、加解密等复杂任务。
网关的工作原理
网关的基本工作原理是接收来自一个网络的数据包,然后基于目标地址,将其转发到另一个网络。如果两个网络之间使用不同的协议,网关还会进行协议转换。
例如:
局域网与广域网之间的通信:当局域网中的设备需要与广域网(例如互联网)中的设备通信时,网关(通常是路由器)会接收本地设备发出的数据包,并将其转发到互联网中。
不同协议之间的转换:假设你有两个使用不同协议的网络(例如一个使用 IPv4,另一个使用 IPv6),网关还需要在这两个网络之间进行协议转换。
网关的类型
默认网关(Default Gateway)
在计算机网络中,默认网关 是一个设备(通常是路由器),它作为设备访问外部网络(如互联网)时的默认路径。如果设备的目标 IP 地址不在本地子网范围内,设备会将数据包发送到默认网关,由网关转发到其他网络。
- 作用:默认网关是设备与外部网络之间的通信桥梁。当一个设备需要访问位于不同子网或外部网络的目标时,它会将数据包发送给默认网关。
例如,假设你在本地网络中,IP 地址为 192.168.1.100,而默认网关的地址是 192.168.1.1。当你访问一个互联网网站时,数据包首先会通过网关 192.168.1.1 传送。
网络网关(Network Gateway)
网络网关通常是一个路由器,连接着两个不同的网络,它负责在不同的网络之间转发数据。网络网关可以是:
- 局域网和广域网(如互联网)之间的网关。
- 不同协议的网络之间的网关(如 IPv4 和 IPv6 网络)。
- 设备之间的通信网关(如 Modem 网关)。
应用网关(Application Gateway)
应用网关通常用在处理应用层协议(如 HTTP、FTP 等)的场景中。它可以对进入和离开应用的请求进行过滤、修改、加密或解密等操作,通常用于提高网络安全性。
例如,一个 HTTP 网关可以帮助组织通过监控和控制 Web 流量,进行 Web 访问控制和数据过滤,阻止不安全的内容或防止未经授权的访问。
代理网关(Proxy Gateway)
代理网关充当两个网络之间的中介,接受来自内部网络的请求并代表它们向外部网络发起请求,反之亦然。它通常用于:
访问控制:限制内部用户访问外部资源,或者限制特定资源的访问。
安全性增强:代理网关可以隐藏内部网络的结构,增加安全性。
网关的功能
路由功能:网关能够根据目标地址,将数据包从源网络转发到目标网络。这意味着网关负责选择最佳路径以确保数据能够顺利到达目的地。
协议转换:当两个网络使用不同协议时,网关需要进行协议转换。比如,IPv4 网络和 IPv6 网络之间的通信,需要网关进行协议转换。
数据封装和解封装:一些网关可能需要对数据进行封装和解封装处理,例如,VPN 网关会将传输的私密数据封装成安全的加密形式,再进行解封装。
流量控制:网关可以对进出网络的数据流量进行控制,限制流量、进行负载均衡等。
安全功能:网关也充当防火墙角色,可以过滤恶意数据包,防止未授权的访问,保护网络安全。
网关与路由器的区别
虽然网关和路由器在很多情况下可以互换使用,但它们实际上有一些区别:
- 路由器:通常工作在网络层,主要负责不同子网之间的数据转发。它根据目标IP地址来选择最佳路径进行路由
- 网关:网关则是一个更为广泛的概念,它不仅仅涉及路由,通常还包括协议转换、数据封装、加密等功能。网关可以在更高的层次(如应用层)工作
网关的使用场景
家庭网络:家庭中通常有一个 默认网关,它连接到互联网。这个网关通常是由 ISP 提供的路由器,家庭中的所有设备都通过这个网关访问外部网络。
企业网络:企业的局域网通常会通过多个网关连接到外部网络或互联网。不同的网关会负责不同类型的流量,如数据流、Web 流量、VoIP 等。
VPN 网络:在虚拟专用网络(VPN)中,网关通过加密通道连接不同的远程网络,为公司员工提供安全的远程访问。
默认网关的配置
在Windows中,可以使用ipconfig命令查看并配置默认网关,在Linux中使用ip route或netstat -r来查看路由表
三层交换机(Layer 3 Switch)
三层交换机(Layer 3 Switch)是一种结合了传统二层交换机与路由器功能的网络设备,具备高速的数据帧交换能力,同时支持 IP 层的路由功能。它能够在不同子网或 VLAN 之间进行高效的数据转发,是现代企业局域网(LAN)中核心网络设备的重要组成部分。
为什么需要三层交换机
在传统网络架构中,不同 VLAN 或子网之间的通信需要通过路由器完成。但这种方式存在性能瓶颈,因为路由器通常依赖软件处理路由功能,转发效率较低,无法满足高带宽环境下的实时通信需求。
三层交换机通过将路由功能集成到交换芯片中,以硬件方式实现高速路由转发,不仅保留了二层交换机的高性能特点,还能承担一定的三层转发任务,在效率与功能之间取得平衡。
工作原理
三层交换机融合了二层与三层的转发机制,其核心原理如下:
- 二层交换功能(基于MAC)
- 与传统二层交换机一致,根据帧头中的目标MAC地址查找转发表
- 实现同一子网内设备的快速通信
- 三层转发功能(基于IP)
- 当检测到数据包的源和目标地址位于不同子网时,三层交换机会参考其路由表,基于IP地址进行转发
- 这一过程在硬件中完成(使用ASIC芯片),性能远高于传统软件路由器
- 支持SVI(Switched Visual Interface)
- 每个VLAN可以配置一个虚拟三层接口(SVI),三层交换机通过这些接口实现不同的VLAN之间的通信
- 比传统“交换机 + 路由器”架构更高效、简洁
适用场景
- 不同VLAN之间需要频繁通信
- 局域网内设备多、网段复杂
安全与扩展功能
现代三层交换机通常支持以下功能,提升网络的安全性和可管理性
- ACL(访问控制列表):基于IP、端口等实现精细化访问控制
- DHCP Snooping、ARP Inspection:防止伪造主机信息
- QoS(服务质量):保障关键业务流量优先级
- VRRP/HSRP:实现核心层设备的高可用