2019年(7)
分类: 网络与安全
2019-01-21 13:33:18
介绍OSI 模型
我们已经知道TCP/IP 能够应用在不同的网路﹐这就必须要有一套大家都遵守的的标准才能保证彼此能够沟通。因为数据通讯领域的专用属于和技术实在太广泛了﹐没有任何一位电脑专家能够熟悉全部的内容。因此必须有一套公认而且通用的参考架构以供厘清各项标准。在我们了解TCP/IP 协定之前﹐有一个公认的网路模型我们必须要先了解的﹐它就是由International Standardization Organisation (ISO) 于1978年开始开发的一套标准架构﹕Reference Model for Open System Interconnection ( OSI) 模型。OSI 常被引用来说明数据通讯协定的结构及功能﹐成为讨论通讯时代共同依据﹐已经被通讯界广泛实用且有一致的认知了。
OSI 把数据通讯的各种功能分为七个层级﹐各司其职﹐但有相互依存﹑合作。但在功能上﹐它们又可以被划分为两组﹕
您可以从下图看各个协定层的排列关系﹕
应用层(Application) |
表现层(Presentation) |
会谈层(Session) |
传送层(Transport) |
网路层(Network) |
资料连接层(Data Link) |
实体层(Physical) |
OSI 参考模型
OSI提供了一个很有用的模式去解释各个不同层面的网路协定﹐这些协定就像堆积木一样﹐层层叠上去﹐因此此一架构常被称为堆叠 (stack)﹐或是协定堆叠。每一个协定都只和与之对应的协定沟通﹐然后将结构向相邻的协定解释。彼此之间如何传送资料都有必然的协定﹐而且层层相扣﹐共同协力完成任务。各层无需知道其他层是如何工作的﹐只关心相同层级的协定就行﹔但层与层之间却有一套既定协议相互交换处理结果。这样有一个很明显的好处是﹕这留给各层都有自己的设计与发展空间﹐当某一层要进行协定更新﹐其他层无需同时被修改。
下面分别对各个曾经做一个简单的描述﹕
例如网线﹑网路卡﹑电话线﹐等等﹐都是属于实体层的范畴﹐也就是用来连接两台电脑的可以携带数据的媒体﹕可以是铜线﹑也可以是红外线﹑也可以是光学纤维。我们常见的实体层是用来连接办公室网路的Ethernet 和Token Ring 线路﹐或者是连接modem 的电话线。而机器上的网路卡﹐或是连接远端的modem ﹐都能够将物理媒体上面的电子脉冲转换成电脑所能读得懂的0 和1。
Ethernet 的Data Link Layer Frame 看起来如下图﹕
序言 (Preamble) |
目的地 位址 (Destination) |
来源位址 (Source) |
信息类型 (Message Type) |
数据 (Data) |
封包监测资料 (Frame check sequence) |
8 bytes | 6 bytes | 6 bytes | 2 bytes | 46-1500 bytes | 4 bytes |
Data Link Layer Frame 结构
数据在实体层是以bit为单位来传输的﹐资料连接层要制定不同网路形态的资料框包格式﹐确保数据能够在不同的网路实体(比如﹕同轴电缆﹑双绞线﹑光纤﹑电话数据线﹑等等)上进行资料传送。有一个Binary Synchronous Communications 协定﹐会判定出一个框包如果在丢失的情况下﹐要等待多久会被重新发送﹐以及如何处理重发的框包和封包确认。这个协定也是在这层里面定义。我们通常用来拨接上网的PPP 协定就是在这层里面定义的﹔同时﹐一般给Mainframe 使用的xDLC 协定也属于这里的范围。
资料连接层通常会管辖以下的功能﹕
在IEEE802 标准里面﹐还将资料连接层再划分为两层﹕Media Access Control 和Logical Link Control ﹐请参阅下表﹕
OSI |
|
IEEE 802 |
|
IEEE 802 标准 |
|||
资料 |
Logical Link Control |
802.2 |
其它802 标准 |
||||
Media Access Control |
CSMA/CD |
Token Bus |
Token Ring |
||||
实体层 |
Physical |
802.3 |
802.4 |
802.5 |
IEEE 802 / 803.x 标准
总体来说﹐这层的工作就是保证一个无错误的物理上的数据传输。
网路层的主要功能是让封包(packet)在不同的网路之间成功地进行传递。它规定了网路的定址方式﹐及处理资料在不同网路之间的传递方式﹑处理子网路之间的传递﹑决定路由路径﹑网路环境﹑资料处理顺序﹑等等工作。
发送端电脑在封包被传送出去之前﹐都会先为其建立header ﹐作为在网路或子网间进行路由的依据。网路层在辨认和处理资料的时候﹐会忽略由高层协定制定的定义﹐只负责为数据在一个或多个网路间建立﹑维护﹑和终止连接。
网路层通常都有如下的这些功能﹕
一个有趣的事情是﹐网路层还能将底层协定(网路功能)对上层协定(使用者功能)躲起来。这样﹐在网路的使用者就可以使用不同种类的硬体了。这是非常好的事情﹐假如您用来建网的材料都不尽相同的话。
由于大多数网路﹐如Ethernet 和Token Ring等﹐由于物理上面的限制﹐一次所通过的数据流通常只有数千byte 而已(IP 封包最大体积为65536 bytes)﹐然而许多需要在网路中传输的资料都会超过这个数值。传送层的主要功能是确保电脑资料正确的传送到目的地。它的工作就是“打包”﹐也就是将电脑资料变成封包的形态﹐再赋以一定的检测手段﹐将资料正确的传到目的电脑﹐然后再将封包重组回资料。封包如果残缺则进行重发﹐也能够将重复的封包剔除。
传送层可以等资料收集到足够大的数量的时候才发送出去,并非应用程式每次产生一个数据就进行一次传送,也就能减少了不必要的传输次数﹐以保证高效率的传输﹔反之,当应用程式产生大资料量数据时,则将之分拆成较小的封包再进行传送。
传送层的主要功能有﹕
这层所负责的是建立和管理电脑与电脑之间的沟通模式﹐也就是在资料真正进行传送之前设定并建立好连线。这里定义了连线的请求和结束﹑传送和接收状态的设定﹑等等动作。
当节点A 要建立和节点B 的连线的时候﹐ 会先发出“连线请求”讯息, 若对方接受连线,则回应“建立请求”讯息﹐然后双方就建立好一个会谈了﹔当会谈结束的时候﹐也是先由节点A 送出一个“结束请求”信息﹐等对方确认这个请求之后﹐那么会谈也就真正结束了。
会谈层的功能主要有这些﹕
会谈层为不同的程式以及与之对应的位于另一台电脑的程式﹐提供了可靠的沟通渠道。在某些沟通渠道中使用的是half-duplex(半双工﹐即单向) 的模式﹐有些则使用full-duplex(全双工﹐即双向) 的模式﹐为程式之间协定好共同认可的模式﹐并进行同步和管理等责任﹐都是会谈层所肩负起的。
如果您想将您的PC 通过网路连接mainframe 电脑﹐那您就必须使用合适的mainframe 文字串﹐通常会是EBCDIS(External Binary Coded Decimal for Interchange Code)﹐然而您的PC 使用的却是ASCII 码( American Standard Code for Information Interchange)﹐这两种编码格式是截然不同的。表现层则是主要负责在不同机器之间进行编码转换。当应用程式产生资料要进行传送的时候﹐表现层会将之换成网路的标准编码格式再交由下层协定处理﹔然后当资料抵达目的地﹐表现层也会将网路的编码换成对方应用程式所需的格式。
表现层的主要功能如下﹕
在TCP/IP 协定家族中,应用层所定义的还有一些应用程式功能﹐例如FTP﹐HTTP﹐TELNET 等﹐主要负责客户端和伺服端的连接。相信您对这些程式或多或少接触过﹐比如您要从网上下载资料﹐可以通过FTP 客户程式﹐也可以通过流览器将资料拿到。但在您的机器和在网路上面的伺服器﹐都必须使用相应的应用程式功能才可以做到﹐这在TCP/IP 的网路环境里面﹐通常都会是以不同的port 号码来让不同的程式进行沟通。Port 号码可以随你喜欢来定﹐只要你知道号码是多少就可以用相对的程式来进行交谈了﹐不过﹐为了不至于太混乱﹐让大家有规可寻﹐TCP/IP 也指定了一些常用的port 来给常用的程式使用﹐例如﹐HTTP 使用80﹑FTP使用21﹑TELNET使用23﹑诸如此类... 不过﹐需要知道的是﹕在TCP/IP 协定中,进行port 连接的功能却应该是传送层的事情。对应用程式而言,它是与socket 作沟通,一个socket 就是一个罗辑位址和port 了。
应用层是整个OSI 模型的最后一层﹐它定义了应用程式是如何进入OSI 模式,但它自己并不属于应用程式。
以上所列举的协定层并非是他们的详细定义﹐只是一个框架而已。您可以把OSI的协定模式当成是人体的骨架﹐当您套上这个框架之后﹐您就差不多可以描绘出大致形状了﹐虽然外表会有所不同﹐但骨子里还是一样的。比方说﹐TCP/IP 和Microsoft 网路也有其对应的协定层﹐我们可以从下面列表中看看它们的比较﹕
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 层级的资料流情况﹕
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 的资料流也是逐层传递的﹐请参考下图﹕
TCP/IP 层级资料流
事实上TCP/IP 模型和OSI 模式的原理和概念都是一样的﹐只是在定义上和细节处理上的不同而已。关于TCP/IP 分层协定的资料﹐可以参考RFC-791 和RFC-817。
习题﹕
- OSI 模型一共有哪些层级﹖ 并说明各层级的功能。
- TCP/IP 模型有哪些层级﹖ 说明各层级的功能﹐并比较与OSI 模型的差异。
- 请用封装的概念来说明OSI 层级和TCP/IP 层级的资料流状况。
- 请指出分层协定的缺点以及解决方法。