应用层 IV(万维网WWW)【★★】

news2024/9/25 14:08:02

(★★)代表非常重要的知识点,(★)代表重要的知识点。

一、WWW 的概念与组成结构

1. 万维网的概念

万维网 WWW(World Wide Web)并非某种特殊的计算机网络。万维网是一个大规模的、联机式的信息储藏所,英文简称为 Web 。万维网用链接的方法能非常方便地从互联网上的一个站点访问另一个站点(也就是所谓的“链接到另一个站点”),从而主动地按需获取丰富的信息。下图说明了万维网提供分布式服务的特点。

上图画出了五个万维网上的站点,它们可以相隔数千公里,但都必须连接在互联网上。每一个万维网站点都存放了许多文档。在这些文档中有一些地方的文字是用特殊方式显示的(例如用不同的颜色,或添加了下划线),而当我们将鼠标移动到这些地方时,鼠标的箭头就变成了一只手的形状。这就表明这些地方有一个链接(link)(这种链接有时也称为超链 hyperlink),如果我们在这些地方点击鼠标,就可以从这个文档链接到可能相隔很远的另一个文档。经过一定的时延(几秒钟、几分钟甚至更长,取决于所链接的文档的大小和网络的拥塞情况),在我们的屏幕上就能将远方传送过来的文档显示出来。

例如,站点 A 的某个文档中有两个地方 ① 和 ② 可以链接到其他的站点。当我们点击链接 ① 时,就可链接到站点 B 的某个文档。若点击 ② 则可链接到站点 E 。站点 B 的文档也有两个地方 ③ 和 ④ 有链接。若点击链接 ③ 就可链接到站点 D ,而点击链接 ④ 就链接到站点 E ,但从 E 的这个文档已不能继续链接到其他任何的站点。站点 D 的文档中有两个地方 ⑤ 和 ⑥ 有链接,可以分别链接到 A 和 C 。

正是由于万维网的出现,使互联网从仅由少数计算机专家使用变为普通百姓也能利用的信息资源。万维网的出现使网站数按指数规律增长。因此,万维网的出现是互联网发展中的一个非常重要的里程碑。

万维网是一个分布式的超媒体(hypermedia)系统,它是超文本(hypertext)系统的扩充。所
谓超文本是指包含指向其他文档的链接的文本(text)。也就是说,一个超文本由多个信息源链接成,而这些信息源可以分布在世界各地,并且数目也是不受限制的。利用一个链接可使用户找到远在异地的另一个文档,而这又可链接到其他的文档(依此类推)。这些文档可以位于世界上任何一个接在互联网上的超文本系统中。超文本是万维网的基础。

超媒体与超文本的区别是文档内容不同。超文本文档仅包含文本信息,而超媒体文档还包含其他表示方式的信息,如图形、图像、声音、动画以及视频图像等。

2. 万维网的组成结构

万维网必须解决以下几个问题:

  • 怎样标志分布在整个互联网上的万维网文档?
  • 用什么样的协议来实现万维网上的各种链接?
  • 怎样使不同作者创作的不同风格的万维网文档,都能在互联网上的各种主机上显示出来,同时使用户清楚地知道在什么地方存在着链接?
  • 怎样使用户能够很方便地找到所需的信息?

为了解决第一个问题,万维网使用统一资源定位符 URL(Uniform Resource Locator)来标志万维网上的各种文档,并使每一个文档在整个互联网的范围内具有唯一的标识符 URL 。

为了解决上述的第二个问题,就要使万维网客户程序与万维网服务器程序之间的交互遵守严格的协议,这就是超文本传送协议 HTTP(HyperText Transfer Protocol)。HTTP 是一个应用层协议,它使用 TCP 连接进行可靠的传送。

为了解决上述的第三个问题,万维网使用超文本标记语言 HTML(HyperText Markup Language),它是一种文档结构的标记语言,使用一些约定的标记对页面上的各种信息(包括文字、声音、图像、视频等)、格式进行描述。使得万维网页面的设计者可以很方便地用链接从本页面的某处链接到互联网上的任何一个万维网页面,并且能够在自己的主机屏幕上将这些页面显示出来。

最后,用户可使用搜索工具在万维网上方便地查找所需的信息。

万维网的内核部分即由以上三个标准构成的:统一资源定位符(URL)、 超文本传输协议(HTTP)以及超文本标记语言(HTML)。

万维网以客户 / 服务器模式工作。浏览器是在用户主机上的万维网客户程序,而万维网文档所驻留的主机则运行服务器程序,这台主机称为万维网服务器。客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档。工作流程如下:

  • Web 用户使用浏览器(指定 URL)与 Web 服务器建立连接,并发送浏览请求。
  • Web 服务器把 URL 转换为文件路径,并返回信息给 Web 浏览器。
  • 通信完成,关闭连接。

【思考】:互联网、因特网和万维网的区别是什么?

  • 互联网(internet)泛指由多个计算机网络按照一定的通信协议相互连接而成的一个大型计算机网络。

  • 因特网(Internet)是指在 ARPA 网基础上发展而来的世界上最大的全球性互连网络。因特网和其他类似的由计算机相互连接而成的大型网络系统,都可算是“互联网”,因特网只是互联网中最大的一个。

  • 万维网是无数个网络站点和网页的集合,它们一起构成了因特网最主要的部分(因特网也包括电子邮件、Usenet 和新闻组)。

