网络路由介绍,route指令,查询路由表的过程,默认路由

目录

路由

本地主机的路由功能

引入

route指令 

查询路由表的过程

介绍

示例

默认路由

注意


路由

本地主机的路由功能

引入

报文经过多个路由器转发至公网,再从公网定位后转发至私网,最终到达目标主机

而报文肯定是要先经过本地主机的

  • 所以本地主机也具有路由功能,也就有自己的路由表

route指令 

从左到右介绍是:

  • 当前主机可以连接到的网络/主机(也就是下一跳的网络号/ip地址)
  • 下一跳的路由器地址(0.0.0.0表示当前记录对应的ip地址与本机在同一网段,不需要经过路由器)
  • 每一个网络都配有一个子网掩码(确定ip地址的网络部分和主机部分)
  • 路由标志 -- U : 该路由正在使用 , G : 该设备是路由器
  • Iface -- 该路由的网络接口

 

查询路由表的过程

介绍

  • 拿着目标主机的ip & genmask 和 destination 作对比
  • 如果匹配,则通过特定网络接口发送报文
  • 不匹配就继续往下查

  • 如果不知道结果,则说明这个路由器功能损坏,我们不把这种特殊情况列入

示例

路由就跟现实中问路是一样的:

假如你要去某个地方,问附近的路人

  • 要么他不知道
  • 要么他知道地方,比如左转等等
  • 要么他不知道,但他说谁谁谁比较熟悉这个地儿,让你去找他问
  • 要么他就是这个地方的人,直接带着你去(比如保安啥的)

但在网络世界里,"不知道"一般不会出现

  • 如果出现,只能说这个路由器有问题
  • 路由器本来就是要指明方向的,结果它做不到,这就属于特殊情况

默认路由

指向当前网段的一台路由器,该路由器负责连接当前网络和其他网络 

如果有多台路由器:

  • 这些路由器可以相互通信并交换路由信息,通过动态路由协议判断由哪个路由器来转发数据包
  • 如果有多个路由器能够到达目的地网络,路由器会选择最佳路径来转发数据包

总之就这样,经过查找每台设备的路由表,并根据转发规则,报文会一步步靠近目标主机

注意

以上目的ip都是公网ip

  • 如果目的ip是私网ip,只可能是想要访问同一网段内的主机

### 默认路由路由表中的配置方法及作用 #### 配置方法 默认路由是一种特殊类型的静态路由,其目的地 IP 和子网掩码均为 `0.0.0.0` 和 `0.0.0.0`。这种设置表示该路由可以匹配任意未知的目标地址[^3]。 在华为 ENSP 中,可以通过以下命令来配置默认路由: ```bash ip route-static 0.0.0.0 0.0.0.0 下一跳IP地址 ``` 其中,“下一跳 IP 地址”是指向另一个路由器的接口地址,或者是一个直连网络上的出口设备。 #### 作用 默认路由的主要功能是处理那些无法匹配路由表中其他条目的数据包。具体来说: 1. **简化路由配置**:在网络边缘的路由器上配置默认路由可以帮助减少复杂的路由表项数量,从而降低管理难度并提高效率[^1]。 2. **兜底转发机制**:当某个数据包的目的地址未被路由表中的任何特定条目所覆盖时,路由器会依据默认路由将其发送至指定的下一跳设备,而不是简单地丢弃它。 3. **支持灵活的流量引导**:特别是在小型分支办公室或远程站点中,默认路由能够有效地将所有外部通信导向核心网络或互联网服务提供商(ISP)[^4]。 需要注意的是,默认路由通常部署于网络末端位置(即靠近终端用户的区域),以便集中管理和优化资源利用情况的同时保持良好的性能表现水平。 ```python # 示例 Python 脚本模拟简单的路由决策逻辑 def forward_packet(destination_ip, routing_table): match_found = False for entry in routing_table: network_address, subnet_mask, next_hop = entry if (int(ipaddress.IPv4Address(destination_ip)) & int(subnet_mask)) == \ (int(ipaddress.IPv4Address(network_address)) & int(subnet_mask)): print(f"Packet forwarded to {next_hop}") match_found = True break if not match_found and ('default', '0.0.0.0') in [(e[0], e[1]) for e in routing_table]: default_gateway = [entry[-1] for entry in routing_table if entry[:2]==('default','0.0.0.0')] print(f"No specific route found; packet sent via default gateway: {default_gateway[0]}") routing_table_example = [ ("192.168.1.0", ipaddress.ip_network("255.255.255.0"), "192.168.1.1"), ("default", "0.0.0.0", "172.16.0.1") # Default Route Example ] forward_packet("8.8.8.8", routing_table_example) # Test with an external address ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值