精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● FreeBSD>>《FreeBSD使用大全》第二版>>5.1.1 DOD参考模型

主题:5.1.1 DOD参考模型
发信人: sungang(笨刚)
整理人: sungang(2003-11-17 15:31:57), 站内信件
按照对网络的不同理解,可以有不同的参考模型,将通信分为不同的层次结构,其中影响最大的就是国际标准化组织开发的OSI标准七层模型和TCP/IP中使用DOD四层模型。

DOD模型的四层分别为:

●应用层(Application)

●主机到主机层(Host to Host)

●网络互连层(Internet)

●网络访问层(Network Access)

由于计算机通信本身是复杂的,并且通信要求也多种多样,因此,每一个层次事实上包含多种功能和多个方面,因此要实现每一个层次,现实的态度是一个功能一个功能的逐渐实现,而不是一揽子的方式来实现。按照功能和特性对每个层次再次进行划分,是对模型进行具体实现所必须的。



图 4-2 DOD参考模型

因此在DOD参考模型中,包含多个协议或标准,应用这些具体的协议或标准,参考模型中的逻辑通信方式才真正得到具体实现。在这些协议和标准中,最重要的是IP协议和TCP协议,因此,可以用TCP/IP来代表整个DOD模型定义的协议族,这就是TCP/IP协议。

参考模型的层次划分从逻辑上来讲是十分自然的,它主要依据这些功能的基本程度。直接与应用系统打交道的层次,抽象程度最高,而低层则不管这些任务的具体类别,统一根据硬件的要求进行划分和传输。

<font size="+3">1) 网络访问层

虽然DOD参考模型中定义了这一层,事实上并没有定义任何具体的协议,就是说TCP/IP本身并不包含任何网络访问层的协议,这是因为这个层次主要是硬件相关的标准,而DOD模型的提出主要是基于这些硬件,解决更为重要的高层次问题。因此,这个层的协议大部分是由其他通信组织定义的,例如IEEE,CCITT等。

当然制定模型的时候,也考虑了这些硬件标准的制定方式,与这些现有标准的协作,反而使TCP/IP能适合几乎全部硬件平台,因为这些硬件都是遵循这些现有标准,如果DOD模型中完全独立的制定自己的硬件标准,也许会因为硬件厂商对这些标准的支持不够,而带来普及的问题,那么TCP/IP也不会象现在这些成为事实上的网络标准。

网络访问层和硬件相关,负责基本的通信,因此这也是使用计算机进行通信所遇到的最基本问题之一。拥有什么样的通信硬件?选择何种通信硬件?具体的硬件种类是否被当前的系统,如FreeBSD,所支持?

<font size="+3">◆  网络连接类型

最常用的网络连接方式是以太网方式,包括快速以太网,千兆以太网,以及未来更高速的以太网标准,以太网越来越流行,成为最标准的网络连接方式。FreeBSD对其有着近乎完美的支持,能够支持多种以太网卡硬件,同时FreeBSD支持标准以太网的种种扩展,例如VLAN,PPPoE。在一些实验中,FreeBSD上实现了峰值达到Gbps的网络速度,表明FreeBSD系统的网络代码本身的高效率。

以太网的标准通常按照连接速度和介质类型分为:

10base-2, 10base-5, 10base-TX, 100base-TX, 100base-FX, 1000base-FX???等,其中10base等指网络速度,而10base-2为使用细同轴电缆的传输方式,10base-5为使用粗同轴电缆的传输方式,这两种方式由于是总线方式的连接,可靠性差,已经被使用星型方式的双绞线连接方式而代替,而10base-TX,100base-TX中的TX则指双绞线连接方式,而FX则为光纤连接方式。

使用FreeBSD系统,可以获得当前的网络连接方式信息,需要注意的是,同样使用双绞线,可以支持10base-TX和100base-TX的连接方式,通常情况下,系统可以自动选择连接方式,这种方式称为以太网的自适应能力,FreeBSD系统下称为autoselect模式。从FreeBSD系统中还可以获得的信息包括网络连接是全双工的传输方式还是半双工的传输方式等有关信息。