3. 统一资源定位符 URL

1)URL 的格式

统一资源定位符 URL 是用来表示从互联网上得到的资源位置和访问这些资源的方法。URL 给资源的位置提供一种抽象的识别方法,并用这种方法给资源定位。只要能够对资源定位,系统就可以对资源进行各种操作,如存取、更新、替换和查找其属性。由此可见,URL 实际上就是在互联网上的资源的地址。只有知道了这个资源在互联网上的什么地方,才能对它进行操作。显然,互联网上的所有资源,都有一个唯一确定的 URL 。

这里所说的“资源”是指在互联网上可以被访问的任何对象,包括文件目录、文件、文档、图像、声音等,以及与互联网相连的任何形式的数据。“资源”还包括电子邮件的地址和 USENET 新闻组,或 USENET 新闻组中的报文。

URL 是对可以从因特网上得到的资源的位置和访问方法的一种简洁表示。URL 相当于一个文件名在网络范围的扩展。因此, URL 是与互联网相连的机器上的任何可访问对象的一个指针。由于访问不同对象所使用的协议不同,所以 URL 还指出读取某个对象时所使用的协议。URL 的一般形式由以下四个部分组成:

<协议>: //<主机>:<端口>/<路径>

  • URL 的第一部分是最左边的<协议>。这里的<协议>就是指出使用什么协议来获取该万维网文档。现在最常用的协议就是 http(超文本传送协议 HTTP),其次是 ftp(文件传送协议 FTP)。

  • 在<协议>后面的 “: //” 是规定的格式。它的右边是第二部分<主机>,它指出这个万维网文档是在哪一台主机上(即存放资源的主机在因特网中的域名或 IP 地址)。这里的<主机>就是指该主机在互联网上的域名。

  • 再后面是第三和第四部分<端口>和<路径>,有时可省略。

现在有些浏览器为了方便用户,在输入 URL 时,可以把最前面的 “http://” 甚至把主机名最前面的 “www” 省略,然后浏览器替用户把省略的字符添上。例如,用户只要键入 ctrip.com ,浏览器就自动把未键入的字符补齐,变成 http://www.ctrip.com 。

2)使用 HTTP 的 URL

对于万维网的网点的访问要使用 HTTP 协议。HTTP 的 URL 的一般形式是:

http : //<主机>:<端口>/<路径>

HTTP 的默认端口号是 80 ,通常可省略。若再省略文件的<路径>项,则 URL 就指到互联网上的某个主页(homepage)。主页是个很重要的概念,它可以是以下几种情况之一:

  • 一个 WWW 服务器的最高级别的页面。
  • 某一个组织或部门的一个定制的页面或目录。从这样的页面可链接到互联网上的与本组织或部门有关的其他站点。
  • 由某一个人自己设计的描述他本人情况的 WWW 页面。

例如,要查有关清华大学的信息,就可先进入到清华大学的主页,其 URL 为:http://www.tsinghua.edu.cn 。这里省略了默认的端口号 80 。我们从清华大学的主页入手,就可以通过许多不同的链接找到所要查找的各种有关清华大学各个部门的信息。更复杂一些的路径是指向层次结构的从属页面。例如:

是清华大学的“院系设置”页面的 URL 。注意:上面的 URL 中使用了指向文件的路径,而文件名就是最后的 index.htm 。后缀 htm(有时可写为 html)表示这是一个用超文本标记语言 HTML 写出的文件。

URL 里面的字母不分大小写,但为了便于阅读,有时故意使用一些大写字母。用户使用 URL 并非仅仅能够访问万维网的页面,而且还能够通过 URL 使用其他的互联网应用程序,如 FTP 或 USENET 新闻组等。更重要的是,用户在使用这些应用程序时,只使用一个程序,即浏览器。这显然是非常方便的。

二、超文本传输协议——HTTP 协议(★★)

HTTP 协议定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看, HTTP 是面向事务的(transaction-oriented)应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。

注:所谓事务(transaction)就是指一系列的信息交换,而这一系列的信息交换是一个不可分割的整体,也就是说,要么所有的信息交换都完成,要么一次交换都不进行。

请注意, HTTP 不仅传送完成超文本跳转所必需的信息,而且也传送任何可从互联网上得到的信息,如文本、超文本、声音和图像等。

1. HTTP 的操作过程

从协议执行过程来说,浏览器要访问 WWW 服务器时,首先要完成对 WWW 服务器的域名解析。一旦获得了服务器的 IP 地址,浏览器就通过 TCP 向服务器发送连接建立请求。

万维网的大致工作过程如下图所示:

每个万维网网点都有一个服务器进程,它不断地监听 TCP 的端口 80(默认),以便发现是否有浏览器(即万维网客户,请注意,浏览器和万维网客户是同义词)向它发出连接建立请求。一旦监听到连接建立请求并建立了 TCP 连接之后,浏览器就向万维网服务器发出浏览某个 Web 页面的 HTTP 请求,服务器收到请求后,将构建所请求 Web 页的必需信息,并通过 HTTP 响应返回给浏览器。最后, TCP 连接就被释放了。

在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则,这些格式和规则就是超文本传送协议 HTTP 。

HTTP 规定在 HTTP 客户与 HTTP 服务器之间的每次交互,都由一个 ASCII 码串构成的请求和一个类似的通用互联网扩充,即 “类 MIME(MIME-like)”的响应组成。HTTP 报文通常都使用 TCP 连接传送。

