介绍 OSI 模型
我们已经知道 TCP/IP 能够应用在不同的网路﹐这就必须要有一套大家都遵守的的标准才能保证彼此能够沟通。因为数据通讯领域的专用术语和技术实在太广泛了﹐没有任何一位电脑专家能够熟悉全部的内容。因此必须有一套公认而且通用的参考架构以供厘清各项标准。在我们了解 TCP/IP 协定之前﹐有一个公认的网路模型我们必须要先了解的﹐它就是由 International Standardization Organisation (ISO) 于1978年开始开发的一套标准架构﹕Reference Model for Open System Interconnection (OSI) 模型。OSI 常被引用来说明数据通讯协定的结构及功能﹐成为讨论通讯时代共同依据﹐已经被通讯界广泛实用且有一致的认知了。
OSI 把数据通讯的各种功能分为七个层级﹐各司其职﹐但有相互依存﹑合作。但在功能上﹐它们又可以被划分为两组﹕
网路群组﹕由实体层﹑资料连接层(数据链路层)﹑和网路层组成。
使用者群组﹕由传送层﹑会谈层(会话层)﹑表现层(表示层)﹑和应用层组成。
您可以从下图看各个协定层的排列关系﹕
OSI 参考模型 OSI 提供了一个很有用的模式去解释各个不同层面的网路协定﹐这些协定就像堆积木一样﹐层层叠上去﹐因此此一架构常被称为堆叠(stack)﹐或是协定堆叠。每一个协定都只和与之对应的协定沟通﹐然后将结构向相邻的协定解释。彼此之间如何传送资料都有必然的协定﹐而且层层相扣﹐共同协力完成任务。各层无需知道其他层是如何工作的﹐只关心相同层级的协定就行﹔但层与层之间却有一套既定协议相互交换处理结果。这样有一个很明显的好处是﹕这留给各层都有自己的设计与发展空间﹐当某一层要进行协定更新﹐其他层无需同时被修改。 下面分别对各个曾经做一个简单的描述﹕ 实体层(Physical Layer)在这层裡面您必须作出一些机械和电子方面的决定﹐也就是要定义出在终端和网络之间要使用的设备。同时﹐採用何种佈线也要在这裡决定出来>这层实际是定义了应用在网路传输中的各种设备规格﹐以及如何将硬体所携载的信号转换成电脑可以理解的电子信号( 0 和 1 )﹐这通常都是设备上面之韧体(Firmware)的功能。这些规格一般是由硬体的生产厂商制定的﹐比如﹕数据线的接脚﹑电压﹑波长﹑相位﹑等等。 资料连接层(Data Link Layer)在这层指定了要採用的信息单元 (message unit﹐通常在 LAN上面的信息单元被称为 frame﹐翻译为“讯框”或“框包”)﹐还有它们的格式﹑以及如何通过网络。每一个 frame 都会被赋予一个 MAC 位址码和侦错监测值(checksum)。
Data Link Layer Frame 结构 数据在实体层是以bit为单位来传输的﹐资料连接层要制定不同网路形态的资料框包格式﹐确保数据能够在不同的网路实体(比如﹕同轴电缆﹑双绞线﹑光纤﹑电话数据线﹑等等)上进行资料传送。有一个 Binary Synchronous Communications 协定﹐会判定出一个框包如果在丢失的情况下﹐要等待多久会被重新发送﹐以及如何处理重发的框包和封包确认。这个协定也是在这层裡面定义。我们通常用来拨接上网的 PPP 协定就是在这层裡面定义的﹔同时﹐一般给 Mainframe 使用的 xDLC 协定也属于这裡的范围。 资料连接层通常会管辖以下的功能﹕ 网路卡的实体位址(Physical Address)﹐也被称为MAC(Media Access Control) Address
IEEE 802 / 803.x 标准 总体来说﹐这层的工作就是保证一个无错误的物理上的数据传输。 网路层(Network Layer)
发送端电脑在封包被传送出去之前﹐都会先为其建立 header ﹐作为在网路或子网间进行路由的依据。网路层在辨认和处理资料的时候﹐会忽略由高层协定制定的定义﹐只负责为数据在一个或多个网路间建立﹑维护﹑和终止连接。 网路层通常都有如下的这些功能﹕ 如果封包不是属于同一个网路的时候﹐会将之交由 router 处理 传送层(Transport Layer)
传送层可以等资料收集到足够大的数量的时候才发送出去,并非应用程式每次产生一个数据就进行一次传送,也就能减少了不必要的传输次数﹐以保证高效率的传输﹔反之,当应用程式产生大资料量数据时,则将之分拆成较小的封包再进行传送。 传送层的主要功能有﹕ 接管由上层协定传来的资料﹐并进行“分拆”和“打包”等工作。
|
Open System Interconnection | Internet Protocol Suite | Microsoft Network |
(Application) | 应用层 (Application) |
应用界面层 (Application Interface) |
表示层 (Presentation) | ||
会话层 (Session) | ||
传送层 (Transport) | 传送层 (Transport) | 传送设备界面层 (Transport Device Interface) |
网络层 (Network) | 网络层 (Network) | |
数据链路层 (Data Link) | 实体层 (Physical) | 网络驱动界面层 (Network Driver Interface) |
实体层(Physical) | 实体网络层 (Physical Network Layer) |
网路协定层级裡面﹐每一层都可以说是作为其连接的上下层的界面。这样﹐在和网路另端的节点沟通的时候﹐只需和相同层级沟通就可以了﹐而无需理会其它层级使用的是什麽协定。在发送端机器上﹐各个层级对会对数据封包加上自己的header﹐然后再传给下一级协定﹔当封包抵达接收端﹐各层级也只关心相对应的header﹐并根据协定对封包进行处理﹐完毕之后则将header除去﹐然后传给上级协定则可。
封装的概念 ( Encapsulation )
我们要知道,OSI 只是一个模形,其主要功能是定议了网路传输方面的参考模式。在其分层的结构中,可以从下图看出 OSI 层级的资料流情况﹕
当您有一份报价单( data )要寄给海外的客户﹐将之交给秘书之后﹐秘书会帮你把信封( header1 )打好﹐然后贴好邮票投进邮筒﹐然后邮局将信件分好类﹐再把相同地区的邮件放进更大的邮包( header2 )附运﹐然后航空公司也会把邮件和其它货物一起用飞机货柜( hearder3 )运达目的机场﹔好了﹐目的地机场只接管不同飞机所运来的货物﹐然后把邮包( header2 )交给对方邮局﹐邮局把邮件分好类之后﹐把信封( header1 )递送到客户那裡﹐然后客户打开信封就可以看到报价单( data )了。
由此可见﹐网路的层级分工﹐其实跟我们日常的生活模式也有许多相似的功能﹕
上例子中的飞机好比是“实体层”﹐我们当然也可以选择使用轮船或汽车等运输工具﹔
我们也可以把机场管理局﹐或码头﹑车站的管理机构看成是“资料连接层”﹐他们会规定了不同的交通工具使用的不同规则﹐例如﹕班次﹑泊位﹑进场/出场时间间隔﹑接管/分发货物﹑等等﹔
邮局可以说是“网路层”﹐到底使用那个机场﹑港口﹑车站﹐或是货物经由哪条路径传递最迅速﹐这些都由邮局来管好了﹔
要是您寄的资料有一本书那麽厚﹐但邮局一次最多只能帮你寄十页﹐那麽您就得将资料拆开﹐编好序号﹐分装在好几个信封裡﹐再进行邮寄﹐这和“传送层”的“打包”功能差不多。如果您同时还和好几个客户洽谈好几样事务﹐您也得分辨出哪些资料是属于哪个客户的﹐“传送层”也有类似的追踪功能﹔
“会谈层”相信也不难理解﹐先假设您和客户之间的沟通都必须使用邮件(没有电话﹐传真﹐更没有email)﹐您总不会茂茂然的就先把报价单寄出去吧﹖您会先征询对方的同意﹐才会开始寄出去﹐然后您可以告诉对方报价单全部寄送完毕﹐那麽得到对方确认之后﹐就可以说完成一次“会谈”了﹔
如果您的秘书聪明能干﹐还能够帮您翻译各国语言和文件格式﹐那您以经有了“表现层”了﹔
“应用层”更不用多说了﹐您和您的客户不会只收发报价单吧﹖还有很多合同啦﹑预算啦﹑策略啦﹑邀请啦﹑等一大堆东西﹐可能除了生意上的﹐间或还会聊聊男人和女人呢!
这裡我们不难看出﹕每一个上层封包对下层来说﹐都是下层封包的数据﹔下层协定无需理会上层如何进行封装﹐一律照单全收﹐然后加以自己的封装﹐再把整个加封后的封包传给更下一层。
OSI 协定模型可以说是网路通讯的基石﹐尤其是层级与层级之间﹑上层和下层的关系﹐更是网路学习中的关键概念。对 OSI 模型的理解程度﹐将直接影响日后整个网路管理生涯﹐这包括软硬体的选择以及通讯服务程式的开发和日常的网路管理。
分层协定的缺点
从前面的说明中﹐我们可以体会到分层协定设计的一个基本构思﹕让协定设计者将复杂的问题分成数个子问题﹐然后再分别处理。然而﹐所付出的代价是﹕会令到分层的软体变得非常低效。比方说﹕应用程序将一串位元组交到传送层﹐经过封包切割之后﹐再传到网路上。在此一过程中﹐传送层会选择最大的封包体积﹐以达到传输的最佳化﹐以配合讯框在实体网路中传送的最佳化。倘若软件的分层过严的话﹐传送层就无法知道底层的路由状况﹐也不知道与之直接相连的网路有哪些。更甚者﹐传送层也不可能知道讯框的格式﹐也就不能知道如何界定封包体积的大小。所以﹐分层过严反而会成为传送最佳化的障碍。
因此﹐协定设计者在设计协定软件时﹐通常会略为放宽限制﹐以允许路由选择、MTU 之类的讯息广播。同时在分配缓冲区的时候﹐会预先留下标头空间让低层填充资讯﹐或在高层协定传送讯框时保留标头资讯。如此设计便能在最佳化与分层结构中取得平衡。
Internet Protocol Suit 模型
在上面提到的七层协定﹐在实作应用中﹐某些层级常常会被整合在一起。但您要记住的一点是﹕无论程序设计者如何定义这些协定﹐(例如﹐把它们分为两层或四层)﹐这些层级在实际上都会被执行的。下面所介绍的 Internet Protocol Suit 模型﹐就是这样的一个例子。 事实上﹐国际间并没有一套公认的层级模型来描述 TCP/IP﹐但许多技术文件都把 OSI 的七层架构精简为三到五层不等。我们这裡所描述的将采用四层架构模型﹐如下图﹕
应用层 (Application Layer) |
传输层 (Transport Layer) |
网际网路层 (Internet Layer) |
网络访问层 (Network Access Layer) |
TCP/IP 层级模型
各层的定义如下﹕
应用层
这层是 TCP/IP 模型与应用程式之间的界面﹐向使用者提供应用程式服务所需的连接﹐然后透过其下的传送层来发送和接收资料。应用程式根据传送层所需的形态来选用资料格式﹐例如一串独立的资料﹐或是一连续位元的组流。
TCP/IP 协定家族中,本身就定义了众多的应用工具与协定,例如:HTTP、TELNET、NFS、等等。不同的协定使用不同的穿送层协定。
传送层
传送层的主要目的向应用程式之间提供点对点的通讯。它规划了资料流量﹐也提供一可靠传输以确保资料能正确的抵达目的地。传送层必须能够提供一套机制来控制和检测资料传送的正确性﹐例如安排接收端传回确认信息﹑重发遗失资料﹑以及剔除重複资料﹑等等。
传送层软体会将应用程式送下来的资料切割分包﹐以符合下层传输要求的一定体积﹐交由网际网路层处理。传送层协定会在每一个资料包上面加上一个标头 (header)﹐记录一些资讯﹐用来辨识该资料包属于哪个个程式和由哪个程式来接收。再配以检测和供接收机器来检测资料是否完整。 TCP/IP 的传送层协定主要分为 TCP 与 UDP 两种,前者为可靠性传输、后者为非可靠性传输。
网际网路层
这裡处理的是机器之间的通讯﹐为每一个传送层交下来的封包加上 IP 标头。网际网路层协定会根据传送层的位址资料﹐使用路由演算法进行路由判断﹐然后在 IP 标头上填上路由资讯﹐以及其它相关的传送选项资讯﹔再把封包交由下层处理。
这层协定的处理关键是路由﹐假如资料包的目的地是本机﹐则将标头去除﹐将剩下部份交给合适的传送协定处理﹔否则﹐就要判断封包是直接传送到本地网路节点﹐还是要传送给路由器。如有需要﹐还会送出 ICMP 错误和控制讯息﹐同时也要处理接收到的 ICMP 讯。
网路存取层
本层的主要功能是把资料直接送给网路装置。它定义了如何用网路来传送 IP 资料段﹐它必须知道底层网路的细节。相对于 OSI 模型﹐TCP/IP 模型的网路存取层整合了 OSI 的实体层﹑资料连接层﹑和网路层的功能。但大部份底层标准是有厂商或 IEEE 制定的。
针对不同的网路实体标准﹐网路存取层有许多不同种类的协定与之对应。正如我们从前面的 OSI 学到的层级观念来理解﹐就算其中某些协定得到更新﹐但对于上层协定来说﹐是没影响的。因为TCP/IP 的设计刻意隐藏了较底层的功能。
网路存取层的功能﹐除了把 IP 资料段封装到网路传送的实体讯框(frame)之外﹐它还同时负责把 IP 对应到网路设备的实体位址。这样才能让以 IP 位址为传送依据的资料﹐能透过底层网路传送。
与 OSI 模型一样﹐TCP/IP 的资料流也是逐层传递的﹐请参考下图﹕
习题﹕
OSI 模型一共有哪些层级﹖并说明各层级的功能。
TCP/IP 模型有哪些层级﹖说明各层级的功能﹐并比较与 OSI 模型的差异。
请用封装的概念来说明 OSI 层级和 TCP/IP 层级的资料流状况。
请指出分层协定的缺点以及解决方法。