当前位置: 首页 > news >正文

linux_网络层-ip协议

目录

协议头格式

网络划分

​编辑前言(路由器特点)

 一、IP 地址分类的演变 

1. 传统分类(A/B/C/D/E 类)的设计逻辑

二、子网划分的核心逻辑 

1. 子网掩码的本质

2. 划分子网的实操步骤

3. 子网划分的 “权衡点”

三、实际网络中的痛点与解决方案 

1. 地址不够用的终极解法

特殊的IP地址

私有ip与公有ip地址

 一、基础概念与规则 

(一)私有IP地址定义 

(二)公网IP地址补充 

二、网络设备与IP配置逻辑(结合拓扑图) 

(一)路由器双IP机制 

(二)多级网络与NAT原理 

三、实际应用与延伸 

路由

 一、路由核心逻辑深化 

1. “跳(Hop)”的精准定义 

2. 路由表的“匹配规则”细化 

二、路由表字段深度解析 

三、转发案例扩展与对比 

1. 案例 1 深化:目的地址  192.168.56.56  ​编辑

2. 新增案例:目的地址  192.168.10.5  

四、路由表实操 

 路由表查看与修改命令 

五、整体逻辑串联(类比强化) 


协议头格式

4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. 
4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节. 
8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要. 
16位总长度(total length): IP数据报整体占多少个字节.
 

8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL -= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
 
8位协议: 表示上层协议的类型
16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏. 
32位源地址和32位目标地址: 表示发送端和接收端. 

16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的. 
3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后一个分片置为0, 其他是1. 类似于一个结束标记. 
13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了). 

场景

我们以一个 2500字节的文件(含20字节IP头)通过以太网(MTU=1500字节)传输 为例,简化说明16位标识、3位标志、13位分片偏移的作用:
 
场景:文件太大,需要分片
 
源主机要发一个2500字节的包(20字节IP头+2480字节数据),但链路MTU=1500字节(最多传1480字节数据,因为1500-20=1480),所以必须分成2个分片。
 
分片1(第一个分片)
 
- 16位标识:设为 0x5678 (所有分片共用这个标识,说明来自同一个原始包)。
- 3位标志: MF=1 (表示“后面还有分片”), DF=0 (允许分片)。
- 13位分片偏移: 0 (从原始数据的第0字节开始)。
- 内容:20字节IP头 + 1480字节数据(总1500字节,刚好符合MTU)。
 
分片2(最后一个分片)
 
- 16位标识: 0x5678 (和分片1相同,归为一组)。
- 3位标志: MF=0 (表示“这是最后一个分片”)。
- 13位分片偏移: 1480÷8=185 (因为分片偏移以8字节为单位,前一个分片占了1480字节,所以这个分片从第1481字节开始,对应偏移185)。
- 内容:20字节IP头 + 1000字节数据(剩下的2480-1480=1000字节,总1020字节,小于MTU)。
 
目的主机重组
 
收到两个分片后,通过 相同的16位标识(0x5678) 确认是同一原始包,按 分片偏移(0→185) 排序,看到最后一个分片 MF=0 ,就知道所有分片收齐,拼接后还原出2500字节的原始数据。
 
核心作用
 
- 16位标识:绑定同一原始包的所有分片。
- 3位标志(MF):告诉接收方“是否还有后续分片”。
- 13位分片偏移:确定每个分片在原始数据中的位置,保证重组顺序正确。

网络划分


前言(路由器特点)

一.路由器的本质也是一个特定的子网的主机,因此它也需要配置ip地址。

二.路由器呢一定至少要有连接两个子网,路由器呢也就相当于同时在两个子网中,路由器可以配置多个ip,这是必须的,我们可以粗略地理解为路由器有多张网卡。

三.路由器呢一般是一个子网的第1台设备它的ip地址中的网络号一般为1。

四.路由器的功能,除了ip报文的转发以外,还有构成子网及局域网。

 一、IP 地址分类的演变
 

1. 传统分类(A/B/C/D/E 类)的设计逻辑


- A 类:开头为  0 ,给超大型网络(如早期互联网骨干),1 字节网络号 + 3 字节主机号,理论可容纳 1677 万主机,但实际难用到这么多,造成地址浪费。
- B 类:开头  10 ,2 字节网络号 + 2 字节主机号,适合中大型企业,可容纳 6.5 万主机,但企业实际需求远小于此,同样浪费。
- C 类:开头  110 ,3 字节网络号 + 1 字节主机号,给小型网络,仅 254 个主机位,但很多场景不够用(如办公楼多设备)。
- D 类(组播)、E 类(保留):为特殊场景设计,日常网络规划少用,但组播在视频直播、网络会议中很关键(如直播时给多终端发同一份数据)。
2. 分类的局限性与历史影响
- 最核心问题是 地址浪费:比如企业申请 B 类地址(6.5 万主机位),但实际仅用几百台设备,剩下的 IP 无法被其他网络复用,加速了 IPv4 地址耗尽。
- 还带来 管理复杂:不同类地址规则不同,网络工程师配置时要区分 A/B/C 类,增加学习和运维成本。
 