另一种常用的网络连接方式是使用普通电话线的拨号连接,FreeBSD也能很好的支持它。由于使用普通电话线,因此网络速度受到一定限制,最高速度仅为56Kbps。ISDN是普通电话的扩展,单通道支持64Kbps,而同时可以使用两个通道,达到128Kbps的网络速度。然而,ISDN需要特别的电话交换机设备,并且由于资费的问题,以及其速度与电话拨号并没有本质的差别,这种方式显然只是过渡方式。FreeBSD系统对普通电话和ISDN的拨号连接都有很好的支持。

以太网连接方式和拨号连接是最常见的两种网络连接方式,但仔细考虑,就会发现这两种连接方式基于不同的考虑思路,用于解决不同的问题。以太网连接的网络中,网络中的计算机多,并且是集中的,因此有利于建立专用通信网络,是一种密集高速的通信模式,这种计算机网络被称为局域网LAN。而拨号连接的条件下,计算机是分散的,数量是变化的,计算机之间的距离也非常远,因此借助通信服务商的网络更为合适,是一种分散型的通信模式,这种网络被称为广域网WAN。

在局域网领域内,也有另外一些标准,如token ring、FDDI等网络连接方式,这些标准在实践中已经很少应用,不再是主流产品。

而在广域网领域内,采用拨号的计算机网络连接方式,属于最普通、古老、常见的方式,也是性能比较差的方式。通信服务商能提供另外一些广域网络连接方式,由于这些网络连接的是计算机等数据处理设备,与电话连接的语音通信设备不同,因此这些网络也被称为数据网络。常见的数据网技术有X.25,DDN,Frame Relay,ATM,SDH等。

X.25是最早的专用数据网络技术,当前还普遍用于金融领域,但这些连接方式速度慢,已经逐渐被淘汰。FreeBSD曾经也支持X.25,但由于X.25逐渐退出市场,也抛弃了对X.25的支持。

DDN是一种透明的传输方式,当前应用的比较流行,由于其为透明方式,关键就是硬件支持能力。然而,由于这些通信网络的连接比较专用,多数情况下使用独立的通信设备,而不是为标准硬件开发的插卡。结果导致:第一,很难找到可以用在个人计算机上的数据网络硬件插卡(除modem外),第二、即使有这些插卡,这些插卡也面向专用市场,开发商将自己开发专用软件来完成专用任务,而不是开放硬件细节让第三方开发软件,因此就导致,FreeBSD对这些硬件支持都并不是很完善。所有的这些通信网络,由于领域过于专,都存在这些硬件的支持问题。

FreeBSD并不支持Frame Relay,但对ATM的支持却比较完整,这可能是因为三、四年前ATM领域的雄心勃勃,试图进入桌面领域,因此,相当多的人就使用通用平台,如FreeBSD,对ATM进行支持。

而SDH则是直接就是底层的传输模式,由于对骨干网络的速度要求,那么人们开发了IP over SDH,IP over dwpm??等IP协议的骨干传输方式。由于是骨干网络,专有程度非常之高,已经不是通用硬件和软件的涉足领域了,显然FreeBSD是不支持它们的,支持它们的工作属于juniper、CISCO等专业核心网络设备厂商。有意思的是,Juniper的网络设备是基于FreeBSD系统的代码,当然硬件是截然不同的了。

<font size="+3">◆  城域网与宽带接入

虽然,局域网和广域网是解决不同的网络连接问题的,但由于计算机网络的普及越来越高,一种趋势就是在一个很大的范围内建立网络连接,例如一个城市的范围内,这么大的范围内连接数量巨大的计算机系统,因此这个问题就成为了新的课题,被称为城域网。

城域网本身的建设和使用的技术比较容易确定,可以根据网络的具体情况选择相应的广域网,甚至局域网连接方式,但在将最终的计算机接入城域网的是否,采用何种种技术就存在争论,这个问题又被称为”最后一公里”的接入问题。

