ping失败,如果在路由表main内没有entry

2024-03-17 10:08

本文主要是介绍ping失败,如果在路由表main内没有entry,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是一个没有完全理解的网络路由问题,现象如下:

[root@localhost ~]# ip a s dev eth1                                            
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:1e:67:64:ee:b8 brd ff:ff:ff:ff:ff:ff                         inet 192.168.19.22/24 brd 192.168.19.255 scope global eth1                 inet6 fe80::21e:67ff:fe64:eeb8/64 scope link                               valid_lft forever preferred_lft forever [root@localhost ~]# ip ro s
default via 192.168.19.254 dev eth1     [root@localhost ~]# ip ru s
0:      from all lookup 255
32764:  from all to 192.168.19.22 lookup HOST
32765:  from 192.168.19.22 lookup HOST
32766:  from all lookup main
32767:  from all lookup default[root@localhost ~]# ip ro s t HOST
192.168.19.0/24 dev eth1  scope link  src 192.168.19.22
default via 192.168.19.254 dev eth1[root@localhost ~]# ping 192.168.19.51 -w 5
PING 192.168.19.51 (192.168.19.51) 56(84) bytes of data.--- 192.168.19.51 ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 4999ms[root@localhost ~]# ping 192.168.19.51 -I eth1 -w 5                              
PING 192.168.19.51 (192.168.19.51) from 192.168.19.22 eth1: 56(84) bytes of data.--- 192.168.19.51 ping statistics ---                                            
6 packets transmitted, 0 received, 100% packet loss, time 4999ms      

但是如果我增加ping的参数,就可以ping通了,如下:

[root@localhost ~]# ping 192.168.19.51 -I eth1 -w 5 -r -c 3                      PING 192.168.19.51 (192.168.19.51) from 192.168.19.22 eth1: 56(84) bytes of data.64 bytes from 192.168.19.51: icmp_seq=1 ttl=64 time=2.20 ms                      64 bytes from 192.168.19.51: icmp_seq=2 ttl=64 time=0.226 ms                     64 bytes from 192.168.19.51: icmp_seq=3 ttl=64 time=0.437 ms                     --- 192.168.19.51 ping statistics ---                                            3 packets transmitted, 3 received, 0% packet loss, time 2001ms                   rtt min/avg/max/mdev = 0.226/0.955/2.204/0.887 ms                                [root@localhost ~]# ping 192.168.19.51 -I 192.168.19.22 -w 5 -c 3            
PING 192.168.19.51 (192.168.19.51) from 192.168.19.22 : 56(84) bytes of data.
64 bytes from 192.168.19.51: icmp_seq=1 ttl=64 time=1.86 ms                  
64 bytes from 192.168.19.51: icmp_seq=2 ttl=64 time=0.630 ms                 
64 bytes from 192.168.19.51: icmp_seq=3 ttl=64 time=0.210 ms                 --- 192.168.19.51 ping statistics ---                                        
3 packets transmitted, 3 received, 0% packet loss, time 2002ms               
rtt min/avg/max/mdev = 0.210/0.902/1.866/0.702 ms   

"-I" 和 "-r"的区别如下:

-I eth1 会调用 setsockopt 设置SO_BINDTODEVICE;

-I 192.168.19.22 会调用bind;

-r 会调用 setsockopt 设置 SO_DONTROUTE;

但是如果我在main路由表内增加entry也是可以ping通的,如下:

[root@localhost ~]# ip ro a 192.168.19.0/24 dev eth1          
[root@localhost ~]# ip ro s                                   
192.168.19.0/24 dev eth1  scope link                          
default via 192.168.19.254 dev eth1                           
[root@localhost ~]# ping 192.168.19.51 -c 3                   
PING 192.168.19.51 (192.168.19.51) 56(84) bytes of data.      
64 bytes from 192.168.19.51: icmp_seq=1 ttl=64 time=1.99 ms   
64 bytes from 192.168.19.51: icmp_seq=2 ttl=64 time=0.207 ms  
64 bytes from 192.168.19.51: icmp_seq=3 ttl=64 time=0.435 ms  --- 192.168.19.51 ping statistics ---                         
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.207/0.879/1.997/0.796 ms        

如果main table有路由,或者ping -I address 或者 ping -I interface -r, 都会通过,但是如果仅仅是 ping with -I interface 是不会通的.

到目前为止,还没有完全弄明白,因为对内核的路由策略不是特别的清楚,如果有哪位大神看到,还望回复给予解答,不胜感激!




这篇关于ping失败,如果在路由表main内没有entry的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/818640

相关文章

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

SpringBoot整合Dubbo+ZK注册失败的坑及解决

《SpringBoot整合Dubbo+ZK注册失败的坑及解决》使用Dubbo框架时,需在公共pom添加依赖,启动类加@EnableDubbo,实现类用@DubboService替代@Service,配... 目录1.先看下公共的pom(maven创建的pom工程)2.启动类上加@EnableDubbo3.实

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py

MySQL安装时initializing database失败的问题解决

《MySQL安装时initializingdatabase失败的问题解决》本文主要介绍了MySQL安装时initializingdatabase失败的问题解决,文中通过图文介绍的非常详细,对大家的学... 目录问题页面:解决方法:问题页面:解决方法:1.勾选红框中的选项:2.将下图红框中全部改为英