由 beyondsakai 在 03-07-2003 17:30 发表:
路由器与网关有何异同?
路由器与网关有何异同?它们同样是将两个不同的网络连起来,但其最本质的区别是什么呢?
最本质的共同点又是什么呢?
由 Snoopy 在 03-07-2003 17:56 发表:
我也想知道,,大家回贴快点拉,,,,嘻嘻
And then in the evening light, when the bars of freedom fall
I watch the two of you in the shadows on the wall
How in the darkness steals some of the choices from my hand
Then will I begin to under
由 yoytdt 在 03-08-2003 11:52 发表:
他们所处在的层次不通,路由在网络层,网关在应用层,这个是最本质
的,现在已经很少用实际意义中的网关了,网关也成了路由的代名词。
补充一点,它们不止能联结两个不同网络,;应该说是N个,只能联结
两个的是网桥。
由 beyondsakai 在 03-09-2003 10:00 发表:
既然作用一差不多那么为何又会有这两种
东西呢?
由 KornLee 在 03-09-2003 12:41 发表:
最本质的区别是网关可以联结不同协议的网络,用于不同网络架构之间通信协议栈的转化,而路由器只能工作在相同协议的网络中.路由器可以工作在OSI的1-3层,而网关可以工作在1-7层.
请删除我的ID!!!谢谢大家!!!
由 beyondsakai 在 03-09-2003 20:36 发表:
长见识
由 hotmanhh 在 03-12-2003 12:53 发表:
有谁能提供一下路由器的知识?
在此谢过了
新的生活开始了,努力,奋斗。
由 realone 在 03-12-2003 20:48 发表:
建议楼上的找本思科的教程看看,会有所帮助的~
由 KornLee 在 03-13-2003 00:11 发表:
路由器概说
最简单的网络可以想象成单线的总线,各个计算机可以通过向总线发送分组以互相通信。但随着网络中的计算机数目增长,这就很不可行了,会产 生许多问题:
1、带宽资源耗尽。
2、每台计算机都浪费许多时间处理无关的广播数据。
3、网络变得无法管理,任何错误都可能导致整个网络瘫痪。
4、每台计算机都可以监听到其他计算机的通信。
把网络分段可以解决这些问题,但同时你必须提供一种机制使不同网段的计算机可以互相通信,这通常涉及到在一些ISO网络协议层选择性地在网段间传送数据,我们来看一下网络协议层和路由器的位置。
我们可以看到,路由器位于网络层。本文假定网络层协议为IPv4,因为这是最流行的协议,其中涉及的概念与其他网络层协议是类似的。
一、路由与桥接
路由相对于2层的桥接/交换是高层的概念,不涉及网络的物理细节。在可路由的网络中,每台主机都有同样的网络层地址格式(如IP地址),而无论它是运行在以太网、令牌环、FDDI还是广域网。网络层地址通常由两部分构成:网络地址和主机地址。
网桥只能连接数据链路层相同(或类似)的网络,路由器则不同,它可以连接任意两种网络,只要主机使用的是相同的网络层协议。
二、连接网络层与数据链路层
网络层下面是数据链路层,为了它们可以互通,需要"粘合"协议。ARP(地址解析协议)用于把网络层(3层)地址映射到数据链路层(2层)地址,RARP(反向地址解析协议)则反之。
虽然ARP的定义与网络层协议无关,但它通常用于解析IP地址;最常见的数据链路层是以太网。因此下面的ARP和RARP的例子基于IP和以太网,但要注意这些概念对其他协议也是一样的。
1、地址解析协议
网络层地址是由网络管理员定义的抽象映射,它不去关心下层是哪种数据链路层协议。然而,网络接口只能根据2层地址来互相通信,2层地址通过ARP从3层地址得到。
并不是发送每个数据包都需要进行ARP请求,回应被缓存在本地的ARP表中,这样就减少了网络中的ARP包。ARP的维护比较容易,是一个比较简单的协议。
2、简介
如果接口A想给接口B发送数据,并且A只知道B的IP地址,它必须首先查找B的物理地址,它发送一个含有B的IP地址的ARP广播请求B的物理地址,接口B收到该广播后,向A回应其物理地址。
注意,虽然所有接口都收到了信息,但只有B回应该请求,这保证了回应的正确且避免了过期的信息。要注意的是,当A和B不在同一网段时,A只向下一跳的路由器发送ARP请求,而不是直接向B发送。
下图为接收到ARP分组后的处理,注意发送者的
1<ip address="" address,="" hardware="">对被存到接收ARP请求的主机的本地ARP表中,一般A想与B通信时,B可能也需要与A通信。
2
3
4
5
6
7
8
93、IP地址冲突
10
11
12
13
14
15ARP产生的问题中最常见的是IP地址的冲突,这是由于两个不同的主机IP地址相同产生的,在任何互联的网络中,IP地址必须是唯一的。这时会收到两个ARP回应,分别指出了不同的硬件地址,这是严重的错误,没有简单的解决办法。
16
17
18
19为了避免出现这类错误,当接口A初试化时,它发送一个含有其IP地址的ARP请求,如果没有收到回应,A就假定该IP地址没有被使用。我们假定接口B已经使用了该IP地址,那么B就发送一个ARP回应,A就可以知道该IP地址已被使用,它就不能再使用该IP地址,而是返回错误信息。这样又产生一个问题,假设主机C含有该IP地址的映射,是映射到B的硬件地址的,它收到接口A的ARP广播后,更新其ARP表使之指向A的硬件地址。为了解决这个错误,B再次发送一个ARP请求广播,这样主机C又更新其ARP表再次指向B的硬件地址。这时网络的状态又回到先前的状态,有可能C已经向A发送了应该发送给B的IP分组,这很不幸,但是因为IP提供的是无保证的传输,所以不会产生大的问题。
20
21
22
234、管理ARP缓存表
24
25
26
27
28
29ARP缓存表是<ip地址,硬件地址>对的列表,根据IP地址索引。该表可以用命令arp来管理,其语法包括:
30
31
32
33向表中添加静态表项 -- arp -s <ip address=""> <hardware address="">
34
35
36
37从表中删除表项 -- arp -d <ip address="">
38
39
40
41显示表项 -- arp -a
42
43
44
45ARP表中的动态表项(没有手动加入的表项)通常过一段时间自动删除,这段时间的长度由特定的TCP/IP实现决定。
46
47
48
495、静态ARP地址的使用
50
51
52
53
54
55静态ARP地址的典型使用是设置独立的打印服务器,这些设备通常通过telnet来配置,但首先它们需要一个IP地址。没有明显的方法来把此信息告诉该设备,好象只能使用其串口来设置。但是,这需要找一个合适的终端和串行电缆,设置波特率、奇偶校验等,很不方便。
56
57
58
59假设我们想给一个打印服务器设置IP地址P-IP,并且我们知道其硬件地址P-hard,在工作站A上创建一个静态ARP表项把P-IP映射到P-hard,这样,虽然打印服务器不知道自己的IP地址,但是所有指向P-IP的数据就将被送到P-hard。我们现在就可以telnet到P-IP并配置其IP地址了,然后再删除该静态ARP表项。
60
61
62
63
64
65
66
67有时会在一个子网里配置打印服务器,而在另一个子网里使用它,方法与上面类似。假设其IP地址为P-IP,我们分配一个本网的临时IP地址T-IP给它,在工作站A上创建临时ARP表项把T-IP映射到P-hard,然后telnet到T-IP,给打印服务器配以IP地址P-IP。接下来就可以把它放到另一个子网里使用了,别忘了删除静态ARP表项。
68
69
70
71
72
73
74
756、代理ARP
76
77
78
79
80
81可以通过使用代理ARP来避免在每台主机上配置路由表,在使用子网时这特别有用,但注意,不是所有的主机都能理解子网的。基本的思想是即使对于不在本子网的主机也发送ARP请求,ARP代理服务器(通常是网关)回应以网关的硬件地址,见下图,注意与上面的图比较一下。
82
83
84
85代理ARP简化了主机的管理,但是增加了网络的通信量(不是很明显),并且可能需要较大的ARP缓存,每个不在本网的IP地址都被创建一个表项,都映射到网关的硬件地址。在使用代理ARP的主机看来,世界就象一个大的没有路由器物理网络
86
87三、IP地址
88
89
90
91
92
93在可路由的网络层协议中,协议地址必须含有两部分信息:网络地址和主机地址。存贮这种信息最明显的方法是用两个分离的域,这样我们必须考虑到两个域的最大长度,有些协议(如IPX)就是这样的,它在小型和中型的网络里可以工作的很好。
94
95
96
97另一种方案是减少主机地址域的长度,如24位网络地址、8位主机地址,这样就有了较多的网段,但每个网段内的主机数目很少。这样一来,对于多于256个主机的网络,就必须分配多个网段,其问题是很多的网络给路由器造成了难以忍受的负担。
98
99
100
101IP把网络地址和主机地址一起包装在一个32位的域里,有时主机地址部分很短,有时很长,这样可以有效利用地址空间,减少IP地址的长度,并且网络数目不算多。有两种将主机地址分离出来的方法:基于类的地址和无类别的地址。
102
103
104
1051、主机和网关
106
107
108
109
110
111主机和网关的区别常产生混淆,这是由于主机意义的转变。在RFC中(1122/3和1009)中定义为:
112
113
114
115主机是连接到一个或多个网络的设备,它可以向任何一个网络发送和从其接收数据,但它从不把数据从一个网络传向另一个。
116
117
118
119网关是连接到多于一个网络的设备,它选择性的把数据从一个网络转发到其它网络。
120
121
122
123换句话说,过去主机和网关的概念被人工地区分开来,那时计算机没有足够的能力同时用作主机和网关。主机是用户工作的计算机,或是文件服务器等。现代的计算机的能力足以同时担当这两种角色,因此,现代的主机定义应该如此: 主机是连接到一个或多个网络的设备,它可以向任何一个网络发送和从其接收数据。它也可以作为网关,但这不是其唯一的目的。
124
125
126
127路由器是专用的网关,其硬件经过特殊的设计使其能以极小的延迟转发大量的数据。然而,网关也可以是有多个网卡的标准的计算机,其操作系统的网络层有能力转发数据。由于专用的路由硬件较便宜,计算机用作网关已经很少见了,在只有一个拨号连接的小站点里,还可能使用计算机作为非专用的网关。
128
129
130
1312、基于类的地址
132
133
134
135
136
137最初设计IP时,地址根据第一个字节被分成几类:
138
139
140
1410: 保留
142
1431-126: A类(网络地址:1字节,主机地址:3字节)
144
145127: 保留
146
147128-191: B类(网络地址:2字节,主机地址:2字节)
148
149192-223: C类(网络地址:3字节,主机地址:1字节)
150
151224-255: 保留
152
153
154
1553、子网划分
156
157
158
159
160
161虽然基于类的地址系统对因特网服务提供商来说工作得很好,但它不能在一个网络内部做任何路由,其目的是使用第二层(桥接/交换)来导引网络中的数据。在大型的A类网络中,这就成了个特殊的问题,因为在大型网络中仅使用桥接/交换使其非常难以管理。在逻辑上其解决办法是把大网络分割成若干小的网络,但在基于类的地址系统中这是不可能的。为了解决这个问题,出现了一个新的域:子网掩码。子网掩码指出地址中哪些部分是网络地址,哪些是主机地址。在子网掩码中,二进制1表示网络地址位,二进制0表示主机地址位。传统的各类地址的子网掩码为:
162
163
164
165A类:255.0.0.0
166
167
168
169B类:255.255.0.0
170
171
172
173C类:255.255.255.0
174
175
176
177如果想把一个B类网络的地址用作C类大小的地址,可以使用掩码255.255.255.0。
178
179
180
181用较长的子网掩码把一个网络分成多个网络就叫做划分子网。要注意的是,一些旧软件不支持子网,因为它们不理解子网掩码。例如UNIX的routed路由守护进程通常使用的路由协议是版本1的RIP,它是在子网掩码出现前设计的。
182
183
184
185上面只介绍了三种子网掩码:255.0.0.0、255.255.0.0和255.255.255.0,它们是字节对齐的子网掩码。但是也可以在字节中间对其进行划分,这里不进行详细讲解,请参照相关的TCP/IP书籍。
186
187
188
189子网使我们可以拥有新的规模的网络,包括很小的用于点到点连接的网络(如掩码255.255.255.252,30位的网络地址,2位的主机地址:两个主机的子网),或中型网络(如掩码255.255.240.0,20位网络地址,12位主机地址:4094个主机的子网)。
190
191
192
193注意DNS被设计为只允许字节对齐的IP网络(在in-addr.arpa.域中)。
194
195
196
1974、超网(supernetting)
198
199
200
201
202
203超网是与子网类似的概念--IP地址根据子网掩码被分为独立的网络地址和主机地址。但是,与子网把大网络分成若干小网络相反,它是把一些小网络组合成一个大网络--超网。
204
205
206
207假设现在有16个C类网络,从201.66.32.0到201.66.47.0,它们可以用子网掩码255.255.240.0统一表示为网络201.66.32.0。但是,并不是任意的地址组都可以这样做,例如16个C类网络201.66.71.0到201.66.86.0就不能形成一个统一的网络。不过这其实没关系,只要策略得当,总能找到合适的一组地址的。
208
209
210
2115、可变长子网掩码(VLSM)
212
213
214
215
216
217如果你想把你的网络分成多个不同大小的子网,可以使用可变长子网掩码,每个子网可以使用不同长度的子网掩码。例如:如果你按部门划分网络,一些网络的掩码可以为255.255.255.0(多数部门),其它的可为255.255.252.0(较大的部门)。
218
219
220
2216、无类别地址(CIDR)
222
223
224
225
226
227因特网上的主机数量增长超出了原先的设想,虽然还远没达到232,但地址已经出现匮乏。1993年发表的RFC1519--无类别域间路由CIDR(Classless Inter-Domain Routing)--是一个尝试解决此问题的方法。CIDR试图延长IPv4的寿命,与128位地址的IPv6不同,它并不能最终解决地址空间的耗尽,但IPv6的实现是个庞大的任务,因特网目前还没有做好准备。CIDR给了我们缓冲的准备时间。
228
229
230
231基于类的地址系统工作的不错,它在有效的地址使用和少量的网络数目间做出了较好的折衷。但是随着因特网意想不到的成长出现了两个主要的问题:
232
233
234
235已分配的网络数目的增长使路由表大得难以管理,相当程度上降低了路由器的处理速度。
236
237
238
239僵化的地址分配方案使很多地址被浪费,尤其是B类地址十分匮乏。
240
241
242
243为了解决第二个问题,可以分配多个较小的网络,例如,用多个C类网络而不是一个B类网络。虽然这样能够很有效地分配地址,但是更加剧了路由表的膨胀(第一个问题)。
244
245
246
247在CIDR中,地址根据网络拓扑来分配。连续的一组网络地址可以被分配给一个服务提供商,使整组地址作为一个网络地址(很可能使用超网技术)。例如:一个服务提供商被分配以256个C类地址,从213.79.0.0到213.79.255.0,服务提供商给每个用户分配一个C类地址,但服务提供商外部的路由表只通过一个表项--掩码为255.255.0.0的网络213.79.0.0--来分辨这些路由。
248
249
250
251这种方法明显减少了路由表的增长,CIDR RFC的作者估计,如果90%的服务提供商使用了CIDR,路由表将以每3年54%的速度增长,而如果没有使用CIDR,则增长速度为776%。如果可以重新组织现有的地址,则因特网骨干上的路由器广播的路由数量将大大减少。但这实际是不可行的,因为将带来巨大的管理负担。
252
253
254
255四、路由
256
257
258
2591、路由表
260
261
262
263
264
265如果一个主机有多个网络接口,当向一个特定的IP地址发送分组时,它怎样决定使用哪个接口呢?答案就在路由表中。来看下面的例子:
266
267
268
269目的 子网掩码 网关 标志 接口
270
271201.66.37.0 255.255.255.0 201.66.37.74 U eth0
272
273201.66.39.0 255.255.255.0 201.66.39.21 U eth1
274
275
276
277主机将所有目的地为网络201.66.37.0内主机(201.66.37.1-201.66.37.254)的数据通过接口eth0(IP地址为201.66.37.74)发送,所有目的地为网络201.66.39.0内主机的数据通过接口eth1(IP地址为201.66.39.21)发送。标志U表示该路由状态为"up"(即激活状态)。对于直接连接的网络,一些软件并不象上例中一样给出接口的IP地址,而只列出接口。
278
279
280
281此例只涉及了直接连接的主机,那么目的主机在远程网络中如何呢?如果你通过IP地址为201.66.37.254的网关连接到网络73.0.0.0,那么你可以在路由表中增加这样一项:
282
283
284
285
286
287
288
289目的73.0.0.0
290
291掩码255.0.0.0
292
293网关201.66.37.254
294
295标志UG
296
297接口eth0
298
299
300
301
302
303此项告诉主机所有目的地为网络73.0.0.0内主机的分组通过201.66.37.254路由过去。标志G(gateway)表示此项把分组导向外部网关。类似的,也可以定义通过网关到达特定主机的路由,增加标志H(host):
304
305
306
307目的 掩码 网关 标志 接口
308
30991.32.74.21 255.255.255.255 201.66.37.254 UGH eth0
310
311
312
313下面是路由表的基础,除了特殊表项之外:
314
315
316
317目的 掩码 网关 标志 接口
318
319127.0.0.1 255.255.255.255 127.0.0.1 UH lo0
320
321default 0.0.0.0 201.66.37.254 UG eth1
322
323
324
325第一项是loopback接口,用于主机给自己发送数据,通常用于测试和运行于IP之上但需要本地通信的应用。这是到特定地址127.0.0.1的主机路由(接口lo0是IP协议栈内部的"假"网卡)。第二项十分有意思,为了防止在主机上定义到因特网上每一个可能到达网络的路由,可以定义一个缺省路由,如果在路由表中没有与目的地址相匹配的项,该分组就被送到缺省网关。多数主机简单地通过一个网卡连接到网络,因此只有通过一个路由器到其它网络,这样在路由表中只有三项:loopback项、本地子网项和缺省项(指向路由器)。
326
327
328
3292、重叠路由
330
331
332
333
334
335假设在路由表中有下列重叠项:
336
337
338
339目的 掩码 网关 标志 接口
340
3411.2.3.4 255.255.255.255 201.66.37.253 UGH eth0
342
3431.2.3.0 255.255.255.0 201.66.37.254 UG eth0
344
3451.2.0.0 255.255.0.0 201.66.37.253 UG eth1
346
347default 0.0.0.0 201.66.39.254 UG eth1
348
349
350
351之所以说这些路由重叠是因为这四个路由都含有地址1.2.3.4,如果向1.2.3.4发送数据,会选择哪条路由呢?在这种情况下,会选择第一条路由,通过网关201.66.37.253。原则是选择具有最长(最精确)的子网掩码。类似的,发往1.2.3.5的数据选择第二条路由。
352
353
354
355注意:这条原则只适用于间接路由(通过网关)。把两个接口定义在同一子网在很多软件实现上是非法的。例如下面的设置通常是非法的(不过有些软件将尝试在两个接口进行负载平衡):
356
357
358
359接</ip></hardware></ip></ip地址,硬件地址></ip>