Network Software
The first computer networks were designed with the hardware as the main concern and the software as an afterthought. This strategy no longer works. Network software is now highly structured. In the following sections we examine the software structuring technique in some detail. The method described here forms the keystone of the entire book and will occur repeatedly later on.
1. Protocol Hierarchies
To reduce their design complexity, most networks are organized as a stack of layers or levels, each one built upon the one below it. The number of layers, the name of each layer, the contents of each layer, and the function of each layer differ from network to network. The purpose of each layer is to offer certain services to the higher layers, shielding those layers from the details of how the offered services are actually implemented. In a sense, each layer is a kind of virtual machine, offering certain services to the layer above it.
This concept is actually a familiar one and used throughout computer science, where it is variously known as information hiding, abstract data types, data encapsulation, and object-oriented programming. The fundamental idea is that a particular piece of software (or hardware) provides a service to its users but keeps the details of its internal state and algorithms hidden from them.
Layer n on one machine carries on a conversation with layer n on another machine. The rules and conventions used in this conversation are collectively known as the layer n protocol. Basically, a protocol is an agreement between the communicating parties on how communication is to proceed. As an analogy, when a woman is introduced to a man, she may choose to stick out her hand. He, in turn, may decide either to shake it or kiss it, depending, for example, on whether she is an American lawyer at a business meeting or a European princess at a formal ball. Violating the protocol will make communication more difficult, if not completely impossible.
A five-layer network is illustrated in Fig. 1-13. The entities comprising the corresponding layers on different machines are called peers. The peers may be processes, hardware devices, or even human beings. In other words, it is the peers that communicate by using the protocol.
Figure 1-13. Layers, protocols, and interfaces.
In reality, no data are directly transferred from layer n on one machine to layer n on another machine. Instead, each layer passes data and control information to the layer immediately below it, until the lowest layer is reached. Below layer 1 is the physical medium through which actual communication occurs. In Fig. 1-13, virtual communication is shown by dotted lines and physical communication by solid lines.
Between each pair of adjacent layers is an interface. The interface defines which primitive operations and services the lower layer makes available to the upper one. When network designers decide how many layers to include in a network and what each one should do, one of the most important considerations is defining clean interfaces between the layers. Doing so, in turn, requires that each layer perform a specific collection of well-understood functions. In addition to minimizing the amount of information that must be passed between layers, clear-cut interfaces also make it simpler to replace the implementation of one layer with a completely different implementation (e.g., all the telephone lines are replaced by satellite channels) because all that is required of the new implementation is that it offer exactly the same set of services to its upstairs neighbor as the old implementation did. In fact, it is common that different hosts use different implementations.
A set of layers and protocols is called a network architecture. The specification of an architecture must contain enough information to allow an implementer to write the program or build the hardware for each layer so that it will correctly obey the appropriate protocol. Neither the details of the implementation nor the specification of the interfaces is part of the architecture because these are hidden away inside the machines and not visible from the outside. It is not even necessary that the interfaces on all machines in a network be the same, provided that each machine can correctly use all the protocols. A list of protocols used by a certain system, one protocol per layer, is called a protocol stack. The subjects of network architectures, protocol stacks, and the protocols themselves are the principal topics of this book.
An analogy may help explain the idea of multilayer communication. Imagine two philosophers (peer processes in layer 3), one of whom speaks Urdu and English and one of whom speaks Chinese and French. Since they have no common language, they each engage a translator (peer processes at layer 2), each of whom in turn contacts a secretary (peer processes in layer 1). Philosopher 1 wishes to convey his affection for oryctolagus cuniculus to his peer. To do so, he passes a message (in English) across the 2/3 interface to his translator, saying #39;#39;I like rabbits,#39;#39; as illustrated in Fig. 1-14. The translators have agreed on a neutral language known to both of them, Dutch, so the message is converted to #39;#39;Ik vind konijnen leuk.#39;#39; The choice of language is the layer 2 protocol and is up to the layer 2 peer processes.
The translator then gives the message to a secretary for transmission, by, for example, fax (the layer 1 protocol). When the message arrives, it is translated into French and passed across the 2/3 interface to philosopher 2. Note that each
网络软件
第一代计算机网络的设计以硬件为主要考虑,软件为次要考虑。这种策略不再奏效。网络软件现在是高度结构化的。在下面的部分中,我们将详细讨论软件结构技术。这里描述的方法构成了整本书的重点,并将在后面重复出现。
1.协议层次结构
为了减少它们的设计复杂性,大多数网络被组织成层或层的堆栈,每个层或层建立在层或层的下面。层的数量、每一层的名称、每一层的内容以及每一层的功能因网络而异。每一层的目的是向更高的层提供特定的服务,将这些层与所提供的服务实际实现的细节隔离开来。从某种意义上说,每一层都是一种虚拟机,为其上面的层提供特定的服务。
这个概念实际上是一个熟悉的概念,并在整个计算机科学中使用,它被称为信息隐藏、抽象数据类型、数据封装和面向对象编程。其基本思想是,特定的软件(或硬件)为用户提供服务,但对用户隐藏其内部状态和算法的细节。
在一台机器上的层n与另一台机器上的层n进行对话。在此会话中使用的规则和约定统称为层n协议。基本上,协议是通信双方就如何进行通信达成的协议。作为一个类比,当一个女人被介绍给一个男人,她可能会选择伸出她的手。反过来,他可能会决定摇它或亲吻它,这取决于,例如,她是一个商务会议上的美国律师还是一个正式舞会上的欧洲公主。违反协议将使通信更加困难,如果不是完全不可能的话。
五层网络如图1-13所示。组成不同机器上相应层的实体称为对等点。对等点可以是进程、硬件设备,甚至是人。换句话说,使用协议进行通信的是对等方。
图1-13。层、协议和接口。
实际上,没有数据直接从一台机器上的层n传输到另一台机器上的层n。相反,每一层都将数据和控制信息传递给紧接其下的层,直到到达最底层。第一层下面是实际通信发生的物理媒介。在图1-13中,虚线表示虚拟通信,实线表示物理通信。
每一对相邻的层之间是一个接口。接口定义了下层的哪些基本操作和服务可用于上层。当网络设计人员决定在网络中包含多少层以及每个层应该做什么时,最重要的考虑之一是定义层之间的干净接口。反过来,这样做需要每一层执行一组理解良好的特定函数。除了最小化必须层之间传递的信息,明确的接口也使它更简单的一层的实现替换为一个完全不同的实现(例如,所有的电话线路被卫星频道)取代,因为所有所需的新实现它提供完全相同的一组服务楼上邻居老实现一样。事实上,不同的主机使用不同的实现是很常见的。
一组层和协议称为网络架构。体系结构的规范必须包含足够的信息,以允许实现者为每一层编写程序或构建硬件,从而正确地遵守适当的协议。实现的细节和接口的规范都不是体系结构的一部分,因为它们隐藏在机器内部,从外部是不可见的。甚至不需要网络中所有机器上的接口都是相同的,只要每台机器都能正确地使用所有协议。某个系统使用的协议列表(每层一个协议)称为协议栈。网络架构、协议栈和协议本身的主题是本书的主要主题。
一个类比可以帮助解释多层通信的概念。想象两个哲学家(第三层中的对等过程),其中一个说乌尔都语和英语,另一个说汉语和法语。因为他们没有共同的语言,所以他们每个人都雇佣了一个译者(第二层的对等过程),每个译者又联系一个秘书(第二层的对等过程)。为了做到这一点,他在2/3的界面上传递一条信息(用英语)给他的翻译,说“我喜欢兔子”,如图1-14所示。翻译人员同意使用他们都知道的一种中立语言,荷兰语,因此信息被转换成“Ik vind konijnen leuk”。语言的选择是第2层协议,由第2层对等进程决定。
翻译人员然后将消息发送给秘书进行传输,例如,通过传真(第一层协议)。当消息到达时,它被翻译成法语,并通过2/3接口传递给哲学家2。请注意,只要接口没有更改,每个协议都是完全独立于其他协议的。译者可以随意从荷兰语切换到芬兰语,前提是他们都同意,并且不改变第一层或第三层的界面。类似地,秘书可以从传真切换到电子邮件或电话,而不打扰(甚至不通知)其他层。每个流程可能会添加一些仅供其对等方使用的信息。此信息不会向上传递到上面的层。
现在考虑一个更技术性的例子:如何在图1-15中向五层网络的顶层提供通信。消息M是由正在运行的应用程序进程生成的
图1 - 14。philosopher-translator-secretary架构。
在第5层,并给予第4层传输。第4层在消息前面放置一个header来标识消息,并将结果传递给第3层。报头包含控制信息,如序列号,如果较低的层不维护序列,则允许目标机器上的第4层以正确的顺序传递消息。在某些层中,header还可以包含大小、时间和其他控件字段。
图1 - 15。在第5层中支持虚拟通信的信息流示例。
在许多网络中,在第4层协议中传输的消息的大小没有限制,但是几乎总是有第3层协议施加的限制。因此,第3层必须将传入的消息分解为更小的单元、包,并将第3层的报头作为每个包的前缀。在这个例子中,M被分成两部分,M1 和M2。
第3层决定使用哪个输出行,并将数据包传递给第2层。第2层不仅给每个部件增加了一个头,而且还增加了一个拖车,并将产生的单元交给第1层进行物理传输。在接收机器上,消息从一层向上移动到另一层,随着消息的进展,消息头被剥离。n以下层的报头都不会被传递到n层。
图1-15中需要理解的重要一点是虚拟通信与实际通信之间的关系以及协议与接口之间的区别。例如,第4层中的对等进程在概念上认为它们的通信是“水平的”,使用第4层协议。每个过程都可能有一个名为“发送至另一方”和“从另一方获得”的过程,尽管这些过程实际上是通过3/4接口与底层通信,而不是与另一端通信。
对等流程抽象对所有网络设计都至关重要。使用它,设计整个网络的不可管理的任务可以分解成几个较小的、可管理的设计问题,即各个层的设计。
尽管第1.3节被称为“网络1.3”,但值得指出的是,协议层次结构的底层通常在硬件或固件中实现。然而,复杂的协议算法是涉及的,即使他们是嵌入式(全部或部分)在硬件。
2.层的设计问题
计算机网络中出现的一些关键设计问题有几个层次。下面,我们将简要介绍一些更重要的问题。
每一层都需要一种识别发送方和接收方的机制。由于网络通常有许多计算机,其中一些计算机有多个进程,因此一台计算机上的进程需要一种方法来指定它想与谁对话。由于有多个目的地,因此需要某种形式的寻址来指定特定的目的地。
另一组设计决策涉及数据传输的规则。在某些系统中,数据只朝一个方向移动;在另一些情况下,数据可能是双向的。协议还必须确定连接对应于多少个逻辑通道,以及它们的优先级是什么。许多网络为每个连接提供至少两个逻辑通道,一个用于正常数据,一个用于紧急数据。
错误控制是一个重要的问题,因为物理通信电路并不完美。许多错误检测和错误纠正代码是已知的,但是连接的两端必须就使用哪一个代码达成一致。此外,接收方必须以某种方式告知发送方哪些消息已正确接收,哪些消息未正确接收。
并非所有的通信通道都保持在其上发送的消息的顺序。为了应对可能出现的测序丢失,协议必须明确规定接收方允许碎片正确地重新组装。一个明显的解决方案是给零件编号,但是这个解决方案仍然留下了一个问题,那就是对于无序到达的零件应该做些什么。
每个级别都存在一个问题,即如何防止快速发送方用数据淹没慢速接收方。已经提出了各种解决方案,稍后将进行讨论。其中一些涉及到接收方对发送方关于接收方当前状况的直接或间接的反馈。另一些则将发送方限制在商定的传输速率。这个题目叫做流量控制。
另一个必须在几个级别上解决的问题是,所有进程都不能接受任意长的消息。此属性导致了对消息进行分解、传输和重新组装的机制。一个相关的问题是,当进程坚持以非常小的单元传输数据,以至于单独发送每个单元的效率很低时,该怎么办。这里的解决方案是将几个指向公共目的地的小消息收集到单个大消息中,并在另一端分解大消息。
当为每一对通信进程设置单独的连接很不方便或很昂贵时,底层可能会决定对多个不相关的会话使用相同的连接。只要复用和多路复用是透明的,它可以被任何层使用。例如,在物理层中需要多路复用,在物理层中,所有连接的所有通信量最多只能发送几个物理电路。
当源和目标之间有多条路径时,必须选择一条路由。有时候,这个决策必须分成两个或更多的层。例如,要将数据从伦敦发送到罗马,可能必须根据法国或德国各自的隐私法做出一个高级别的决定,以过境法国或德国。然后,可能需要做出一个低级的决定,根据当前的流量负载选择一个可用的电路。这个主题叫做路由。
3.面向连接和无连接的服务
层可以向上面的层提供两种不同类型的服务:面向连接的和无连接的。在本节中,我们将研究这两种类型并分析它们之间的差异。
面向连接的服务是以电话系统为模型的。要和某人说话,你拿起电话,拨号码,说话,然后挂断。类似地,要使用面向连接的网络服务,服务用户首先建立连接,使用连接,然后释放连接。连接的本质就像一根管子:发送方在一端将对象(比特)推进,接收方在另一端将其取出。在大多数情况下,这个顺序是保留下来的,以便比特按照它们被发送的顺序到达。
在某些情况下,当建立连接时,发送方、接收方和子网就使用的参数进行协商,例如最大消息大小、所需服务质量和其他问题。通常,一方提出建议,另一方可以接受、拒绝或提出反对意见。
相反,无连接服务是模仿邮政系统建模的。每个消息(字母)都带有完整的目的地地址,并且每个消息(字母)都独立于其他所有消息(字母)通过系统进行路由。通常,当两个消息发送到同一个目的地时,第一个发送的消息将是第一个到达的消息。但是,第一个发送的可能会延迟,以便第二个先到达。
每个服务都可以用服务质量来描述。有些服务是可靠的,因为它们从不丢失数据。通常,可靠的服务是通过让接收方确认收到了每条消息来实现的,这样发送方就可以确保它已经到达。确认过程会带来开销和延迟,这通常是值得的,但有时是不可取的。
适用于可靠的面向连接的服务的典型情况是文件传输。文件的所有者希望确保所有的位都正确地到达,并且以它们被发送的相同顺序到达。很少有文件传输客户喜欢偶尔打乱或丢失一些位的服务,即使它快得多。
可靠的面向连接的服务有两个小变体:消息序列和字节流。在前一种变体中,保留了消息边界。当发送两个1024字节的消息时,它们以两个不同的1024字节消息的形式到达,而不是一个2048字节的消息。在后者中,连接只是一个字节流,没有消息边界。当2048字节到达接收器时,无法判断它们是作为一个2048字节消息、两个1024字节消息还是2048个1字节消息发送的。如果一本书的页面作为单独的消息通过网络发送到照相排字机,那么保持消息边界可能很重要。另一方面,当用户登录到远程服务器时,只需要从用户计算机到服务器的字节流。消息边界无关紧要。
如上所述,对于某些应用程序,确认所引起的过境延误是不能接受的。其中一个应用就是数字化语音通信。对于电话用户来说,不时地听到一点电话线上的噪音比经历等待确认的延迟要好。类似地,在传输视频会议时,出现几个像素错误也没有问题,但是在流停止时出现图像抖动以纠正错误则令人恼火。
并非所有应用程序都需要连接。例如,随着电子邮件变得越来越普遍,电子垃圾也变得越来越普遍。电子垃圾邮件的发送者可能不希望仅仅为了发送一项内容而设置连接,然后再断开连接。100%可靠的交付也不是必不可少的,尤其是在成本更高的情况下。所需要的只是一种发送单个消息的方式,该消息具有很高的到达概率,但不能保证。不可靠(意味着未被承认)的无连接服务通常称为数据报服务,与电报服务类似,电报服务也不向发送方返回确认。
在其他情况下,不需要建立连接就可以方便地发送一条短消息,但可靠性是必不可少的。可以为这些应用程序提供公认的数据报服务。这就像寄一封挂号信,要求寄回收据一样。当收据寄回时,寄件人绝对确信这封信是寄给了预定的人,而且没有在邮寄过程中丢失。
另一个服务是请求-应答服务。在此服务中,发送方发送包含请求的单个数据报;回答包含答案。例如,向当地图书馆查询维吾尔语在哪里使用就属于这一类。请求-应答通常用于实现客户机-服务器模型中的通信:客户机发出请求,服务器响应它。图1-16总结了上面讨论的服务类型。
图1 - 16。六
资料编号:[5454]
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。