[ 永远的UNIX::UNIX技术资料的宝库 ]

首页 > 网络管理 > 局域网技术 > 正文
网路概论---7.通讯协定
http://www.study-area.net/menu1.htm (2001-06-03 19:00:00)
    由网路的迅猛发展出现了许多供网路使用的软体和硬体为了让它们都能够有效的沟通我们需要建立一些规则。 

在这一章里面我会向大家介绍目前比较通用的网路通讯协定和模拟数据是如何的从一个节点传送到另一个节点从功能上面看看通讯协定的定义。 

何为通讯协定 

一个比较好理解的讲法是通讯协定就是一些标准和规则。例如电话响起来的时候为什麽接电话的人先说“喂~”而不是打电话的人先介绍自己呢我们可以说习惯上如此那麽这个习惯行为就是回答电话的通讯协定了。当然您和您亲爱的或许不是这样接电话的那麽您们使用的就是另一套协定了。 

如果节点A要将一个packet送给节点B它们就必须使用相同的通讯协定。 

LAN的工作就是帮助应用程式利用网路获得管理和安排数据。每一个节点都通过一张网路卡(NIC, Network Interface Card)连接到网路再由此和其它的节点沟通。在每一个独立的工作站上面已经安装了一些应用程式如WordExcel等。这些程式如果想使用网路上面的资源比如在伺服器上面的数据网路印表机电子邮箱等等会使用网路软体(network software)去和NIC沟通然後NIC再和网路上的其它节点沟通。所有这些信息都要经过转换就必须要使用通讯协定来确保所有这些参与者能够彼此理解对方和进行有效的沟通。 

正如您所见到的在节点与节点之间最先的交流是在NIC的层次上。当数据从一个节点通过NIC传送到另一个节点之後数据再从NIC传送到网路软体。而这个网路软体就是我们所说的传输通讯协定(Transport protocol)了在双方的机器上都会有这些transport protocol。对於这个网路软体我们可以从好些不同的角度去理解不过我们可以简单的从三个层次去看 

第一也是最容易的理解的就是NIC的驱动程式。 

它负责处理网路卡和传输协定之间的沟通。网路卡的厂家都会提供一支驱动程式让您使用一些特定的协定您可以使用同一张卡来供不同的作业系统使用。只要这张网卡在“物理”上是兼容的那你就可以在作业系统上面使用了当然您不能将Ethernet网路卡当Token Ring来使用啦。也就是说您大可不必只依赖一个牌子的厂家。 

我们也知道要让网路卡工作除了要使用正确的驱动程式之外您还得要确定IRQ和IO要正确。另外在网路卡上面还有一个由12个十六进位数字组成的48bit的物理地址(Physical Address)也叫MAC(Media Access Control) Address或 Node ID等名称相信我们前面也听过数次了。这个地址其实分为两个部份前面六个数字为Manufacture ID也就是厂家ID而後面的六个才是Card ID。如果我们见到一张卡的MAC地址是02608C67CD54那麽我们可以知道这张卡是3Com的因为02608C就是3Com的ID。 

然後基这个物理地址我们就可以把逻辑地址设定於其上了。物理地址我们是无法更改的而且您也很难找到两张相同物理地址的网路卡但逻辑地址则是由网路管理者设定。就好比您不能将公司门牌给改了但您喜欢给您的公司起什麽名字都可以只要不会和其它公司搞混了就行。 

如果使用不同的传输协定逻辑地址的格式也不相同(後面我们会就会讲到这问题了)。但无论是物理地址还是逻辑地址要在网路上面沟通的话就必须不同否则就是所谓的地址突啦。 

下面我们以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的角度去看它根本不知道有网路这回事它只知道有一个和多个像ABC这样的磁碟。就像您吃麦当劳的时候您不用知道汉堡包是怎样作出来的您只需知道鱼柳包鸡柳包和拿到什麽样的Kitty猫就是了。Word在设计上并不是应用於非本地磁碟上的当要使用存储在网路上面的数据的时候就必须有一种软体能够以磁碟代号的形式告诉Word才行。所以如果您告诉Word去一个在叫FILESER1的伺服器之DOC目录下面找档案那麽redirector软体就会接管这个请求了。 

 
然而redirector在这个网路软体集团里面也只是一个角色而已要真正能够拿回资料我们还得需要另一位能士的配合 Redirector只是工作在client上面而在server那边还必须有一个档案系统(File System)或曰mounter来接应redirector的请求。 

