计算机网络网络学习笔记 第二章应用层

应用层

本章学习网络应用的的原理和实现相关方面知识。

应用层协议原理

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

英特网应用层提供不止一种运输协议,在选择可用协议时最好根据自身特色进行选择。大致可以将传输服务分为一下四类。

可靠数据传输

像电子邮件、文件共享、金融应用,必须要保证数据的完整性。如果一个传输服务提供了这样的保证数据交付的服务,就可以认为提供了可靠数据传输(reliable data transfer)

吞吐量

可用吞吐量是指发送进程向接收进程传递比特的速率。例如:因特网电话应用程序对语音以 32kbps 的速率进行编码, 那么它也必须以这个速率向网络发送数据,并向接收应用程序交付数据。 具有吞吐量要求的应用程序被称为 **带宽敏感的应用 (bandwidth- sensitive applicaLion)
弹性应用( elastic applicaLion) **能够根据 情况或多或少地利用可供使用的吞吐量。 电子邮件、文件传输以及 Web 传送都属于弹性应用。

定时

运输层协议也能提供定时保证,也就是所谓的低延迟。这点在网络游戏,视频电话中都比较重要。

安全性

最后,运输协议能够为应用程序提供一种或多种安全性服务。如数据在发送方加密,在接收方解密。

因特网提供的传输服务

因特网(更一般的是 TCP/IP 网络)为应用程序 提供两个运输层协议,即UDP和TCP。

TCP服务

  1. 面向连接的服务。
  2. 可靠的数据传输服务。

UDP服务

UPD服务是无连接的,因此在传输前,并没有握手的过程,因此UDP并不能保证该送的报文抵达服务端。

Web与HTTP

HTTP概况

Web的应用层协议是超文本传输协议(HyperText Transfer Protocol)。HTTP 由两个程序实现:一个客户程序(如:浏览器)和一个服务器程序。 这两个程序运行在不同的端系统中,并通过报文传递数据。
HTML 基本文件通 过对象的 URL 地址引用页面中的其他对象。 每个 URL 地址由两部分组成 :fr放对象的服 务器主机名和对象的路径名 。如http://anborong.top/a.pdf,其中anborong.top是主机名,/a.pdf是路径名。
目前流行的HTTP客户程序有Chrome、Firefox、Inlernel Explorer等,而流行HTTP服务器有Apache、Nginx、 Microsoft Inlernel Information Server(IIS,微软互联网信息服务器)。
HTTP使用TCP作为它的支撑运输协议。
HTTP协议是无状态的协议。HTTP服务器并不会保存关于客户端的任何信息。

非持续连接和持续连接

每个请求/响应对是经一个单独的 TCP 连接发送,还是所有的请求及其响应经相同的 TCP 连接发送呢?采用前一种方法,该应用程序被称为使用非持续连接( non- persistent connection) ;采 用后一种方法,该应用程序被称为使用**持续连接( persistent connection) **。
HTTP既能够使用非持续连接,也能够使用持续连接。 尽管 HTTP 在其默认方式下使用持续连接, HTTP客户和服务器也能配置成使用非持续连接。

1. 使用非持续连接的HTTP请求

计算机网络网络学习笔记 第二章应用层
在非持续连接下,假设http://anborong.top/home/index.html 含有1个HTML文件,并且包含10个引用对象。 则HTTP请求流程如下:

  • HTTP 客户进程在端口号 80 发起一个到服务器anborong.top 的 TCP 连接,在客户和服务器上分别有一个套接字与该连接相关联。
  • HTTP 客户经它的套接字向该服务器发送一个HTTP请求报文。 该报文中包含请求对象的路径。
  • HTTP 服务器进程经它的套接字接收该请求报文,从其存储器 (RAM或磁盘)中检索到位于路径/home/index.html下的对象,并将其封装到回复报文中。
  • HTTP服务器通知TCP断开此TCP连接(实际是在客户端完全接收完后才会断开)。
  • HTTP 客户接收响应报文, TCP 连接关闭。 该报文指出封装的对象是一个 HTML 文 件,客户从响应报文中提取出该文件,检查该 HTML文件,得到对 10 个对象的引用。
  • 对于这10个对象,重复上述步骤。

上面的步骤举例说明了非持续连接的使用,其中每个 TCP 连接在服务器发送一个对象后 关闭, ~Il该连接并不为其他的对象而持续下来。 值得注意的是每个 TCP 连接只传输一个请求 报文和一个响应报文。 因此在本例中,当用户请求该 Web 页面时,要产生 11 个 TCP 连接。

2. 使用持续连接的HTTP请求

非连续持续HTTP有两个缺点,第一:每次请求都需要重新建立新的HTTP请求,这给 Web 服务器带来了严重的负担。第二:因为重新建立连接,就必须重新握手,因此每此请求均需要多花费一倍的时间。
在采用持续连接的情况下,服务器在发送响应后保持该 TCP 连接打开。通过在http报文头部信息Keep-Alive计算机网络网络学习笔记 第二章应用层

HTTP报文格式

HTTP请求报文

一个典型的HTTP请求报文如下所示:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr

Http请求的第一行称之为请求行(request line),其后继行称之为首部行(header line)
请求行由3部分组成,方法、URL、Http版本。在首部行中, ConnecLion: close告诉服务器不希望麻烦地使用持续连接,它要求服务器在发送完被请求的对象后就关闭这条连接。 User-agent: 首部行用来 指明用户代理,即向服务器发送请求的浏览器的类型。

计算机网络网络学习笔记 第二章应用层

Http响应报文

