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

相关文章

豆包 MarsCode 不允许你还没有女朋友

在这个喧嚣的世界里,爱意需要被温柔地唤醒。为心爱的她制作每日一句小工具,就像是一场永不落幕的浪漫仪式,每天都在她的心田播撒爱的种子,让她的每一天都充满甜蜜与期待。 背景 在这个瞬息万变的时代,我们都在寻找那些能让我们慢下来,感受生活美好的瞬间。为了让这份浪漫持久而深刻,我们决定为女朋友定制一个每日一句小工具。这个工具会在她意想不到的时刻,为她呈现一句充满爱意的话语,让她的每一天都充满惊喜和感动

ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法

在win7 64位系统下安装oracle11g,在使用Database configuration Assistant创建数据库时,在创建到85%的时候报错,错误如下: 解决办法: 在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下: 1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

安装SQL2005后SQL Server Management Studio 没有出来的解决方案

一种情况,在安装 sqlServer2005 时 居然出现两个警告: 1 Com+ 目录要求 2 Edition change check 郁闷!网上说出现两个警告,是肯定装不成功的!我抱着侥幸的态度试了下,成功了。 安装成功后,正准备 “ 仅工具、联机丛书和示例(T)” 但是安装不了,他提示我“工作站组件”安装过了对现有组件无法更新或升级。 解决办法: 1 打开“控

跟我一起玩《linux内核设计的艺术》第1章(四)——from setup.s to head.s,这回一定让main滚出来!(已解封)

看到书上1.3的大标题,以为马上就要见着main了,其实啊,还早着呢,光看setup.s和head.s的代码量就知道,跟bootsect.s没有可比性,真多……这确实需要包括我在内的大家多一些耐心,相信见着main后,大家的信心和干劲会上一个台阶,加油! 既然上篇已经玩转gdb,接下来的讲解肯定是边调试边分析书上的内容,纯理论讲解其实我并不在行。 setup.s: 目标:争取把setup.

main函数执行前、后再执行的代码

一、main结束 不代表整个进程结束  (1)全局对象的构造函数会在main 函数之前执行,          全局对象的析构函数会在main函数之后执行;          用atexit注册的函数也会在main之后执行。  (2)一些全局变量、对象和静态变量、对象的空间分配和赋初值就是在执行main函数之前,而main函数执行完后,还要去执行一些诸如释放空间、释放资源使用权等操作   (3)

src/pyaudio/device_api.c:9:10: fatal error: portaudio.h: 没有那个文件或目录

(venv) shgbitai@shgbitai-C9X299-PGF:~/pythonworkspace/ai-accompany$ pip install pyaudio sounddeviceCollecting pyaudioDownloading PyAudio-0.2.14.tar.gz (47 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

C# 如何同时Ping多个IP地址

在C#中,如果需要同时ping多个IP地址,可以采用多线程或异步编程的方式来实现,以便可以同时进行多个ping操作。以下是两种常用的方法: 方法一:使用多线程(Task 或 Thread) 使用Task是更现代和推荐的方式,因为它内置了更好的线程管理和异常处理机制。以下是一个使用Task的示例,展示如何同时ping多个IP地址: using System; using System.Co

html记账本改写:数据重新布局,更好用了,没有localStorage保存版本

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><title>htm记账本</title><style>table {user-select: none;/* width: 100%; */border-collapse: collapse;}table,th,td {border: 1px solid bla

ssh版本升级导致连接失败

公司系统使用的是第三方ssh插件jsch-0.1.39.jar,之前采集正常的,但是厂家服务器ssh升级成2.0版本,然后程序就报错,异常如下: com.jcraft.jsch.JSchException: Algorithm negotiation failat com.jcraft.jsch.Session.receive_kexinit(Session.java:510)at com.