在网路世界中有许多种这样的file system最出名的有 Novell的 NetWare File SystemUnix网路的Network File System (NFS)以及Microsoft 的New Technology File System (NTFS)。在client端的redirector必须要和在server上面的file system兼容(使用相同的协定)否则client也只能望洋兴叹而已。 

第三。终来到这章的戏肉了出场的就是通讯协定也就是节点和节点之间在网路上搬运数据的方法。 

我之所以将这三个层次的中间部份留在现在才说是因为它是最抽象的。您或许可以这样想象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)。 

NetBEUI可以算是您能够用到的最快通讯协定了。这个“最快”是指它可以将格式化资料放进封包里面而接收节点又可以迅速的解读到内容。然而NetBEUI却有一个最致命的弱点它不是可路由(routable)协定也就是不能够和其它网路的机器对讲。NetBEUI在本地网路里面是非常优秀的协定但如果您想和设在其它网路的机器沟通NetBEUI就不是您所需要的了。如果您想实现和其它网路的电脑沟通您极有可能必需通过路由设备或路由软体来实现但无论用哪一样很遗憾NetBEUI都做不到。 

不过Microsoft 网路则运用一种叫 NetBIOS over IP 的技术来连接不同网路的 NetBEUI 客户。但归根结底用来达成路由的不是 NetBIOS 而是 TCP/IP也就是下一个要介绍的协定。 

TCP/IP 

美国国防部开发的 Transmission Control Protocol / Internet Protocol (TCP/IP)当初是用来配合ARPANET (Advanced Research Projects Agency Net)来处理不同硬体之间的连接问题的比如Sun系统和MainframeMainframe和个人电脑之间的连接。 

Internet Protocol (IP)工作於网路层(以後会继续和大家探讨 OSI 的网路层级)它提供了一套标准让不同的网路有规则可循当然前提是您想使用IP从一个网路将封包路由到另一个网路。IP在设计上是用来在LAN和LAN及PC和PC之间进行传输的。 

您可以把IP看成是戏规则而TCP则用来诠释这些规则的。虽然TCP/IP原先是专门为几所大学和机构的使用而设计的但现在TCP/IP已经成为最流行的通讯协定了我们使用的Internet就是用TCP/IP来传送封包的了。下面就让我们看看TCP/IP是怎样工作的 

假如您的公司在好些地方都有分公司各自都有着自己的本地网路(LAN)在总公司跑的是Novell网路但分公司大部份都是用麦金塔电脑。当Mac有数据要传送给PC的时候将会如何呢 

首先TCP会在这两个平建立起一个可以提供全双工检错(对双向的数据都进行错误检测)的连接。 

接着IP制定好沟通规则以及Mac和PC之间的连接port。到这里为止TCP已经准备好数据了如果数据太大IP就将之分拆成几份较小的封包并且在封包上面加上一个新的header(转送地址)确保封包会被正确传送。TCP还会加上标说明数据的种类及其长度。 

再下来IP将封包转换成标准的编码格式并将之传送给PC。 

最後在PC上面的TCP将封包解码并翻译成PC能够懂的格式也就是它自己所使用的网路协定。您可以从下图看到这个过程 

 
TCP/IP可以说是现行协定中用途最广的协定之一由它尝试在所有硬体上实现所有事情。不过它也是最慢的传输协定之一在某些情形之下它的速度只有NetBEUI的七成。 

由於TCP/IP在设计上可供多种硬体部件使用所以它是一个可路由协定。 

DLC 

Data Link Control协定为国际标准IEEE802.2协定它的使用主要基於两个原因 

第一许多Token Ring网路是使用DLC 来让PC工作站和mainframe网关(gateway)沟通的。如果您使用Token Ring而且在CONFIG.SYS里面又有三个装置驱动程式是以DXM开头的那您就是使用DLC 驱动程式了。 

第二如果您有一些网路印表机本身直接通过JetDirect网卡连上网路的那麽您或许需要DLC 来控制印表机了。 

IPX/SPX 

