静态路由选择解释
给定一张 IPv4/IPv6 路由表和目的地址,逐条说明最长前缀、metric、同级候选及拒绝动作,保留完整报告与原件。
请从原始路由文本手工整理单一静态表。工具解释声明的排名;缓存、重定向和现网策略需结合真实系统检查。
尚无结果
开始之前
给定一张 IPv4/IPv6 路由表和目的地址,逐条说明最长前缀、metric、同级候选及拒绝动作,保留完整报告与原件。
如何使用
- 选择粘贴或文件模式。
- 输入声明路由与本次目的地址。
- 逐地址核对匹配理由和全部同级候选。
- 下载原件、完整 JSON 与 CSV,结合实际系统配置排查。
支持范围与限制
明确选择粘贴或单个 UTF-8 JSON 文件;只处理当前模式,原始输入最多 1 MiB。拒绝 BOM、损坏 UTF-8、重复键和有损数值。
1–4096 条路由、1–256 个目的地址,路由与目的地址的乘积最多 16384。id 和 interface 为 1–128 个 UTF-16 单元;metric 为 0–4294967295 整数,hopLimit 为 0–255 整数。
支持 unicast、blackhole、unreachable、prohibit。unicast 可声明同地址族 nextHop;CIDR 主机位会规范化并标记。IPv4 映射 IPv6 保持 IPv6 地址族。
只按最长前缀、再按最小 metric 筛选。保留全部同级候选;顺序和 hopLimit 不打破平局,混合动作平局明确标记。
完整 JSON、CSV、原件与复制文本合计最多 16 MiB;CSV 对公式前缀加单引号,JSON 与原件保持原值。超限整份拒绝。
此声明表不包含实际系统策略、缓存、重定向、接口状态或包级 ECMP;不能据此证明某个真实数据包的路径或修复系统问题。
原始 ip-route 文本需手工整理成声明的 JSON 字段。工具只读单一静态表,不能修复现网路由、缓存、重定向或策略。
只处理当前活动的粘贴或文件来源。活动文件名允许512 UTF-8字节、MIME标签128字节;原始输入保持逐字节完整,并提供来源SHA256。
10秒整体绝对期限从元数据检查和原生文件读取前开始,覆盖Worker加载到发布结果。取消、超时或换源会清空全部旧产物;完整来源保留,可再次运行。
完整JSON报告、公式安全CSV、原始输入和复制文本合计16 MiB。生成大字符串前先预留输出字节;typed报告和表格JSON另有16 MiB工作量上限,不发布部分输出。
操作示例
示例输入
{"routes":[{"id":"=default","cidr":"10.0.0.1/0","metric":100,"type":"unicast","nextHop":"10.0.0.1","interface":"网卡😀","hopLimit":64},{"id":"local","cidr":"10.0.0.0/24","metric":1,"type":"unicast"},{"id":"blocked","cidr":"2001:db8::/32","metric":0,"type":"blackhole"}],"destinations":["10.0.0.2","2001:db8::1","192.0.2.1"]}
示例参数
{"sourceMode":"paste"}示例输出
{
"schema": "neatbo-static-routes/1",
"model": "single-declared-table-longest-prefix-then-lowest-unsigned-metric",
"routeCount": 3,
"destinationCount": 3,
"comparisonCount": 9,
"routes": [
{
"index": 0,
"id": "=default",
"source": {
"id": "=default",
"cidr": "10.0.0.1/0",
"metric": 100,
"type": "unicast",
"nextHop": "10.0.0.1",
"interface": "网卡😀",
"hopLimit": 64
},
"family": "ipv4",
"network": "0.0.0.0",
"prefix": 0,
"cidr": "0.0.0.0/0",
"hostBitsNormalized": true,
"metric": 100,
"type": "unicast",
"nextHop": "10.0.0.1",
"interface": "网卡😀",
"hopLimit": 64
},
{
"index": 1,
"id": "local",
"source": {
"id": "local",
"cidr": "10.0.0.0/24",
"metric": 1,
"type": "unicast"
},
"family": "ipv4",
"network": "10.0.0.0",
"prefix": 24,
"cidr": "10.0.0.0/24",
"hostBitsNormalized": false,
"metric": 1,
"type": "unicast",
"nextHop": null,
"interface": null,
"hopLimit": null
},
{
"index": 2,
"id": "blocked",
"source": {
"id": "blocked",
"cidr": "2001:db8::/32",
"metric": 0,
"type": "blackhole"
},
"family": "ipv6",
"network": "2001:db8::",
"prefix": 32,
"cidr": "2001:db8::/32",
"hostBitsNormalized": false,
"metric": 0,
"type": "blackhole",
"nextHop": null,
"interface": null,
"hopLimit": null
}
],
"results": [
{
"index": 0,
"source": "10.0.0.2",
"family": "ipv4",
"canonical": "10.0.0.2",
"bestPrefix": 24,
"bestMetric": 1,
"decision": "forward",
"tie": false,
"selectedRouteIndexes": [
1
],
"comparisons": [
{
"routeIndex": 0,
"id": "=default",
"matched": true,
"selected": false,
"reason": "shorter-prefix"
},
{
"routeIndex": 1,
"id": "local",
"matched": true,
"selected": true,
"reason": "best-prefix-and-metric"
},
{
"routeIndex": 2,
"id": "blocked",
"matched": false,
"selected": false,
"reason": "different-family"
}
]
},
{
"index": 1,
"source": "2001:db8::1",
"family": "ipv6",
"canonical": "2001:db8::1",
"bestPrefix": 32,
"bestMetric": 0,
"decision": "blackhole",
"tie": false,
"selectedRouteIndexes": [
2
],
"comparisons": [
{
"routeIndex": 0,
"id": "=default",
"matched": false,
"selected": false,
"reason": "different-family"
},
{
"routeIndex": 1,
"id": "local",
"matched": false,
"selected": false,
"reason": "different-family"
},
{
"routeIndex": 2,
"id": "blocked",
"matched": true,
"selected": true,
"reason": "best-prefix-and-metric"
}
]
},
{
"index": 2,
"source": "192.0.2.1",
"family": "ipv4",
"canonical": "192.0.2.1",
"bestPrefix": 0,
"bestMetric": 100,
"decision": "forward",
"tie": false,
"selectedRouteIndexes": [
0
],
"comparisons": [
{
"routeIndex": 0,
"id": "=default",
"matched": true,
"selected": true,
"reason": "best-prefix-and-metric"
},
{
"routeIndex": 1,
"id": "local",
"matched": false,
"selected": false,
"reason": "outside-prefix"
},
{
"routeIndex": 2,
"id": "blocked",
"matched": false,
"selected": false,
"reason": "different-family"
}
]
}
],
"sourceInputs": [
{
"role": "routes",
"kind": "paste",
"name": "routes-pasted.json",
"mime": "application/json",
"bytes": 329,
"sha256": "8317ee00408584deebeffc4a20b9de2c0cab7cdd0e21f9790aebdc07ce730795"
}
],
"inputBytes": 329,
"sourceCount": 1
}
出现问题时
保留声明原件,按错误修正地址、字段或数值范围;超预算时拆分目的地址。取消或失败不交付部分报告,可保留同一输入重试。
常见问题
hopLimit 会改变候选排序吗?
不会。它只被保留,不作为本模型的路由排名条件。
两个候选完全同级时会选第一条吗?
不会。结果保留全部同级候选和动作歧义;包级选择需要实际系统的额外信息。