一、应用层协议原理
网络核心设备都是在较低层起作用,具体说是在网络层及下面层次。符合将复杂度控制在端系统上的原则。
1、网络应用程序体系结构
前一章讲的
网络体系结构,就是因特网五层模型,OSI七层参考模型,结构都是固定的,其为应用程序提供了特定的服务集合。
应用程序体系结构(application architecture)有很多种,现代网络应用程序中使用的最多的是:
客户机/服务器体系结构(client-server architecture)、
对等体系结构(P2P architecture),两种。
网络体系结构和应用程序体系结构可不是一回事。
客户机/服务器体系结构中(图中a部分),一个总是打开的主机,叫
服务器,用来服务许多客户机发来的请求;
客户机有时打开,有时关闭。
特征:(1)该体系结构下,客户机和客户机之间不会直接通信。
(2)服务器具有固定的、周知的地址,即IP地址。
在客户机/服务器应用中,有时候出现主机无法服务所有客户机请求的情况,这时候就要用到主机群集,有时叫
服务器场(server farm),创建功能强大的虚拟服务器。虚拟是说,本来是一大堆服务器组,用来提高性能,但是外界看,访问的时候,被抽象为同一个服务器。
这种体系,常是
基础设施密集的(infrastructure intensive),要花很多钱,买服务器,维护服务器,买大的带宽等。
P2P体系结构中(图中b部分),对总是打开的基础设施服务器要求很少,甚至无要求。各个客户机都是对等方,它们之间直接通信。
其
最突出的特性之一是
自扩展性(self-scalability)。每个对等方会发出请求而产生负载,但是每个对等方也会发送文件,为系统增加服务能力。
某些应用具有
混合体系结构,由客户机/服务器和P2P元素结合而成,比如很多
即时通讯软件,服务器场用于追踪用户IP,但用户到用户的报文在用户主机之间直接发送,不用通过中间服务器。
2、进程通信
同一个操作系统内部,进程之间会进行相互通信,在操作系统和操作系统之间,进程可以通过网络交换
报文(message)来进行相互通信。
每当两进程相互通信的时候,将其中一个叫
客户机(client),另一个进程称为
服务器(server)。
这个称呼是独立于应用程序体系结构的,并不是说只有客户机服务器体系结构中才这么叫,P2P结构应用中,一个进程既可以是客户机又可以是服务器。
如前所述,进程之间通信是通过相互发报文完成,而报文要先通过
套接字(socket)才能正常发送和接收。
看图就明白了,很简单,就把套接字当做门,发邮件还是干什么都要先通过门。
套接字是同一台主机内应用层与运输层之间的接口,也即其
跨越应用层和运输层两层。
应用程序可以
完全掌控套接字
在应用层的部分,而在
运输层的部分应用程序的
权限就小了,只有:
(1)选择运输层协议;
(2)也许能设定几个运输层参数,比如最大缓存,最大报文段长度等
3、运输层提供的运输服务
运输服务要求分四类:可靠数据传输、吞吐量、定时和安全性。其实这块讲的也就是运输层协议提供的服务。
(1)可靠数据传输
可靠数据传输(reliable data transfer),就是你丢给套接字一个报文,这个报文就一定能发到接收报文的套接字手上。
容忍丢失的应用(loss-tolerant application),就是丢报文也是能接受的,容许数据出现一点损失,而不会出致命伤,比如音/视频等。
(2)吞吐量
可用吞吐量就是发送进程能够想接收进程交付比特的速率。
网络上,有各种会话,一起共享网络带宽,有时候会话多了,每个的带宽就小一点,有时会话少了,带宽就大一点。所以一个运输层提供的服务就是以某种特定的速率提供确保的可用吞吐量。
具有吞吐量要求的应用程序,称为
带宽敏感的应用(bandwidth-sensitive application)。
能够根据需要充分利用可供使用的吞吐量,这种应用叫,
弹性应用(elastic application)。
(3)定时
即扔个报文给套接字,保证其在多长时间,比如100ms之内,到达目的套接字的服务。
(4)安全性
顾名思义了,保证数据机密性,数据完整性和端点鉴别。
4、因特网提供的运输服务
因特网,
两个运输层协议:UDP和TCP。
作为网络应用软件开发者,开发程序时候第一个要选择的就是TCP还是UDP。
以下是一些应用的服务要求:
TCP服务
TCP协议提供两种服务:
(1)面向连接服务
两进程传输数据前,要先建立TCP连接(TCP connection),具有握手过程。这个
连接是全双工的,即连接上的两个进程可以同时在连接上发数据,不会影响。数据发完了以后,
必须把连接拆除。
(2)可靠数据传输服务
数据扔给套接字,一定会没有字节丢失和冗余的到达目的套接字,并且到达后的
字节序也是一样的,有保证的。
TCP协议还有拥塞控制机制,抑制每个TCP连接,是他们达到公平共享网络带宽的目的。但是对于最低要求带宽限制的实时音频视频应用而言,抑制传输速率非常有害。
UDP服务
UDP是一种不提供不必要服务的轻量级运输层协议,
仅提供最小服务。
(1)UDP是无连接的,进程通信前没有握手过程。
(2)UDP提供不可靠数据传输服务,接收到的
报文也可能是乱序到达
的。
(3)无拥塞控制机制
(4)容许一定数据损失
(5)有最低速率要求
有的防火墙被配置为阻塞(多数类型的)UDP流量,所以现在很多设计者在多媒体和实时应用程序中越来越多的选择使用TCP。
TCP和UDP缺少对吞吐量和定时的规定,即不提供这两种服务,但是可以通过很好的设计来弥补这些缺陷。
因特网通常能够为时间敏感应用提供满意的服务,但是不能提供有关定时或带宽的保证。
以下是一些应用对两种协议的选择情况:
进程寻址
为了识别接收进程,要定义两种信息:该主机的名称或地址、目的主机上接收进程的识别。
主机名称和地址用IP地址标识;目的主机接收进程的识别,是由目的地
端口号(port number)完成。
简单来说,进程发送报文后,找到目的进程需要两个东西:一个是IP地址、二是目的进程端口号。
当开发者创建一个新的网络应用程序时,要为该应用程序分配一个新的端口号。
5、应用层协议
应用层协议(application-layer protocol)定义了运行在不同端系统上的应用程序如何相互间传递报文。
主要如下:
(1)交换的报文类型,如请求报文和响应报文
(2)各种报文类型的语法,如报文中的各个字段及其详细描述
(3)字段的语义,即包含在字段中的信息的含义
(4)进程何时、如何发送报文及对报文进行响应的规则
应用层协议是网络应用程序的一部分。比如web应用包括web浏览器,web服务器,等,及一个应用层协议,HTTP。HTTP只是web应用的一部分。
二、web应用和HTTP协议
1、HTTP概述
web应用层协议是
超文本传输协议(HyperText Transfer Protocol, HTTP)。
HTTP协议由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换HTTP报文进行会话。
Web页面(Web page,也叫文档)是由对象组成的。
对象(object)简单来说就是文件,如HTML文件、JPEG图形文件等。
多数web页面含有一个
基本HTML文件(base HTML file),以及几个引用对象。基本HTML通过URL地址,对对象进行引用。
URL地址由两部分
组成:存放对象的
服务器主机名和
对象的路径名。如:
http://ww.someSchool.edu/someDepartment/picture.gif 中
ww.someSchool.edu 是主机名,而 /someDepartment/picture.gif是一个对象的路径名
web服务器(web server)用于存储web对象,每个对象由URL寻址。
HTTP定义了web客户机(即浏览器)怎么向web服务器请求web页面,以及服务器如何将web页面传送给客户机的。
HTTP使用TCP,而非UDP。即客户发送的每个HTTP请求,都能够到达服务器,服务器的响应也一定能够到达客户机。
分层优势在这里就体现出来了,HTTP协议只要使用TCP就行了,不用关心是怎么才能保证报文一定会达到目标机。
过程很简单,客户机发起一个TCP连接,连接服务器。一旦连接上了,客户机就通过其自己的套接字,与服务器交换报文。如上图所示。
HTTP服务器并不保存关于客户机的任何信息,所以说
HTTP是一个
无状态协议(stateless protocol)。
2、非持久连接和持久连接
简单说,就是我客户机给服务器发请求,发了很多请求,每一个请求都建立一个连接,就是
非持久连接(non-persistent connection);如果只在第一次请求时建立了一个连接,之后的请求都只是重复利用该连接,那就叫
持久连接(persistent connection)。
HTTP默认使用的是持久连接。
非持久连接过程:
(1)客户机进程在80端口发起一个到目标服务器的TCP连接。
HTTP端口是默认的,就是80口。客户机和服务器上分别有一个套接字与该连接相关联。
(2)客户机通过其自己的套接字,向服务器发送HTTP请求报文。请求报文要包含所请求对象的路径。
(3)HTTP服务器进程经过它自己的套接字接收到该请求报文。从存储器检索到这个对象,并在HTTP响应报文中封装该对象,然后再通过套接字把这个封装好的对象发送给客户机。
注意!!:对象要封装到响应报文里,才