计算机网络的预习与复习(二)

本章又名如何用一万字说明应用层

应用层 

应用层协议原理

客户-服务器体系结构                                 P2P体系结构

进程通信

 1.客户和服务器进程

网络应用程序由成对的进程组成,这些进程通过网络相互发送报文。

 在一对进程之间的通信会话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器。

2.进程与计算机网络之间的接口

进程通过一个称为套接字(socket)的软件接口向网络发送报文和从网络接收报文。套接字是同一台主机内应用层与运输层之间的接口。由于该套接字是建立网络应用程序的可编程接口,因此套接字也称为应用程序和网络之间的应用程序编程接口(Application Programming Interface,API)。

3. 进程寻址

在一台主机上运行的进程为了向在另—台主机上运行的进程发送分组,接收进程需要有个地址。 为了标识该接收进程,需要定义两种信息∶①主机的地址;②在目的主机中指定接收进程的标识符。

 可供应用程序使用的运输服务

1.可靠数据传输

为了支持这些应用,必须做一些工作以确保由应用程序的一端发送的数据正确、完全地交付给该应用程序的另一端。

2. 吞吐量

带宽敏感的应用具有特定的吞吐量要求,而弹性应用(elastic application)能够根据当时可用的带宽或多或少地利用可供使用的吞吐量。电子邮件、文件传输以及 Web 传送都属于弹性应用。

3.定时

运输层协议也能提供定时保证。

4.安全性 最后,运输协议能够为应用程序提供一种或多种安全性服务。

因特网提供的运输服务

1.TCP服务

TCP 服务模型包括面向连接服务和可靠数据传输服务。当某个应用程序调用TCP作为其运输协议时,该应用程序就能获得来自 TCP 的这两种服务。

  面向连接的服务∶在应用层数据报文开始流动之前,TCP让客户和服务器互相交 换运输层控制信息。这个所谓的握手过程提醒客户和服务器,让它们为大量分组的到来做好准备。

可靠的数据传送服务∶通信进程能够依靠 TCP,无差错、按适当顺序交付所有发 送的数据。

TCP协议还具有拥塞控制机制,这种服务不一定能为通信进程带来直接好处,但能为因特网带来整体好处。当发送方和接收方之间的网络出现拥塞时,TCP 的拥塞控制机制会抑制发送进程(客户或服务器)。

2. UDP服务

UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务。UDP是无连接的,因此在两个进程通信前没有握手过程。UDP 协议提供一种不可靠数据传送服务,也就是说,当进程将一个报文发送进 UDP套接字时,UDP协议并不保证该报文将到达接收进程。不仅如此,到达接收进程的报文也可能是乱序到达的。 UDP没有包括拥塞控制机制,所以UDP 的发送端可以用它选定的任何速率向其下层(网络层)注入数据。

应用层协议

应用层协议定义了∶

● 交换的报文类型例如请求报文和响应报文。

● 各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的。

● 字段的语义,即这些字段中的信息的含义。

● 确定一个进程何时以及如何发送报文,对报文进行响应的规则。

Web 应用有很多组成部分,包括文档格式的标准(即 HTML)、Web浏览器(如 Firefox 和 Microsoft Internet Explorer)、Web服务器(如 Apache、Microsoft 服务器程序),以及一个应用层协议。Web的应用层协议是 HTTP,它定义了在浏览器和 Web 服务器之间传输的报文格式和序列。

Web和HTTP

HTTP概况

超文本传输协议(HyperText Transfer Protocol,HTTP),是Web 的核心。HTTP由两个程序实现∶一个客户程序和一个服务器程序。客户程序和服务器程序运行在不同的端系统中,通过交换HTTP报文进行会话。

HTTP由两个程序实现∶一个客户程序和一个服务器程序。客户程序和服务器程序运行在不同的端系统中,通过交换HTTP报文进行会话。HTTP定义了这些报文的结构以及客户和服务器进行报文交换的方式。

HTTP使用TCP作为它的支撑运输协议。

 

非持续连接和持续连接

这种客户 -服务器的交互是经 TCP进行的,应用程序的研制者就需要做一个重要决定,即每个请求/响应对是经一个单独的 TCP连接发送,还是所有的请求及其响应经相同的 TCP连接发送。采用前一种方法,该应用程序被称为使用非持续连接(non-persistent connection);采用后一种方法,该应用程序被称为使用持续连接(persistent connection)。

