目录
IP协议的基本概念
IP协议格式
分片与组装
分片
组装
总结及建议
路由
网段划分
1. 传统分类
2. 现代无类划分(CIDR)
3. 特殊地址
私网IP地址和公网IP地址
路由器网络架构
IP协议的基本概念
IP(Internet Protocol,互联网协议)是互联网的核心协议之一,负责在网络层实现数据包的寻址和路由,为上层协议(如TCP、UDP)提供无连接的、不可靠的数据传输服务。
网络层与传输层的分工
-
传输层(如TCP):
-
解决客户端到服务端的可靠性(如重传、流量控制、拥塞控制)。
-
传输层:确保数据正确、可靠地交给目标主机的应用进程。
-
通过端口号标识应用进程(如HTTP=80,DNS=53)。
-
-
网络层(如IP):
-
解决主机到主机的数据传输,不关心数据内容或应用逻辑。
-
网络层:确保数据正确、高效地交给目标主机的网络接口。
-
通过IP地址标识主机,通过路由算法选择路径。
-
IP协议格式
IPv4头部结构示意图如下:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 版本(4) | 头部长度(4) | 服务类型(8) | 总长度(16) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 标识(16) |标志(3)| 片偏移(13) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 生存时间(8) | 协议(8) | 头部校验和(16) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 源IP地址(32) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 目标IP地址(32) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 选项(可选,最多40字节) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IPv4数据包格式
IPv4数据包由头部(Header)和载荷(Payload)组成,头部固定20字节(可扩展至60字节),具体字段如下:
字段名 | 长度(位) | 功能描述 |
---|---|---|
版本(Version) | 4 | IP协议版本号,IPv4为4 。 |
头部长度(IHL) | 4 | 头部长度(单位:4字节),最小值为5 (对应20字节)。 |
服务类型(ToS) | 8 | 标识数据包优先级和QoS需求(如低延迟、高吞吐量)。 |
总长度(Total Length) | 16 | 整个数据包长度(头部+载荷),最大为65535 字节。 |
标识(Identification) | 16 | 唯一标识数据包,用于分片重组。 |
标志(Flags) | 3 | 控制分片行为: - 第1位:保留(必须为0) - 第2位:禁止分片(DF) - 第3位:更多分片(MF) |
片偏移(Fragment Offset) | 13 | 分片在原始数据包中的偏移量(单位:8字节)。 |
生存时间(TTL) | 8 | 数据包允许经过的最大路由器跳数,每经过一跳减1,防止无限循环。 |
协议(Protocol) | 8 | 标识上层协议类型(如TCP=6,UDP=17,ICMP=1)。 |
头部校验和(Checksum) | 16 | 仅校验头部完整性(不包括载荷)。 |
源地址(Source Address) | 32 | 发送方的IPv4地址(32位)。 |
目的地址(Destination Address) | 32 | 接收方的IPv4地址(32位)。 |
选项(Options) | 可变 | 可选字段(如时间戳、路由记录),最大40字节。 |
IP协议如何将报头与有效载荷进行分离?
IPv4通过头部长度字段(IHL)明确标识报头的结束位置:
步骤如下:
-
读取版本和IHL字段:
-
版本(Version):前4位,确认是IPv4(值为
4
)。 -
IHL(Internet Header Length):接下来的4位,表示IPv4头部的长度(单位:4字节)。
-
最小值为
5
(对应20字节基础头部)。 -
最大值为
15
(对应60字节,包含最多40字节的选项字段)。
-
-
-
计算头部长度:头部长度 = IHL值 × 4字节
例如:IHL=5 → 头部长度=20字节;IHL=6 → 头部长度=24字节。
-
分离报头与载荷:
-
报头:从数据包起始位置到
头部长度
的字节。 -
载荷:从
头部长度
之后的所有字节,即上层协议(如TCP/UDP)的数据。
-
示例如下:
假设收到一个IPv4数据包,其IHL值为5
:
-
头部长度为
5×4=20
字节。 -
前20字节为IPv4报头,剩余部分为有效载荷。
IP协议如何决定将有效载荷交付给上层的哪一个协议?
IPv4通过协议字段(8位)来直接标识载荷数据的协议类型。
常见取值:
-
1 → ICMP(网络控制报文协议)
-
6 → TCP(传输控制协议)
-
17 → UDP(用户数据报协议)
-
88 → EIGRP(思科私有路由协议)
步骤如下:
-
接收数据包:IP层解析IPv4头部。
-
读取协议字段:例如,协议字段值为
6
。 -
匹配上层协议:根据协议值查找注册的上层协议处理程序(如TCP模块)。
-
交付载荷:将有效载荷(如TCP报文段)交给对应的协议模块处理。
分片与组装
IP能够将数据跨网络从一台主机送到另一台主机,而数据在进行跨网络传送时,需要经过一个个的路由器进行路由转发,最终才能到达目标主机。
因此IP进行数据跨网络传送的前提是,需要先将数据从一个节点传送到和自己相连的下一个节点,这个问题实际就是由IP之下的数据链路层解决的,其中数据链路层最典型的代表协议就是MAC帧。
而两个节点直接相连也就意味着这两个节点是在同一个局域网当中的,因此要讨论两个相邻节点的数据传送时,实际讨论的就是局域网通信的问题。
为什么需要分片与组装?
一、最大传输单元 MTU
MAC帧作为数据链路层的协议,它会将IP传下来的数据封装成数据帧,然后发送到网络当中。
但MAC帧携带的有效载荷的最大长度是有限制的,也就是说IP交给MAC帧的报文不能超过某个值,这个值就叫做最大传输单元(Maximum Transmission Unit,MTU),这个值的大小一般是1500字节。
由于MAC帧无法发送大于1500字节的数据,因此IP层向下交付的数据的长度不能超过1500字节,这里所说的数据包括IP的报头和IP的有效载荷。
当数据包大小超过某段链路的MTU时,无法直接传输,必须分片。
分片
如果IP层要传送的数据超过了1500字节,那么就需要先在IP层对该数据进行分片,然后再将分片后的数据交给下层MAC帧进行发送。
假设IP层要发送2000字节的数据,由于该数据超过了MAC帧规定的MTU,因此IP需要先将该数据进行分片,然后再将一个个的分片交给MAC帧进行发送。
IP报头如果不携带选项字段,那么其大小就是20字节,假设IP层添加的IP报头的长度就是20字节,并按下列方式将数据分片后形成了两个分片报文:
分片报文 | 总字节数 | IP报头字节数 | 数据字节数 |
---|---|---|---|
1 | 1500 | 20 | 1480 |
2 | 540 | 20 | 520 |
分片报文到达对方的IP层后需要被重新组装起来,因此IP层在对数据进行分片时需要记录分片的信息,而IP报头当中的16位标识、3位标志和13位片偏移实际就是与数据分片相关的字段。
标识(Identification) | 16 | 唯一标识数据包,用于分片重组。 |
标志(Flags) | 3 | 控制分片行为: - 第1位:保留(必须为0) - 第2位:禁止分片(DF) - 第3位:更多分片(MF) |
片偏移(Fragment Offset) | 13 | 分片在原始数据包中的偏移量(单位:8字节)。 |
16位标识(Identification)
-
作用:唯一标识同一原始数据报的所有分片。发送方为每个数据报生成唯一标识,所有分片共享该标识。
-
示例:若主机发送的数据报被分片,所有分片的16位标识相同,接收方据此识别属于同一数据报的分片。
3位标志(Flags)
-
保留位(第一位):当前未使用。
-
禁止分片(DF,第二位):
-
若置1,数据报不允许分片。若长度超过路径MTU,路由器丢弃报文并返回ICMP错误(类型3,代码4)。
-
应用场景:用于路径MTU发现,探测网络路径的最小MTU。
-
-
更多分片(MF,第三位):
-
若置1,表示后续还有分片;若置0,表示当前是最后一个分片。
-
示例:数据报分为3个分片,前两个分片MF=1,第三个分片MF=0。
-
13位片偏移(Fragment Offset)
-
作用:指示分片数据在原始数据中的起始位置,单位为8字节。实际偏移值为该字段值乘以8。
-
约束:
-
非最后分片:数据长度必须是8的倍数,确保片偏移连续。
-
最后分片:数据长度无需为8的倍数,片偏移正确即可。
-
-
示例:
-
原始数据长度3980字节,MTU=1500字节(数据部分≤1480字节)。
-
分片1:数据1480字节,片偏移=0,MF=1。
-
分片2:数据1480字节,片偏移=1480/8=185,MF=1。
-
分片3:数据1020字节(非8倍数),片偏移=2960/8=370,MF=0。
-
因此上述两个分片报文对应的16位标识都是一样的,假设四个分片报文的16位标识都是12345,则这四个报文对应的16位标识、3位标志中的MF和13位片偏移分别如下:
字段 | 原始包 | 分片1 | 分片2 |
---|---|---|---|
总长度 | 2020 | 1500 | 540 |
标识 | 12345 | 12345 | 12345 |
MF标志 | - | 1 | 0 |
片偏移 | - | 0 | 185 |
组装
如果发送数据时在IP层进行了分片,那么当这些分片数据到达对端主机的IP层后就需要先进行组装,然后再将组装好的数据交付给上层传输层。
步骤如下:
- 分片接收与标识匹配
- 分片排序
- 完整性检查
- 分片重组
- 异常处理
- 重组完成
1. 分片接收与标识匹配
-
接收方维护一个分片重组缓冲区,用于临时存储属于同一原始数据报的分片。
-
当收到分片时,提取其16位标识、源IP地址和目标IP地址,通过这三个字段唯一标识同一数据报的所有分片。
关键点:
-
不同数据报(不同标识或地址)的分片严格隔离,避免混淆。
-
若收到重复分片(如网络重传),接收方仅保留第一个到达的分片,丢弃后续重复分片。
2. 分片排序
-
依据:13位片偏移(Fragment Offset)字段。
-
片偏移以8字节为单位,实际数据偏移位置 = 片偏移值 × 8。
-
例如:片偏移为
185
,则数据起始位置为185 × 8 = 1480
字节。
-
-
排序规则:
-
所有分片按片偏移值从小到大排列。
-
若分片乱序到达(如先收到偏移较大的分片),接收方需缓存分片直至所有前置分片到达。
-
3. 完整性检查
接收方通过以下字段判断是否已收到全部分片:
-
更多分片标志(MF位):
-
最后一个分片的MF位必须为
0
。 -
若某个分片的MF位为
1
,则其后必须有更高偏移值的分片。
-
-
数据总长度计算:
-
最后一个分片的偏移值 + 其数据长度 = 原始数据报的总长度。
-
例如:
-
分片1:偏移=0,数据长度=1480字节 → 覆盖0-1479字节。
-
分片2:偏移=185(1480字节),数据长度=1480字节 → 覆盖1480-2959字节。
-
分片3:偏移=370(2960字节),数据长度=1020字节 → 覆盖2960-3979字节(总长度3980字节)。
-
-
4. 分片重组
-
按排序后的分片顺序,将各分片的数据部分(去除IP头部)按偏移值拼接。
-
最后一个分片的数据长度无需是8字节的倍数,直接按实际长度拼接。
原始数据:3980字节
分片1:偏移0,长度1480 → 数据[0-1479]
分片2:偏移185(1480),长度1480 → 数据[1480-2959]
分片3:偏移370(2960),长度1020 → 数据[2960-3979]
重组后数据:分片1 + 分片2 + 分片3 = 3980字节
5. 异常处理
-
分片丢失:
-
接收方为每个分片集设置重组超时计时器(通常30秒)。
-
若超时仍未收到全部分片,丢弃所有已缓存分片,并向上层协议(如TCP)报告错误。
-
-
分片重叠:
-
若分片的偏移范围有重叠(如网络错误或攻击),接收方可能丢弃整个数据报。
-
-
分片重复:
-
丢弃重复分片,仅保留第一个到达的副本。
-
6. 重组完成
-
重组后的完整数据报被提交给上层协议(如TCP、UDP)处理。
-
重组缓冲区释放相关资源。
总结及建议
- 为什么不建议进行分片?
- 如何尽可能避免分片?
为什么不建议进行分片?
虽然传输层并不关心IP层的分片问题,但分片对传输层也是有影响的。
以下是关于IP分片对传输层影响的总结与分析:
1. 传输层视角的不可见性
-
黑盒机制:传输层(如TCP/UDP)并不感知IP层的分片行为。传输层将数据视为完整单元发送,IP层在必要时对数据报进行分片,但对传输层透明。
-
后果:
-
若分片丢失,传输层无法得知具体丢失的分片,只能通过整体超时重传恢复数据。
-
传输层无法优化分片逻辑(如选择性重传分片),导致资源浪费。
-
2. 分片对可靠性的显著影响
-
全有或全无的交付:
-
未分片数据:单个报文成功到达即视为传输成功。
-
分片数据:所有分片必须全部到达并重组成功,否则整个数据报失效。
-
-
丢包风险放大:
-
假设单个报文丢包率为 p,分片为 n 个后,整体丢包概率为 1−(1−p)n。
-
示例:若 p=0.01%(万分之一),分片为100个时,整体丢包概率升至 1−(0.9999)100≈0.995%(近1%),风险增长约100倍。
-
分片越多,整体丢包概率指数级上升,显著降低传输效率。
-
3. 重传机制的效率问题
-
无差别重传:
-
即使仅丢失一个分片,传输层仍需重传整个原始数据报(而非仅丢失的分片)。
-
导致带宽浪费和延迟增加,尤其对大文件传输影响显著。
-
-
超时等待:
-
接收端需等待所有分片到达(受重组超时计时器限制),可能因单个分片延迟触发不必要的重传。
-
如何尽可能避免分片?
一、数据分片的根本原因
IP层分片的本质矛盾:传输层单次提交的数据量(TCP报文段) > 链路层MTU限制
-
根本逻辑:
若传输层(如TCP)一次向下交付的数据量过大,超过当前链路MTU限制,IP层必须分片才能适配底层链路承载能力。 -
分层视角:
-
传输层:关注端到端可靠性(如TCP的可靠传输),不感知网络路径的MTU差异。
-
网络层(IP):负责跨网络传输,需适配不同链路MTU,必要时分片。
-
链路层:物理链路对帧大小的硬性限制(如以太网MTU=1500字节)。
-
二、TCP的MSS机制
因此TCP作为传输控制协议,它需要控制一次向下交付数据不能超过某一阈值,这个阈值就叫做MSS(Maximum Segment Size,最大报文段长度)。
1. MSS的计算逻辑
- MTU与MSS的关系:
MSS = MTU - IP头(20字节) - TCP头(20字节)
例如:
若MTU=1500字节 → MSS=1500-20-20=1460字节
-
MTU的默认值:
-
以太网标准MTU=1500字节,因此MSS通常默认为1460字节。
-
实际MTU可能因网络类型不同而变化(如PPPoE MTU=1492字节)。
-
2. MSS协商过程
-
三次握手阶段:
通信双方在TCP SYN/SYN-ACK报文中通过MSS选项通告自身支持的MSS值。-
示例:
-
主机A发送SYN报文,携带MSS=1460(基于本地MTU=1500)。
-
主机B回复SYN-ACK报文,携带MSS=1440(若其本地MTU=1480)。
-
最终MSS取较小值(min(1460,1440)=1440)。
-
-
-
意义:确保双方发送的TCP报文段不超过对方网络的MTU限制,从源头避免分片。
三、MSS的局限性
1. 路径MTU动态变化
-
问题场景:即使通信双方协商了MSS,若传输路径中存在更小MTU的链路(如某路由器MTU=1400),IP层仍可能被迫分片。
-
示例:
-
主机A MSS=1460(MTU=1500) → 主机B MSS=1460(MTU=1500)。
-
路径中某链路MTU=1400 → IP层需将TCP报文段分片(1400-20=1380字节承载数据)。
-
2. 解决方案:路径MTU发现(PMTUD)
机制:
-
TCP发送方在IP头设置DF(Don’t Fragment)标志位,禁止分片。
-
若中间路由器发现报文超过MTU且DF=1,丢弃报文并返回ICMP Fragmentation Needed错误(携带下一跳MTU)。
-
发送方根据ICMP反馈动态调整MSS(新MSS=报告MTU-40)。
意义:动态探测路径最小MTU,实时调整报文大小,彻底避免分片。
3. PMTUD的潜在问题
-
ICMP阻塞:
部分防火墙丢弃ICMP报文,导致PMTUD失效。此时TCP可能持续发送大报文,引发丢包重传。 -
保守回退策略:
若PMTUD失败,TCP默认回退到MSS=536字节(IP头20 + TCP头20 + 数据536 = 576字节,兼容最小MTU 576)。
四、总结
1. 避免分片的核心原则
-
传输层控制:TCP通过MSS协商限制数据量,从源头避免分片。
-
网络层辅助:启用PMTUD动态适配路径MTU,处理中间链路MTU变化。
2. 典型场景对比
场景 | MSS=1460 | 启用PMTUD |
---|---|---|
本地MTU=1500 | 无分片 | 无分片 |
路径MTU=1400 | 触发分片 | 动态调整MSS=1360 |
路径MTU未知(ICMP阻塞) | 分片或丢包 | 回退MSS=536(保守策略) |
3. 总结
-
MSS的价值:通过协议层协商控制数据量,显著降低分片概率。
-
PMTUD的意义:解决路径MTU动态性问题,完善分片规避机制。
-
遗留问题:
-
UDP等无连接协议仍需应用层手动分片(如DNS使用EDNS0扩展)。
-
特殊网络(如IPSec隧道)需额外考虑封装头部长度。
-
路由
路由是网络层(OSI第三层)的核心功能,负责将数据包从源主机通过最佳路径传输到目标主机。其核心在于路径决策与数据转发,依赖路由表、路由协议及路由器协作实现。
路由的本质
-
定义:确定数据包从源到目标的传输路径,并在多跳网络中逐跳转发。
-
关键角色:
-
路由器:执行路由决策与转发的网络设备。
-
路由表:存储路径信息的数据库,决定数据包下一跳方向。
-
路由表结构
路由表条目通常包含以下字段:
每个路由器内部会维护一个路由表,我们可以通过route
命令查看云服务器上对应的路由表。
- Destination代表的是目的网络地址。
- Gateway代表的是下一跳地址。
- Genmask代表的是子网掩码。
- Flags中,U标志表示此条目有效(可以禁用某些条目)G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。
- Iface代表的是发送接口。
目标网络 | 子网掩码 | 下一跳地址 | 出口接口 | 度量值(Cost) |
---|---|---|---|---|
192.168.1.0 | 255.255.255.0 | 直接交付 | eth0 | - |
10.0.0.0 | 255.0.0.0 | 192.168.1.254 | eth1 | 10 |
0.0.0.0 | 0.0.0.0 | 203.0.113.1 | eth2 | 100 |
当IP数据包到达路由器时,路由器就会用该数据的目的IP地址,依次与路由表中的子网掩码 Genmask进行“按位与”操作,然后将结果与子网掩码对应的目的网络地址Destination进行比对,如果匹配则说明该数据包下一跳就应该跳去这个子网,此时就会将该数据包通过对应的发送接口Iface发出。
如果将该数据包的目的IP地址与子网掩码进行“按位与”后,没有找到匹配的目的网络地址,此时路由器就会将这个数据包发送到默认路由,也就是路由表中目标网络地址中的default。可以看到默认路由对应的Flags是UG,实际就是将该数据转给了另一台路由器,让该数据在另一台路由器继续进行路由。
数据包不断经过路由器路由后,最终就能到达目标主机所在的目标网络,此时就不再根据该数据包目的IP地址当中的网络号进行路由了,而是根据目的IP地址当中的主机号进行路由,最终根据该数据包对应的主机号就能将数据发送给目标主机了。
路由类型
1. 静态路由
-
定义:管理员手动配置的路由条目,无需协议动态更新。
-
特点:
-
优点:简单、无协议开销,适用于小型稳定网络。
-
缺点:无法自动适应拓扑变化,维护成本高。
-
2. 动态路由
-
定义:通过路由协议自动学习并更新路由表。
-
常见协议:
协议类型 协议示例 适用场景 特点 距离矢量 RIP、EIGRP 小型网络 定期广播完整路由表 链路状态 OSPF、IS-IS 中大型企业网、运营商网络 基于拓扑数据库计算最短路径 路径矢量 BGP 互联网自治系统(AS)间路由 策略驱动,支持路由属性过滤
-
OSPF示例:
-
使用Dijkstra算法计算最短路径树(SPF)。
-
划分区域(Area)减少计算复杂度。
-
网段划分
IPv4地址为32位二进制数,通常以点分十进制表示(如 192.168.1.1
),由网络部分和主机部分组成,具体结构如下:
IP地址由网络号和主机号两部分构成:
-
网络号(Network ID):标识设备所属的网络或子网,确保不同网段具有唯一标识。
-
主机号(Host ID):标识同一网络内的具体设备,保证同一网段内主机的唯一性。
可以在IP地址的后面加一个 /,并在 / 后面加上一个数字,这就表示从头数到第几位为止属于网络标识。
对于网络标识来讲,同一网段内主机的网络标识是相同的,不同网段内主机的网络标识是不同的。而对于主机标识来讲,同一网段内主机的主机标识是不同的,不同网段内主机的主机标识是可以相同的。
- 不同的子网其实就是把网络号相同的主机放到一起。
- 如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其他主机重复。
DHCP协议
实际手动管理IP地址是一个非常麻烦的事情,当子网中新增主机时需要给其分配一个IP地址,当子网当中有主机断开网络时又需要将其IP地址进行回收,便于分配给后续新增的主机使用。
因此对于IP地址的分配和回收一般不会手动进行,而是采用DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)技术。
DHCP通常被应用在大型的局域网环境中,其主要作用就是集中地址管理、分配IP地址,使网络环境中的主机动态获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
DHCP是一个基于UDP的应用层协议,一般的路由器都带有DHCP功能,因此路由器也可以看作一个DHCP服务器。
当我们连接WiFi时需要输入密码,本质就是因为路由器需要验证你的账号和密码,如果验证通过,那么路由器就会给你动态分配了一个IP地址,然后你就可以基于这个IP地址进行各种上网动作了。
先找目标网络,再找目标主机
当IP要将数据跨网络从一台主机发送到另一台主机时,其实不是直接将数据发送到了目标主机,而是先将数据发送到目标主机所在的网络,然后再将数据发送到目标主机。
因此数据在路由时的第一目的并不是找到目标主机,而是找到目标网络所在的网络,然后再在目标网络当中找到目标主机。
当 IP 数据跨网络传输时,并非直接发往目标主机,而是先抵达目标主机所在网络,再在该网络内发送至目标主机。这是因为若一开始就以找目标主机为目的,查找时一次只能排除一个主机,效率低下;而先找目标网络,能一次排除大量非目标网段的主机,大幅提高检索效率。因此,为提升数据路由效率,需对网络进行网段划分。
1. 传统分类
(已过时,CIDR取代)
类别 | 范围 | 网络部分 | 主机部分 | 用途 |
---|---|---|---|---|
A类 | 1.0.0.0 - 126.255.255.255 | 第1字节(8位) | 后3字节(24位) | 大型网络 |
B类 | 128.0.0.0 - 191.255.255.255 | 前2字节(16位) | 后2字节(16位) | 中型网络 |
C类 | 192.0.0.0 - 223.255.255.255 | 前3字节(24位) | 后1字节(8位) | 小型网络 |
D类 | 224.0.0.0 - 239.255.255.255 | - | - | 组播(Multicast) |
E类 | 240.0.0.0 - 255.255.255.255 | - | - | 保留(实验用途) |
当要判断一个IP地址是属于哪一类时,只需要遍历IP地址的前五个比特位,第几个比特位最先出现0值,那么这个IP地址对应就属于A、B、C、D、E类地址。
2. 现代无类划分(CIDR)
一、传统分类地址的致命缺陷
1. B类地址浪费问题
-
B类地址结构:16位网络号 + 16位主机号 → 65,536主机/网络
-
实际需求:但实际网络架设中,一般不会存在一个局域网当中有这么多主机的情况,也就意味着大量的IP地址实际都被浪费掉了。多数组织仅需几百至几千个IP地址,导致99%的地址闲置。
-
数据对比:
-
1990年互联网约3,000个B类网络 → 浪费约 1.97亿个IP地址(3,000 × 65,500)。
-
相当于当时全球IPv4地址池(约42亿)的 4.7% 被无效占用。
-
2. A/C类地址的失衡
-
A类网络过少:仅126个(网络号7位),但每个支持1677万台主机 → 超大规模组织专用。
-
C类网络过多:约209万(网络号21位),但每个仅254主机 → 中小企业难以获得连续地址。
子网划分
在原有的五类网络的基础上继续进行子网划分,这也就意味着需要借用主机号当中的若干位来充当网络号,此时为了区分IP地址中的网络号和主机号,于是引入了子网掩码(subnet mask)的概念。
子网划分实际是在将原A类,B类,C类网络中的主机号的部分作为子网号,将原来的ABC类网络细化的过程,将原来的一个网络分为多个网络,但是在对外表现上,还是表现为原来的一个网络。
IP地址组成为:网络号+子网号+主机号
在数据进行通信的过程中:
- 首先根据目的IP地址找到目标主机所在的网络(路由器)
- 再根据目的IP地址的子网号找到目标主机所在的子网,最后找到目标主机。
每一个子网都有自己的子网掩码,子网掩码实际就是一个32位的正整数,通常用一串“0”来结尾。
将IP地址与当前网络的子网掩码进行“按位与”操作,就能够得到当前所在网络的网络号。
按位与操作:IP地址 & 子网掩码 = 网络号
IP地址:192.168.128.10 → 二进制:11000000.10101000.10000000.00001010
子网掩码:255.255.255.0 → 二进制:11111111.11111111.11111111.00000000
按位与结果:192.168.128.0 → 网络号
示例如下:
-
原网络:假设B类地址
188.168.0.08
-
子网划分:借用8位主机号作为子网号,得到子网如
188.168.5.0/24
。 -
通信流程:
-
外部数据先路由到原B类网络的路由器(基于
188.168.0.0/16
)。 -
内部路由器根据子网掩码
/24
解析子网188.168.5.0
,转发至目标主机188.168.5.8
。
-
总结
-
动态网络边界:通过子网掩码自由定义网络号与主机号的分界。
-
多级子网划分:允许在已有子网中继续划分子网(如B类→/24子网→/30子网)。
-
路由聚合:将连续子网合并为超网,减少全球路由表条目。
-
所以,在路由表中既要有目的网络地址,也要有该网络的子网掩码。才能判断目的IP是否与目的网络地址对应。
3. 特殊地址
地址类型 | 示例 | 用途 |
---|---|---|
回环地址 | 127.0.0.1 | 本地测试(localhost) |
默认路由 | 0.0.0.0 | 表示任意网络或无效地址 |
自动私有地址 | 169.254.x.x | DHCP失败时自动配置(APIPA) |
广播地址 | 255.255.255.255 | 向同一子网所有设备发送数据 |
私有地址范围 | 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 | 内部网络使用,不可路由至互联网 |
- 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网。
- 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包。
也就是说,IP地址中主机号为全0的代表的是当前局域网的网络号,IP地址中主机号为全1的代表的是广播地址,这两个IP地址都是不能作为主机的IP地址的。因此在某个局域网中最多能存在的主机个数是 2^(主机号位数) - 2
私网IP地址和公网IP地址
私有IP地址(也称为内网地址)是专为内部网络设计的保留地址,不可直接在公网路由,通过NAT技术与公网通信。根据RFC 1918标准,IPv4的私有地址分为以下三类:
1. A类私有地址
-
范围:
10.0.0.0
~10.255.255.255
-
子网掩码:
255.0.0.0
(简写为/8
) -
特点:
-
提供1600万+个地址(224224),适合超大规模内部网络(如跨国企业、云服务商)。
-
可灵活划分子网,例如:
-
10.1.0.0/16
→ 部门A的办公网络 -
10.2.0.0/16
→ 部门B的服务器集群
-
-
2. B类私有地址
-
范围:
172.16.0.0
~172.31.255.255
-
子网掩码:
255.240.0.0
(简写为/12
) -
特点:
-
包含16个连续B类网络,总计约104万地址(16×21616×216)。
-
适合中型企业或分层网络架构,例如:
-
172.16.0.0/24
→ 主办公区 -
172.17.0.0/24
→ 分支机构
-
-
3. C类私有地址
-
范围:
192.168.0.0
~192.168.255.255
-
子网掩码:
255.255.0.0
(简写为/16
) -
特点:
-
提供6.5万+地址(216216),最常见于家庭和小型办公网络。
-
典型家庭路由器默认配置:
-
网关:
192.168.1.1
-
客户端:
192.168.1.2
~192.168.1.254
-
-
我们连接云服务器时,连接的这个IP地址就是云服务器的公网IP地址,可以看到我的IP地址是111.229.196.30
查看我们这台机器的私网IP:输入ifconfig
命令
其中网络接口lo(loop)代表的是本地环回,而eth0代表的就是我这台机器的网络接口,可以看到我的私网IP地址是10.0.4.17。
这里连接云服务器时的IP地址111.229.196.30是云服务器的公网IP,由于我使用的是腾讯云,因此这里的10.0.4.17是我这个云服务器在腾讯内部的私网IP,可以看到这个IP正好在第一种私网IP范围内。
私有地址的核心价值
-
解决IPv4短缺:通过NAT(网络地址转换)实现多个私网设备共享一个公网IP。
-
网络隔离:避免内网结构暴露于公网,提升安全性。
-
灵活组网:企业可自由规划子网,无需申请公网地址。
路由器网络架构
路由器是连接两个或多个网络的硬件设备,在路由器上有两种网络接口,分别是LAN口和WAN口
接口类型 | 典型IP地址范围 | 连接对象 | 核心作用 |
---|---|---|---|
LAN口 | 私有地址(如192.168.1.1) | 内网设备(PC/手机/IoT) | 创建本地广播域,管理子网通信 |
WAN口 | 公网地址或运营商NAT地址 | 上级路由器/光猫 | 连接广域网,执行NAT地址转换 |
我们将LAN口的IP地址叫做LAN口IP,也叫做子网IP,将WAN口的IP地址叫做WAN口IP,也叫做外网IP。
- 一个路由器可以配置两个 IP 地址,一个是 WAN 口 IP,一个是 LAN 口 IP(子网 IP)。
- 路由器 LAN 口连接的主机,都从属于当前这个路由器的子网中。
- 不同的路由器,子网 IP 其实都是一样的(通常都是 192.168.1.1)。子网内的主机IP 地址不能重复. 但是子网之间的 IP 地址就可以重复了。
- 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点,这样的运营商路由器可能会有很多级,最外层的运营商路由器,WAN 口 IP 就是一个公网 IP 了。
- 子网内的主机需要和外网进行通信时,路由器将 IP 首部中的 IP 地址进行替换(替换成 WAN 口 IP),这样逐级替换, 最终数据包中的 IP 地址成为一个公网 IP,这种技术称为 NAT(Network Address Translation,网络地址转换)。
- 如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网 IP 的服务器上,这样的服务器可以在阿里云/腾讯云上进行购买。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1754209956a5131556.html
评论列表(0条)