二、子网划分的核心逻辑
 

1. 子网掩码的本质

- 子网掩码是 “筛子”,用  1  标记网络位、 0  标记主机位(如  255.255.255.0  是  /24 ,前 24 位筛网络,后 8 位筛主机)。
- 作用是 “切分 IP”:不管原 IP 是 A/B/C 类,通过掩码重新定义网络和主机边界,实现灵活划分(这就是 CIDR 的核心价值)。

2. 划分子网的实操步骤


- 已知 IP: 140.252.20.68 (二进制: 10001100 11111100 00010100 01000100 )
- 掩码: 255.255.255.240 (即  /28 ,二进制: 11111111 11111111 11111111 11110000 
- 按位与运算:IP 和掩码对应位相乘( 1&1=1 , 0&1=0 ),得到网络号  140.252.20.64 (二进制: 10001100 11111100 00010100 01000000 )。
- 主机范围计算:主机位全  1  是网络号( 64 ),全  0 是广播地址( 79 ,因为  64 + 15 = 79 , 15  是  00001111 ),所以可用主机是  65~78 。

3. 子网划分的 “权衡点”

- 主机数量 vs 子网数量:掩码越长( /28  比  /24  长),子网越多,但每个子网主机越少。比如  /24  分 1 个子网、254 主机; /28  分 16 个子网、14 主机(需扣网络号和广播地址)。
- 场景适配:家庭网络用  /24 (254 主机够手机、电脑、智能设备);企业办公可能分  /28 (不同部门隔离,如销售部、研发部各一个子网);数据中心服务器多,甚至用  /30 (仅 2 主机位,给两台服务器做直连)。
 

三、实际网络中的痛点与解决方案
 

1. 地址不够用的终极解法

- IPv6:彻底解决 IPv4 耗尽问题,地址长度 128 位,理论上地球上每粒沙子都能分配 IP。但过渡阶段需 双栈(同时支持 IPv4/IPv6) 或 NAT64(IPv6 转 IPv4) 技术适配老设备。
- NAT(网络地址转换):企业内网用私有 IP(如  192.168.x.x ),通过路由器 NAT 转换成公网 IP 上网,实现 “多设备共享一个公网 IP”,缓解 IPv4 短缺。

 
总结来说,网段划分是网络规划的 “地基”,从传统分类的历史局限,到 CIDR 子网划分的灵活,再到 IPv6 等未来方案,核心是 “用更高效的方式分配、管理 IP,让网络又稳又省” 。实际工作中,得结合场景(家庭、企业、数据中心)选掩码,平衡主机数和子网数,还要预防广播风暴、地址冲突这些 “暗坑”,才能让网络高效运行~

特殊的IP地址


将IP地址中的主机地址全部设为1, 就成为了网络号, 代表这个局域网;
将IP地址中的主机地址全部设为0, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

私有ip与公有ip地址

 一、基础概念与规则
 

(一)私有IP地址定义
 

当组织搭建内部局域网,IP地址仅用于局域网通信、不直接连互联网时,理论上可用任意IP,但RFC 1918明确了专用私有IP范围,目的是规范内网地址使用,避免与公网IP冲突,以下是具体划分:
 
- 10.0.0.0/8:前8位固定为网络标识,可容纳地址数达16,777,216个 ,适用于超大型内网(如企业总部、高校校园网),能覆盖大范围设备。
- 172.16.0.0/12:前12位为网络号,包含1,048,576个地址 ,常用于中型网络,可灵活划分多个子网,适配不同部门或业务区。
- 192.168.0.0/16:前16位是网络号,共65,536个地址 ,家庭、小型办公网络常用,默认子网(如192.168.1.0/24 )简单易管理。
 
只要IP属于上述范围,即为私有IP;反之,能直接在互联网上寻址、全球唯一的,就是公网IP(全局IP) 。
 

(二)公网IP地址补充
 

公网IP由国际互联网分配机构(IANA)统筹,经区域注册管理机构(如APNIC负责亚太)分配给运营商,再到用户。分静态公网IP(固定不变,适合服务器、企业专线,需向运营商申请付费)和动态公网IP(家用宽带常用,从运营商地址池临时分配,重启路由可能变更 )。
 

二、网络设备与IP配置逻辑(结合拓扑图)
 

(一)路由器双IP机制
 

一个路由器可配两个IP:
 
- LAN口IP(子网IP):用于内网通信,同一路由器LAN口下的设备,都属于该子网(如家用路由LAN口多为192.168.1.1 ),子网内主机IP不能重复(避免冲突),但不同路由器子网IP可相同(因跨子网不影响 )。
- WAN口IP:用于连接上级网络(如运营商路由、广域网),家用路由的WAN口IP,其实是运营商路由子网里的一个地址;最外层运营商路由的WAN口,才是真正公网IP 。

 

(二)多级网络与NAT原理 

1. 网络层级关系:家用路由作为运营商路由的子网节点,运营商路由可能多级嵌套(如小区网关→城市骨干网路由器→省级节点 )。最外层运营商路由的WAN口,直接关联公网。
2. NAT(网络地址转换)流程:内网主机(如192.168.1.201 )要访问外网时,路由器会替换IP包首部的私有IP→WAN口IP,多级路由则逐次替换,最终数据包以公网IP身份出网。这样,大量内网设备可共享少量公网IP,缓解地址不足问题 。

 

三、实际应用与延伸
 

(一)内网服务的公网访问
 
若想让自制服务器程序被公网访问,有两种常见方式:
 
1. 部署到公网服务器:在阿里云、腾讯云等购买带公网IP的云主机,直接部署服务,公网可通过其IP/域名访问。
2. 内网穿透方案:不想买云服务器时,可用 frp 、 ngrok 等工具,借助公网中转服务器,把内网服务端口映射到公网,适合测试环境或轻量服务 。
 
(二)IP地址规划与管理建议
 
- 企业内网:根据规模选私有IP段(超大型用10.0.0.0/8,中型用172.16.0.0/12 ),再细分部门子网,用NAT集中连公网,既省地址又便于管理。
- 家庭网络:用192.168.0.0/16 网段,路由默认LAN口设为192.168.1.1即可,简单易维护;若有多路由组网,可手动改LAN口IP避免冲突(如192.168.2.1 )。
 
(三)潜在问题与解决
 
- 私有IP冲突:不同内网子网IP相同,不影响跨网通信,但如果通过VPN、专线打通内网,需提前规划IP,避免冲突(可改其中一方子网IP )。
- 动态公网IP困扰:家用动态公网IP,重启路由会换地址,若想远程访问内网设备(如监控、NAS ),可配合DDNS(动态域名解析),把变化的公网IP绑定到固定域名,实现稳定访问 。
 

路由

 一、路由核心逻辑深化
 

1. “跳(Hop)”的精准定义
 

“一跳是数据链路层的一个区间”,补充:
 
- 跳的本质:是网络中“直接可达的物理/数据链路段”,在以太网里,“一跳”就是从源 MAC 到目标 MAC 的帧传输范围(比如主机→直连路由器、路由器→相邻路由器,都算一跳 )。
- 跳数与网络延迟:跳数越多,理论延迟越高(每跳要经过设备转发、校验 )。比如玩游戏延迟高,排查时会看“ traceroute (Linux )/tracert(Windows )”的跳数,判断卡在哪一跳。
 

2. 路由表的“匹配规则”细化
 

路由表靠“目的 IP 匹配”决定转发,补充 匹配优先级:
 
- 路由器查路由表时,按“精准度从高到低”匹配:先找与目的 IP 完全匹配的主机路由(若有),再找子网路由(如 192.168.56.0/24 ),最后找默认路由(default )。
- 案例强化:看原文路由表示例,发送 192.168.56.3 时,为什么选 eth1 口?因为:
- 目的 IP & 第一行子网掩码(255.255.255.0 )=192.168.56.0 ≠ 第一行目的地址(192.168.10.0 )→ 不匹配;
- 目的 IP & 第二行子网掩码(255.255.255.0 )=192.168.56.0 ,与第二行目的地址(192.168.56.0 )完全匹配 → 走 eth1 口。
(补充:这是最长前缀匹配原则,子网掩码位数越长(越精准),优先级越高 )
 

二、路由表字段深度解析
 

对路由表字段(Destination、Gateway、Genmask 等),补充 实操含义:
 

字段作用补充说明 
Destination目的网络/主机地址可以是具体 IP(主机路由)、网段(子网路由)、default(默认) 
Gateway下一跳地址若为  * ,表示“直连网络,无需路由转发”(如本地子网 ) 
Genmask子网掩码配合 Destination 做“IP 与运算”,判断是否匹配 
Flags路由属性标记 重点记 U (路由有效)、 G (需经网关转发)、 H (主机路由) 
Metric路由优先级(开销) 数值越小,优先级越高(不同路由协议计算方式不同,如 RIP 按跳数 ) 
Ref路由被引用次数系统维护,用于调试(普通用户关注少) 
Use路由被使用次数反映路由的“热门程度”,故障排查时可看是否某路由被频繁调用 
Iface出接口数据包从哪个网卡发出去,决定物理链路走向 

三、转发案例扩展与对比
 

1. 案例 1 深化:目的地址  192.168.56.56 
 

原文只讲了匹配第二行的过程,补充 “无 G 标志”的含义:
因为第二行  Flags  没有  G ( U  表示有效),说明该网段是直连网络(主机 eth1 口直接连 192.168.56.0/24 ),所以数据包会直接从 eth1 发往目标主机,无需经过“网关转发”。
 

2. 新增案例:目的地址  192.168.10.5 
 

- 匹配第一行  Destination 192.168.10.0  +  Genmask 255.255.255.0 :
- 计算: 192.168.10.5 & 255.255.255.0 = 192.168.10.0 ,与第一行目的地址匹配;
- 检查  Flags :无  G  标志(因为是直连网段),所以数据包从  eth0  口直接发往目标主机,无需网关。
 

四、路由表实操
 

 路由表查看与修改命令
 

- Linux 环境:
- 查看路由表: route -n (简洁版)或  ip route show (详细,推荐 );
- 添加静态路由: ip route add 192.168.20.0/24 via 192.168.10.1 dev eth0 (给 192.168.20.0 网段,指定下一跳 192.168.10.1,从 eth0 发 );
- 删除路由: ip route del 192.168.20.0/24 。
- Windows 环境:
- 查看: route print ;
- 添加: route add 192.168.20.0 mask 255.255.255.0 192.168.10.1 ;
- 删除: route delete 192.168.20.0 。
 

五、整体逻辑串联(类比强化)
 

把路由过程类比成**“快递送货”**:
 
- 路由表 = 快递员的“地址-网点映射表”(北京朝阳区→发朝阳网点,上海徐汇区→发徐汇网点 );
- 跳(Hop) = 快递的“中转次数”(北京→上海→杭州,每经一个分拨中心算一跳 );
- NAT(结合之前内容) = 快递的“代收点代发”(小区里的快递站收包裹,贴自己地址发出去,对方回包时再转你家 );
- 直连路由(无 G 标志) = 快递“小区内配送”(快递站直接送你家,不用经其他网点 )。
 
这样补充后,路由的“原理→实操→排障”就串成了完整知识链,不管是理解理论,还是实际运维调网络,都更清晰啦~

http://www.xdnf.cn/news/1291123.html

相关文章:

  • 开源日志log4cplus—调用MultiByteToWideChar提示未定义,CP_UTF8未定义定原因有哪些,如何改进?
  • 【安卓,问题记录】ImageView 在布局顺序上位于 Button 上方,却出现图像内容被 Button 遮挡
  • 北京JAVA基础面试30天打卡09
  • ELK开启安全策略
  • 【递归、搜索与回溯算法】穷举、暴搜、深搜、回溯、剪枝
  • String里常用的方法
  • w481社区老人健康信息管理系统的设计与实现
  • 5.语句几个分类
  • BGE:智源研究院的通用嵌入模型家族——从文本到多模态的语义检索革命
  • 开源WAF新标杆:雷池SafeLine用语义分析重构网站安全边界
  • 【C#】利用数组实现大数数据结构
  • 银发经济时代:科技赋能养老,温情守护晚年,让老人不再孤独无助
  • LeetCode 面试经典 150_数组/字符串_整数转罗马数字(18_12_C++_中等)(模拟)(对各位进行拆解)
  • STM32HAL 快速入门(六):GPIO 输入之按键控制 LED
  • JMeter 测试 WebSocket 接口的详细教程
  • HarmonyOS NDK的JavaScript/TypeScript与C++交互机制
  • 实战多屏Wallpaper壁纸显示及出现黑屏问题bug分析-学员作业
  • 从0开始配置conda环境并在PyCharm中使用
  • 基于Apache Flink的实时数据处理架构设计与高可用性实战经验分享
  • Flink中的窗口
  • 解决程序连不上RabbitMQ:Attempting to connect to/access to vhost虚拟主机挂了的排错与恢复
  • Windows也能用!Claude Code硬核指南
  • 【报错解决】Conda - Downloaded bytes did not match Content-Length
  • Java零基础笔记16(Java编程核心:存储读写数据方案—File文件操作、IO流、IO框架)
  • 搜索引擎核心机制解析
  • 5.0.9.1 C# wpf通过WindowsFormsHost嵌入windows media player(AxInterop.WMPLib)
  • C# WPF本地Deepseek部署
  • 集成电路学习:什么是CV计算机视觉
  • IPA1299至为芯替代TI ADS1299的脑机接口芯片
  • 网络安全合规6--服务器安全检测和防御技术