非持续连接的 HTTP

在非持续连接情况下,从服务器向客户传送一个Web 页面的步骤

1)HTTP客户进程在端口号80发起一个到服务器 www.someSchool. edu 的 TCP连接,该端口号是 HTTP的默认端口。在客户和服务器上分别有一个套接字与该连接相关联。

2)HTTP客户经它的套接字向该服务器发送一个HTTP 请求报文。请求报文中包含了路径名/someDepartment/home.index

3)HTTP 服务器进程经它的套接字接收该请求报文,从其存储器(RAM或磁盘)中检索出对象 www.someSchool.edu/someDepartment/home.index,在一个 HTTP响应报文中封装对象,并通过其套接字向客户发送响应报文。

4)HTTP服务器进程通知 TCP断开该 TCP连接。

5)HTTP客户接收响应报文,TCP连接关闭。该报文指出封装的对象是一个HTML 文件,客户从响应报文中提取出该文件,检查该HTML 文件,得到对10个JPEG图形的引用。

6)对每个引用的JPEG图形对象重复前4个步骤。

往返时间(Round-Trip Time,RTT):指一个短分组从客户到服务器然后再返回客户所花费的时间。RTT包括分组传播时延、分组在中间路由器和交换机上的排队时延以及分组处理时延。

采用持续连接的 HTTP

在采用HTTP1.1 持续连接的情况下,服务器在发送响应后保持该 TCP连接打开。在相同的客户与服务器之间,后续的请求和响应报文能够通过相同的连接进行传送。

一般来说,如果一条连接经过一定时间间隔(一个可配置的超时间隔)仍未被使用,HTTP 服务器就关闭该连接。HTTP 的默认模式是使用带流水线的持续连接。

HTTP报文格式

HTTP请求报文

HTTP请求报文的第一行叫作请求行(request line),其后继的行叫作首部行(header line)。

请求行有3个字段∶方法字段、URL字段和HTTP版本字段。方法字段可以取几种不同的值,包括GET、POST、HEAD、PUT和 DELETE。绝大部分的 HTTP 请求报文使用GET方法。

 首部行 Host:www.someschool.edu 指明了对象所在的主机。

通过包含 Connection:close 首部行,该浏览器告诉服务器不要麻烦地使用持续连接,它要求服务器在发送完被请求的对象后就关闭这条连接。

User-agent∶首部行用来指明用户代理,即向服务器发送请求的浏览器的类型。这里浏览器类型是 Mozilla/5.0,即 Firefox 浏览器。

Accept-language∶首部行表示用户想得到该对象的法语版本

使用GET方法时实体体为空,而使用 POST 方法时才使用该实体体。当用户提交表单时,HTTP客户常常使用 POST 方法。

但是,HTML表单经常使用GET方法,并在(表单字段中)所请求的 URL 中包括输入的数据。例如,一个表单使用GET方法,它有两个字段,分别填写的是"monkeys"和"bananas",这样,该 URL 结构为 www.somesite.com/animalsearch? monkeys&bananas。

 HTTP响应报文

三个部分∶一个初始状态行(status line),6个首部行(header line),然后是实体体(entity body)。

 状态行有3个字段∶协议版本字段、状态码和相应状态信息。

状态码和相关的短语包括∶

● 200 OK∶请求成功,信息在返回的响应报文中。 ● 301 Moved Permanently∶请求的对象已经被永久转移了,新的 URL定义在响应报 文的 Location∶首部行中。客户软件将自动获取新的 URL。 ● 400 Bad Request;一个通用差错代码,指示该请求不能被服务器理解。● 404 Not Found∶被请求的文档不在服务器上。 ● 505 HTTP Version Not Supported∶服务器不支持请求报文使用的 HTTP 协议版本。

服务器用Connection:close 首部行告诉客户,发送完报文后将关闭该 TCP连接。Date∶首部行指示服务器产生并发送该响应报文的日期和时间。Server:首部行指示该报文是由一台 Apache Web 服务器产生的,它类似于HTTP请求报文中的 User-agent∶首部行。Last-Modified∶首部行指示了对象创建或者最后修改的日期和时间。Last-Modified∶首部行对既可能在本地客户也可能在网络缓存服务器上的对象缓存来说非常重要。Content-Length∶首部行指示了被发送对象中的字节数。Content-Type∶首部行指示了实体体中的对象是HTML 文本。

 实体体部分是报文的主要部分,即它包含了所请求的对象本身

 用户与服务器的交互∶cookie