用户浏览页面的方法有两种。一种方法是在浏览器的地址窗口中键入所要找的页面的 URL ;另一种方法是在某一个页面中用鼠标点击一个可选部分,这时浏览器会自动在互联网上找到所要链接的页面。

用户单击鼠标后所发生的事件按顺序如下(以访问清华大学的网站为例):

  • 浏览器分析链接指向页面的 URL(http://www.tsinghua.edu.cn/chn/index.htm)。
  • 浏览器向 DNS 请求解析 www.tsinghua.edu.cn 的 IP 地址。
  • 域名系统 DNS 解析出清华大学服务器的 IP 地址。
  • 浏览器与该服务器建立 TCP 连接(默认端口号为 80)。
  • 浏览器发出 HTTP 请求:GET/chn/index.htm 。
  • 服务器通过 HTTP 响应把文件 index.htm 发送给浏览器。
  • 释放 TCP 连接。
  • 浏览器解释文件 index.htm ,并将 Web 页显示给用户。

上述过程是一个简化过程,实际过程涉及 TCP/IP 体系结构中应用层的 DHCP、DNS 和 HTTP ,传输层的 UDP 和 TCP ,网际层的 IP 和 ARP ,数据链路层的 CSMA/CD 或 PPP(若涉及 ISP 接入或广域网传输)。

2. HTTP 的特点

HTTP 使用了面向连接的 TCP 作为传输层协议,保证了数据的可靠传输,HTTP 不必考虑数据在传输过程中被丢弃后又怎样被重传。但是, HTTP 协议本身是无连接的(需注意!),这就是说,虽然 HTTP 使用了 TCP 连接,但通信的双方在交换 HTTP 报文之前不需要先建立 HTTP 连接。

HTTP 协议是无状态的(stateless)。也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同(假定现在服务器还没有把该页面更新),因为服务器并不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。HTTP 的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的 HTTP 请求。

下面我们粗略估算一下,从浏览器请求一个万维网文档到收到整个文档所需的时间(如下图所示) 。用户在点击鼠标链接某个万维网文档时, HTTP 协议首先要和服务器建立 TCP 连接。这需要使用三报文握手。当建立 TCP 连接的三报文握手的前两部分完成后(即经过了一个 RTT 时间后),万维网客户就把 HTTP 请求报文,作为建立 TCP 连接的三报文握手中的第三个报文的数据,发送给万维网服务器。服务器收到 HTTP 请求报文后,就把所请求的文档作为响应报文返回给客户。

从上图可看出,请求一个万维网文档所需的时间是该文档的传输时间(与文档大小成正比)加上两倍往返时间 RTT(一个 RTT 用于连接 TCP 连接,另一个 RTT 用于请求和接收万维网文档,TCP 建立连接的三报文握手的第三个报文段中的数据,就是客户对万维网文档的请求报文)。

HTTP 既可以使用非持续连接(HTTP/1.0),也可以使用持续连接(HTTP/1.1 支持)。

  • 对于非持续连接:每个网页元素对象(如 JPEG图形、Flash等)的传输都需要单独建立一个 TCP 连接,如下图左所示(第三次握手的报文段中捎带了客户对万维网文档的请求)。请求一个万维网文档所需的时间是该文档的传输时间加上两倍往返时间 RTT 。

HTTP/1.0 的主要缺点:就是每请求一个文档就要有两倍 RTT 的开销。若一个主页上有很多链接的对象(如图片等)需要依次进行链接,那么每一次链接下载都导致 2 × RTT 的开销。另一种开销就是万维网客户和服务器每一次建立新的 TCP 连接都要分配缓存和变量。特别是万维网服务器往往要同时服务于大量客户的请求,所以这种非持续连接会使万维网服务器的负担很重。
好在浏览器都能够打开 5 ~ 10 个并行的 TCP 连接,而每一个 TCP 连接处理客户的一个请求。因此,使用并行 TCP 连接可以缩短响应时间。

  • 所谓持续连接:是指万维网服务器在发送响应后仍然保持这条连接,使同一个客户和该服务器可以继续在这条 TCP 连接上传送后续的 HTTP 请求报文和响应报文,如下图右所示。

HTTP/1.1 协议较好地解决了开销大的问题,它使用了持续连接(persistent connection)。所谓持续连接就是:万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。
目前一些流行的浏览器(如 IE 11.0)的默认设置就使用了 HTTP/1.1 。如果用户不愿意使用持续连接的浏览器,可以把 “HTTP 1.1 设置” 的选择取消即可。

HTTP/1.1 协议的持续连接有两种工作方式,即非流水线方式(without pipelining)和流水线方式(with pipelining)。

  • 非流水线方式的特点:是客户在收到前一个响应后才能发出下一个请求。因此,在 TCP 连接已建立后,客户每访问一次对象都要用去一个往返时间 RTT 。这比非持续连接要用去两倍 RTT 的开销,节省了建立 TCP 连接所需的一个 RTT 时间。但非流水线方式还是有缺点的,因为服务器在发送完一个对象后,其 TCP 连接就处于空闲状态,浪费了服务器资源。

  • 流水线方式的特点:是客户在收到 HTTP 的响应报文之前就能够接着发送新的请求报文(客户可以连续发出对各个对象的请求),于是一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。因此,使用流水线方式时,若所有的请求和响应都是连续发送的,客户访问所有的对象只需花费一个 RTT 时间(而不是像非流水线方式那样,每个对象都必须有 1 个 RTT 延迟)。流水线工作方式使 TCP 连接中的空闲时间减少,提高了下载文档效率。当然,在流水线方式中,服务器在每个 RTT 连续发送的数据量还受到 TCP 发送窗口的限制。

3. 在服务器上存放用户的信息(Cookie)

我们知道 HTTP 是无状态的,这样做虽然简化了服务器的设计,但在实际工作中,一些万维网站点却常常希望能够识别用户。因此,通常可以在 HTTP 中使用 Cookie 加数据库的方式来跟踪用户的活动(如记录用户最近浏览的商品等)。

Cookie 的工作原理是:当用户 A 初次浏览某个使用 Cookie 的网站时,该网站的服务器就为用户 A 产生一个唯一的识别码,如 “31d4d96e407aad42”,并以此作为索引在服务器的后端数据库中产生一个项目,用来记录用户访问该网站的各种信息。

接着在给用户 A 的 HTTP 响应报文中添加一个叫做 Set-cookie 的首部行。这里的 “首部字段名” 就是 “Set-cookie” ,而后面的 “值” 就是赋予该用户的 “识别码” 。例如这个首部行是这样的:

Set-cookie: 31d4d96e407aad42

当用户 A 收到这个响应时,其浏览器就在它管理的特定 Cookie 文件中添加一行,其中包括这个服务器的主机名和 Set-cookie 后面给出的识别码。当用户 A 继续浏览这个网站时,每发送一个 HTTP 请求报文,其浏览器就会从其 Cookie 文件中取出这个网站的识别码,并放到 HTTP 请求报文的 Cookie 首部行中:

Cookie: 31d4d96e407aad42

于是,这个网站(服务器)就能够根据 Cookie 识别码从数据库中查询到该用户的活动记录,跟踪用户 31d4d96e407aad42(即用户 A)在该网站的活动,进而执行一些个性化的工作,如根据用户的历史浏览记录向其推荐新商品等。

需要注意的是,服务器并不需要知道这个用户的真实姓名以及其他的信息。但服务器能够知道用户 31d4d96e407aad42 在什么时间访问了哪些页面,以及访问这些页面的顺序。

如果 A 在几天后再次访问这个网站,那么他的浏览器会在其 HTTP 请求报文中继续使用首部行 Cookie: 31d4d96e407aad42 ,而这个网站服务器根据 A 过去的访问记录可以向他推荐商品。如果 A 已经在该网站登记过和使用过信用卡付费,那么这个网站就已经保存了 A 的姓名、电子邮件地址、信用卡号码等信息。这样,当 A 继续在该网站购物时,只要还使用同一个电脑上网,由于浏览器产生的 HTTP 请求报文中都携带了同样的 Cookie 首部行,服务器就可利用 Cookie 来验证出这是用户 A ,因此以后 A 在这个网站购物时就不必重新在键盘上输入姓名、信用卡号码等信息。这对顾客显然是很方便的。

4. 代理服务器(拓展)

代理服务器(proxy server)是一种网络实体,它又称为万维网高速缓存(Web cache)。代理服务器把最近的一些请求和响应暂存在本地磁盘中,当新请求到达时,若代理服务器发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按 URL 的地址再次去互联网访问该资源。

代理服务器可在客户端或服务器端工作,也可在中间系统上工作。下面我们用例子说明它的作用:

设上图(a)是校园网不使用代理服务器的情况:这时,校园网中所有的计算机都通过 2Mbit/s 专线链路(R1 - R2)与互联网上的源点服务器建立 TCP 连接。因而校园网各计算机访问互联网的通信量往往会使这条 2 Mbit/s 的链路过载,使得时延大大增加。

上图(b)是校园网使用代理服务器的情况。这时,访问互联网的过程是这样的:

  • 校园网的计算机中的浏览器向互联网的服务器请求服务时,就先和校园网的代理服务器建立 TCP 连接,并向代理服务器发出 HTTP 请求报文(见上图(b)中的 ①) 。

  • 若代理服务器已经存放了所请求的对象,代理服务器就把这个对象放入 HTTP 响应报文中返回给计算机的浏览器。

  • 否则,代理服务器就代表发出请求的用户浏览器,与互联网上的源点服务器(origin server)建立 TCP 连接(如上图(b)中的 ② 所示),并发送 HTTP 请求报文。

  • 源点服务器把所请求的对象放在 HTTP 响应报文中返回给校园网的代理服务器。

  • 代理服务器收到这个对象后,先复制在自己的本地存储器中(留待以后用),然后再把这个对象放在 HTTP 响应报文中,通过已建立的 TCP 连接(上图(b)中的 ①),返回给请求该对象的浏览器。

我们注意到,代理服务器有时是作为服务器(当接受浏览器的 HTTP 请求时),但有时却作为客户(当向互联网上的源点服务器发送 HTTP 请求时)。

在使用代理服务器的情况下,由于有相当大一部分通信量局限在校园网的内部,因此,2 Mbit/s 专线链路(R1 - R2)上的通信量大大减少,因而减小了访问互联网的时延。

5. HTTP 的报文结构

HTTP 有两类报文:

  • 请求报文——从客户向服务器发送请求报文,见下图(a)。

  • 响应报文——从服务器到客户的回答,见下图(b)。

由于 HTTP 是面向文本的(text-oriented),因此在报文中的每一个字段都是一些 ASCII 码串,因而各个字段的长度都是不确定的。

HTTP 请求报文和响应报文都是由三个部分组成的。由上图可以看出,这两种报文格式的区别就是开始行不同。

  • 开始行:用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行(Request-Line),而在响应报文中的开始行叫做状态行(Status-Line),在开始行的三个字段之间都以空格分隔开,最后的 “CR” 和 “LF” 分别代表 “回车” 和 “换行” 。

  • 首部行:用来说明浏览器、服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有 “回车” 和 “换行” 。整个首部行结束时,还有一空行将首部行和后面的实体主体分开。

  • 实体主体(entity body):在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。

1)HTTP 的请求报文

