一.应用层协议原理
应用软件通常在网络边缘的端系统中运行,而不是在网络核心的交换机和路由器上运行,这种模式促进了大量应用的开发和部署。网络核心的交换机和路由器只专注于数据包(分组)的转发。
1.网络应用程序体系结构
应用程序都有一个体系结构。网络应用程序所使用的两种体系结构包括:客户机/服务器(C/S)体系结构或对等(P2P)体系结构。
在客户机/服务器体系结构中,有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户机的主机请求。
一个典型的例子是Web 应用程序,当 Web 服务器接收到来自某客户机浏览器对某对象的请求时,它向该客户机发送所请求的对象作为响应。注意到客户机/服务器体系结构中,客户机相互之间不直接通信。服务器具有固定的、周知的地址,称为 IP 地址,并且总是处于打开状态。
在客户机/服务器体系结构中,常用主机群集之类的虚拟服务器对客户机提供服务。
在 P2P 体系结构中,对作为基础设施的服务器依赖很少。相反,主机与主机之间—称为对等方,直接相互通信,互相提供服务。
2.进程通信
运行在多个端系统上应用程序之间的互相通信,对于操作系统来说,实际上是进程之间的通信。进程可以被认为是程序的一次执行。同一台主机上的进程间通信的可以使用操作系统的进程间通信机制,例如共享内存、信号量等。但运行在不同端系统(可能具有不同的操作系统)上的进程间的通信,需要交换消息来实现相互通信。发送进程创建并向网络中发送消息,接收进程接收这些消息并负责回送消息。这个过程是通过调用操作系统提供的发送接收函数来实现的。
进程与计算机网络之间的接口
从一个进程向另一个进程发送的消息必须经过下面的网络进行传输。进程通过一个操作系统提供的称为套接字(Socket)的编程接口在网络上发送和接收消息,发送和接收函数是这个编程接口提供的最基本的两个函数。
应用程序开发者对于传输层的控制仅限于:①选择传输层协议。②设定几个传输层参数,如最大缓存、最大报文段长度等。
进程在通信时,必须给接收方指定接收地址,这个地址包括两个部分:对方主机的 IP地址和应用程序的标识—端口号。
3.可供应用程序使用的传输服务
因特网提供了不止一种传输层协议。当开发一个应用时,在选择可用的传输层协议时需要从四个方面对应用程序所需的传输服务进行考虑:是否要求可靠数据传输、吞吐量、时效性和安全性。
4.TCP/IP 网络提供的运输服务
TCP/IP 网络为应用提供了两个传输层协议:UDP 和 TCP(对应于socket 编程的 SOCK_STREAM 和 SOCK_DGRAM)。
TCP 服务
TCP 服务模型是面向连接的可靠数据传输服务。
面向连接服务:使用 TCP 协议时,在应用程序开始交换消息之前,客户机程序和服务器程序之间互相交换传输层控制信息,做好传输分组的准备。在握手阶段后,就在两个进程的套接字之间建立了一个TCP 连接。这个连接是全双工的,即连接双方的进程都有发送和接收缓冲区,可以在此连接上同时进行报文段的收发。当应用程序结束消息发送时,必须拆除该连接。
可靠数据传愉服务:进行通信的进程依靠 TCP 协议,无差错、按适当顺序交付发送的数据。其主要原理是报文段丢失了会进行重传。
TCP 协议还具有拥塞控制机制,这种服务能为因特网带来整体好处。
UDP 服务
UDP 是一种不提供可靠传输服务的轻量级传输层协议。UDP 是无连接的,因此在两个进程通信前没有握手过程。 UDP 没有拥塞控制机制。
•因特网传输层协议所不提供的服务 不提供吞吐量和时效性保证的服务。
5.应用层协议
应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递消息。特别是定义了:
•交换的消息类型,如请求消息和响应消息。
•各种消息类型的语法,如消息中的各个字段及其详细描述。
•字段的语义,即包含在字段中的信息的含义。
•进程何时、如何发送消息及对消息进行响应的规则。
二. Web 应用和 HTTP 协议
对大多数用户来说,Web 服务最具有吸引力的就是 Web 的按需操作。当用户需要时,就能得到他想要的内容。
HTTP 概况
HTTP 协议由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换 HTTP 消息进行会话。HTTP 定义了浏览器和 Web 服务器之间的消息格式以及客户机和服务器是如何进行消息交换的。
Web 页面是由对象组成的。对象简单来说就是文件,如 HTML 文件、JPEG 图形文件、视频片段文件,这些文件可通过一个 URL 地址寻址。
URL 地址由两部分组成:存放对象的服务器主机名和对象的路径名。
例如,URL 地址
http://www.someschool.edu.cn/images/Department.gif 中的
www.someschool.edu.cn 就是主机名,images/Department.gif 是路径名。
当用户请求一个 Web 页面时,浏览器向服务器发出对该页面中所有包含对象的 HTTP请求消息,服务器接受请求并生成包含这些对象的 HTTP 响应消息进行响应。
HTTP 使用 TCP 作为它的传输层协议。浏览器发起一个与服务器的 TCP 连接,一旦连接建立,浏览器和服务器进程就可以通过套接字接口访问TCP。
HTTP 是无状态的。服务器向客户机发送被请求的文件时,并不存储任何关于该客户机的状态信息。但服务器一般会在日志文件中记录用户的访问历史。
HTTP 消息格式
HTTP 消息有两种:请求消息和响应消息。
HTTP 请求消息的第一行叫做请求行,其后继的行叫做头部行。
请求行有 3 个字段:方法字段、URL 字段和 HTTP 协议版本字段。
HTTP 响应消息分成三个部分:初始状态行、首部行,然后是实体。
状态行有 3 个字段:协议版本、状态码和相应状态信息。
三.DNS:因特网的目录服务
因特网上的主机和人类一样,也可以使用多种方式进行识别。
主机的一种识别方法是用它的主机名,这些名字便于记忆,也乐于被人们接受。
主机也可以使用所谓 IP 地址进行识别。一个 IP 地址由 4 个字节组成,并有着严格的层次结构。我们说 IP 地址具有层次结构,是因为从左至右它包含了越来越详细的关于主机的位置信息。
人们喜欢便于记忆的主机名标识,而路由器则喜欢定长的、有着层次结构的 IP 地址。
因此需要一种能进行主机名到 IP 地址转换的目录服务,这就是域名系统。
1.DNS 提供的服务
DNS是:①一个由分层的DNS服务器实现的分布式数据库;②一个允许主机查询分布式数
据库的应用层协议。
DNS 用于将用户提供的主机名解析为 IP 地址。例如当某个用户主机上的一个浏览器请求某个网页时,为了使用户的 HTTP 请求消息发送到 Web 服务器,用户主机首先必须获得Web 服务器的 IP 地址。
2.工作机理概述
假设运行在用户主机上的某些应用程序(如 Web 浏览器)需要将主机名转换为 IP 地址。
这些应用程序将调用 DNS 的客户机端,并指明需要被转换的主机名。在很多系统中,应用程序执行这种转换调用函数 gethostbyname()。
DNS 的客户机端接收到转换请求后,向网络中发送一个 DNS 查询消息。所有的 DNS 请求和回答消息使用 UDP 数据报经端口 53 发送。过若干时间后,用户主机上的客户机端接收到一个映射的 DNS 回答消息。这个查询结果则被传递到应用程序。
3.三种类型的 DNS 服务器。
根 ONS 服务器。在因特网上有 13 个根 DNS 服务器(标号为 A 到 M),其中大部分位于北美洲。
顶级域(TLD)服务器。这些服务器负责顶级域名(如 COM, ORG, GOV 和所有国家的顶级域名(如 CN)。
权威 DNS 服务器。将主机的名字映射为 IP 地址,由一个单位的权威 DNS 服务器负责保存这些记录。另一种方法是支付费用将这些记录存储在某个 ISP 的权威 DNS 服务器中。根、TLD 和权威 DNS 服务器都处在 DNS 服务器的层次结构中。
本地 DNS 服务器严格来说并不属于 DNS 服务器的层次结构,但它对 DNS 层次结构又是很重要的,本地 DNS 服务器通常与主机相隔不超过几个路由器。当主机发出 DNS 请求时,该请求被发往本地 DNS 服务器,它起着代理的作用,并将域名简析请求转发到 DNS 服务器层次结构中。