一个 Web 站点通常希望能够识别用户,可能是因为服务器希望限制用户的访问,或者因为它希望把内容与用户身份联系起来。为此,HTTP 使用了 cookie。cookie 在【RFC 6265】 中定义,它允许站点对用户进行跟踪。目前大多数商务 Web 站点都使用了cookie。

cookie 技术有4个组件∶①在 HTTP 响应报文中的一个cookie 首部行;②在 HTTP请求报文中的一个cookie 首部行;③在用户端系统中保留有一个cookie 文件,并由用户的浏览器进行管理;④位于Web 站点的一个后端数据库。

 Web 缓存

Web 缓存器(Web cache)也叫代理服务器(proxy server),它是能够代表初始Web服务器来满足 HTTP请求的网络实体。

举例来说,假设浏览器正在请求 对象 http∶/www.someschool.edu/campus. gif,将会发生如下情况∶

1)浏览器创建一个到Web 缓存器的TCP连接,并向Web缓存器中的对象发送一个HTTP请求。

2)Web缓存器进行检查,看看本地是否存储了该对象副本。如果有,Web缓存器就向客户浏览器用HTTP响应报文返回该对象。

3)如果 Web 缓存器中没有该对象。它就打开一个与该对象的初始服务器(即www.someschool.edu)的 TCP连接。Web 缓存器则在这个缓存器到服务器的 TCP连接上发送一个对该对象的 HTTP请求。在收到该请求后,初始服务器向该Web 缓存器发送具有该对象的HTTP响应。

4)当Web缓存器接收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览器用HTTP响应报文发送该副本(通过现有的客户浏览器和 Web缓存器之间的 TCP连接)。

Web缓存器既是服务器又是客户。

Web 缓存器可以大大减少对客户请求的响应时间。Web 缓存器能够大大减少一个机构的接入链路到因特网的通信量。

条件GET方法

存放在缓存器中的对象副本可能是陈旧的。HTTP 协议条件 GET(conditional GET)方法,允许缓存器证实它的对象是最新的。如果;①请求报文使用GET 方法;并且②请求报文中包含一个"If-Modified-Since∶"首部行。那么,这个HTTP请求报文就是一个条件 GET请求报文。

HTTP/2

HTTP1.1 

O2 O3 O4需要等待较长时间

HTTP2

与HTTP 1.1一样,浏览器有打开多个并行TCP连接的动机,以减少延迟,提高总体吞吐量

TCP连接没有安全性。

HTTP3

通过UDP增加了安全性、检测每个对象的错误和增加拥塞控制

 因特网中的电子邮件

电子邮件是一种异步通信媒介,即当人们方便时就可以收发邮件。它有3 个主要组成部分∶用户代理(user agent)、邮件服务器(mail server)和简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)。

邮件服务器形成了电子邮件体系结构的核心。每个接收方(如 Bob)在其中的某个邮件服务器上有一个邮箱(mailbox)。

SMTP是因特网电子邮件中主要的应用层协议。它使用TCP 可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。像大多数应用层协议一样,SMTP 也有两个部分∶运行在发送方邮件服务器的客户端和运行在接收方邮件服务器的服务器端。每台邮件服务器上既运行 SMTP的客户端也运行 SMTP 的服务器端。当一个邮件服务器向其他邮件服务器发送邮件时,它就表现为 SMTP 的客户; 当邮件服务器从其他邮件服务器上接收邮件时,它就表现为一个 SMTP 的服务器。

SMTP

假设 Alice 想给 Bob 发送一封简单的 ASCI报文。 1)Alice 调用她的邮件代理程序并提供 Bob 的邮件地址(例如 bob@ someschool.edu),撰写报文,然后指示用户代理发送该报文。

2)Alice 的用户代理把报文发给她的邮件服务器,在那里该报文被放在报文队列中。

3)运行在 Alice 的邮件服务器上的 SMTP 客户端发现了报文队列中的这个报文,它就创建一个到运行在 Bob 的邮件服务器上的 SMTP服务器的 TCP连接。

4)在经过一些初始 SMTP握手后,SMTP客户通过该TCP连接发送 Alice 的报文。

5)在 Bob 的邮件服务器上,SMTP 的服务器端接收该报文。Bob 的邮件服务器然后将该报文放入 Bob的邮箱中。

