📄 00000002.htm
字号:
,计算机根据帧的类型作不同的处理。如果你经管理过Netware,那么肯定会面对802.2 <BR>或802.3以及Ethernet -II的种种令人晕头转向的配置问题。幸运的是,在Linux或者W <BR>indows的世界里,你极少需要真正处理它们。 <BR> <BR> 当一个帧被发送到网络上时,它实际上是在网络的整个电气连接上漫游。“电气连接 <BR>”指电信号可以传递到的任何地方,比如,集线器上连接的几片网卡,穿过几根电缆或 <BR>双绞线,等等。然而一台机器上的两片网卡不在一个电气连接上,因为电信号无法直接 <BR>在两者之间传递。(你会问如果这两片卡正好插在同一个集线器上会如何,我只能说:! <BR>@#$%)每个以太网卡必须有一个唯一的“以太网地址”,也叫MAC地址。它是一个48位整 <BR>数,理论上,它应该是全世界唯一的,当网卡发出一个数据帧时,它在帧的头部包含发 <BR>送者和接收者的“以太网地址”,因此,当一个网卡“听到”与自已地址适应的帧时, <BR>它接收这个数据帧。显然,只要整个电气连接上没有两片网卡的“以太网地址“相同, <BR>这种方式就可以工作。 <BR> <BR> 有几个特殊的问题,首先,“以太网地址”必须在整个电气连接上唯一,当然你会想 <BR>:“这是肯定的; 2的48次方比任何电气连接都大得多”,这很难说,确实有某些不那 <BR>么聪明(或不那么负责,也许仅仅不太走运,随你去猜)的厂商生产过一些以太网地址 <BR>完全相同的网卡,如果拿到这样的网卡,你必须找到厂家提供的设置程序修改以太网地 <BR>址,用术语叫“设置MAC地址”。第二,你可能会想,是否以太网的这种工作方式意味着 <BR>任何帧实际可以被整个网络的成员收听到而不是确定地送到对应地址,答案是确实如此 <BR>。有一种叫“嗅探器“的东西就是干这个的;最后,由于电信号实际是以近于光速的速 <BR>度传播,所以可能会发生这样的情况:两片网卡同时发现网络空闲,同时传送数据,结 <BR>果造成信号的混乱。术语中这叫碰撞。以太网卡可以通过电位检测判断出碰撞的存在, <BR>一旦发生碰撞,碰撞两者立刻停止发送数据,等待一段时间,随后重新试图发送。由于 <BR>以太网的信号共享性质,对于连接数太多的网络,网络碰撞将使行实际上每次发送都会 <BR>碰撞,这时我们说以太网已经拥塞,你必须分割或升级网络连接了。 <BR> <BR> 广域网连接中,最主要的是基于电话拨号的IP连接。但是这包含着许多种类型,其中 <BR>最主要的也许是调制器和ISDN连接。对于专线的连接,曾经流行过一个称为X .25的分组 <BR>交换协议,但是这已成为历史。事实上,从逻辑角度看来,电活线连接比以太网简单得 <BR>多,因为你不必关心信号应该传送给谁的问题。不幸的是,它们实在太慢,而且也过于 <BR>昂贵了。 <BR> <BR> 一般情况下,我们用以太网构成局域网连接再用其它技术(例如DDN或者ISDN)将整个 <BR>局域网连入Internet。在这种情况下,我们必须了解许多事情,特别是关于网际互联的 <BR>一些行为方式。 <BR> <BR> 1.2 地址和路由选择 <BR> <BR> 这一节我们来研究数据在网络上如何寻址,特别是与ARP和RIP相关的一些内容。如果 <BR>你准备用Linux实现廉价的路由器和防火墙,那么这部分知识是必需的。 <BR> <BR> 1.2.1 地址解析和路由器 <BR> <BR> 如同我们在以太网能够实现网卡之间的直接地址数据传送,为此,它要了解发送者和 <BR>接收者的MAC地址,对于需要向所有连接者通知的内容,它使用广播,广播可以被所有网 <BR>络接口设备接收。 <BR> <BR> MAC地址是一个48位的整数,它用来标记网卡,问题是TCP/IP用IP地址来描述传输地 <BR>址,而IP地址是32位的,那么,如何将IP地址转换为MAC地址呢? <BR> <BR> 为了解决从IP地址到实际的设备之间的转换问题,TCP/IP定义了两件事情,首先是地 <BR>址转换协议ARP,它用来解决在一个子网之内如何将IP地址转换为实际的设备位置。显然 <BR>,设备可以不仅是以太网,但是象调制解调器这样的连接,其地址翻译在建立连接时就 <BR>已经确定了。而令牌环等设备在地址确定方面实际是和以太网一样的,所以我们主要讨 <BR>论的将是以太网。 <BR> <BR> 假设某主机想和与自己同子网的机器通信,例如202.14.0.3到202.14.0.7,它首先将 <BR>使用以太网提供的硬件广播功能:首先广播一个数据包,其内容将包括:自己的IP地址 <BR>,自己的MAC地址,以及试图通讯的IP地址。由于硬件广播可以送到以太网电气连接的任 <BR>何地方,所以202.14.0.7如果开着就会接收到这个数据包,于是它向202.14.0.3回送一 <BR>个数据包(因为广播包中已经包含了202.14.0.3的MAC地址,所以B知道如何送数据), <BR>内容将包含202.14.07的MAC地址。这样,一个“广播-应答”就确定了两台机器的MAC地 <BR>址。 <BR> <BR> 为了提高效率,每台机器都会在自己的系统上维护一个对照表,每当得到一个应答或 <BR>是听到一个地址广播,机器就在自己的对照表中加入一项,这样以后再需要与相应地址 <BR>通信时就可以直接从表中查到MAC地址。因为MAC到IP的映射可能会改变,所以对照表被 <BR>设定为每过一段时间更新一次。 <BR> <BR> 因为ARP是靠广播来维护的,所以在一个庞大的网络系统内部,广播可能会消耗大量网 <BR>络资源,这曾经带来许多问题。随着以太网将速度提升到GB级,ARP广播已经不那么令人 <BR>头痛,然而某些广播仍然十分讨厌。 <BR> <BR> ARP解决了在同一物理网络系统之内IP到物理地址的解析问题,而对需要跨越子网的通 <BR>信,TCP/IP使用路由的方法。 <BR> <BR> 路由器是一台用作子网之间数据传送的计算机,它接收由某个子网来的数据请求,并 <BR>将它转发到另一个子网上,你可以考虑,类似于下面的结构 <BR> <BR> <BR> <BR> 图1.1 路由器说明 <BR> <BR> 子网A中的机器需要与B中的机器对话时,它首先判断出机器不在本子网之内,于是它 <BR>把请求包发送到R上。 <BR> <BR> R上有两个网络接口,不妨假定A、B的网络地址是192.168.1.0和192.168.2.0,而R上 <BR>的两个接口分别是192.168.1.3和192.168.2.6,显然,A可以把它数据包发送到192.168 <BR>.1.3上,当路由器尺接到这样一个数据包时,它发现这个数据包的地址是在网络B中,于 <BR>是它将数据包提交给B上的接口192.168.26,然后这个接口就可以直接与目标机器对话了 <BR>。当B中机器反馈这个响应时,发生相反的过程。 <BR> <BR> 对于更复杂的情况,工作方式与这个例子是一致的。所不同的是,这时由A到B的路径 <BR>可能更加复杂,有两种标准案可以考虑。 <BR> <BR> 首先的方法是采用递送缺省路由方式,比如,考虑下面的一个情况: <BR> <BR> 图1.2 路由递送 <BR> <BR> 在子网A中有一台计算机,地址为192.168.1.1,它想和192.168.3.7对话,按照网络掩 <BR>码,它知道192.168.3.7不在自己的子网内,于是它把信息投递到路由器R1。 <BR> <BR> 路由器R1知道目标地址是192.168.1.0/24的信息应该发送到子网A,对于192.168.3.7 <BR>,它也一无所知。但是它知道这个网络上还有另外一个与它相连的路由器R2,于是它把 <BR>信息投递到R2。R2知道192.168.2.0/24的信息如何投递,但也同样不知道关于192.168. <BR>3.7的事情,于是它再将自己的信息投递到自己的缺省路由器R3,最后,R3发现目标地址 <BR>正是它所负责的网络地址,于是,投递成功。 <BR> <BR> 另外一个方法是为了解决上面方法的一个缺陷。例如,由于用户可能动态地加入和移 <BR>除网络,使得路由表将频繁地修改。为此,可以使用动态修正的方法,让每个路由与其邻 <BR>近的路由器联系,不断交换路由信息,使得路由信息表总是可以使用。如何交换路由信 <BR>息构成了TCP/IP协议的重要部分。 <BR> <BR> 无论哪一种方案,都可能成数据包在路由之间循环。解决的方式是引入一个“跳“的 <BR>概念,为每一个数据规定一个最大跳数,每通过一个路由器被减去一跳,当跳数达到零 <BR>时如果还没有到达目的地,数据将被简单地丢弃。 <BR> <BR> 1.2.2 地址扩充和伪装 <BR> <BR> 如同我们所看到的样,互联网地址被分成A、B和C类地址。由于A类地址只有只有126个 <BR>,所以对一个普通公司来说去申请一个A类地址几乎是不可能的;B类地址有几万个,应 <BR>该说并不少,但是拥有上万台机器的公司更多;至于C类地址目前尚宽裕,然而政策和路 <BR>由规则的限制也许会使得使用C类地址有些困难。 <BR> <BR> 无论怎样,互联网址地已经告急;对于B类地址尢其如此。最大问题也许是,每个网络 <BR>要求自己的机器位于一个物理网络中,在B类和A类的情况下几乎是不可能的。想一想, <BR>如何将几万台机器连接进一个以太网系统!更不用说产生的地址广播了。 <BR> <BR> 假定你申请到了一个B类网址,显然,你有必要将其切割成更小的子网,否则你肯定会 <BR>面对地址管理的恶梦;但是一旦你进行了这种切割,那么你就会面对另一个问题:B类网 <BR>总是假定掩码为255.255.0.0,每一台机器假定为可以直接与网络内的任何机器对话,这 <BR>会带来ARP问题。 <BR> <BR> <BR> <BR> 图1.3 ARP代理问题 <BR> <BR> 为为分割子网,你引入路由器R,将它放到主干上,并有将M4和M5放在路由器后面。 <BR>但是M1和M2,M3都会认为M4,M5就在主干上,并且试图用ARP广播取得M4,M5的MAC地址 <BR>,当然这不会成功了,所以M4,M5就无法工作。 <BR> <BR> 最根本的解决方法当然是修改总体的网络设置,并且将M1,M2,M3也放到路由后面, <BR>修改它们的网络掩码。但对于已经分配了很多网络地址的网络,这就会带来一些很讨厌 <BR>的问题,所以实用中一般采用另外的办法,即ARP代理。 <BR> <BR> 在ARP代理方式下,R将截获所有对于M4、M5的ARP请求,并且代替M4和M5回应ARP广播 <BR>,这样在M1、M2、M3看来,仿佛路由器R除了R的实际地址之外,还拥有M4、M5的IP地址 <BR>,或者说在M1看来M4、M5的IP都对应着R,因此它们会将所有目标是M4,M5的通信送到R <BR>,R自己当然是知道M4,M5的存在的,它会将数据包转发给M4、M5,这样的方式称为ARP <BR>代理(proxy ARP)。 <BR> <BR> 显然对于M4和M5,也可以由R1代理M1,M2,M3来完成这个工作;不过由于实际上在主 <BR>干上的机器总是极多的,如果手工加所有的代理项请求是不现实的,因此实现中通常用 <BR>另外一个办法,即改变M4,M5的掩码,使得M4,M5认为自己处于一个C类甚至更小的子网 <BR>中,而凡越出掩码范围的信息,让它们将R2作为缺省路由,将数据发送到R2。 <BR> <BR> ARP代理的主要用处是在B类地址中分割子网,尽管技术上它也适用于C类网,但是很少 <BR>有人这样干。要记住ARP并不能节约网络地址,而仅仅是使得B类(有时也用于A类)网络 <BR>的物理连接更灵活,地址管理更有效率。并且它总是用在你的B类地址已经被分配了相当 <BR>一部分的情况,如果你有一个未使用的B类地址,毫无疑问将其分裂成一组C类地址会更 <BR>有效率。如: <BR> <BR> <BR> <BR> <BR> 图1.4 分割子网 <BR> <BR> R为主路由,R1,···R12各自带一个较小的网络,R1分析数据包的目的地址并且 <BR>把它发送到对应的路由上,而A,B,C,···D分别将R2···R11作为缺省路由器。 <BR> <BR> 可惜这里叙述的内容显然无助于普通的公司级用户。一般来说,在大学中申请一组IP <BR>地址是容易的(一般的大学会有4-32个C类地址)。而对公司这几乎是不可能的。一个 <BR>普通公司能申请到时候1-16个IP地址已经不错了。 <BR> <BR> <BR> <BR> 图1.5 IP代理 <BR> <BR> 为了解决IP地址不够的问题,有另外一个解决方案,即IP代理。首先,TCP/IP申定义 <BR>了几个特殊的系列IP地址,对A类是10.0.0.0,B类为172.16.0.0和192.168.0.0,这些地址 <BR>用于“私用网络”,任何人都可以随意使用。 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -