概述、
第二章介绍了应用层的各种协议原理和运用。
网络应用的体系结构、
客户-服务器(C/S) 体系结构:我们平时在百度上搜索知识,我们的电脑就是客户,从百度服务器请求东西,构成了C/S体系。客户发请求,服务器接收并响应请求。

对等体(P2P)体系结构:我们平时用手机QQ给伙伴传输文件,我的手机既可以作为服务器给对方传输文件,也可以作为客户端接收文件。我的手机既是客户端又是服务器。

混合体:客户 - 服务器和对等体系结构:存在某个中心服务器,当用户上线时在服务器注册IP地址,并向服务器说我这有哪些资源(我在哪,我有啥)。当另一个用户向从服务器请求某个资源,服务器会进行文件搜索(这一过程是C/S模式)。当服务器检索到某一用户存在该资源,服务器可以提供有资源的用户IP地址,这两名用户就可以进行传输资源(这一过程是P2P模式)。

应用进程间的通信、
应用程序在操作系统中是以进程(process)的形式存在的,不同主机上的应用程序通过互联网通信。来自互联网的数据首先要经过操作系统才能被进程获得,当应用程序使用各种互联网服务时,它实际上是通过使用操作系统提供的服务来使用互联网服务的。这些服务以网路接口(Network socket)的形式提供给开发者,即应用程序接口(Application Programming Interface)。相同主机上的应用程序可以通过消息队列和共享内存和本地套接字来进行通信。消息队列是一种异步通信方式,它允许应用程序之间通过消息传递数据。共享内存是一种在同一计算机上的应用程序间通信的方式。它允许多个应用程序共享同一块内存,以进行通信。
选择传输层协议、
前面提到,开发者在传输层需要选择传输协议。因此我们需要首先了解手头的这个应用需求是什么,再根据需求来选择特定的传输协议(就像旅行时选择出行方式那样),总的来说,应用的需求可以概括为以下四种:
- 可靠的数据传输
一些应用要求数据的完全正确,在这些应用中数据的丢失或者错误会造成不可容忍的错误,因此要求传输协议通过某种手段来保证数据的完整和正确。有这种需求的应用有浏览器、文件传输程序、电子邮箱等等。注意,不能一厢情愿地认为所有联网应用都要求可靠的数据传输,实际上很多实时应用对于数据的完整性和正确性要求很低,例如实时聊天软件,在聊天时画面和声音的偶然失真是可以接受的,但是为修复这些失真而导致的延迟却往往是用户所不希望的。
- 稳定的吞吐量
网络的吞吐量并不是一成不变的,实际上从上一章的讨论可以看出,网络中的“交通状况”总是在波动变化着,加之主机中其他的联网进程,一个进程得到的吞吐量也总是在波动变化。这是部分应用所不希望看到的,它们对于吞吐量有基本的要求,若吞吐量低于某个数值,则它们无法正确工作,例如对于语言通话来说,假设它以固定的速率r bits/sec编码语音信息,那么为了保证数据的正确发送,提供给这个进程的吞吐量也至少要是r bits/sec。
- 低延迟
低延迟是许多实时应用的基本要求之一,还是以语音通话为例,用户希望通话的延迟能够低至无法察觉的程度,否则这会给通话的双方带来不自然的停顿,没有人希望自己说完之后要等待半分钟才得到回应。
- 安全
安全是互联网中老生常谈的问题。传输协议通常经过发送端加密,接收端解密的方式来保证安全,这样做可以保证即使包裹被中途拦截,拦截者也难以获得其中信息。除了加密这一传统的保密手段,传输协议还会使用诸如端点认证(end-point authentication) 这类技术来提升安全性。
现实中,传输协议无外乎TCP和UDP两大种类,我们来看看TCP和UDP提供了哪些特性。
- TCP协议在分组交换网络中模仿电路交换网络,使用了TCP连接这一概念。若需要使用TCP协议进行传输,首先需要建立TCP连接,两个主机经过“三次握手”来交换建立连接所必需的信息。在通信完成之后,两个主机也需要关闭TCP连接。这些连接保证了TCP的可靠数据传输,任何丢失的或者出错的包裹都会被检测到并重新发送直到接收方顺利接收为止。在后面我们同样会看到TCP的拥堵控制(congestion-control)技术会最大化整个网络的传输能力(在大部分传输协议都是TCP的情况下),力图使每个TCP连接都能均分网络的传输能力。总的来说,TCP可以提供完全的可靠数据传输。
- UDP是一个极其简单的传输协议,总的来说它只做了一件事情:把包裹传给下一层(以及一个效果很弱的错误检查机制)。因此UDP并不保证数据的可靠传输,包裹随时可能丢失,或者在传输过程中出现错误内容。UDP没有提供以上任何特性之一。
- 由于TCP和UDP都没有提供任何安全保证,SSL(Secure Sockets Layer)应运而生。它本质上只是TCP的加强版,除去TCP提供的服务之外,加入了加密、数据完整性检验(data integrity)和端点验证功能。SSL的安全部分是在应用层实现的,因此想要使用SSL的开发者需要在程序中添加实现了SSL的第三方库,如openssl库。
经过上述介绍我们会发现当今互联网的传输协议缺少稳定吞吐量和低延迟的保证。这些功能在如今的联网应用中是在应用内部完成的,开发者尽其所能最大化利用已有的网络条件来给用户提供可靠的服务,当然在网络条件本身过于差劲(网络延迟高、带宽不足)时,技术也无力回天。
应用层协议、
上面我们讨论了将信息(message)通过网络接口socket传递给传输层,但信息不是凭空产生的,它的具体形式是由应用层协议规定的,总体来看,应用层协议回答了以下关于信息的四个问题:
- 这份信息的种类是什么?它是作为回复还是请求?
- 不同的数据是如何在信息中排布的?某一种数据在信息包裹中的哪个位置?
- 这些数据的含义是什么?它们遵循什么样的语法?
- 当进程收到这种信息时应该执行什么动作?又需要发送什么响应信息?
接下来,我们将具体介绍当今互联网最为著名也是使用最广泛的几个应用层协议,让我们带着这几个问题继续。
Comments NOTHING