应用层

在应用层编程只需假设通信的两设备拥有通信能力,而不用考虑具体如何实现通信,通信的具体细节将会交给下方的层级。

精确地说,通信的不是设备,而是设备上的进程。我们把长期运行的进程称为server(服务器),把一般用户开启的时常关闭的进程称为客户(client)。于是,应用层的通信分为两类,一类是客户与客户的Peer-to-Peer通信,一类是client和server的通信。这里我们只讨论后者。

World Wide Web

Internet上最常用的一个应用称为万维网(World Wide Web, WWW),简称Web。Web应用分为两个,一个运行在client的进程上,称为客户端;一个运行在server的进程上,称为服务器端。客户端又称为浏览器(browser),用来访问网页;服务器端存储网页。客户端可以向服务器端请求网页文件,服务器端会根据请求发送对应的网页文件给客户,这样就实现了客户在自己的设备上浏览全球的网页的功能。Web使用的应用层协议就是超文本传输协议(HyperText Transfer Protocol, HTTP),它协调客户端与服务器端的通信。

一个网页文件包含一个基本的HTML文件以及若干引用对象。每个引用对象用一个URL地址标识。URL由服务器主机名和对象路径名连接而成。HTTP使用TCP作为运输层协议,并采用持续连接(每次HTTP请求间不断开TCP连接)。

一个HTTP请求报文包含请求行、首部行和实体体。请求行包含方法(GET,POST,HEAD,PUT,DELETE)、URL、版本。其中,GET用于请求;POST用于传输;等等。一个HTTP响应报文包含状态行、首部行和实体体,其中状态行包括版本、状态码和短语。常见的状态码和对应短语有:200 OK,表示请求成功;400 Bad Request,表示请求报文无法被解析;404 Not Found,表示服务器找不到请求的网页文件;等等。

HTTP的服务器不存储客户的任何信息,因此我们说HTTP是一个无状态协议。既然如此,网页如何记住用户上的账号、密码以及上次访问留下的结果等信息呢?为此,HTTP引入了cookie。在HTTP报文的首部加入cookie字段,并在用户端系统中留下一个cookie文件,在服务器中维护一个所有用户的cookie数据库。对于来自某特定用户的请求报文,服务器可以取出对应的cookie更新网页文件,发送给用户。

为了加快HTTP请求网页的速度,我们设置一个代理服务器存储最近一些请求的缓存(Cache)。这样每次就不必每次都向原始服务器请求网页,而是每次都先向代理服务器请求,找不到再去原始服务器中找,并把找到的网页加入代理服务器中的缓存。注意到,这个代理服务器对于用户而言是服务器,对于原始服务器而言却是客户,它们之间都通过HTTP协议通信。实践中,代理缓存的命中率在0.2-0.7之间。

E-mail

电子邮件也是一个非常常用的应用。在这里,客户在端系统上写邮件发给另一个端系统的客户,而另一边的客户在访问邮箱时取出该邮件。在收件人取出邮件之前,该邮件存储在收件人的服务器上。如果无法与收件人建立连接,邮件也会存储在发件人的服务器上并定时重发。并且为了使每个人能够看到自己曾经发出过或受到过的邮件,服务器其实为每个客户都存储着这些邮件。

简单邮件传输协议(Simple Mail Transfer Protocol, SMTP)用于把邮件从发件人的端系统发送到发件人的服务器,以及把邮件从发件人的服务器发送到收件人的服务器。SMTP采用TCP连接,并且不使用中间服务器进行传输(如果收件人的服务器没开,则存在发件人的服务器上等待定时重传)。SMTP报文包括发件人和收件人的邮箱地址,以及一个主题等等。

邮局协议第三版(Post Office Protocol ver.3, POP3)可以用于收件人的设备访问其服务器下载邮件。

域名系统(Domain Name System, DNS)

在HTTP中我们用主机名(又称域名)来标识端系统。例如,www.baidu.com就是一个主机名。然而事实上主机(的接口)在网络层是用IP地址标识的。所以在应用层,需要一个把主机名转换为其对应的IP地址。

为了做到这一点,我们可以使用DNS协议。全球范围内部署了大量的DNS服务器,这些服务器以层级结构部署,root DNS服务器分出了各个Top-Level Domain(TLD)的DNS服务器(比如com DNS服务器,org DNS服务器等等),最终到达本地DNS服务器。当主机需要查询一个域名对应的IP地址时,首先访问本地DNS服务器,如果查不到,本地DNS服务器就会去查上一层的DNS服务器,再查不到就再去查更上一层的。实践中,这些查询绝大多数也是通过DNS缓存完成的,这大大提高了查询的效率。当申请一个新域名以后,这个域名会被部署到全球的DNS服务器中。

一般DNS查询用UDP协议,UDP的查询效率比TCP高很多。

文件传输协议(File Transfer Protocol, FTP)

FTP用于传输文件,利用的TCP连接。FTP是有状态协议,这样才能维护用户上次访问的文件目录等等。在FTP中,有用于传输和控制的两个不同的TCP连接,它们用的是不同的socket。(控制指的是访问文件夹等不同于传输的操作)

posted @ 2025-01-13 05:08  行而上  阅读(54)  评论(0)    收藏  举报