最简单的网络可以想象成单线的总线,各个计算机可以通过向总线发送分组以互相通信。但随着网络中的计算机数目增长,这就很不可行了,会产 生许多问题:
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 分组后的处理,注意发送者的 <IP address, hardware address> 对被存到接收 ARP 请求的主机的本地 ARP 表中,一般 A 想与 B 通信时, B 可能也需要与 A 通信。