双网卡,特定网页走特定网卡,Windows:配置多网卡路由表
Windows:配置多网卡路由表(规则)
有时出差到中国移动研究院,既要连接到内网指定服务器工作,又希望能连接外网随时能查一些资料。
但是内网和外网不通的,如何配置笔记本能实现多网卡路由?
前置条件:
1.网线连接内网;(网线,交换机)
2.无线连接外网;(无线,WIFI)
怎么做?
1.没有插网线,没有连 WIFI 时,笔记本路由表:
查看路由表执行:route print(或者 route print -4)
重点看 IPv4 路由表。
2.插入连接内网网线,笔记本路由表:
连接插入网线,无需其他操作,系统自动添加默认路由(0.0.0.0)。
此时测试内网,已经可以通信:
在进行下一步之前,请记住,内网的网关(下一跳网络地址)是 192.168.25.1。
3.保持内网网线连接,同时连接外网 WIFI,笔记本路由表:
发现新增默认路由规则:0.0.0.0 到 192.168.43.1 的映射。
我们可以知道:外网的网关是 192.168.43.1。
4.执行命令,修改路由规则:
以管理员权限运行 cmd 可执行程序(C:\Windows\System32\cmd),执行:
1)
命令:route delete 0.0.0.0
作用:将默认路由规则清空。
2)
命令:route add 0.0.0.0 mask 0.0.0.0 192.168.43.1
作用:添加默认路由规则,指向外网网关。【访问外网】
3)
命令:route add 192.168.0.0 mask 255.255.0.0 192.168.25.1
作用:添加普通路由规则,指向内网网关。【访问内网】
注意:
我要访问的内网地址都是192.168.x.x,因此我的子网掩码是 255.255.0.0。
假如访问的内网地址都是192.168.6.x,因此我的子网掩码是255.255.255.0。【当然,也可以选其他的子网掩码达到相同效果】
5.测试:
此时路由表为:
配置完毕!
如果配置中有问题或者想了解原理可以继续向下看。
为什么?
路由表通常形如:
目的网络地址(D) | 子网掩码(M) | 下一跳(N) |
---|---|---|
0.0.0.0 | 0.0.0.0 | 192.168.43.1 |
192.168.0.0 | 255.255.0.0 | 192.168.25.1 |
…… | …… | …… |
IP 包如何路由(路由器转发分组)?
1)从收到的数据报的首部提取目的 IP 地址 D1;
2)先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码(M)和 D1 逐位相“与”,看结果是否和相应的网络地址(D)匹配。若匹配,则把分组进行直接交付(当然还需要把 D1 转换成物理地址,把数据报封装成帧发送出去),转发任务结束。否则就是间接交付,执行3);
3)若路由表中有目的地址为 D1 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器(N);否则,执行4);
4)对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码(M)和 D1 逐位相“与”,其结果为 D2。若 D2 与该行的目的网络地址(D)匹配,则把数据报传送给该行指明的下一跳路由器(N);否则,执行5);
5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行6);
6)转发分组出错。
(来源:计算机网络第六版 谢希仁)
重点:4),对应于我们添加内网网关 192.168.25.1,普通路由;5),对应于我们添加外网网关,默认路由。
查看网关的方法
打开控制面板(WIN+R,control),控制面板\网络和 Internet\网络连接:
右键目标网络,点击“状态”:
多网卡配置
配置双网卡和多网卡没什么本质区别。
网络连接方式可以是:
1.网线网口连接;
2.USB共享网络;
3.蓝牙共享网络;
4.WIFI共享网络;
配置双网卡则需要有两个网络连接,配置多网卡则需要有多个网络连接。
连接网络后添加对应路由规则即可。
其他
通过IP层如何发数据给 192.168.243.224 主机?
1.本机指定目的主机的IP地址:192.168.224.243,以及传输数据;
2.本机 IP 协议栈封装 IP 包,将传输数据填充入 IP 包的数据部分,计算下一跳地址;
3.目的地址是 192.168.243.224,与子网掩码 255.255.0.0 做逻辑与运算,得出的地址是 192.168.0.0,与路由表的目的网络地址相同,符合路由规则,则本机将 IP 包发往下一跳 192.168.25.1 ;
4.由本机数据链路层做 ARP 地址解析,获取 192.168.25.1 的 MAC 地址;
5.将本机 IP 层交付的 IP 包封装成帧(数据部分),目的 MAC 填入 192.168.25.1 的 MAC 地址,发送。
链接
1.https://blog.csdn.net/tao546377318/article/details/52485627
2.https://www.cnblogs.com/lcword/p/8149668.html
Windows路由表详解
关于双网卡电脑,特定网页走特定网卡的设置
双网卡有时候因为访问顺序原因导致不能访问某些特定网页,下面介绍一下我解决此类问题的方法
首先要知道换网卡顺序是否可以进
若是换网卡顺序都不能进去,请百度或必应错误寻找解决办法
下面主要介绍换网卡就可以进去的方法
1、 可用网卡进去后
打开CMD,输入“ping+空格+域名”(域名为中间那个,如www.baidu.com,域名为baidu)
Ping完后会出现IP地址,以及TTL(跃点),记下来
2、 查看添加路由
在CMD中,输入“route print”可显示本机路由表,查看永久路由中是否两张网卡的网关都存在。(以内网和外网为例:两个都存在可能会存在冲突,这时候我们就要删除内网网关)
删除流程:先在注册表中将对应的的永久路由条目删掉
永久路由条目位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes
删除后,重起电脑,完毕后来,再使用route delete 0.0.0.0 mask 0.0.0.0 192.XXX.XX.XX(永久路由的网关)
添加永久路由:知道ip和跃点后,我们可以添加永久路由来解决域名没有解析的问题。输入: route add -p x.x.x.x mask x.x.x.x z.z.z.z metric 1
(外网IP)(子网掩码如255.255)(网卡网关永久路由表看到那个如10.0)
(metric 1 数字代表跃点数,上面有说如何查)
特别说明:添加路由后,登录此网站可能需要直接输入其ip地址,不能用域名登录
-
import java.net.InetAddress;
-
import java.net.NetworkInterface;
-
import java.net.SocketException;
-
import java.util.Enumeration;
-
-
/**
-
*
-
* @anthor leo
-
* @date 2016年6月27日下午12:40:14
-
* @description
-
*
-
**/
-
-
public class Main {
-
-
public static void main(String[] args) throws SocketException {
-
System.out.println(Main.getRealIp());
-
}
-
-
public static String getRealIp() throws SocketException {
-
String localip = null;// 本地IP,如果没有配置外网IP则返回它
-
String netip = null;// 外网IP
-
-
Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();
-
InetAddress ip = null;
-
boolean finded = false;// 是否找到外网IP
-
while (netInterfaces.hasMoreElements() && !finded) {
-
NetworkInterface ni = netInterfaces.nextElement();
-
Enumeration<InetAddress> address = ni.getInetAddresses();
-
while (address.hasMoreElements()) {
-
ip = address.nextElement();
-
if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 外网IP
-
netip = ip.getHostAddress();
-
finded = true;
-
break;
-
} else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress()
-
&& ip.getHostAddress().indexOf(":") == -1) {// 内网IP
-
localip = ip.getHostAddress();
-
}
-
}
-
}
-
-
if (netip != null && !"".equals(netip)) {
-
return netip;
-
} else {
-
return localip;
-
}
-
}
-
}