下面先介绍 HTTP 请求报文的一些主要特点。

请求报文的第一行 “请求行” 只有三个内容:即方法,请求资源的 URL ,以及 HTTP 的版本。

请注意:这里的名词 “方法”(method)是面向对象技术中使用的专门名词。所谓 “方法” 就是对所请求的对象进行的操作,这些方法实际上也就是一些命令。因此,请求报文的类型是由它所采用的方法决定的。下图给出了请求报文中常用的几种方法。

下面是 HTTP 的请求报文的开始行(即请求行)的格式。请注意,在 GET 后面有一个空格,接着是某个完整的 URL ,其后面又有一个空格,最后是 HTTP/1.1 。

GET http://www.xyz.edu.cn/dir/index.htm HTTP/1.1

在第 1 行请求行使用了相对 URL(即省略了主机的域名)是因为下面的首部行(第 2 行)给出了主机的域名。第 3 行是告诉服务器不使用持续连接,表示浏览器希望服务器在传送完所请求的对象后即关闭 TCP 连接。这个请求报文没有实体主体。

再举一个例子:

第 3 行告诉服务器使用持续连接,表示浏览器要求服务器在发送完被请求的文档后保持这条 TCP 连接。

2)HTTP 的响应报文

再看一下 HTTP 响应报文的主要特点。每一个请求报文发出后,都能收到一个响应报文,响应报文的第一行就是状态行。状态行包括三项内容:即 HTTP 的版本,状态码,以及解释状态码的简单短语。状态码(Status-Code)都是三位数字的,分为 5 大类,原先有 33 种,后来又增加了几种,这 5 大类的状态码都是以不同的数字开头的。其中:

  • 1xx 表示通知信息,如请求收到了或正在进行处理。
  • 2xx 表示成功,如接受或知道了。
  • 3xx 表示重定向,如要完成请求还必须采取进一步的行动。
  • 4xx 表示客户的差错,如请求中有错误的语法或不能完成。
  • 5xx 表示服务器的差错,如服务器失效无法完成请求。

