路由器in and out解释

通过家庭客厅与金库的比喻,解释了在网络中如何利用IN和OUT方向的ACL来控制流量,以及这两种方式在性能上的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

困扰了很久的IN和OUT..91LAB上面看到一个很形象的比喻,摘抄出来:


in和out是相对的,比如:
A(s0)-----(s0)B(s1)--------(s1)C
假设你现在想拒绝A访问C,并且假设要求你是在B上面做ACL(当然C上也可以),我们把这个拓扑换成一个例子:
B的s0口是前门,s1口是后门,整个B是你家客厅,前门外连的是A,客厅后门连接的是你家金库(C)
现在要拒绝小偷从A进来,那么你在你家客厅做个设置,就有2种办法:
1.在你家客厅(B)前门(B的s0)安个铁门(ACL),不让小偷进来(in),这样可以达到目的
2.在你家客厅后门安个铁门(B的s1),小偷虽然进到你家客厅,但是仍然不能从后门出去(out)到达你家金库(C)
虽然这2种办法(in/out)都可以达到功效,但是从性能角度上来说还是有区别的,实际上最好的办法,就是选办法1,就像虽然小偷没进到金库,至少进到你家客厅(B),把你客厅的地毯给搞脏了(B要消耗些额外的不必要的处理)
假设你要把铁门(ACL)安在C,那时候应该用in还是out呢?
这个问题留给你自己回答了,呵呵
实际上in和out的应用是很灵活的

 

注意:这里的in/out都是站在路由器或三层模块(以后简称R)上看的,in表示从该接口进入R的包,out表示从该接口出去的包。

其他:

access-list 1 permit host 10.1.6.66
line vty 0 4(部分设备是15)
access-class 1 in
这样就行了,telnet都是访问的设备上的line vty,在line vty下面使用access-class与ACL组进行关联,in关键字表示控制进入的连接。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/9800/showart_398541.html

### 路由器结合路由表和转发引擎处理数据包的过程 路由器在接收到数据包后,会利用路由表以及其他内部组件来决定如何将数据包转发至目标地址。以下是这一过程的具体描述: 1. **接收数据包** 当路由器的一个接口接收到数据包时,它首先会对数据包的头部进行解析,提取其中的目标IP地址[^4]。 2. **查询路由表** 提取目标IP地址后,路由器会在其路由表中查找与该目标IP地址相匹配的条目。此过程遵循最长前缀匹配原则,即选择具有最具体(最长)网络前缀的路由条目作为最佳路径[^2]。如果未找到精确匹配项,则会选择默认路由(如果有配置的话)[^1]。 3. **确定下一跳信息** 找到匹配的路由条目后,路由器从中提取下一跳的信息,包括下一跳的IP地址以及出接口(Interface)。这些信息决定了数据包应被送往哪个相邻节点及其离开当前路由器的物理或逻辑端口。 4. **封装并转发数据包** 获取到下一跳详情之后,路由器重新封装数据包以便适配新的传输媒介。例如,在以太网环境中,可能会更改帧头中的源MAC地址为目标下一跳设备对应的MAC地址,并保留原始数据部分不变[^3]。随后,经过适当修改后的数据包会被送入指定的出口链路上继续旅程直至最终抵达目的地。 5. **高速缓存机制优化性能** 为了提高效率,现代高端路由器还可能采用硬件加速技术或者设置快速转发表(FIB),预先存储频繁使用的路由决策结果从而减少重复计算开销加快后续相同请求处理速度。 ```python # 示例伪代码展示简化版的数据包转发流程模拟 class Router: def __init__(self, routing_table): self.routing_table = routing_table def forward_packet(self, packet): destination_ip = packet['destination'] # 查询路由表寻找最优路径 route_entry = self.find_best_route(destination_ip) if not route_entry: raise Exception("No valid route found.") next_hop = route_entry.get('next_hop') out_interface = route_entry.get('interface') # 封装新数据包准备发送给下一个跃点 new_frame = { 'source_mac': get_router_mac(out_interface), 'target_mac': resolve_arp(next_hop), 'payload': packet['data'] } send(new_frame, interface=out_interface) def find_best_route(self, ip_address): best_match = None for entry in self.routing_table: prefix_length = calculate_prefix(entry['network'], entry['subnet_mask']) current_match_bits = count_matching_bits(ip_address, entry['network']) if (current_match_bits >= prefix_length and ((not best_match) or compare_specificity(best_match, entry))): best_match = entry return best_match ``` --- ### 相关问题 1. 路由器在什么情况下会使用默认路由? 2. 动态路由协议相较于静态路由有哪些优势? 3. 如果两台路由器之间的链路发生故障,路由器是如何更新自己的路由表的?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值