从局域网出发,最直接的考虑是采用以太网方式连接计算机和城域网,这种方式需要重新铺设网络线路,非常适合密集性的小区。

另一种方式是使用普通电话线的ADSL,事实上有一大类这种非常类似的硬件标准,如HDSL等,因此被称为xDSL。ADSL可以使用普通电话线,但最高可以达到上行1Mbps,下行8Mbps的网络传输速度。然而,FreeBSD不需要考虑支持ADSL设备,因为硬件厂商为了保持最大的兼容性以及更容易的推广ADSL,在与终端连接的时候,在底层进行了转换,一般是通过以太网方式,直接连接计算机的网卡。第三种流行的接入方式是HFC,通过原本传播有线电视信号的同轴电缆来传播网络信号。

ADSL和HFC,以及类似的连接方式,和以太网连接方式一起,成为了计算机宽带连接的主流方式,而原有的拨号连接方式,由于速度比较低,则被称为窄带连接。

<font size="+3">◆ 广播与点对点

当物理上的网络连接设置好之后,原则上计算机之间就可以相互通信,但要完成通信,仍然存在一些问题。

对于以太网来讲,通信数据是通过广播的方式发送的,当一个数据包发送到网络上之后,可以被所有的网络上的计算机获得,但是接受到信号的计算机如何知道这个信号是哪个计算机发出的呢?因此,必须在这个网络上标识每个不同的计算机,通信过程才能正确完成。因此网络访问层就定义了介质访问控制地址(MAC地址),用于标识以太网中不同的计算机。有了网络访问层,计算机之间可以相互识别,并可以建立物理连接,就为计算机之间相互交换数据提供了条件。

而拨号连接则完全不同,一个连接是从一个点到达另一个点的,原则上一个点发送的数据必然是发送给另一端的,因此,逻辑上只需要和对端协商就可以了。但拨号连接的一个问题是,需要建立连接,即使是专线也只是建立之后不再撤消的永久连接。一旦建立连接,就由专用网络设备维护这个连接,将网络数据通过一个真实或虚拟的链路传输出去。网络设备通常是通过交换的方式,将数据从一点传递到另一点的。

现代的以太网也不再完全是广播模式,一旦通过广播找到对方的位置之后,中心的以太网交换机能直接将数据交换给目标,而不再广播给所有的网络节点。

<font size="+3">◆   FreeBSD下的网络驱动

在FreeBSD下,网络硬件是以网络界面(Interface)的形式存在的,如果计算机的网卡被正确探测到的话,则就有一个相应的网络界面。例如第一个3C905网卡的网络界面是xl0,第一个Ne2000兼容网卡网络界面是ed0,使用内核级PPP驱动的ppp网络界面为ppp0等。这些网络界面都对应于内核中的硬件驱动程序,只有在硬件被检测到之后,这些网络界面才能被正常使用。

除此之外,还有一个本地环路网络界面lo0,这使得即使没有任何网络界面的硬件存在,也能使用FreeBSD运行网络程序为本机提供网络服务。


<font size="+3">2) 网际层(Internet层)

网络访问层能够标识同一个直接连接的网络中的两个不同计算机,使得它们能够相互通信,但是实际网络情况更为复杂,不仅仅由一个物理网络组成,而是由多个不同类型的物理网络互相连接组成的,因此,不同物理网络之间的两个计算机并没有直接连接,当它们需要通信的时候,首先要确定另一个计算机所在的物理网络,然后再确定计算机在整个网络中的位置,才能达到通信的目的,这就是Internet层需要完成的任务。

Internet层负责确定一台计算机能在整个网络上的位置,并找出通向它的路径,然后才能够相互交换数据。这种路径选择功能既复杂又重要,因此实现这个功能的IP协议是整个TCP/IP协议组中的最基本协议。

<font size="+3">◆ IP地址