若请求的网页从 http://www.ee.xyz.edu/index.html 转移到了一个新的地址,则响应报文的状态行和一个首部行就是下面的形式:

6. HTTP 请求报文举例

下图所示为 Wireshark 捕获的一个 HTTP 请求报文:

根据帧的结构定义,在上图的以太网数据帧中,

  • 第 1 ~ 6 个字节为目的 MAC 地址(默认网关地址),即 00-0f-e2-3f-27-3f ;
  • 第 7 ~ 12 个字节为本机 MAC 地址,即 00-27-13-67-73-8d ;
  • 第 13 ~ 14 个字节 08-00 为类型字段,表示上层使用的是 IP 数据报协议;
  • 第 15 ~ 34 个字节(共 20B)为 IP 数据报的首部,其中第 27 ~ 30 个字节为源 IP 地址,即 db-df-d2-70 ,转换成十进制为219.223.210.112 ,第 31 ~ 34个字节为目的 IP 地址,即 71-69-4e-0a ,转换成十进制为 113.105.78.10 ;
  • 第 35 ~ 54 个字节(共 20B)为 TCP 报文段的首部。
  • 从第 55 个字节开始才是 TCP数据部分(即阴影部分),即从应用层传递下来的数据(本例中即请求报文),GET 对应请求行的方法,/face/20.gif 对应请求行的 URL ,HTTP/1.1 对应请求行的版本,左边数字是对应字符的 ASCII 码,如 ‘G’ = 0x47 、‘E’ = 0x45 、‘T’ = 0x54 等。

三、常见应用层协议小结

常见应用层协议小结如下图所示:

【思考】:如何理解客户进程端口号与服务器进程端口号?

【答】:通常我们所说的熟知端口号是指应用层协议在服务器端的默认端口号,而客户端进程的端口号是由客户端进程任意指定的(临时的)。当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口号,同时还要告诉服务器进程自己的临时端口号。接着,服务器进程就用自己的熟知端口号与客户进程所提供的端口号建立连接。

三、例题

① 从协议分析的角度,WWW 服务的第一步操作是浏览器对服务器的( C )。
A. 请求地址解析
B. 传输连接建立
C. 请求域名解析
D. 会话连接建立
【浏览器必须首先向 DNS 请求域名解析,获得服务器的 IP 地址后,才能请求建立 TCP 连接。】

