计算机网络网络学习笔记 第二章应用层
应用层
应用层协议原理
可用供应用程序使用的运输服务
英特网应用层提供不止一种运输协议,在选择可用协议时最好根据自身特色进行选择。大致可以将传输服务分为一下四类。
可靠数据传输
像电子邮件、文件共享、金融应用,必须要保证数据的完整性。如果一个传输服务提供了这样的保证数据交付的服务,就可以认为提供了可靠数据传输(reliable data transfer)。
吞吐量
可用吞吐量是指发送进程向接收进程传递比特的速率。例如:因特网电话应用程序对语音以 32kbps 的速率进行编码, 那么它也必须以这个速率向网络发送数据,并向接收应用程序交付数据。 具有吞吐量要求的应用程序被称为 **带宽敏感的应用 (bandwidth- sensitive applicaLion) 。
而弹性应用( elastic applicaLion) **能够根据 情况或多或少地利用可供使用的吞吐量。 电子邮件、文件传输以及 Web 传送都属于弹性应用。
定时
运输层协议也能提供定时保证,也就是所谓的低延迟。这点在网络游戏,视频电话中都比较重要。
安全性
最后,运输协议能够为应用程序提供一种或多种安全性服务。如数据在发送方加密,在接收方解密。
因特网提供的传输服务
因特网(更一般的是 TCP/IP 网络)为应用程序 提供两个运输层协议,即UDP和TCP。
TCP服务
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)**方法。该机制生效需要两个条件:
- 必须使用GET方法
- 请求报文包含一个‘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协议上且都是文件传输协议,但有两点不同:
- FTP是有状态的协议
FTP服务器必须在整个会话期间保存用户的状态,同别是FTP服务器需要把特定的用户账户与控制连接联系起来。随着用户在远程目录树上浏览徘徊,服务器必须跟踪用户在远程目录树上的当前位置。因需要对每一个会话进行跟踪,这也限制了FTP的最大访问连接数。
- 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编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销: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
- 项目2
- 项目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公式展示 是通过欧拉积分
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
-
注脚的解释 ↩︎