一个典型的HTTP响应报文如下所示:

HTTP/1. 1 200 OK /* 初始状态行*/
Connection: close /* 首部行开始 响应结束后关闭TCP连接*/
Date: Tue , 09 Aug 2011 15:44:04 GMT /* 响应时间*/
Server: Apache/2.2.3 (CentOS) /* 服务器版本*/
Last-Modified: Tue , 09 Aug 2011 15:11:03 GMT /* 上次修改时间*/
Content-Length: 6821 /* 被发送对象中的字节数。/
Content-Type: text/html /
首部行结束 被发送对象中的类型。*/

(data data data data data …) /* 实体体 */

响应报文有三个部分:一个初始状态行 (sLatus line) , 6 个 首部行 (header 1ine) ,然后是实体体 (enLity body) 。 实体体部分是报文的主要部分,即它包含了所请求的对象本身(表示为 dala dala data data… ) 。 状态行有 3 个字段:协议版本字段、状态码和相应状态信息。
下文给出一些常见的状态码:
200 OK: 请求成功
301 Moved Permanently:重定向
404 Not Found:未找到请求文档
500 Internal Server Error:服务器错误

Cookie

因为HTTP服务是无状态的,为了能更方便的识别用户,为此HTTP使用了Cookie,它允许站点对用户进行跟踪。如下图所示,整个Cookie技术包含四个组件。1. 在请求报文header内会有Cookie行。2. http响应报文header内会有Cookie行。3. 客户端保留一个Cookie文件,允许用户进行管理。4. 位于Web服务器后存在一台数据库。
计算机网络网络学习笔记 第二章应用层

Web缓存

使用Web缓存器可以大大减少请求的响应时间,同时使用Web缓存技术也会减少客户端之初始服务器之间的信息量,因此也会大量节约硬件成本。此外因为Web缓存能从整体上减少互联网的信息流量,因此也提高了所有应用性能。
而通过使用**内容分发网络(CDN),**CDN公司在英特网安装许多地理位置分散的缓存器,因而使大量流量本地化。

条件GET方法

尽管Web缓存可以大幅度提高HTTP请求的响应时间,但同时也带来了新的问题,我们无法确保请求到的内容是最新的。因此HTTP协议有一种机制,允许Web缓存器去验证它的对象是否是最新的,这种机制就是**条件GET(conditional GET)**方法。该机制生效需要两个条件:

  1. 必须使用GET方法
  2. 请求报文包含一个‘If-Modified -Since’的首部行

我们通过一组例子,了解条件GET方法如何工作。

  • 首先一个代理服务器,代表一个浏览器,向某个Web服务器发出请求,报文如下:

GET /home/a.gif HTTP/1.1
host: www.anborong.top

  • 其次Web服务器向代理服务器的请求报文做出响应,响应报文如下:

HTTP/ l. l 200 OK
Date: Sat, 8 Oct 2011 15:39:29
Server: Apache/1.3.0 (Unix)
Last-Modified: Wed , 7 Sep 2011 09:23:24
Content-Type: image/gif
(data data data data data …)

  • 该代理服务器将请求到的数据保存至本地,并同时向浏览器的请求做出响应,发送Web服务器发送的数据。
  • 假设一个星期后,某人再次请求代理服务器相同的资源。为了确保此时数据是最新的,代理服务器向Web服务器发出一个条件GET查询,仅指定在Wed , 7 Sep 2011 09:23:24后修改过,则发送最新对象,如果没有修改则会收到如下第五条报文, GET查询请求报文如下:

GET /home/a.gif HTTP/1.1
host: www.anborong.top
If-Modified-Since: Wed , 7 Sep 2011 09:23:24 /* 这里的日期为上次Web服务器的响应报文Last-Modified字段 */

  • 如果Web服务器并没有修改对象,则会发送如下响应报文:

HTTP/1.1 304 Not Modified /* 注意状态 */
Date: Sat, 15 Oct 2011 15:39:29
Server: Apache/l.3.0 (Unix)

(empty entity body) /* 节约带宽 并没有发送重复数据 */

文件传输协议FTP

FTP与HTTP相同都是运行在TCP协议上且都是文件传输协议,但有两点不同:

  1. FTP是有状态的协议

FTP服务器必须在整个会话期间保存用户的状态,同别是FTP服务器需要把特定的用户账户与控制连接联系起来。随着用户在远程目录树上浏览徘徊,服务器必须跟踪用户在远程目录树上的当前位置。因需要对每一个会话进行跟踪,这也限制了FTP的最大访问连接数。

  1. FTP的控制信息是带外传播

FTP使用了两个并行的TCP连接来传输文件,一个是控制连接 (control connection),一个是数据连接( data
connection)。控制连接用于在两主机之间传输控制信息,如用户标识、口令、改变远程目
录的命令以及“存放 (pull)”和“获取 (get)” 文件的命令。数据连接用于实际发送一个文件。因为FTP协议使用一个独立的控制连接,所以我们也称FTP的控制信息是带外
( out-of-band) 传送的。如你所知, HTTP协议是在传输文件的同一个TCP连接中发送请求和响应首部行的。因此,HTTP也可以说是带内 (in-band) 发送控制信息的。

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: 计算机网络网络学习笔记 第二章应用层

带尺寸的图片: 计算机网络网络学习笔记 第二章应用层

居中的图片: 计算机网络网络学习笔记 第二章应用层

居中并且带尺寸的图片: 计算机网络网络学习笔记 第二章应用层

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

Γ(z)=0tz1etdt . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0开始我的操作确认?结束yesno
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