② 从某个已知的 URL 获得一个万维网文档时,若该万维网服务器的 IP 地址开始时并不知道,则需要用到的应用层协议有(① C ),需要用到的传输层协议有(② C )。
① A. FTP 、HTTP
B. DNS 、FTP
C. DNS 、HTTP
D. TELNET 、HTTP
② A. UDP
B. TCP
C. UDP 、TCP
D. TCP 、IP
【先要用 DNS 进行域名解析,然后使用 HTTP 进行用户和服务器之间的交互。】

③ 万维网上的每个页面都有一个唯一的地址,这些地址统称( C )。
A. IP 地址
B. 域名地址
C. 统一资源定位符
D. WWW 地址
【统一资源定位符负责标识万维网上的各种文档,并使每个文档在整个万维网的范围内具有唯一的标识符 URL 。】

④ 使用鼠标单击一个万维网文档时,若该文档除有文本外,还有三幅 gif 图像,则在 HTTP/1.0 中需要建立( A )次 TCP 连接。
A. 4
B. 3
C. 2
D. 1
【HTTP 在传输层用的是 TCP 。HTTP1.0 只支持非持续连接,所以每请求一个对象需要建立一次 TCP 连接,传输 1 个基本 html 对象和 3 个 gif 对象,共需建立 4 次 TCP 连接。】

⑤ 仅需 Web 服务器对 HTTP 报文进行响应,但不需要返回请求对象时,HTTP 请求报文应该使用的方法是( D )。
A. GET
B. PUT
C. POST
D. HEAD
【使用 HEAD 方法时服务器可对 HTTP 报文进行响应,但不会返回请求对象,其作用主要是调试。】

⑥ 假设主机浏览器使用 HTTP/1.1 协议以持续的非流水线方式工作,向 Web 服务器请求包含有 3 个 JPEG 小图像的 demo.htm 页面,一次请求 - 响应时间为 RTT ,则从发出第一个 Web 请求开始到收到全部内容为止,经过 RTT 的数量为( B )。
A. 3
B. 4
C. 5
D. 6
【从发出第一个 Web 请求开始,所以此时 TCP 连接已经建立。当采用持续的非流水线方式工作时,服务器发送响应后仍在一段时间内保持这条连接,客户收到前一个请求的响应后才能发出下一个请求,因此请求 html 页面和 3 个小图像共需要 4 个 RTT 。】

⑦ 假设主机 H 通过 HTTP/1.1 请求浏览某个 Web 服务器 S 上的 Web 页 rfc.html ,rfc.html 引用了同目录下的 3 个 JPEG 小图像(假设只有在收到 rfc.html 后才能发送对其引用图像的请求)一次请求响应的时间为 RTT ,忽略其他各种时延,不考虑拥塞控制和流量控制,则从发出 HTTP 请求报文开始到收到全部内容为止,所耗费的时间是( A )。
A. 2 RTT
B. 2.5 RTT
C. 4 RTT
D. 4.5 RTT
【从发出 HTTP 请求报文开始,所以此时 TCP 连接已经建立。HTTP/1.1 默认使用持久连接。第 1 个 RTT 请求并收到 html 页面,收到 html 页面后才能发送对其引用图像的请求,所以第2个RTT请求并收到 3 个 JPEG 图像,合计耗费 2 个 RTT 。】

⑧ 下列关于 Cookie 的说法中,错误的是( A )。
A. Cookie 存储在服务器端
B. Cookie 是服务器产生的
C. Cookie 会威胁客户的隐私
D. Cookie的作用是跟踪用户的访问和状态
【Cookie 是一个存储在用户主机中的文本文件。】

⑨ 以下关于非持续连接 HTTP 特点的描述中,错误的是( D )。
A. HTTP 支持非持续连接与持续连接
B. HTTP/1.0 使用非持续连接,而 HTTP/1.1 的默认方式为持续连接
C. 非持续连接中对每次请求 / 响应都要建立一次 TCP 连接
D. 非持续连接中读取一个包含 100 个图片对象的 Web 页面,需要打开和关闭 100 次 TCP 连接
【非持续连接对每次请求 / 响应都建立一次 TCP 连接。在浏览器请求一个包含 100 个图片对象的 Web 页面时,服务器需要传输 1 个基本 HTML 文件和 100 个图片对象,因此一共是 101 个对象,需要打开和关闭 TCP 连接 101 次。】

⑩ 假定一个 NAT 路由器的公网地址为 205.56.79.35 ,并且有如下表项:


它收到一个源 IP 地址为 192.168.32.56 、源端口为 80 的分组,其动作是( C )。
A. 转换地址,将源 IP 变为 205.56.79.35 ,端口变为 2056 ,然后发送到公网
B. 添加一个新的条目,转换 IP 地址及端口然后发送到公网
C. 不转发,丢弃该分组
D. 直接将分组转发到公网

(11) 【2014统考真题】使用浏览器访问某大学的 Web 网站主页时,不可能使用到的协议是( D )。
A. PPP
B. ARP
C. UDP
D. SMTP
【SMTP 只有使用邮件客户端发送邮件,或邮件服务器向其他邮件服务器发送邮件时才会用到,单纯地访问 Web 网页不可能用到。】

(12) 【2015 统考真题】某浏览器发出的 HTTP 请求报文如下:


下列叙述中,错误的是( C )。
A. 该浏览器请求浏览 index.html
B. index.html 存放在 www.test.edu.cn 上
C. 该浏览器请求使用持续连接
D. 该浏览器曾经浏览过 www.test.edu.cn
【Connection:连接方式,Close 表示非持续连接方式,keep-alive 表示持续连接方式。】

