本文共 6046 字,大约阅读时间需要 20 分钟。
本节书摘来华章计算机《计算机网络:自顶向下方法(原书第6版)》一书中的第1章 ,第1.5节,(美)James F.Kurose Keith W.Ross 著 陈 鸣 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
从我们到目前的讨论来看,因特网是一个极为复杂的系统。我们已经看到,因特网有许多部分:大量的应用程序和协议、各种类型的端系统、分组交换机和各种类型的链路级媒体。面对这种巨大的复杂性,存在着组织网络体系结构的希望吗?或者至少存在着我们对网络体系结构进行讨论的希望吗?幸运的是,对这两个问题的回答都是肯定的。
在试图组织我们关于因特网体系结构的想法之前,先看一个人类社会与之类比的例子。实际上,在日常生活中我们一直都与复杂系统打交道。想象一下有人请你描述航线系统的情况吧。你怎样用一个结构来描述这样一个复杂的系统?该系统具有票务代理、行李检查、登机口人员、飞行员、飞机、空中航行控制和世界范围的导航系统。描述这种系统的一种方式是,描述当你乘某个航班时,你(或其他人替你)要采取的一系列动作。你要购买机票,托运行李,去登机口,并最终登上这次航班。该飞机起飞,飞行到目的地。当飞机着陆后,你从登机口离机并认领行李。如果这次行程不理想,你向票务机构投诉这次航班(你的努力一无所获)。图1-21显示了相关情况。
作我们已经能从这里看出与计算机网络的某些类似:航空公司把你从源送到目的地;而分组被从因特网中的源主机送到目的主机。但这不是我们寻求的完全的类似。我们在图1-21中寻找某些结构。观察图1-21,我们注意到在每一端都有票务功能;还对已经检票的乘客有行李功能,对已经检票并已经检查过行李的乘客有登机功能。对于那些已经通过登机的乘客(即已经经过检票、行李检查和通过登机的乘客),有起飞和着陆的功能,并且在飞行中,有飞机按预定路线飞行的功能。这提示我们能够以水平的方式看待这些功能,如图1-22所示。图1-22将航线功能划分为一些层次,提供了我们能够讨论航线旅行的框架。值得注意的是每个层次与其下面的层次结合在一起,实现了某些功能、服务。在票务层及以下,完成了一个人的航线柜台到航线柜台的转移。在行李层及以下,完成了人和行李的行李托运到行李认领的转移。值得注意的是行李层仅对已经完成票务的人提供服务。在登机口层,完成了人和行李的离港登机口到到港登机口的转移。在起飞/着陆层,完成了一个人及其行李的跑道到跑道的转移。每个层次通过以下方式提供服务:①在这层中执行了某些动作(例如,在登机口层,某飞机的乘客登机和离机);②使用直接下层的服务(例如,在登机口层,使用起飞/着陆层的跑道到跑道的旅客转移服务)。 利用分层的体系结构,我们可以讨论一个定义良好的、大而复杂系统的特定部分。这种简化本身由于提供模块化而具有很高价值,这使实现由层所提供的服务易于改变。只要该层对其上面的层提供相同的服务,并且使用来自下面层次的相同服务,当某层的实现变化时,该系统的其余部分保持不变。(值得注意的是,改变一个服务的实现与改变服务本身是极为不同的!)例如,如果登机口功能被改变了(例如让人们按身高登机和离机),航线系统的其余部分将保持不变,因为登机口仍然提供相同的功能(人们登机和离机);改变后,它仅是以不同的方式实现了该功能。对于大而复杂且需要不断更新的系统,改变服务的实现而不影响该系统其他组件是分层的另一个重要优点。1.协议分层我们对航线已经进行了充分讨论,现将注意力转向网络协议。为了给网络协议的设计提供一个结构,网络设计者以分层(layer)的方式组织协议以及实现这些协议的网络硬件和软件。每个协议属于这些层次之一,就像图1-22所示的航线体系结构中的每种功能属于某一层一样。我们再次关注某层向它的上一层提供的服务(service),即所谓一层的服务模型(service model)。就像前面航线例子中的情况一样,每层通过在该层中执行某些动作或使用直接下层的服务来提供服务。例如,由第n层提供的服务可能包括报文从网络的一边到另一边的可靠传送。这可能是通过使用第n-1层的边缘到边缘的不可靠报文传送服务,加上第n层的检测和重传丢失报文的功能来实现的。一个协议层能够用软件、硬件或两者的结合来实现。诸如HTTP和SMTP这样的应用层协议几乎总是在端系统中用软件实现的,运输层协议也是如此。因为物理层和数据链路层负责处理跨越特定链路的通信,它们通常是实现在与给定链路相联系的网络接口卡(例如以太网或WiFi接口卡)中。网络层经常是硬件和软件实现的混合体。还要注意的是,如同分层的航线体系结构中的功能分布在构成该系统的各机场和飞行控制中心中一样,一个第n层协议也分布在构成该网络的端系统、分组交换机和其他组件中。这就是说,第n层协议的不同部分常常位于这些网络组件的各部分中。协议分层具有概念化和结构化的优点[RFC 3439]。如我们看到的那样,分层提供了一种结构化方式来讨论系统组件。模块化使更新系统组件更为容易。然而,需要提及的是,某些研究人员和联网工程师激烈地反对分层[Wakeman 1992]。分层的一个潜在缺点是一层可能冗余较低层的功能。例如,许多协议栈在基于每段链路和基于端到端两种情况下,都提供了差错恢复。第二种潜在的缺点是某层的功能可能需要仅在其他某层才出现的信息(如时间戳值),这违反了层次分离的目标。将这些综合起来,各层的所有协议被称为协议栈(protocol stack)。因特网的协议栈由5个层次组成:物理层、链路层、网络层、运输层和应用层(如图1-23a所示)。如果你查看本书目录,将会发现我们大致是以因特网协议栈的层次来组织本书的。我们采用了自顶向下方法(top-down approach),首先处理应用层,然后向下进行处理。 (1)应用层应用层是网络应用程序及它们的应用层协议存留的地方。因特网的应用层包括许多协议,例如HTTP(它提供了Web文档的请求和传送),SMTP(它提供了电子邮件报文的传输)和FTP(它提供两个端系统之间的文件传送)。我们将看到,某些网络功能,如将像www.ietf.org这样对人友好的端系统名字转换为32比特网络地址,也是借助于特定的应用层协议即域名系统(DNS)完成的。我们将在第2章中看到,创建并部署我们自己的新应用层协议是非常容易的。应用层协议分布在多个端系统上,一个端系统中的应用程序使用协议与另一个端系统中的应用程序交换信息的分组。我们把这种位于应用层的信息分组称为报文(message)。(2)运输层因特网的运输层在应用程序端点之间传送应用层报文。在因特网中,有两个运输协议,即TCP和UDP,利用其中的任一个都能运输应用层报文。TCP向它的应用程序提供了面向连接的服务。这种服务包括了应用层报文向目的地的确保传递和流量控制(即发送方/接收方速率匹配)。TCP也将长报文划分为短报文,并提供拥塞控制机制,因此当网络拥塞时,源抑制其传输速率。UDP协议向它的应用程序提供无连接服务。这是一种不提供不必要服务的服务,没有可靠性,没有流量控制,也没有拥塞控制。在本书中,我们把运输层分组称为报文段(segment)。(3)网络层因特网的网络层负责将称为数据报(datagram)的网络层分组从一台主机移动到另一台主机。在一台源主机中的因特网运输层协议(TCP或UDP)向网络层递交运输层报文段和目的地址,就像你通过邮政服务寄信件时提供一个目的地址一样。因特网的网络层包括著名的IP协议,该协议定义了在数据报中的各个字段以及端系统和路由器如何作用于这些字段。仅有一个IP协议,所有具有网络层的因特网组件必须运行IP协议。因特网的网络层也包括决定路由的路由选择协议,它使得数据报根据该路由从源传输到目的地。因特网具有许多路由选择协议。如我们在1.3节所见,因特网是一个网络的网络,在一个网络中,其网络管理者能够运行所希望的任何路由选择协议。尽管网络层包括了IP协议和一些路由选择协议,但通常把它简单地称为IP层,这反映了IP是将因特网连接在一起的粘合剂这样的事实。(4)链路层因特网的网络层通过源和目的地之间的一系列路由器路由数据报。为了将分组从一个结点(主机或路由器)移动到路径上的下一个结点,网络层必须依靠该链路层的服务。特别是在每个结点,网络层将数据报下传给链路层,链路层沿着路径将数据报传递给下一个结点。在下个结点,链路层将数据报上传给网络层。由链路层提供的服务取决于应用于该链路的特定链路层协议。例如,某些协议基于链路提供可靠传递,从传输结点跨越一条链路到接收结点。值得注意的是,这种可靠的传递服务不同于TCP的可靠传递服务,TCP提供从一个端系统到另一个端系统的可靠交付。链路层的例子包括以太网、WiFi和电缆接入网的DOCSIS协议。因为数据报从源到目的地传送通常需要经过几条链路,一个数据报可能被沿途不同链路上的不同链路层协议处理。例如,一个数据报可能被一段链路上的以太网和下一段链路上的PPP所处理。网络层将受到来自每个不同的链路层协议的不同服务。在本书中,我们把链路层分组称为帧(frame)。(5)物理层虽然链路层的任务是将整个帧从一个网络元素移动到邻近的网络元素,而物理层的任务是将该帧中的一个一个比特从一个结点移动到下一个结点。在这层中的协议仍然是链路相关的,并且进一步与该链路(例如,双绞铜线、单模光纤)的实际传输媒体相关。例如,以太网具有许多物理层协议:一个是关于双绞铜线的,另一个是关于同轴电缆的,还有一个是关于光纤的,等等。在每种场合中,跨越这些链路移动一个比特是以不同的方式进行的。2.OSI模型详细地讨论过因特网协议栈后,我们应当提及它不是唯一的协议栈。特别是在20世纪70年代后期,国际标准化组织(ISO)提出计算机网络应组织为大约7层,称为开放系统互连(OSI)模型[ISO 2012]。当那些要成为因特网协议的协议尚处于襁褓中,只是许多正在研发之中的不同协议族之一时,OSI模型已经成形;事实上,初始OSI模型的发明者在创建该模型时心中并没有想到因特网。无论如何,自20世纪70年代开始,许多培训课程和大学课程围绕7层模型挑选有关ISO授权和组织的课程。因为它在网络教育的早期影响,该7层模型继续以某种方式存留在某些网络教科书和培训课程中。显示在图1-23b中的OSI参考模型的7层是:应用层、表示层、会话层、运输层、网络层、数据链路层和物理层。这些层次中,5层的功能大致与它们名字类似的因特网对应层的相同。所以,我们来考虑OSI参考模型中附加的两个层,即表示层和会话层。表示层的作用是使通信的应用程序能够解释交换数据的含义。这些服务包括数据压缩和数据加密(它们是自解释的)以及数据描述(如我们将在第9章所见,这使得应用程序不必担心在各台计算机中表示/存储的内部格式不同的问题)。会话层提供了数据交换定界和同步功能,包括了建立检查点和恢复方案的方法。因特网缺少了在OSI参考模型中建立的两个层次,该事实引起了一些有趣的问题:这些层次提供的服务不重要吗?如果一个应用程序需要这些服务之一,将会怎样呢?因特网对这两个问题的回答是相同的:这留给应用程序开发者处理。应用程序开发者决定一个服务是否是重要的,如果该服务重要,应用程序开发者就应该在应用程序中构建该功能。
图1-24显示了这样一条物理路径:数据从发送端系统的协议栈向下,向上和向下经过中间的链路层交换机和路由器的协议栈,进而向上到达接收端系统的协议栈。如我们将在本书后面讨论的那样,路由器和链路层交换机都是分组交换机。与端系统类似,路由器和链路层交换机以多层次的方式组织它们的网络硬件和软件。而路由器和链路层交换机并不实现协议栈中的所有层次。如图1-24所示,链路层交换机实现了第一层和第二层;路由器实现了第一层到第三层。例如,这意味着因特网路由器能够实现IP协议(一种第三层协议),而链路层交换机则不能。我们将在后面看到,尽管链路层交换机不能识别IP地址,但它们能够识别第二层地址,如以太网地址。值得注意的是,主机实现了所有5个层次,这与因特网体系结构将它的复杂性放在网络边缘的观点是一致的。
图1-24也说明了一个重要概念:封装(encapsulation)。在发送主机端,一个应用层报文(application-layer message)(图1-24中的M)被传送给运输层。在最简单的情况下,运输层收取到报文并附上附加信息(所谓运输层首部信息,图1-24中的Ht),该首部将被接收端的运输层使用。应用层报文和运输层首部信息一道构成了运输层报文段(transport-layer segment)。运输层报文段因此封装了应用层报文。附加的信息也许包括了下列信息:如允许接收端运输层向上向适当的应用程序交付报文的信息;如差错检测位信息,该信息让接收方能够判断报文中的比特是否在途中已被改变。运输层则向网络层传递该报文段,网络层增加了如源和目的端系统地址等网络层首部信息(图1-24中的Hn),产生了网络层数据报(network-layer datagram)。该数据报接下来被传递给链路层,链路层(自然而然地)增加它自己的链路层首部信息并创建链路层帧(link-layer frame)。所以,我们看到在每一层,一个分组具有两种类型的字段:首部字段和有效载荷字段(payload field)。有效载荷通常是来自上一层的分组。这里一个有用的类比是经过公共邮政服务在某公司分支办公室之间发送一封备忘录。假定位于一个分支办公室的Alice要向位于另一个分支办公室的Bob发送一封备忘录。该备忘录类比于应用层报文。Alice将备忘录放入办公室之间的公函信封中,并在公函信封上方写上了Bob的名字和部门编号。该办公室之间的公函信封类比于运输层报文段,即它包括了首部信息(Bob的名字和部门编码)并封装了应用层报文(备忘录)。当发送方分支办公室的收发室拿到该办公室之间的备忘录,将其放入适合在公共邮政服务发送的信封中,并在邮政信封上写上发送和接收分支办公室的邮政地址。此处,邮政信封类比于数据报,它封装了运输层的报文段(办公室之间信封),该报文段封装了初始报文(备忘录)。邮政服务将该邮政信封交付给接收方分支办公室的收发室。在此处开始了拆封过程。该收发室抽取了办公室间的备忘录并转发给Bob。最后,Bob打开封套并拿走了备忘录。封装的过程能够比前面描述的更为复杂。例如,一个大报文可能被划分为多个运输层的报文段(这些报文段每个可能被划分为多个网络层数据报)。在接收端,则必须从其连续的数据报中重构这样一个报文段。转载地址:http://okxyx.baihongyu.com/