为了确认一台计算机在整个网络当中的唯一位置,那么就需要两个数据,一个是这个计算机所处的物理网络在整个网络中的唯一标识,这可以通过网络地址(Network Address)来确定,另一个是这个计算机在它所在物理网络的唯一位置,这可以通过节点地址(Node Address)来确定。

原则上,网络访问层中已经确定了每个计算机在自己物理网络中的节点地址,只需要确定计算机所在的网络地址就可以了,例如IPX协议就使用以太往的MAC地址作为节点地址。但是,考虑到网络访问层中存在多种不同的通信标准,每种标准使用的地址表示方式是不同的,这样以来,由于使用网络连接方式不同,每个计算机的地址形式都不一致,这在网络规模较小时还不是问题,在网络规模越来越大的时候,就造成网络划分和管理的困难。因此,IP协议使用了一个唯一的逻辑地址表示形式来解决这个问题。

IP协议给每个计算机都分配了一个唯一的IP地址,这个地址是一个分为四部分的32位长的数,每个部分为8位,使用点将其分开,例如192.168.1.64,这样整个地址就表示的比较清晰。

每个IP地址被划分为两个部分,一个为网络地址,用于表示计算机所在的具体网络,一个为节点地址,用于标识计算机在其网络中的位置;网络地址和节点地址通过网络掩码(netmask)进行区分,对应网络掩码二进制位为一的IP地址部分为网络部分,其他的为节点部分。

例如网络掩码255.255.255.0(16进制形式为0xffffff00)将192.168.1.64的网络部分分为192.168.1和64两部分,因此其网络地址为192.168.1.0,节点部分为0.0.0.64。这个IP地址在FreeBSD下可以写作192.168.1.64/255.255.255.0或者192.168.1.64/24,后面一种形式和前一个是等价的,表示子网掩码的二进制位中前面为1的位共有24位,即255.255.255.0。

同一个网络中的网络地址应该相同,但节点地址应该不同,因而子网掩码可以决定这个网络中可以拥有的TCP/IP主机的数量,即节点地址的范围减2,其中节点地址二进制位全为0的地址为网络地址,表示这个网络本身,而节点地址二进制位全为0的地址为广播地址,用于在网络中发送广播包。

在IP协议中,为了便于管理,为不同种类的IP地址定义了缺省的网络掩码,而定义的具备不同网络掩码的IP地址就组成不同的网络类别。区分不同网络地址类别的主要目的是为了解决有些网络比较大,需要容纳较多的节点,因此需要较多的节点地址,而另一些网络比较小,如果分配过多的节点地址就造成了浪费。

A类网络:1.0.0.0到127.0.0.0,缺省网络掩码为255.0.0.0,每个网络可以容纳16,777,214台计算机,这种网络用于大型网络,而127.0.0.0被IP协议用于测试目的,表示一个逻辑内部网络,在任何计算机系统中,127.0.0.1都代表该计算机本身,如果计算机和127.0.0.1通信,那么数据将返回系统本身,而不会送到任何一个网络上;

B类网络:128.0.0.0到191.0.0.0,缺省网络掩码为255.255.0.0,每个网络可以容纳65,534台计算机,这样的地址用于中型网络;

C类网络:192.0.0.0到223.0.0.0,缺省网络掩码为255.255.255.0,每个网络只能容纳254台计算机,只能用作小型网络;

其他的IP地址属于D、E类地址,被IP协议保留用在了组播等其他方面。

这样划分的目的是为了让IP地址可以同时满足要求不同IP地址数量的大型网络和小型网络的需要。然而随着Internet的发展,IP地址开始变得紧张起来,当前已经提出了IPv6标准,以扩展IP地址的范围,解决地址紧张的问题。当前绝大多数网络还没有支持IPv6,因此完全转向IPv6还是一个漫长的过程。当前主要使用另一种IP地址转换技术(NAT, Network Address Translete)来解决IP地址紧张的问题。

由于IP协议是为了Internet这个巨大的网络而设计的,为了达到最大限度的灵活性,IP协议也规定了一些地址属于内部地址,不能在Internet上公开使用,这些地址包括:

10.0.0.0 - 10.255.255.255

172.16.0.0 - 172.31.255.255

192.168.0.0 - 192.168.255.255

这些内部地址包括了A、B、C类网络地址,任何组织可以根据需要随意选用,这就使得在一个网络既能保持和Internet的地址分配兼容,又能根据需要分配足够的地址空间。如果内部地址的计算机要访问Internet,就需要通过地址翻译技术。


<font size="+3">◆ 路由

有了IP地址,计算机就能确定在它在网络上的位置。当一台计算机要和另外计算机通信时,它首先必须知道对方的IP地址,如果该IP的网络地址和它相同,两台计算机就处在同一个子网上,能通过网络访问层进行通信。直接通信需要获得对方的MAC地址,可以通过IP地址请求获得对方的MAC地址,以通过网络访问层进行通信,这需要通过另一个协议──ARP协议,从IP地址获得对方的MAC地址。

如果两台计算机不在同一个网络内,那么网络之间是通过一些特殊的计算机──路由器连接在一起的,因而计算机之间的通信也必须借助路由器的帮助,才能将IP数据包发送到对方计算机上。而路由器了解网络的连接情况,它知道发向一个网络的数据包应该如何处理,或者是发向下一个路由器,或者可以是直接发向目标计算机。

因此,当两台计算机不在同一个网络内时,发送数据的计算机将查看自己内部的路由表,找出通往对方的合适路由器的IP地址,将IP数据包发送给这台路由器,由各级路由器负责将IP包发送到目的地。因此一台计算机要想和子网外的计算机通信,至少要知道一台路由器,由这台路由器负责将数据发送到子网外,通常称这台路由器为缺省网关(default Gateway)。

更为复杂的情况下,一个网络中连接有多个路由器,每个路由器连接不同的网络。那么,为了找到通向目标网络的通路,计算机必须知道哪个路由器负责通向哪些网络的具体信息。这个时候,计算机就需要知道更详细的信息,例如通向A网络需要通过路由器a,通向B网络需要通过路由器b等等。这些通往其他子网的通路被称为路由,这也就是路由器名称的由来,事实上,路由器本身也是这样一台专门用于处理网络连接的计算机。最早的路由器本身就是由普通计算机来担任的,由于BSD Unix是TCP/IP最早的实现,因此BSD在早期经常被用作路由器。但是随着网络的发展,网络速度的提高,网络硬件的专有化程度的提高,基于纯粹软件的路由器不能满足高速网络互联的需要,因此专门设计的路由器开始流行。

路由的数据可以通过route指令由管理员手工加进去,这种方法添加的路由信息称为静态路由。手工添加的方法只能适合情况简单,网络简单的条件,稍微复杂的网络,如果采用手工维护的方法,就导致非常巨大的工作量,因此,更为合适的方式是让路由器之间相互学习,将网络的路由结构自动传递给每个路由器,从而使每个路由器和网络上的主机得到完整的路由信息。这种方法称为动态路由,路由器之间交换路由数据的协议主要有RIP、OSPF、BGP等协议。FreeBSD也能很好的支持这些路由交换功能,因此FreeBSD也是用做软件路由器的最佳选择。

<font size="+3">◆ DNS与名字解析

通常IP地址由纯粹数字构成,不易记忆。实际使用中是通过使用主机名来标记一台计算机,而主机名可以自动转换为IP地址,再进行实际的连接。

主机名与IP地址的对应关系可以配置在主机名配置文件/etc/hosts中,每一个主机名与IP地址的对应关系,就需要一条hosts文件记录。但是,随着网络的发展,需要命名的IP地址越来越多,而且,由于IP地址是分配给不同的组织的,那么不同的IP地址的命名是由不同的组织命名的,他们都希望自己的命名不仅自己承认,所有的互联网系统都承认这个命名。这就要求维护一个统一、巨大的hosts文件,显然这样的工作是无法完成。