(13) 【2022 统考真题】假设主机 H 通过 HTTP/1.1 请求浏览某 Web 服务器 S 上的 Web 页 news408.html ,news408.htmml 引用了同目录下的 1 幅图像,news408.html 文件大小为 1MSS(最大段长),图像文件大小为 3MSS ,H 访问 S 的往返时间 RTT = 10 ms ,忽略 HTTP 响应报文的首部开销和 TCP 段传输时延,若 H 已完成域名解析,则从 H 请求与 S 建立 TCP 连接时刻起,到接收到全部内容止,所需的时间至少是( B )。
A. 30ms
B. 40ms
C. 50ms
D. 60ms

【解析】:HTTP/1.1 默认使用持续连接,所有请求都是连续发送的。要求最少时间,理想的情况是:TCP 在第 3 次握手的报文段中捎带了 HTTP 请求,以及传输过程中的慢开始阶段不考虑拥塞。假设接收方有足够大的缓存空间,即发送窗口等同于拥塞窗口,共需要经过:

  • 第 1 个 RTT:进行 TCP 连接建立的前两次握手;
  • 第 2 个 RTT:主机 C 发送第 3 次握手报文并捎带了对 html 文件的 HTTP 请求,TCP 连接刚建立时服务器 S 的发送窗口 = 1MSS ,服务器 S 发送大小为 1MSS 的 html 文件;
  • 第 3 个 RTT:主机 C 发送对 html 文件的确认并捎带了对图形文件的 HTTP 请求,服务器 S 收到确认后发送窗口变为 2MSS ,然后服务器 S 发送大小为 2MSS 的图像文件;
  • 第 4 个 RTT:主机 C 向服务器 S 发送对收到的部分图像文件的确认,服务器 S 收到确认后发送窗口变为 4MSS ,然后服务器 S 发送剩下的 1MSS 图像文件。

完成传输,共需要 4 个 RTT ,即 40ms 。整个传输过程如下图所示:

【问题1】:在浏览器中输入 http://cskaoyan.com 并按回车,直到王道论坛的首页显示在其浏览器中,请问在此过程中,按照 TCP / IP 参考模型,从应用层到网络层都用到了哪些协议?

【答】:

  • 应用层:HTTP --> WWW 访问协议;DNS --> 域名解析服务。
  • 传输层:TCP --> HTTP 提供可靠的数据传输;UDP --> DNS 使用 UDP 传输。
  • 网络层:IP --> IP 包传输和路由选择;ICMP --> 提供网络传输中的差错检测;ARP --> 将本机的默认网关 IP 地址映射成物理 MAC 地址。

【问题2】:在如下条件下,计算使用非持续方式和持续方式请求一个 Web 页面所需的时间:

  • 测试的 RTT 的平均值为 150ms ,一个 gif 对象的平均发送时延为 35ms 。
  • 一个 Web 页面中有 10 幅 gif 图片,Web 页面的基本 HTML 文件、HTTP 请求报文 TCP 握手报文大小忽略不计。
  • TCP 三次握手的第三步中捎带一个 HTTP 请求。
  • 使用非流水线方式。

【答】:每次进行 TCP 三次握手时,前两次握手消耗一个 RTT = 150ms,第 3 次握手的报文段捎带客户对 html 文件的请求,因此请求和接收基本 html 文件耗时一个 RTT = 150ms(其大小忽略不计时,发送时延为 0ms 。)
I、在非持续连接下:第一次建立 TCP 连接并传送 html 文件所需的时间为 thtml = 150 + 150 = 300ms ;每次建立 TCP 连接并传送一个 gif 文件所需的时间为 tgif = 150 +150 + 35 = 335ms ;所以总时间 t = thtml + 10 × tgif = 300 + 10 × 335 = 3650ms 。
II、在持续连接下:只需建立一次 TCP 连接,然后传送 html 文件和 10 个 gif 文件,所以总时间 t = t建立TCP + thtml + 10 × tgif = 150 + 150 + 10 × (150 + 35) = 2150ms 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2163755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

echarts y轴滚动(react版本)

目录 效果图如下,代码见下方 代码可以直接复制,图片和css也要复制 tsx代码 css代码 代码里用到的图片,可以换成自己项目的图 效果图如下,代码见下方 代码可以直接复制,图片和css也要复制 tsx代码 import React,…

Leetcode 1396. 设计地铁系统

1.题目基本信息 1.1.题目描述 地铁系统跟踪不同车站之间的乘客出行时间,并使用这一数据来计算从一站到另一站的平均时间。 实现 UndergroundSystem 类: void checkIn(int id, string stationName, int t) 通行卡 ID 等于 id 的乘客,在时间…

自动化测试常用函数:元素定位、操作与窗口管理

目录 一、元素的定位 1. cssSelector 2. xpath 2.1 获取HTML页面所有的节点 2.2 获取HTML页面指定的节点 2.3 获取一个节点中的直接子节点 2.4 获取一个节点的父节点 2.5 实现节点属性的匹配 2.6 使用指定索引的方式获取对应的节点内容 二、操作测试对象 1. 点击/提交…

多个ECU测试方案-IP地址相同-DoIP刷新-环境测试耐久测试

