第二章 应用层
2.1应用层协议原理
网络应用的软件分布于两个或以上的终端系统(主机)中。例如,Web应用包括彼此通信的两
部分软件:运行在用户的主机中的浏览器软件,以及运行在Web服务器中的Web服务器软件。
Web应用由许多部件构成,包括一个文档格式的标准(超文本标记语言HTML),Web浏览器软件,
Web服务器软件和一个应用层协议。
Web应用层协议是超文本传输协议,简称HTTP。HTTP协议定义了如何在浏览器和Web服务器
之间传递消息。
电子邮件应用包括安置用户邮箱的邮件服务器,让用户阅读和创建电子邮件消息的邮件阅读器,
以及一个定义电子邮件消息结构的标准,一组定义如何在服务器之间以及服务器和阅读器之间传递
电子邮件消息的应用层协议。
电子邮件应用的应用层协议时简单邮件传输协议,简称SMTP。
应用层协议定义运行在不同终端系统上的应用层进程如何彼此传递消息。
套接字:
两台不同主机中的进程通过套接字Socket进行通信。
套接字是单台主机内应用层和传输层之间的接口。
TCP服务:
TCP服务模型包括面向连接的服务和可靠的数据传输服务。调用TCP作为其传输协议的应用同时
取得这两种服务。
TCP连接是一个全双工的连接。
完成服务后,应用进程必须告诉TCP拆除这个连接。
TCP服务保证递送全部数据,但是对递送的速率和所经历的延迟不加保证。
UDP服务:
UDP服务没有握手过程。
UDP提供不可靠的数据传输服务,也就是说,当一个进程往自己的UDP套接字发出一个消息时,
UDP不能保证这个消息会最终到达接收套接字。另外,就确实到达接收字的消息而言,它们的到达
顺序也可能与发送顺序不一致。
UDP是一个不提供非必要服务的轻量级传输协议,具有一个最简约的服务模型。
UDP不包含拥塞控制机制,因此发送进程能够以任意速率往UDP套接字倾注数据。尽管不保证
所有的数据都到达接收套接字,但仍会有相当比例的数据到达。实时应用进程的开发任意往往选择
在UDP上运行它们的应用。与TCP类似,UDP也不提供任何延迟保证。
2.2 HTTP
Web的应用层协议HTTP时Web的核心。HTTP在Web的客户程序和服务器程序中得用实现。运行
在不同端系统上的客户程序和服务器程序通过交换HTTP消息彼此交流。HTTP定义这些消息的结构以
及客户和服务器如何交换这些消息。
Web页面由多个对象构成。
对象(object)仅仅是可有单个URL寻址的文件,如HTML文件,JPEG图像,GIF图像,Java小应用
程序、语音片段等。
大多是Web页面由单个基本HTML文件(base HTML file)和若干个所引用的对象构成。例如,
如果一个Web页面包含HTML文本和5个JPEG图像,那么它由6好对象构成,即基本HTML文件加
5个图像。
基本HTML文件使用相应的URL来引用本页面的其他对象。
每个URL由存放该对象的服务器主机名和该对象的路径名两部分构成。例如在URL中,
www.someSchool.edu/someDepartment/picture.gif
www.someSchool.edu是一个(服务器)主机名,/someDepartment/picthure.gif是一个路径名。
Web客户或服务器一旦把某个消息送人各自的套接字,这个消息就完全落入TCP的控制之中了。
TCP 还是要一个拥塞控制机制。该机制迫使每个新的TCP连接一开始以相对缓慢的速率传输数据,
然后只要网络不拥塞,每个连接可以迅速上升到相对较高的速率。这个慢速传输的初始阶段称为缓启动
(slow start)。
2.5 DNS 域名系统
应用层协议(HTTP、SMTP、FTP等)普遍使用DNS把由用户提供的主机名转换成路由器使用的IP地
址。
DNS既是一个由域名服务器主机构成的层次结构中实现的分布式数据库,又是一个允许客户主机
和名称服务器主机通信以使用域名转换服务的应用层协议。
名称服务器主机通常是运行BIND软件的Unix主机。
2.6用TCP进行套接字编程
运行在不同主机上的进程通过向套接字发送消息来进行相互通信。
在服务器进程处于运行状态的情况下,客户进程就能够初始化一个到服务器的TCP连接。这是通过
在客户进程中创建一个套接字对象来完成的。当客户创建它的套接字对象的时候,它详细说明了服务器
进程的地址,也就是服务器的IP地址和进程的端口号。
一旦建立的套接字对象,客户端的TCP就发起一个三次握手,并建立一个和服务器的TCP连接。
三次握手对客户和服务器程序来说是完全透明的。
客户进程可以向它的套接字发送任意多个字节,TCP保证服务器进程能够按照发送的顺序接收到
每个字节。