6)在 Bob 方便的时候,他调用用户代理阅读该报文。

 SMTP 一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端也是这样。

与HTTP对比

这两个协议都用于从一台主机向另一台主机传送文件∶HTTP从 Web服务器向 Web客户(通常是一个浏览器)传送文件(也称为对象);SMTP从一个邮件服务器向另一个邮件服务器传送文件(即电子邮件报文)。当进行文件传送时,持续的 HTTP和 SMTP都使用持续连接。

不同点一。HTTP 主要是一个拉协议(pull protocol),即在方便的时候,某些人在 Web 服务器上装载信息,用户使用HTTP 从该服务器拉取这些信息。特别是TCP连接是由想接收文件的机器发起的。另一方面,SMTP基本上是一个推协议(push protocol),即发送邮件服务器把文件推向接收邮件服务器。特别是,这个TCP 连接是由要发送该文件的机器发起的。

第二个区别就是我们前面间接地提到过的,SMTP 要求每个报文(包括它们的体)采用7 比特 ASCII码格式。HTTP数据则不受这种限制。

第三个重要区别是HTTP把每个对象封装到它自己的 HTTP 响应报文中,而 SMTP则把所有报文对象放在一个报文之中。

 邮件报文格式

每个首部行包含了可读的文本,是由关键词后跟冒号及其值组成的。某些关键词是必需的,另一些则是可选的。每个首部必须含有一个From;首部行和一个To∶首部行;一个首部也许包含一个Subject∶首部行以及其他可选的首部行。

在报文首部之后,紧接着一个空白行,然后是以 ACSII格式表示的报文体。

邮件访问协议

SMTP用来将邮件从发送方的邮件服务器传输到接收方的邮件服务器;SMTP 也用来将邮件从发送方的用户代理传送到发送方的邮件服务器。如 POP3 这样的邮件访问协议用来将邮件从接收方的邮件服务器传送到接收方的用户代理。

DNS∶因特网的目录服务

主机的一种标识方法是用它的主机名(hostname),如 www.facebook.com、www.google.com、gaia. cs.umass.edu 以及 cis.poly.edu 等,主机也可以使用所谓 IP 地址(IP address)进行标识。

DNS提供的服务

我们需要一种能进行主机名到 IP地址转换的目录服务。这就是域名系统(Domain Name System,DNS)的主要任务。

DNS是∶①一个由分层的 DNS服务器(DNS server)实现的分布式数据库;②一个使得主机能够查询分布式数据库的应用层协议。DNS服务器通常是运行 BIND(Berkeley Internet Name Domain)软件「BIND 2012】 的UNIX机器。DNS协议运行在 UDP之上,使用53号端口。

DNS通常是由其他应用层协议所使用的,包括 HTTP、SMTP 和FTP,将用户提供的主机名解析为IP 地址。

为了使用户的主机能够将一个 HTTP 请求报文发送到Web 服务器 www.someschool.edu,该用户主机必须获得 www.someschool. edu 的IP 地址。其做法如下。

1)同一台用户主机上运行着DNS应用的客户端。

2)浏览器从上述 URL中抽取出主机名 www.someschool.edu,并将这台主机名传给DNS应用的客户端。

3)DNS客户向DNS服务器发送一个包含主机名的请求。

4)DNS客户最终会收到一份回答报文,其中含有对应于该主机名的 IP地址。

5)一旦浏览器接收到来自 DNS 的该IP地址,它能够向位于该IP 地址 80 端口的HTTP服务器进程发起一个TCP连接。

除了进行主机名到IP 地址的转换外,DNS 还提供了一些重要的服务∶

● 主机别名(host aliasing)。有着复杂主机名的主机能拥有一个或者多个别名。

● 邮件服务器别名(mail server aliasing)。

● 负载分配(load distribution)。DNS也用于在冗余的服务器(如冗余的Web服务器 等)之间进行负载分配。繁忙的站点(如 cnn.com)被冗余分布在多台服务器上。

DNS工作机理概述

假设运行在用户主机 上的某些应用程序 (如 Web浏览器或邮件阅读器)需要将主机名转换为 IP 地址。这些应用程序将调用DNS的客户端,并指明需要被转换的主机名。用户主机上的 DNS接收到后,向网络中发送一个DNS查询报文。所有的 DNS请求和回答报文使用 UDP数据报经端口 53 发送。经过若干毫秒到若干秒的时延后,用户主机上的 DNS接收到一个提供所希望映射的 DNS 回答报文。这个映射结果则被传递到调用 DNS的应用程序。

