Windows中的路由表究竟有啥用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows中的路由表究竟有啥用相关的知识,希望对你有一定的参考价值。
我捣腾过路由器,知道路由器里有个路由表。今天我一看Windows里有个route命令,还有一个路由表。我就很奇怪,难道是可以把电脑当成一路由器使?哪位仁兄知道Windows里路由表的作用?举个例子最好。
每一个Windows系统中都具有IP路由表,它存储了本地计算机可以到达的网络目的地址范围和如何到达的路由信息。路由表是TCP/IP通信的基础,本地计算机上的任何TCP/IP通信都受到路由表的控制。理解路由表
你可以运行 route print 或 netstat -r 显示本地计算机上的路由表,如下图所示:
C:\Documents and Settings\administrator>route print
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x10003 ...00 50 8d 4f 5f c5 ...... Realtek RTL8139/810x Family Fast Ethernet NIC
===========================================================================
===========================================================================
Active Routes:
Network Destination
Netmask
Gateway
Interface
Metric
1
0.0.0.0
0.0.0.0
192.168.1.1
192.168.1.6
30
2
127.0.0.0
255.0.0.0
127.0.0.1
127.0.0.1
1
3
192.168.1.0
255.255.255.0
192.168.1.6
192.168.1.6
30
4
192.168.1.240
255.255.255.240
192.168.1.8
192.168.1.6
20
5
192.168.1.240
255.255.255.240
192.168.1.7
192.168.1.6
15
6
192.168.1.6
255.255.255.255
127.0.0.1
127.0.0.1
30
7
192.168.1.255
255.255.255.255
192.168.1.6
192.168.1.6
30
8
224.0.0.0
240.0.0.0
192.168.1.6
192.168.1.6
30
9
255.255.255.255
255.255.255.255
192.168.1.6
192.168.1.6
1
Default Gateway: 192.168.1.1
===========================================================================
Persistent Routes:
None
路由表中的每一个路由项具有五个属性,在此我将它们分为四个部分:
1、网络地址(Network Destination)、网络掩码(Netmask):网络地址和网络掩码相与的结果用于定义本地计算机可以到达的网络目的地址范围。通常情况下,网络目的地址范围包含以下四种:
主机地址;某个特定主机的网络地址,网络掩码为255.255.255.255,如上表中的6、7、9;
子网地址,某个特定子网的网络地址,如上表中的4、5;
网络地址;某个特定网络的网络地址,如上表中的2、3、8;
默认路由;所有未在路由表中指定的网络地址,如上表中的1,在后文将详细描述;
在添加路由时,Windows要求输入的网络地址和网络掩码相与后的结果必须等于网络地址,否则路由添加会失败。
2、网关(Gateway,又称为下一跳服务器):在发送IP数据包时,网关定义了针对特定的网络目的地址,数据包发送到的下一跳服务器。如果是本地计算机直接连接到的网络,网关通常是本地计算机对应的网络接口,但是此时接口必须和网关一致;如果是远程网络或默认路由,网关通常是本地计算机所连接到的网络上的某个服务器或路由器。
3、接口(Interface):接口定义了针对特定的网络目的地址,本地计算机用于发送数据包的网络接口。网关必须位于和接口相同的子网(默认网关除外),否则造成在使用此路由项时需调用其他路由项,从而可能会导致路由死锁。
4、跃点数(Metric):跃点数用于指出路由的成本,通常情况下代表到达目标地址所需要经过的跃点数量,一个跃点代表经过一个路由器。跃点数越低,代表路由成本越低;跃点数越高,代表路由成本越高。当具有多条到达相同目的网络的路由项时,TCP/IP会选择具有更低跃点数的路由项。
路由确定过程
当TCP/IP需要向某个IP地址发起通信时,它会对路由表进行评估,以确定如何发送数据包。评估过程如下:
TCP/IP使用需要通信的目的IP地址和路由表中每一个路由项的网络掩码进行相与计算,如果相与后的结果匹配对应路由项的网络地址,则记录下此路由项;
当计算完路由表中所有的路由项后,TCP/IP选择记录下的路由项中的最长匹配路由(网络掩码中具有最多“1”位的路由项)来和此目的IP地址进行通信。如果存在多个最长匹配路由,那么选择具有最低跃点数的路由项;如果存在多个具有最低跃点数的最长匹配路由,那么:
如果是发送响应数据包,并且数据包的源IP地址是某个最长匹配路由的接口的IP地址,那么选择此最长匹配路由;
其他情况下均根据最长匹配路由所对应的网络接口在网络连接的高级设置中的绑定优先级来决定。
网关和接口确定过程
在确定使用的路由项后,网关和接口通过以下方式确定:
如果路由项中的网关地址为空或者为本地计算机上的某个网络接口,那么在发送数据包时:
通过路由项中对应的网络接口发送;
源IP地址为此网络接口的IP地址;
源MAC地址为此网络接口的MAC地址;
目的IP地址为接收此数据包的目的主机的IP地址;
目的MAC地址为接收此数据包的目的主机的MAC地址;
如果路由项中的网关地址并不属于本地计算机上的任何网络接口,那么在发送数据包时:
通过路由项中对应的网络接口发送;
源IP地址为路由项中对应网络接口的IP地址;
源MAC地址路由项中对应网络接口的MAC地址;
目的IP地址为接收此数据包的目的主机的IP地址;
目的MAC地址为网关的MAC地址;
在此我以上面的路由表为基础,举例进行说明:
和单播IP地址 192.168.1.8 的通信:在进行相与计算时,1、3 项匹配,但是3项为最长匹配路由,因此选择3项。3项的网关地址为本地计算机的网络接口192.168.1.6,因此发送数据包时,目的IP地址为 192.168.1.8、目的MAC地址为192.168.1.8的MAC地址(通过ARP解析获得)。
和单播IP地址 192.168.1.6 的通信:在进行相与计算时,1、3、6 项匹配,但是6项为最长匹配路由,因此选择6项。6项的网关地址为本地环回地址127.0.0.1,因此直接将数据包发送至本地环回地址。
和单播IP地址 192.168.1.245 的通信:在进行相与计算时,1、3、4、5 项匹配,但是4、5项均为最长匹配路由,所以此时根据跃点数进行选择,5 项具有更低的跃点数,因此选择5项;在发送数据包时,目的IP地址为192.168.1.254、目的MAC地址为192.168.1.7的MAC地址(通过ARP解析获得)。
和单播IP地址 10.1.1.1 的通信:在进行相与计算时,只有 1 项匹配;在发送数据包时,目的IP地址为10.1.1.1、目的MAC地址为192.168.1.1的MAC地址(通过ARP解析获得)。
和子网广播地址 192.168.1.255 的通信:在进行相与计算时,1、3、4、5、7 项匹配,但是7项为最长匹配路由,因此选择7项。7项的网关地址为本地计算机的网络接口,因此在发送数据包时,目的IP地址为 192.168.1.255,目的MAC地址为以太网广播地址FF:FF:FF:FF:FF:FF。
默认路由与默认网关
由于在路由表中存储针对每个主机或子网的路由项不可行,因此提出了默认路由的概念,默认路由中的网关称为默认网关。默认路由的网络地址为0.0.0.0,网络掩码为0.0.0.0,它匹配任何网络通信,因此当到达特定主机或特定子网的路由并未在路由表中指定时,均可以通过默认路由来进行转发。如果没有设置默认路由,那么无法到达未在路由表中指定路由项的网络目的地址。
设置默认路由后,把数据包的路由责任移交到了路由器,优点是简化了本地计算机上的路由表和配置,缺点则是计算机无法明确目的地址是否可达,从而可能发送针对不可到达地址的流量。虽然位于路由路径上的路由器知道目的地址不可达时会使用ICMP目的地址不可达信息来通知原始发送主机,但是这个过程中,已经占用了额外的网络流量。
在Windows系统中,创建默认路由可以通过以下两种方式实现:
在网络接口的TCP/IP选项中设置默认网关,从而创建默认路由;
使用 route add 命令添加网络地址为0.0.0.0、网络掩码为0.0.0.0的默认路由;
推荐大家总是使用前一种方式。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ast_224/archive/2008/11/28/3404208.aspx 参考技术A 呵,上面的这位兄收集的资料比较全呀,呵呵
言归正传,在Windows中也有路由表,这有什么用呢?那与实际的路由器的设备有什么区别?
对于一些大公司,大企业,他们对网络要求比较高,比如安全,性能,处理能力等,这时候就要求我们要用一些专业设备来组建网络,我们就需要路由器。
对于一些小型的局域网,用户也少,对网络要求也不高,我们就不需要一些专业设备,同时对于小型企业也是很昂贵的,那么我们就需要拿一台相对配置较高的电脑来做一台路由器,如Windows 2003 Server,Linux,来实现上网的功能。
他们的相同点就是为了实现路由,实现上网功能,
他们的不同点就是看网络大小的需求,一个是经济型,一个相对专业安全型。本回答被提问者和网友采纳 参考技术B 设置默认路由。
1.它匹配任何网络通信,因此当到达特定主机或特定子网的路由并未在路由表中指定时,均可以通过默认路由来进行转发。
2.没有设置默认路由,那么无法到达未在路由表中指定路由项的网络目的地址。
究竟啥是画布路径,ctx.closePath() 有啥用?
【中文标题】究竟啥是画布路径,ctx.closePath() 有啥用?【英文标题】:What exactly is a canvas path, and what is the use of ctx.closePath()?究竟什么是画布路径,ctx.closePath() 有什么用? 【发布时间】:2012-06-04 03:41:21 【问题描述】:我正在开发一款 HTML5 游戏。我需要在画布中绘制尾线并检查游戏中的交叉点,这是一款 Tron 风格的游戏。
我实际上在使用the drawLine()
function from JCanvas,但 JCanvas 没有为我提供检查线交点的方法,我在源代码中挖掘并发现使用 ctx
对象,并在函数结束时我'在使用时,我返回了对象,所以我可以使用ctx.isPointInPath()
方法来实现我需要的东西,但不起作用,每次都返回false
...
我真的不明白什么是路径——ctx.isPointInPath()
是否会返回 true
只是为了在 ctx.beginPath()
之后使用 ctx.moveTo()
设置的点?还是会为使用ctx.lineTo()
连接的两个连续ctx.moveTo()
s 之间的所有点返回true
?
ctx.closePath()
有什么用?
和有什么区别:
ctx.closePath();
ctx.fill();
ctx.stroke();
和:
ctx.fill();
ctx.stroke();
ctx.closePath();
【问题讨论】:
参考:specification onclosePath()
.
【参考方案1】:
什么是路径?
它是定义矢量形状边界的一系列路径命令(moveTo、lineTo、arcTo 等)。然后,您可以根据需要填充和/或描边路径。
closePath()
有什么用?
演示:http://jsfiddle.net/YrQCG/5/
// Draw a red path using closePath() in the middle
ctx.beginPath();
ctx.strokeStyle = 'red';
ctx.moveTo(50,100);
ctx.lineTo(100,150);
ctx.lineTo(150,100);
ctx.closePath();
ctx.lineTo(50,50);
ctx.stroke();
// Slide the next path over by 150 pixels
ctx.translate(150,0);
// Draw a blue path using the exact same commands, but without closePath
ctx.beginPath();
ctx.strokeStyle = 'blue';
ctx.moveTo(50,100);
ctx.lineTo(100,150);
ctx.lineTo(150,100);
//ctx.closePath();
ctx.lineTo(50,50);
ctx.stroke();
使用closePath()
使笔的点移回当前子路径的起点,从当前点画一条线回到起点;下一个命令从这个新点开始。如果您想在不显式绘制最后一行的情况下绘制完整轮廓的形状,这将非常有用。
这相当于调用 lineTo()
与当前子路径的第一个点的位置,然后 moveTo()
到同一点(建立一个新的子路径)。
如上所示,我们使用第一个 moveTo
和随后的两个 lineTo
命令绘制了一个 V
符号。当我们在红色路径上调用closePath
时,它会绘制水平条并导致下一行从左上角开始。
当我们不在蓝色路径中调用closePath
时,下一个lineTo
命令会从最后绘制的点继续执行。
请注意,closePath()
在大多数情况下 是必需的,与 beginPath()
不同,您每次想要开始绘制新路径时都必须调用它。 (如果不这样做,所有旧的路径绘制命令都是下一个绘图的一部分。)
【讨论】:
谢谢(:......最后一个问题 .isPointInPath() 将根据最后一条路径进行评估(即使它已经关闭)?? 只有一个路径(可能有子路径)。isPointInPath()
方法将针对整个路径(所有子路径)进行测试,包括 closePath()
是否画了一条线。 (请注意,语句“只有一条路径” 适用于上下文;您也可以创建Path
对象。
@Aronis See this demo: isPointInPath()
不考虑笔划,但测试路径的等效填充区域(该演示中的黄色)。点50,50
直接沿着其中一条线的边缘,但与没有填充的区域相邻。
这是另一个演示,展示了一个测试成功的情况,该点恰好位于路径边缘,但与非零填充区域相邻:jsfiddle.net/kLZfc/4【参考方案2】:
这是封闭路径的基本表示:
ctx.beginPath();
ctx.moveTo(0,0);
ctx.lineTo(100,0);
ctx.lineTo(100,100);
ctx.lineTo(0,100);
ctx.closePath(); // <--the image right side has this line
ctx.stroke();
closePath()
的结果是起点和终点是有界的。
【讨论】:
以上是关于Windows中的路由表究竟有啥用的主要内容,如果未能解决你的问题,请参考以下文章