情况1:只有一个ECU进行测试 - 接口模块只需要使用一个车载以太网转换器; 情况2:多ECU同时测试,但ECU IP地址不一样,上位机多个网口 - 上位机测试软件,需要通过PC的不同网卡,访问各个ECU&#…

基于 RealSense D435相机实现手部姿态检测

基于 RealSense D435i相机进行手部姿态检测,其中采用 Mediapipe 进行手部检测,以下是详细步骤: Mediapipe 是一个由 Google开发的开源框架,专门用于构建多媒体处理管道,特别是计算机视觉和机器学习任务。它提供了一系列…

第68期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

【YashanDB知识库】如何配置jdbc驱动使getDatabaseProductName()返回Oracle

本文转自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7352676.html?templateId1718516 问题现象 某些三方件,例如 工作流引擎activiti,暂未适配yashandb,使用中会出现如下异常: 问题的风险及影响 …

【YashanDB知识库】查询YashanDB表空间使用率

本文转自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7369203.html?templateId1718516 【问题分类】功能使用 【关键字】表空间,使用率 【问题描述】YashanDB使用过程中,如何查询表空间的使用率 【问题原因分析】需要查…

NTPD使用/etc/ntp.conf配置时钟同步详解

NTPD使用/etc/ntp.conf配置时钟同步详解 引言安装NTPD配置/etc/ntp.conf1. 权限控制(restrict)2. 指定上层NTP服务器(server)3. 本地时间服务器(可选)启动NTPD服务验证时间同步ntpd服务默认多长时间同步一次ntp.conf上如何配置同步的频率和间隔配置步骤注意事项结论引言 …

虚拟数据架构能否取代传统数据架构?

虚拟数据架构能否取代传统数据架构? 前言虚拟数据架构能否取代传统数据架构 前言 数据虚拟化能够将分散在不同地方的数据整合起来,形成一个统一的视图,让数据同学能够更轻松地访问和分析这些数据。就像是把一堆杂乱无章的拼图碎片拼成了一幅…

从前端到全栈,你只差这款神器!

作为一名前端开发者,你是否也遇到过这样的困扰:界面做好了,功能完成了一半,却因为没有后端支持而卡住了进度?想自己搭建服务器,发现耗时耗力,学习曲线陡峭,最后项目拖延、效率大打折…

瑞芯微RK3566鸿蒙开发板Android11修改第三方输入法为默认输入法

本文适用于触觉智能所有支持Android11系统的开发板修改第三方输入法为默认输入法。本次使用的是触觉智能的Purple Pi OH鸿蒙开源主板,搭载了瑞芯微RK3566芯片,类树莓派设计,是Laval官方社区主荐的一款鸿蒙开发主板。 一、安装输入法并查看输入…

mysql如何快速编写单表查询语句

目录 背景生成sql语句 背景 我们在编写查询语句的时候,都提倡需要用到哪些字段就查哪些字段,这样有两个好处:1、可以增加程序运行效率,2、可以避免无关字段被暴露。那我们一个字段一个字段写就比较烦,有没有方法快速生…

优化 Go 语言数据打包:性能基准测试与分析

场景:在局域网内,需要将多个机器网卡上抓到的数据包同步到一个机器上。 原有方案:tcpdump -w 写入文件,然后定时调用 rsync 进行同步。 改造方案:使用 Go 重写这个抓包逻辑及同步逻辑,直接将抓到的包通过网…

udig处理 shape地图中 数据显示

比如城市的名称的显示 udig新建project 新建Map 然后添加shape 修改 attribute 中文 为英文 没啥用,改不了 这里Label 勾选下,选择 市 拷贝XML 到geoserver style里面 参考 geoserver发布shp地图-CSDN博客

排序算法Java实现

文章目录 排序算法概述比较排序算法非比较排序算法稳定 vs 不稳定Java 中的排序 外部排序1) 冒泡排序2) 选择排序3) 堆排序4) 插入排序5) 希尔排序6) 归并排序递归实现时间复杂度非递归实现 7) 归并插入8) 快速排序随机基准点处理重复值 9) 计数排序10) 桶排序11) 基数排序 排序…

javaseday31多线程

什么是多线程 线程与进程 小结 并发和并行 并发 并行 小结 多线程的实现方式 方法一 public class Demo1 {public static void main(String[] args) {//使用多线程的第一种方法/*** 1、创建一个类继承Thread类* 2、并重写run方法* 3、创建子类对象,并启动线程*/M…

深度知识追踪(论文复现)

深度知识追踪(论文复现) 本文所涉及所有资源均在传知代码平台可获取 文章目录 深度知识追踪(论文复现)论文概述论文方法实验部分数据集实验步骤step1:安装环境依赖step2:下载数据集,将其变成one-hot编码step3:进行训练…

备战软考Day04-计算机网络

1、计算机网络的分类 2、七层网络体系结构 3、网络的设备与标准 4、TCP/IP协议族 TCP/IP作为Internet的核心协议,被广泛应用于局域网和广域网中,目前已成为事实上的国际标准 1、TCP/IP分层模型 TCP/IP协议是Internet的基础和核心,和OSI参考…

SqlSugar的where条件中使用可空类型报语法错误

SQLServer数据表中有两列可空列,均为数值类型,同时在数据库中录入测试数据,Age和Height列均部分有值。   使用SqlSugar的DbFirst功能生成数据库表类,其中Age、Height属性均为可空类型。   当Where函数中的检索条件较多时&a…