组保留的标签 余下为需要删除的标签
unset($oldtag[$key]);
}
}
}
if (!empty($oldtag)) {
$tagids = array();
foreach ($oldtag as $tagid => $tagname) {
$tagids[] = $tagid;
}
well_oldtag_delete($tagids, $tid);
}
$r = well_tag_process($tid, $fid, $create_tag, $tagarr);
return $r;
}
// 删除标签和绑定的主题
function well_oldtag_delete($tagids, $tid)
{
$pagesize = count($tagids);
$arrlist = well_tag_find_by_tagids($tagids, 1, $pagesize);
$delete_tagids = array(); // 删除
$tagids = array();
$n = 0;
foreach ($arrlist as $val) {
++$n;
if (1 == $val['count']) {
// 只有一个主题
$delete_tagids[] = $val['tagid'];
} else {
$tagids[] = $val['tagid'];
}
}
!empty($delete_tagids) and well_tag_delete($delete_tagids);
$arlist = well_tag_thread_find_by_tid($tid, 1, $n);
if ($arlist) {
$ids = array();
foreach ($arlist as $val) $ids[] = $val['id'];
well_tag_thread_delete($ids);
}
!empty($tagids) and well_tag_update($tagids, array('count-' => 1));
}
// 标签数据处理 $arr=新提交的数组 $tagarr=保留的旧标签
function well_tag_process($tid, $fid, $new_tags = array(), $tagarr = array())
{
if (empty($tid)) return '';
// 新标签处理入库
if ($new_tags) {
$threadarr = array();
$tagids = array();
$i = 0;
$size = 5;
$n = count($tagarr);
$n = $n > $size ? $size : $size - $n;
foreach ($new_tags as $name) {
++$i;
$name = trim($name);
$name = stripslashes($name);
$name = strip_tags($name);
$name = str_replace(array(' ', '#', "@", "$", "%", "^", '&', '·', '<', '>', ';', '`', '~', '!', '¥', '……', ';', '?', '?', '-', '—', '_', '=', '+', '.', '{', '}', '|', ':', ':', '、', '/', '。', '[', ']', '【', '】', '‘', ' ', ' ', ' ', ' ', ' '), '', $name);
$name = htmlspecialchars($name, ENT_QUOTES);
if ($name && $i <= $n) {
// 查询标签
$read = well_tag_read_name($name);
if ($read) {
// 存在 count+1
$tagids[] = $read['tagid'];
} else {
// 入库
$arr = array('name' => $name, 'count' => 1);
$tagid = well_tag_create($arr);
FALSE === $tagid and message(-1, lang('create_failed'));
$read = array('tagid' => $tagid, 'name' => $name);
}
$tag_thread = array('tagid' => $read['tagid'], 'tid' => $tid);
$threadarr[] = $tag_thread;
$tagarr[$read['tagid']] = $read['name'];
}
}
!empty($threadarr) and tag_thread_big_insert($threadarr);
!empty($tagids) and well_tag_update($tagids, array('count+' => 1));
}
$json = empty($tagarr) ? '' : xn_json_encode($tagarr);
return $json;
}
?>
OSPF 和 RIP 的区别是什么?一文带你理清-阿南达文事网
OSPF 和 RIP 的区别是什么?一文带你理清
编程日记10
更新时间:2025-05-26 09:11:07 OSPF 和 RIP 的区别是什么?一文带你理清
OSPF 和 RIP 的区别是什么?一文带你理清
前言
肝文不易,点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。
作者:神的孩子都在歌唱
大家好,我是神唱,在网络世界里,OSPF(Open Shortest Path First) 和 RIP(Routing Information Protocol) 都是常见的动态路由协议,它们负责将数据从 A 点送到 B 点。但是,你是否真正明白它们的区别?
一. 基本概念:OSPF 和 RIP 是什么?
RIP
- • 全称: Routing Information Protocol(路由信息协议)
- • 工作原理:
- • 通过 跳数(Hop Count) 作为度量值,每跳增加 1,最大跳数为 15。
- • 使用 UDP 端口 520 发送路由更新,每 30 秒更新一次。
- • 优点: 配置简单,适合小型网络。
- • 缺点: 收敛速度慢,跳数限制为 15,不适合大规模网络。
OSPF
- • 全称: Open Shortest Path First(开放最短路径优先协议)
- • 工作原理:
- • 采用 链路状态(Link-State) 算法,使用 Dijkstra(迪杰斯特拉)最短路径算法计算最佳路径。
- • 使用 IP 直接承载(协议号 89) 进行路由更新,仅在拓扑变化时更新,收敛速度快。
- • 优点: 适合大型复杂网络,支持 VLSM、CIDR,收敛速度快。
- • 缺点: 配置复杂,占用系统资源较多。
二. OSPF 与 RIP 的核心区别
对比项 | RIP | OSPF |
---|
协议类型 | 距离矢量协议 | 链路状态协议 |
度量值 | 跳数(最大 15 跳) | 成本(Cost),基于带宽 |
收敛速度 | 慢 | 快 |
适用网络规模 | 小型网络 | 大型复杂网络 |
更新频率 | 每 30 秒广播路由更新 | 仅在拓扑变化时更新 |
协议端口/协议号 | UDP 端口 520 | IP 直连协议号 89 |
VLSM/CIDR 支持 | 不支持 | 支持 |
负载均衡 | 最多支持 6 条等价路径(默认 4 条) | 支持多路径负载均衡 |
环路避免机制 | 触发更新、水平分割等 | 自然避免环路 |
认证支持 | 基本支持 | 支持多种认证方式 |
配置复杂度 | 简单 | 复杂 |
三. RIP 的工作机制解析
RIP 版本对比
- • RIPv1:
- • 使用广播(255.255.255.255)发送路由信息,不支持 VLSM 和认证。
- • RIPv2:
- • 使用组播(224.0.0.9)发送更新,支持 VLSM 和路由认证。
RIP 路由更新机制
- • 每 30 秒发送一次路由更新,带有所有已知路由的完整列表。
- • 若 180 秒未收到更新,则标记路由为不可达。
- • 240 秒后删除失效路由。
四. OSPF 的工作机制解析
OSPF 区域(Area)概念
- • Area 0(骨干区域): 所有其他区域必须连接到骨干区域。
- • 普通区域: 非骨干区域,向 Area 0 传递路由信息。
- • NSSA(不完全特区): 阻止外部路由进入特定区域。
imgOSPF 路由更新机制
- • 使用 LSA(Link-State Advertisement) 传播链路状态信息。
- • 只有拓扑变化时触发 LSA 更新,减少不必要的流量。
- • 通过 Dijkstra 算法计算最优路径,加入 OSPF 路由表。
五. OSPF 和 RIP 配置对比
RIP 配置
代码语言:javascript
代码运行次数:0运行
复制
# 进入系统视图
<Huawei> system-view
[Huawei] rip 1
[Huawei-rip-1] version 2
[Huawei-rip-1] network 192.168.1.0
[Huawei-rip-1] network 10.0.0.0
[Huawei-rip-1] quit
具体配置操作可以看我这篇文章: RIP 动态路由配置教程:从入门到实践
OSPF 配置
代码语言:javascript
代码运行次数:0运行
复制
# 进入系统视图
<Huawei> system-view
[Huawei] ospf 1 router-id 1.1.1.1
[Huawei-ospf-1] area 0
[Huawei-ospf-1-area-0.0.0.0] network 192.168.1.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0] network 10.0.0.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0] quit
具体配置操作可以看我这篇文章: OSPF 配置全攻略:从基础原理到实战演练
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-03-21,如有侵权请联系 cloudcommunity@tencent 删除配置网络协议工作路由
本文发布于:2025-05-25,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:OSPF 和 RIP 的区别是什么一文带你理清
发布评论