没有到主机的路由_从双网卡出发了解Windows路由表

afca66a3dfdab498777b527e52b233a9.png

路由表解释

输入ipconfig

f5d783b74c319e2100b61bc231c4d98f.png

输入route print

f8c69161682e1d90262f8602ea94384e.png

网络目标(Network Destination):根据网络掩码的不同,网络目标可以表示主机地址也可以表示网络地址。如掩码是255.255.255.255,则代表网络目标指向的是一个主机地址,当掩码是255.255.255.0(/24)时,网络目标代表的是网络地址(主机号为0)。当为某个目的IP地址搜索路由表时,主机地址必须与目标地址完全匹配,而网络地址只需要匹配目标的网络号和子网号就可以了。

  • 网络掩码(Netmask):显示网络目标的范围
  • 接口(Interface):接口对应着TCP协议中的Source IP,也就是本机IP。需要与目标地址和网关在一个网段中。接口也可以理解为指向的网卡,即指定发往网络目标的数据包将由哪个网卡发出。
  • 跃点数(Metric):代表跳出路由的成本,通常情况下代表到达目标地址所需要经过的跳跃数量,一个跃点数代表经过一个路由器。跃点数越低,代表路由成本越低,优先级越高。

双网卡讨论

添加一张新的网卡

8efb0efc31dacfe1ab8688bddd4c5e49.png

查看路由表

3868e0a4f8b991291eb8f87e6f91a5ef.png

可以看到Interface List多了一条网卡,而且路由表也多了一条默认项。

这里我使用虚拟机进行模拟,IP为192.168.0.109的网卡是桥接网卡,可以连接互联网。而IP为192.168.68.128的网卡是主机模式的网卡,无法连接互联网。

现在我们分别ping局域网和百度试下。

4a799858c8b38f6925b0607c82123096.png

7e71f6f299447b601ce944a6895b7465.png

都可以ping通,而且用Wireshark抓包发现桥接网卡(Ethernet0)给百度发包,主机网卡(Ethernet2)给局域网内的主机发包。

62007f91d1ef20422e9d419f3d5c77c9.png

34b74de8544e06185760698e47e2644f.png

目前为止一切都很正常,但如果ping不存在的局域网IP,会发生什么呢。

0e69ab7397ca99d0e715042a657eec49.png

ping不存在的IP,显然是不可能ping通的,这个没有异议。但是问题来了,这个ICMP包是由桥接网卡(Ethernet0)还是主机网卡(Ethernet2)发出去的呢?如果你觉得局域网的包是由主机网卡(Ethernet2)发出去的话,那就错了。事实上通过抓包发现,这三个ICMP包是由桥接网卡(Ethernet0)发出去的。

3f75d4252c8b12b5d543d6473f62ef49.png

细心的同学可能发现了,ping的时候发出去了4个包,为什么就只抓到三个ICMP包呢?其实之前在ping的时候返回的第一条信息就说了“192.168.68.128不可达”。这个反馈信息其实是在主机网卡(Ethernet2)ARP192.168.68.128后抓不到返回的信息。

Reply from 192.168.68.128: Destination host unreachable.

81f9a4d8f6680c5819c8449d59c4984a.png

如上图所示,主机网卡(Ethernet2)其实也是发包的,它先发了个ARP包,但无人应答,那么就转为由桥接网卡(Ethernet0)发包。

如果向桥接网卡(Ethernet0)的网段发包如192.168.0.200,则由桥接网卡(Ethernet0)发包。

fc8c1459053549a53be1b750e2dfbd1f.png

55c177d2b3b7949548668d83929dc755.png

根据以上情况,我们可以得到ping的发包规则是,如果目标地址在哪个网卡的网段,就优先使用这个网卡发包,但如果该网卡找不到这个IP,则会转到Metric更低的网卡尝试。

那么程序是如何知道某个给定的IP是属于哪个接口也就是哪个网卡的网段呢?我们猜想是从路由表里面查询得到的,如下图就是一条指向192.168.68.0/24的网络地址。我们看看如果把它删掉会发生什么。

fc6149c952cec44f9292b5f5e1f85d91.png

执行命令route delete 192.168.68.0,该记录已经被从路由表中移除,这时候我们重新ping一下192.168.68.0/24网段。

d0aae09040666ff503d267a496f0565b.png

这次所有的记录都是从桥接网卡(Ethernet0)发出去的,主机网卡(Ethernet2)一个包都没有发。

31e1585ea5050cc7b19d04c2880b0056.png

7d828e9ea7544220ba102a3566e36dfa.png

从这次试验我们可以看出ping程序在发包之前首先会查询路由表,如果路由表上有匹配的项目,如刚开始的192.168.68.200匹配我们删除的规则192.168.0.0,则ping程序会根据这个规则采用主机网卡(Ethernet2)接口发包出去。

但如果目标IP在路由表中没有找到,则采用默认规则发送,即0.0.0.0这一条,如果有两条默认规则0.0.0.0,则采用Metric最小的接口。

如果两者Metric相同,则采用最上面的那一个。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值