由于网路的迅猛发展╋出现了许多供网路使用的软体和硬体╋为了让它们都能够有效的沟通╋我们需要建立一些规则。
在这一章里面╋我会向大家介绍目前比较通用的网路通讯协定╋和模拟数据是如何的从一个节点传送到另一个节点╋从功能上面看看通讯协定的定义。
何为通讯协定?
一个比较好理解的讲法是?通讯协定就是一些标准和规则。例如╋我们看到红灯就要停、绿灯才可以走,者就是一种协定了。若是彼此使用不同的协定,那就会造成混乱:澳洲(或英联邦)开车考左行使、台湾则靠右。只要所在国家不变,那么该协定就可以运作,但是当到达协定不一样的国家,就得进行协定上的转换了。否则,不出车祸才怪!
在网路通讯中,如果主机 A 要将一个 packet 送给主机 B╋它们就必须使用相同的通讯协定。
LAN 的工作就是让应用程式利用网路获得?管理?和安排数据。每一个节点都透过一张网路卡(NIC, Network Interface Card)连接到网路╋再由此和其它的节点沟通。在每一个独立的工作站上面╋已经安装了一些应用程式╋如 Word?Outlook 等。这些程式如果想使用网路上面的资源╋比如在伺服器上面的数据?网路印表机?电子邮箱等等╋会使用网路软体(network software)去和 NIC 沟通╋然后 NIC 再和网路上的其它节点沟通。所有这些信息都要经过转换╋就必须要使用通讯协定来确保所有这些参与者╋能够彼此理解对方和进行有效的沟通。
正如您所见到的╋在节点与节点之间╋最先的交流是在 NIC 的层次上。当数据从一个节点通过 NIC 传送到另一个节点之后╋数据再从 NIC 传送到网路软体。而这个网路软体就是我们所说的传输通讯协定(Transport protocol)了╋在双方的机器上都会有这些 transport protocol。对于这个所谓的网路软体╋我们可以从好些不同的角度去理解╋不过我们可以简单的从三个层次去看?
第一╋也是最容易的理解的╋就是 NIC 的驱动程式。
它负责处理网路卡和传输协定之间的沟通。网路卡的厂家都会提供一支驱动程式让您使用一些特定的协定╋您可以使用同一张卡来供不同的作业系统使用。只要这张网卡在“物理”上是兼容的╋那你就可以在作业系统上面使用了。换而言之╋您大可不必只依赖一个牌子的厂家。当然╋您不能将 Ethernet 网路卡当 Token Ring 来使用。
我们也知道要让网路卡工作╋除了要使用正确的驱动程式之外╋您还得要确定 IRQ 和 IO 要正确。另外╋在网路卡上面╋还有一个由 6 组十六进位数字组成的 48bit 的物理位址(Physical Address)╋也叫 MAC(Media Access Control) Address 或 Node ID╋等名称╋相信我们前面也听过数次了。这个位址其实分为两个部份:前面三组数字为 Manufacture ID╋也就是厂商 ID?而后面的三组是 Card ID。如果我们见到一张卡的 MAC 位址是?02-60-8C-67-CD-54╋那么我们可以知道这张卡是 3Com 的╋因为 02608C 就是 3Com 的ID。透过这两组 ID ,我们可以在实体上区分各自的网路卡。理论上来说,全世界没有两张卡的 MAC Address 是相同的,而且我们也不应去修改它。
然后╋基于这个物理位址╋我们就可以把逻辑位址捆绑于其上。物理位址我们是无法更改的╋而且您也很难找到两张相同物理位址的网路卡?但逻辑位址则是由网路管理员来设定。就好比您不能将公司地址门牌给改了╋但您喜欢给您的公司起什么名字或搬到别的地址去都可以╋只要不会和其它公司搞混了就行。
如果使用不同的传输协定╋逻辑位址的格式也不相同(后面我们会就会讲到这问题了)。但无论是物理位址还是逻辑位址╋要在网路上面沟通的话╋就必须不同╋否则就是所谓的位址冲突啦。
下面我们以 IPX 协定为例子认识一下逻辑位址?
?内部网路位址(Internal Network Address)。
简单地说╋internal address 是用来识别每一台机器是“谁”。很重要一点是╋这个内部 IPX 号码在同一个网路中╋对每一台机器来说必须是唯一的。例如 Novell NetWare 使用内部 IPX 号码来识别网路中的伺服器╋当您安装 NetWare Server 的时候╋您会被问及接受或更改一个随机产生的内部 IPX 号码╋然后这个号码就成了该 server 的 ID 了。当您从工作站中输入 slist 命令╋您就可以看到每一台 server 的 ID 都被列出来。
?外部网路位址(External Network Address)。
这是用来识别一个网路或一个在网路中的网段(segment)用的。如果在同一个网路上面同时有两台 server 出现╋那么它们就必须使用相同的 external address 了。这个 external address 好比是用来识别所有的 server 在“哪里”的。在 Novell Netware 里面╋只有 Server 才需要设定 external address ╋工作站使用的是它登录所在的 server 的 external address。
一个完整的 IPX 位址会是这个样子的?1C9FDB42 : 2E701AID╋在“?” 前面的部份为 external address╋而后一部份则为 internal。不过这样设定也有一个潜在的危险╋如果您在安装 Novell server 的时候一不留神╋接受了程式自选的 External Address╋那样就很可能不能和其它 server 沟通了╋而且在接下来的安装中╋您会被诸如 wrong router address 等错误信息烦死?程式通常也可以提示您正确的号码╋但如果您有两张网路卡在上面╋您就要自己设定了。如果您的号码输入错误╋您或许不可能修改系统的 AUTOEXEC.NCF 档案╋而 external 和 internal 位址都包括在这个档案里面╋所以务必小心?
第二。在网路处理程式的另一端╋需有一个重导向(Redirector) 的软体。
我们知道在单机作业模式下╋当程式呼叫档案 IO 的时候╋会由作业系统接管这个请求╋然后再传给 BIOS╋再到硬体那里。如果当程式呼叫的档案 IO 为网路位址的时候╋那么 redirector 就会接管这个请求╋而重新导向到网路上面去╋把请求交给对方机器。
例如╋当您使用 Word 的时侯╋要开启一个在网路磁碟上面的档案╋将会如何呢?从 Word 的角度去看╋它根本不知道有网路这回事╋它只知道有一个和多个像 A??B??C?这样的磁碟。就像您吃麦当劳的时候╋您不用知道汉堡包是怎样制作出来的╋您只需知道鱼柳包?鸡柳包和拿到什么样的 Kitty 猫就是了。Word 在设计上并不是应用于非本地磁碟上的╋当要使用存储在网路上面的数据的时候╋就必须有一种软体能够以磁碟代号的形式告诉 Word 才行。所以╋如果您告诉 Word 去一个在叫 FILESER1 的伺服器之 DOC 目录下面找档案╋那么 redirector 软体就会接管这个请求了。
然而╋redirector 在这个网路软体集团里面╋也只是其中一个角色而已╋要真正能够拿回资料╋我们还得需要另一角色的配合? Redirector 只是工作在 client 上面╋而在 server 那边╋还必须有一个档案系统(File System)╋或曰 mounter╋来接应 redirector 的请求。
在网路世界中╋有许多种这样的 file system╋最出名的有 Novell 的 NetWare File System?Unix 网路的 Network File System (NFS)?以及 Microsoft 的 CIFS (Common Internet File System)。在 client 端的 redirector 必须要和在 server 上面的 file system 兼容(使用相同的协定)╋否则 client 也只能望 file 兴叹而已。
第三。终于来到这章的戏肉了?出场的就是通讯协定╋也就是节点和节点之间在网路上搬运数据的方法。
我之所以将这三个层次的中间部份留在现在才说╋是因为它是最抽象的。您或许可以这样想象?NIC 驱动程式负责和 NIC 之间的沟通且尽力讨其欢心?在 client 上面的 redirector 和在 server 上面的 mounter ╋则和程式沟通╋也极尽体贴之能事?然后通讯协定╋则出尽法宝缀合 NIC 驱动程式和 redirector (或 mounter)╋并建立起网路通讯的交通规则。
正如前述╋通讯协定只是一些标准和规则而已╋而这些规则令到交流的融合性得以标准化。就如我们不能离开一些经已认同的规矩去使用道路一样╋我们的网路也需要一些共同的沟通语言╋才能让所有机器相互交流而不至于混乱。
LAN 和 LAN 之间的通讯也一样需要一些网路语言╋所以它们都需要有语言大师的本领才行。事实上╋网路语言有多种多样╋由于它们在设计之初只为了应付不同的工作╋而且它们大部份都从来不考虑要和其它网路兼容的。传输协定虽然可说琳琅满目╋然而不幸得很╋各自的厂商都有各自的一套偏好。但又非常幸运的是?大部份新的网路作业程式都支持超过一种协定╋可以和不同的作业系统沟通╋比起以前独沽一味的情形的确容易多了。
下面我们就浅略的浏览一些您将会在网路上运用到的通讯协定。
NetBEUI
让我们回到 IBM 最初进军个人电脑网路的时代╋他们当时的确需要一个很基本的网路通讯协定╋但他们并不打算用此来建构大型网路╋仅仅供数十台电脑甚至更小的网路而已。基于这个诉求╋就诞生了Network Basic Input/Output System╋或称 NetBIOS。
NetBIOS 其实只有 18 个命令(command)来让网路的电脑能够建立?维持?和使用连接服务。不过 IBM 在不久后又再推出了 NetBIOS 的延伸版本?NetBIOS Extened User Interface╋或称 NetBEUI╋基本上是 NetBIOS 的改良版本而已。然而╋NetBIOS 和 NetBEUI 终究是不同的?NetBEUI 事实上可以说是一个传输协定╋而 NetBIOS 充其量只是一组命令来让系统可以使用网路而已╋在技术角度来看╋它是一个 Application Program Interface (API)。关于 NetBIOS 与 NetBEUI 的技术分歧,请参考:
Netbios Network Basic Input/Output System Protocols
NetBios, NetBEUI, NBF, SMB, CIFS Networking
NetBEUI 可以算是您在 LAN 中能够用到的最快通讯协定了。这个“最快”是指它可以将格式化资料放进封包里面╋而接收节点又可以迅速的解读到内容。然而╋NetBEUI 却有一个最致命的弱点?它不是可路由(routable)协定╋也就是不能够和其它网路的机