完成这种任务,必须设计一种分布式的目录查询系统,因此就设计DNS协议,将对应关系保存在网络上多台名字服务器(DNS server)中,这样就能通过名字服务器来维护自己组织机构的名字解析数据,并负责回应名字查询。更为方便的是,只需查询任何一台名字服务器,就能够得到、并且得到唯一的答复。

由于网络上不同的计算机属于不同的网络和组织机构,因此DNS名字按一种目录结构来划分,可以分为区分组织的域名(Domain Name)和在组织内区分计算机的主机名,形成一种多级的结构。例如一台计算机的名字为wb.example.com.cn,其中wb为主机名,example.com.cn为域名,其中example代表工作的单位,com是类别代码,代表这个单位是公司机构,cn是国别代码,代表这个机构位于中国。

hosts文件方式的名字解析和DNS方式在同一个系统中是同时并存的,通常对于一些少量的、只需要本系统知道的名字可以在hosts文件中命名,而需要全部互联网上的系统都知道的名字,必须申请DNS名字。

<font size="+3"> 3) 主机-主机层

这一层负责维护不同计算机上的两个进程的通信,它的主要作用就是将应用程序与网络的复杂性相隔离,应用层只需发出请求,而不必顾及任务是如何完成的。这一层包括两个协议:传输控制协议TCP和数据报协议UDP。

TCP协议是一种面向连接、有分组顺序控制和差错控制的安全准确的协议,因此必须在网络上传送额外的维护信息,网络开销大,但也是最常用的网络协议。

TCP协议在不同机器之间建立了虚拟连接,它使用一个16位的端口地址(port number)来区分不同连接。应用程序必须使用一个或几个端口地址来提供网络服务,因此对于常用的网络服务,其使用的端口地址就是固定的。FreeBSD下在/etc/services文件中就定义了一些常用的端口地址。

UDP协议不建立连接,因此也不保证数据正确完整,相对来讲网络开销小,然而对于不可靠的网络连接,数据完整性无法保证。UDP也使用端口地址发送和接受属于不同应用程序的数据。

BSD Unix最早使用套接字(socket)来实现TCP协议和UDP协议,这种实现方式已经成为了事实上的TCP/IP实现的标准方式,即使是Windows系统,也是通过将这种接口移植过去,定义了winsock的访问接口。

<font size="+3"> 4) 应用层

应用层就是为了让应用程序在不同的计算机上运行并相互通信而实现的多种协议,每种协议都对应一类应用程序。并且随着Internet上的应用程序的不断增加,应用协议的种类也越来越多。

应用系统虽然种类很多,但为了避免混淆,它们在设计的时候就尽量避免和以有的标准应用系统冲突,免得一个系统中运行一个应用系统的时候就不能运行另一种应用系统,这主要表现在使用不同的TCP/UDP端口上,这样一来,端口与应用系统系统就存在一种潜在的对应关系。在/etc/services文件中定义的每一行就对应一个固定端口,就可能对应于一种应用程序类型。除此之外,还有很多非标准应用程序,它们使用的端口还没有广为人知,因此使用端口没有定义,就有可能存在冲突。当然在一个具体系统中并不会同时运行所有种类的应用程序,因此发生冲突的可能并不是很大。

大部分TCP/IP应用程序是属于客户机/服务器类型的,这种类型的应用程序包含两个部分,其中服务器程序通常运行在服务器系统的后台,称为守护程序(daemon)。守护进程运行在后台,随时接受客户连接以提供服务;客户软件就是应用程序的用户接口,用户通过它使用服务器上的资源。

由于希望在需要的时候服务器能立即提供服务,这样就需要启动大量并不常用的守护进程运行在系统中,就浪费了系统资源。因此Unix使用一个超级守护程序inetd来监控这些不常用到的服务请求。只有在inetd接到客户程序的连接请求后,才启动相应的应用服务程序进行处理,这样系统中就不必运行过多的守护进程了,从而节约系统资源。

[关闭][返回]