分布式、层次数据库

为了处理扩展性向题。DNS使用了大量的 DNS服务器。它们以层次方式组织。并且分布在全世界范围内。

大致说来,有3种类型的 DNS服务器∶根 DNS 服务器、顶级域(Top-Level Domain,TLD)DNS服务器和权威 DNS服务器。

 ● 根 DNS服务器。有400 多个根名字服务器遍及全世界。

● 顶级域(DNS)服务器。顶级域(DNS)服务器。对于每个顶级域(如 com、org、net、edu 和 gov)和所有 国家的顶级域(如 uk、fr、ca 和 jp),都有 TLD服务器(或服务器集群)。

● 权威 DNS 服务器。在因特网上具有公共可访问主机(如 Web 服务器和邮件服务器) 的每个组织机构必须提供公共可访问的 DNS记录。这些记录将这些主机的名字映射为IP地址。

一个本地 DNS 服务器并不属于该服务器的层次结构,但它对 DNS 层次结构是至关重要的。每个ISP(如一个居民区的ISP或一个机构的ISP)都有一台本地 DNS服务器(也叫默认名字服务器)。当主机与某个ISP连接时,该 ISP提供一台主机的IP 地址,该主机具有一台或多台其本地 DNS服务器的 IP地址

               迭代查询                                                递归查询

 DNS缓存

 为了改善时延性能并减 少在因特网上到处传输的 DNS 报文数量, DNS 广泛使用了缓存技术。

DNS 缓存的原理非常简单。在一个请求链中,当某 DNS 服务器接收一个 DNS 回答(例如,包含某主机名到IP地址的映射)时,它能将映射缓存在本地存储器中。

DNS 记录和报文

共同实现 DNS 分布式数据库的所有 DNS 服务器存储了资源记录(Resource Record,RR),RR 提供了主机名到IP地址的映射。每个 DNS 回答报文包含了一条或多条资源记录。

资源记录是一个包含了下列字段的4元组∶(Name,Value,Type,TTL)

TTL 是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。

● 如果 Type =A,则 Name是主机名,Value是该主机名对应的IP地址。因此,一条 类型为 A 的资源记录提供了标准的主机名到 IP 地址的映射。

● 如果Type=NS,则 Name 是个域(如 foo.com),而Value 是个知道如何获得该域 中主机 IP地址的权威 DNS服务器的主机名。

● 如果Type =CNAME,则 Value 是别名为 Name 的主机对应的规范主机名。该记录 能够向查询的主机提供一个主机名对应的规范主机名.

● 如果Type =MX,则Value 是个别名为 Name 的邮件服务器的规范主机名。

DNS报文

 ●前12个字节是首部区域,其中有几个字段。第一个字段(标识符)是一个16 比 特的数,用于标识该查询。这个标识符会被复制到对查询的回答报文中,以便让客户用它来匹配发送的请求和接收到的回答。标志字段中含有若干标志。1 比特的"查询/回答"标志位指出报文是查询报文(0)还是回答报文(1)。当某 DNS 服务器是所请求名字的权威 DNS服务器时,1 比特的"权威的" 标志位被置在回答报文中。

● 问题区域包含着正在进行的查询信息。该区域包括∶①名字字段,包含正在被查询 的主机名字;②类型字段,指出有关该名字的正被询问的问题类型,

●在来自DNS服务器的回答中,回答区域包含了对最初请求的名字的资源记录。

●权威区域包含了其他权威服务器的记录。

● 附加区域包含了其他有帮助的记录。

在 DNS数据库中插入记录

注册登记机构(registrar)是一个商业实体,它验证该域名的唯一性,将该域名输入 DNS 数据库,对提供的服务收取少量费用。

 套接字编程:生成网络应用

UDP套接字编程

简单的客户-服务器应用程序 UDP和 TCP的套接字编程∶

1)客户从其键盘读取一行字符(数据)并将该数据向服务器发送。

2)服务器接收该数据并将这些字符转换为大写。

3)服务器将修改的数据发送给客户。

4)客户接收修改的数据并在其监视器上将该行显示出来。

 

 TCP套接字编程

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值