Internetwork Packet Exchange (IPX) 是一个Novell协定可以在网路设备之间建立维持和终止通讯连接他既负责数据的传出也负责传入。当数据抵达的时候IPX会读取数据的地址和将之搬运到网路伺服器或工作站的正确地方。如果伺服器或工作站需要送出数据IPX则会确定好数据封包地址然後再通过网路路由出去。 

Sequenced Packet Exchange (SPX) 协定则是用来控制网路处理过程诸如处理丢失封包或其它状况。 

虽然IPX和SPX都是属Novell的但他们的使用并不限制於Novell网路。作为一个传输协定IPX/SPX可以被用在许多不同的硬体上面所以IPX/SPX也是一个可路由协定。 

多种传输堆叠(Multiple Transport Stack) 

到现在有两件事情是最明显不过的首先没有任何一个协定说得上是最好的其次您或者很想将上面所说的四个协定全跑上而好消息是您可以这样做 

现行网路模式是可以支持多传输协定的我们称之为协定堆叠(protocol stack)。比如您可以在client机器上面安装多个协定而server机器却只装一个协定。如果您的client同时连接好几个server这完全是可能的IPX可以和Novell server沟通DLC可以让工作站和mainframe gateway对讲和TCP/IP可以使用Internet mail路由等等。 

但要令到以上这些协定同时工作我们还需要用一个方法将网路卡和协定堆叠连接在一起也就是将网路传输层和网路卡驱动程式捆绑(bind)在一起即在NIC driver和transport stack之间建立一个软体连接这样在它们之间就需要一个很重要的标准界面了。 

通常有两个竞争者在争拼这一战场Novell的ODI和Mircosoft的NDIS。下面我们就探讨一下网路捆绑界面和应用程式界面是如何工作的。 

网路捆绑界面 (NBI) 

由於网路卡驱动程式的不足您还必需额外的软体来令到通讯协定工作因为NIC driver在设计上只会和一个协定对讲IPX/SPX或NetBEUI或TCP/IP。这时 Network Binding Interface (NBI)就派得上用场了NBI 可以提供一个共同的前端接面给设备驱动程式Open Datalink Interface (ODI) 和 Network Driver Interface Specification (NDIS)都可以做到这点。这样NIC driver就无需再直接和什麽IPXTCP/IP或NetBEUI之类的协定打交到了它只需要一个ODI 或 NDIS 界面就可以了它们可以将这些协定“翻译”给NIC 听。 

我们可以从下图看看client和server的传输过程中网路软体中各组件之间的关 


 

网路应用程式界面 (API) 

正如您在上面所读到的大多数应用程式其实都不为意到网路的存在。不过有些程式如果e-mail或群组程式是必须认知到网路更可以说它们是应网路而生的。它们要能够“插入”到网路中并和其它在网路机器上面跑的程式沟通。程式设计者建立的网路应用程式都要适应於网路给应用程式的一套指令这些指令就是所谓的 API 了。 

如果您懂得开汽车的话您一定知道当初学开车的时候是先学如果踏油门如何踩煞车如何转向等基本动作。我们可以将这些动作看成是一些“原始命令”通过这些命令我们就可以做出将汽车倒出车库然後开到目的地虽然学车的时候是没有诸如“倒出车库”的动作。那麽我们就可以将API当成是那些学车的“基本动作”的操作界面。 

在那些网路服务中比如redirector可以居於各种不同的传输协定之上如果没有API您的网路软体程式就要开发一个redirector程式来接通IPX/SPX又要另外一个redirector程式接通TCP/IP了。其实来来去去都是同一个redirector只是和不同的协定连接而已而API则提供了一个共同的界面给所有网路服务使用。这样我们就算开 BMW 或 Benz 都知道如何操作了但您未必会开艇哦因为汽车和艇 API 是不同的。当然如果有台汽车的油门是在左边煞车在右边离合器却在中间不用方向盘而是用摇竿我们也可以说这台车的 API 是不同的。 

刚才说的redirector 并不是写来供通讯协定使用而是给一个API (在我们的例子中是NetBIOS)使用NetBIOSI可以居於IPX/SPXNetBEUI和TCP/IP 这些协定之上。这样有个好处是您可以改变您的通讯协定而无需重写您的网路服务因为您的网路服务是针对API来写的。API会接管您的网路请求然後运用正确的通讯协定进行工作。 

您或许听过 socket 这个词它其实就是API啦。在网路世界中有三种API您或许会接触到的 

