这是个最基本的网络知识了,可前些天遇到这个问题,发现快忘完了,就在这记下来吧。
基本原理
首先上两张图
正确的路由设置下的网络包流向
有两个默认路由设置的网路包流向
你的电脑同时连接内外网,会向不同的地址发送很多网路包,首先的机器上会缓存一个路由表,你的网卡根据这个路由表,决定你的网络包下一站的地址是哪。
正常情况下,访问特别网段地址都会设置路由,比如上图访问10.11.12.0/24段的包因为符合路由条件
10.11.12.0 255.255.255.0 10.11.12.1
因此,它会被导向到10.11.12.1这个网关地址,然后去找自己的目的的。
而那些没有符合的路由条件的包,则会一股脑的跑到默认路由的地址上去,即
0.0.0.0 0.0.0.0 192.168.1.1(默认网关)
但是,如果你的机器缓存中有两个默认网管,如下面那个图所示
那么那些本来找不到要去哪的包就会有两条路可走,即
一条0.0.0.0 0.0.0.0 192.168.1.1-----可正常找到百度谷歌的路
一条0.0.0.0 0.0.0.0 10.11.12.1-----找不到百度谷歌的路
所以,当你访问百度谷歌的时,有些请求包走着192.168.1.1的路,有些就会走另外一条。
走192.168这条路的包能因为包丢失,返回不了结果,走另外一条路的包则直接进了死胡同,直接被丢掉了。
所以,你的网路会出现,网络不稳定的情况。因为有时候一批包都走192.168那条路,你访问外网正常,一会一批包走错路了,你就又上不去外网了。
所以,在一台电脑上,只能设置一条默认路由,而这条默认路由是要能走通外网的网关。
而对于对内网地址的访问,你只需要针对你要访问的内网网段设置合适的路由,那么这些放回就不会因为找不到路而跑到默认网管上面去。
基本就是这个道理。
说下基本设置(windows环境下)
查看本地缓存路由表
cmd里面执行
route print
里面会有两种路由,临时路由和永久路由,临时路由是你重启就会消失的,而永久路由重启机器依然存在。
增加一条路由
route add 10.11.12.0(网络地址) mask 255.255.255.0(子网掩码) 10.11.12.1(网关地址)
删除一条路由
route delete 10.11.12.0(网络地址)
改变一条路由
route change <span style="font-family: Arial, Helvetica, sans-serif;">10.11.12.0(网络地址) mask 255.255.255.0(子网掩码) 10.11.12.2(网关地址)
永久路由的问题
上面增加的路由为临时路由,若想使之变成永久路由,可在
route add 命令的最后使用参数 -p。
不过我这里不推荐增加永久路由,因为永久路由删除比较麻烦。而且你可以把你要增加的路由写进一个批处理文件中,每次双击执行就行了。
但是,如果你机器中已经存在了一条永久路由,要删除它,需要在注册表
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\PersistentRoutes]
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\Tcpip\Parameters\PersistentRoutes]
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\Tcpip\Parameters\PersistentRoutes]
下找到对应的条目删除。
这个方法,我曾在xp系统上实验,都是每次直接成功,但在window 7系统实验的时候则遇到了些问题,没法顺利删除。
所以,还是不建议使用永久路由吧。