第2章 网络应用 第一节 计算机网络应用体系结构 一、客户/服务器(C/S)结构网络应用[识记] 1.客户/服务器(C/S)结构网络 客户/服务器(C/S)结构的网络应用的通信双方分为服务器程序和客户程序,服务器程序需要先运行,做好接受通信的准备。客户程序后运行,主动请求与服务器进行通信。服务器计算机通常也称为服务器,-般具有固定的网络地址(比如IP地址),长期运行,以便服务器软件能够随时被请求服务。客户软件通常运行在普通用户的计算机或其他计算设备上,可能使用动态的网络地址,是通信的主动发起方。 2.C/S网络应用的特点 C/S网络应用最主要的特征是通信只在客户与服务器之间进行,客户与客户之间不进行直接通信。在C/S通信过程中,主动发起通信的一方就是客户,被动接受通信的方就是服务器。 二、纯P2P结构网络应用[识记] P2P网络应用在文件分发、文件共享.视频流服务等应用中表现出优越的性能。在纯P2P网络应用中,所有通信都是在对等的通信双方之间直接进行.通信双方没有传统意义上的客户与服务器之分,“地位”对等。 对等端软件通常运行在普通用户的计算设备上,可以动态地直接与其他对等端进行通信。因此,P2P应用中的每个对等端都同时具备C/S应用的客户与服务器的特征,是-个服务器与客户的结合体。 三、混合结构网络应用[识记]
混合结构网络应用将CS应用与P2P应用相结合,既有中心服务器的存在,又有对等端(客户)间的直接通信。
在混合结构网络应用中,通常每个客户通过C/S方式向服务器注册自己的网络地址,声明可共享的资源或可提供的服务.并通过中心服务器发现其他在线的客户,检索其他各户可以共享的资源等信息。当某客户希望获取另一个客户拥有的资源或服务时,便直接与该客户发起通信请求其提供服务。 第二节 网络应用通信基本原理 一、网络应用的基本通信过程[领会]
网络应用的本质是运行在不同主机上(当然也可以运行在同一主机上)的应用进程之间的通信。 网络应用的基本通信过程就是运行在不同主机上的应用进程间以C/S方式进行的通信,服务器端运行的是服务器进程,被动地等待客户请求服务;客户端运行的是客户进程,主动发起通信请求服务器进程提供服务。应用进程间遵循应用层协议交换应用层报文。 二、网络应用与传输层服务[领会]
1.网络应用 网络应用需要使用传输层提供端到端的传输服务,不同应用对传输层服务有不同的服务性能需求,有的应用期望传输层提供可靠的数据传输服务,有的应用期望传输层提供延时保障服务等。
2.TCP服务模型
TCP服务模型包括面向连接服务和可靠数据传输服务。当某个应用程序调用TCP作为其传输协议时.该应用程序就能获得来自TCP的这两种服务。
面向连接的服务:在应用层报文开始传送之前,TCP客户和服务器互相交换传输层控制信息,完成握手,在客户进程与服务器进程的套接字之间建立一:条逻辑的TCP连接。这条连接是全双工的。当应用程序结束报文发送时,必须拆除该连接。
可靠的数据传送服务:应用进程能够依靠TCP实现端到端的无差错、按顺序交付所有发送数据的服务。
3.UDP
UDP是-种不提供传输服务保障的轻量级传输层协议,仅提供最小的“尽力”服务。UDP是无连接的.因此在两个进程通信前没有握手过程。 三、应用层协议[识记]
应用层协议定文了应用进程间交换的报文类型、报文构成部分具体含义以及交换时序等内容。即语法、语义和时序等协议三要素内容。 无论是服务器进程还是客户进程,当其遵循应用层协议组织好应用层报文后,需要通过层间接口(如应用编程接口API)将报文无传递给相邻的传输层,请求传输层协议提供的端到端传输服务。 四、套接字(Socket)[识记] 套接字(Socket)是每个应用进程与其他应进程进行网络通信时,真正收发报文的通道。一个应用进程可以创建多个套接字与同一个或不同的传输层协议进行接口。对于一个传输层协议,需要为与其接口的每个套接字分配一个编号,标识该套接字,其编号称为端口号(port number)。 第三节 域名系统(DNS) 一、DNS域名解析与层次化域名空间[领会] 1.DNS域名解析 DNS是一个重要的基础应用,任何一个需要使用域名进行通信的网络应用,在应用通信之前首先需要请求DNS应用,将域名映射为IP地址。实现将域名映射为IP地址的过程、称为域名解析。 2.DNS层次化域名空间 DNS服务器按层次结构进行组织,并且该层次结构与域名的结构相对应。因特网采用了层次树状结构的命名方法。域名的结构由标号序列组成,各标号之间用点隔开、例如“···.三级域名.二级域名.顶级域名”,各标号分别代表不同级别的域名: (1)国家顶级域名nTLD:如cn表示中国,us表示美国。 (2)通用顶级域名gTLD:最早的顶级域名是com(公司和企业)、net(网络服务机构)、edu(专用的教育机构)。 (3)基础结构域名:这种顶级域名只有一个,即arpa,用于反向域名解析,因此又称为反向域名。 二、域名服务器[领会] DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位、域名服务器根据其主要保存的域名信息以及在域名解析过程中的作用等,可以分为根域名服务器、顶级域名服务器、权威域名服务器和中间域名服务器。 1.根域名服务器 每个根域名服务器都知道所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助于根域名服务器。在因特网上共有13个不同IP地址的根域名服务器,它们的名字是用一个英文字母命名,从a一直到m。 2.顶级域名服务器 顶级域名服务器,即TLD服务器,负责管理在该顶级域名服务器注册的所有二级域名。 3.权威域名服务器 权威域名服务器,负责一个区的域名服务器,保存该区中的所有主机的坡映射。域名到IP地址的映射。 三、DNS域名解析过程[应用] 域名解析分为递归解析和迭代解析。 1.递归查询 提供递归查询服务的域名服务器,可以代替查询主机或其他域名服务器,进行进一步的域名查询,并将最终解析结果发送给查询主机或服务器。 2.迭代查询 提供迭代查询的服务器,不会代替查询主机或其他域名服务器,进行进一步的查询,只是将下一一步要查询的服务器告知查询主机或服务器(当然,如果该服务器拥有最终解析结果,则直接响应解析结果)。 无论是递归解析还是迭代解析,在上述的查询过程中,只要本地域名服务器不能直接响应解析结果则都需要从根域名服务器开始查询。 第四节 万维网应用 万维网(Web)的应用主要包括Web服务器、浏览器与超文本传输协议(HTTP)等。 一、HTTP[识记] 1.HTTP及其特点 HTTP是Web应用的应用层协议,定义浏览器如何向服务器发送请求以及服务器如何向浏览器进行响应。 2.HTTP连接 HTTP基于传输层的TCP传输报文。浏览器在向服务器发送请求之前,首先需要建立TCP连接,然后才能发送HTTP请求报文,并接收HTTP响应报文。根据HTTP在使用TCP连接的策略不同,可以分为非持久连接的HTTP和持久连接的HTTP。 (1)非持久连接 非持久连接是指HTTP客户与HTTP服务器建立TCP连接后,通过该连接发送HTTP请求报文,接收HTTP响应报文,然后断开连接。为了提高或改善HTTP的性能,可采用的优化技术包括以下两种: ①并行连接,通过建立多条并行的TCP连接,并行发送HTTP请求和并行接收HTTP响应。 ②持久连接,重用已经建立的TCP连接发送新的HTTP请求和接收HTTP响应,从面消除新建TCP连接的时间开销。 (2)持久连接 持久连接又分为两种工作方式:非流水方式持久连接和流水方式持人连接。 ①非流水方式持久连接:也称为非管道方式持久连接,客户端在通过持久连接收到前一个响应报文后,才能发出对下一个对象的请求报文。与非持久连接相比连续请求多个对象时,只需建立一次TCP连接,这样,获取个对象只需1个RTT时间。 ②流水方式持久连接称为管道方式持久连接客户端在通过持久连接收到前一个对象的响应报文之前,连续依次发送对后续对象的请求报文然后再通过该连接依次接收服务器发回的响应报文。使用流水方式持久连接时,获取一个对象平均时间远小于1个RTT时间,如果忽略对象传输时间,连续请求的多个对象只需1个RTT时间。 3.HTTP报文 (1)报文组成 HTTP报文由4部分组成:起始行、首部行、空白行和实体主体。起始行与首部是行分隔的ASCII文本,每行由CRLF(回车换行)终止,空白行中只有CRLF,主体(或称报文主体)可以是文本或二进制数据。HTTP报文起始行和空白行不可缺少,首部行可以是零行或多行,实体主体则根据报文类型功能等可有可无。 (2)报文分类 HTTP报文可以分为两类:请求报文和响应报文,请求报文由浏览器(客户端)发送给Web服务器,响应报文由Web服务器发送给浏览器。 请求报文与响应报文最主要的区别是起始行不同,请求报文起始行为: <方法><URL><协议版本> 响应报文起始行为: <协议版本><状态码><短语> 每部分之间由空格分隔,起始行最后是CRLF。 (3)HTTP典型的请求方法 HTTP典型的请求方法有:GET、HEAD、POST、OPTION、PUT。 ①GET:请求读取由URL所标识的信息,是最常见的方法。 ②HEAD:请求读取由URL所标识的信息的首部,即无须在响应报文中包含对象。 ③POST:给服务器添加信息。 ④OPTION:请求一些选项的信息。 ⑤PUT:在指明的URL下存储一个文档。 二、Cookie[领会] Cookie中文名称为小型文本文件,指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地终端上的数据。 Cookie技术主要包括4部分内容: (1)DHTTP响应报文中的Cookie头行:Set-Cookie. (2)用户浏览器在本地存储、维护和管理的Cookie文件。 (3)HTTP请求报文中的Cookie头行Cookie。 (4)网站在后台数据库中存储、维护Cookie信息。 第五节 Internet电子邮件[领会] 1.电子邮件 电子邮件是最早在Internet上流行起来的网络应用之一。可实现用户之间电子化邮件的异步传输。而电子邮件系统主要包括邮件服务器、简单邮件传输协议(SMTP)、用户代理和邮件读取协议等。 2.邮件服务器 邮件服务器的功能是发送和接收邮件同时还要向发信人报告邮件传送的情况(已交付、被拒绝、丢失等),是电子邮件体系结构的核心。 邮件服务器为每个注册用户创建一个邮箱,存放该用户接收到的邮件,管理一个外出邮件队列,并从队列中取出邮件进行发送。每个用户的邮箱都有一个唯一的电子邮件地址,格式为:收件人邮箱名@邮箱所在主机的域名(或IP地址),其中符号“@”读作"at”,表示“在”的意思。 3.SMTP及发送过程 SMTP是Internet电子邮件中核心应用层协议,实现邮件服务器之间或用户代理到邮件服务器之间的邮件传输。 SMTP使用传输层TCP,在SMTP客户与服务器(默认25号端口)之间建立TCP连接后,经历握手阶段、邮件发送阶段和关闭阶段,完成邮件传送。SMTP只能传输7位ASCII码文本内容.如果传输非7位ASCII码文本内容,如果传输非7位ASCII码文本内容,需要根据MIME将非7位ASCII码文本内容编码转换为7位ASCII码文本内容,然后再通过SMTP进行传输。SMTP是“推动”协议,发送邮件的服务器(或用户代理)主动请求与接收邮件的邮件服务器建立连接,然后将邮件发送过去。 4.邮件读取协议 当用户需要访问自己的邮箱,读取其中的邮件时,所使用的应用层协议是邮件读取协议。邮件读取服务器的主要作用是用户身份鉴别(需要登录用户名和密码)、访问用户邮箱、根据用户请求对邮箱中的邮件进行操作等。目前,邮件读取协议包括POP3、IMAP和HTTP,其中HTTP是Web邮件系统的邮件读取协议。 第六节 FTP FTP及其特点[领会] 文件传送协议(FTP)是在互联网的两个主机间实现文件互传的网络应用。FTP使用传输层TCP。FTP客户与服务器(21号端口)建立一条TCP连接,称为控制连接,用于传输命令。控制连接是持久的。在传输文件等数据时,客户与服务器的20号端口之间建立一条临时的TCP连接,用于传输数据.数据传输结束便断开连接,该连接称为数据连接。FTP这种使用两条TCP连接分别传输控制命令与数据的方式,称为带外控制。另外,FTP是有状态的协议。 第七节P2P应用 P2P应用的基础知识[识记] P2P体系结构对服务器的依赖很小,甚至对于纯P2P来说,整个应用几乎不依赖某个集中服务器,应用都是动态地在对等方之间进行。在P2P应用中,对等方随时可能加入应用,也随时可能离开应用,具有很强的应用规模伸缩性。 P2P应用在很多应用场景中也表现出了优于传统客户/服务器体系结构的网络应用,近年来很多性能表现优异、深受用户喜爱的P2P应用层出不穷,例如.BitTorrent、PPLive和PPstream等。 第八节 Socket 编程基础 Socket的基本概念[识记] 1.Socket的基本类型 网络应用进程可以创建3种类型的Socket:数据报类型套接字SOCK_DGRAM、流式套接字SOCK_STREAM和原始套接字SOCK_RAW。其中SOCK_DGRAM面向传输层UDP接口;SOCK_STREAM面向传输层TCP接口;SOCK_RAW面向网络层协议(如IP、ICMP等)接口。 2.Socket API系统调用及其过程 (1)基于TCP客户与服务器的典型Socket API函数调用过程 服务器程序运行后,调用socket()函数创建SOCK_STREAM类型的主套接字ms;调用bind()函数绑定本地端点地址;调用listen()函数置主套接字ms为监听模式;调用accept()函数通过主套接字ms接收客户连接请求,并阻塞服务器进程,直到有客户连接请求到达,accept()函数调用成功,返回(创建)连接套接字ss。 客户程序在服务器程序运行后执行,创建了本地SOCK_STREAM类型的套接字cs后,调用connect()函数请求与服务器建立TCP连接,connect()函数调用成功,表明TCP连接建立成功。接下去,客户程序与服务器程序通过调用send()函数和recv()函数,实现数据发送与接收。通信结束后,客户程序通过调用close()函数,释放套接字cs;服务器程序通过调用close()函数,释放套接字s,从而关闭TCP连接。服务器程序继续调用accept()函数,通过主套接字ms接收下一个客户连接请求。 服务器端在调用acepe(函数时,通常用塞服务器进程,等待客户的连接请求,且有客户连接请求到达accept()函数会返回(创建)一个新的套接字ss,ss是真正与客户建立TCP连接的。服务器与客户的通信是通过与特定客户连接ss进行的,当与该客户通信结束后,即可调用close()函数关闭与客户通信的ss。服务器通常通过无限循环机制,继续调用accept()函数继续等待新的客户连接请求,周而复始。 (2)基于UDP客户与服务器的典型Socket API函数调用过程 服务器程序运行后,调用socket()函数创建SOCK_DGRAM类型的套接字ums;调用bind()函数绑定本地端点地址。客户程序运行后,创建本地SOCK_DGRAM类型的套接字ucs。接下去,客户程序与服务器程序通过调用sendto()和recvfrom()函数,实现数据发送与接收。通信结束后,客户程序通过调用close()函数,释放套接字ucs;服务器程序继续调用recvfrom()函数,通过套接字ums接收下一个客户发送过来的数据报。
|