Novell Sockets 
NetBIOS 
TCP/IP Sockets (用来和Internet上面的其它网路沟通) 

OSI 模式 

有好几个主要电脑厂家如IBMDECBurroughs等都有设计它们各自的网路结构和通讯协定如果采用这些设计的机器在其各自的网路上面运作良好但却不能在不同厂家的机器之间进行沟通。为了解决这个问题International Standardization Organisation (ISO) 於1978年开始开发一套标准架构终於成功推出 Reference Model for Open System Interconnection (OSI) 作为其标准它提供了一个很有用的模式去解释各个不同层面的网路协定。 

OSI 模式共有七个层面且它们可以被划分为两组 

网路群组由实体层资料连接层和网路层组成。 
使用者群组由传输层会谈层表现层和应用层组成。 
您也可以从下图看到些协定层的排列 
应用层 (Application) 
表现层 (Presentation) 
会谈层 (Session) 
传输层 (Transport) 
网路层 (Network)  
资料连接层 (Data Link)  
实体层 (Physical)  

前面我们集中讨论的就是其中的低层协定也就是网路协定这些功能是保障数据在网路中能够迅速且准确的转送。 
实体层 


在这层里面您必须作出一些机械和电子方面的决定也就是要定义出在终端和网络之间要使用的设备。同时采用何种线也要在这里决定出来。 


资料连接层 


在这层指定了要采用的信息单元(message unit)是什麽(通常在LAN上面的信息单元被称为packet或frame)以及它们的格式和如何通过网络。每一个packet都会被赋予一个地址码和侦错监测值(checksum)。有一个Binary synchronous communications协定会判定出一个封包如果在丢失的情况下要等待多久会被重新发送这个协定也是在这层里面定义。 

总体来说这层的工作就是保一个无错误的物理上的数据传输。 


网路层 


这层就好比是一个中间人界乎於网络功能和使用者功能之间。它会定义出封包在网路中移动的路由和其处理过程这层还决定了网路是如何进行管理功能的比如发送状态信息给接点和规封包的流动等。 

一个有趣的事情是网路层还能将底层协定(网路功能)对上层协定(使用者功能)躲起来。这样在网路的使用者就可以使用不同种类的硬体了。这是非常好的事情假如您用来建网的材料都不尽相同的话。 


在底下的三层之上还有四层是属使用者功能围的不过它们也常常会被整合在一起。您要记住的一点是无论程式设计者如何定义这些协定(例如把它们分为两层或四层)这四层在实际上都会被执行的。 

传输层 


在这层将会设定节点地址的传达还有错误检测和修正的方法。 


会谈层 


这层定义了如何连接和挂断连接和在网路上面的数据如何交换。 


表现层 


在这层定义了数据的语法(syntax)变更和格式。当应用程式的语法和格式都不同的时候这层还将定义了如何翻译这些不同。 


应用层 


这是最後一层了它定义了应用程式是如何进入OSI模式进行传送。它自己并不属应用程式但它支持使用者的应用程式如档案传送密码验和网路工具等。 

以上所列举的协定层并非是他们的详细定义只是一个框架而已。您可以把OSI的协定模式当成是人体的骨架当您套上这个框架之後您就差不多可以描绘出大致形状了虽然外表会有所不同但骨子里还是一样的。 

这里还有一个tips如果您忘记了这些协定层的排列顺序您可以参照这句话Please Do Not Take Sales Person's Advice。 

(http://www.fanqiang.com)
    进入【UNIX论坛

相关文章
网路概论---10.电信 (Telecommunication) (2001-06-03 22:08:00)
网路概论---9.超越LAN之外 --- Internetworking (2001-06-03 21:04:00)
网路概论---8.网路作业系统 (2001-06-03 20:10:00)
网路概论---7.通讯协定 (2001-06-03 19:00:00)
网路概论---6.网路管理模式 (2001-06-03 18:55:37)
网路概论---5.网路架构 (2001-06-03 17:04:00)
网路概论---4.连线材料 (2001-06-03 16:10:00)
网路概论---3.一些网路名词 (2001-06-03 15:00:00)
网路概论---2.网路能做些什麽 (2001-06-03 14:08:00)
网路概论---1.何为网路? (2001-06-03 13:04:00)
 

★  樊强制作 欢迎分享  ★