计算机网络—自顶向下方法 应用层学习笔记
应用层
网络应用程序的体系结构
客户-服务器体系结构
- 由一个总是打开的主机称为服务器,其服务的众多主机称为客户
- 服务器有一个固定、周知的IP地址
P2P体系结构
- P2P体系结构没有固定的服务器,所有主机都是同等的,被称为对等方
- 应用程序在间断的主机之间直接通信
- 各主机节点的IP地址可以不固定
- P2P体系结构高度非集中,具有自扩展性
进程通信
网络通信的最终主体是进程
客户和服务器进程
-
进程总是成对通信(包括自成对)
-
在一对进程的通信过程中,发起通信的进程被称为客户,而等待联系的进程被称为服务器
-
一个进程可以既是服务器,同时也是客户
套接字
套接字是计算机是一台主机中应用层和传输层之间的接口
HTTP协议
HTTP超文本传输协议,是Web的应用层协议,是Web的核心
HTTP由两个程序实现,一个客户程序和一个服务器程序
Web概念
- Web页面(Web page),也即Web文档,由一或多个对象组成。多数Web页面由一个HEML基本文件和几个引用的对象组成
- 对象本质上就是一个文件,由一个URL地址寻址
- Web基于客户-服务器体系结构
HTTP概况
- HTTP的支撑运输协议是TCP
- HTTP是一个无状态协议,不保存有关客户的任何信息
- HTTP默认使用80端口
- HTTP默认使用带流水线的持续性连接
非持续性和持续性连接
- 非持续性连接中每一个请求/响应都经一个单独的TCP连接发送
- 持续性连接中所有请求/连接都经由同一个TCP连接发送
- 不带流水线的持续性连接:新的请求必须在前一个请求的回答到来后才能发送
- 带流水线的持续性连接:新的请求不必等待前一个请求的回答到来,而是时间合适就发送
- HTTP默认使用带流水线的持续性连接
HTTP报文
HTTP请求报文
例:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accep-language: fr
HTTP请求报文的第一行叫请求行,本例中为:
GET /somedir/page.html HTTP/1.1
请行分为三个字段:方法字段,URL字段,HTTP版本字段
格式为:方法字段+URL字段+HTTP版本字段
- 方法字段根据请求报文目的不同而不同
- GET:请求对象,响应并返回对象
- POST:请求对象,其内容依赖于用户提供的值
- HEAD:请求对象,响应但不返回对象
- PUT:允许用户上传文件到Web服务器上的指定路径
- DELETE:允许用户或应用程序删除Web服务器上的对象
- OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送“ * ”的请求来测试服务器的功能性。
- TRACE:回显服务器收到的请求,主要用于测试或诊断。
- URL字段指明操作对象的相对位置
- HTTP版本字段表示该报文所使用的HTTP版本
其后继字段被称为首部行,本例中为:
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
- Host:对象所在主机
- Connection:管理持续性连接,close表示关闭连接,Keep-Alive表示保持连接
- User-agent:浏览器(用户代理)类型
- Accept-language:该首部行是一个可选首部行,HTTP请求报文还有其他可选首部行
报文格式
sp:空格 cr:缓存 lf:换行
GET方法中实体体为空
POST方法中用户提供的值被放置在实体体中
HTTP响应报文
例:
HTTP/1.1 200 ok
Date: Tue, 18 Aug 2015 15:44:14 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tur, 18 Aug 2015 15:11:03 GMT
Content-Length:6821
Contet-Type: text/html
(data data data ......)
HTTP响应报文分为三个部分:
初始状态行:
HTTP/1.1 200 OK
其格式为:HTTP版本+状态码+解释短语
六个首部行:
Connection: close
Date: Tue, 18 Aug 2015 15:44:14 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tur, 18 Aug 2015 15:11:03 GMT
Content-Length: 6821
Contet-Type: text/html
- Connection:管理持续性连接,close表示关闭连接,Keep-Alive表示保持连接
- Date:服务器产生并发送响应报文的日期和时间
- Server:服务器类型
- Last-Modified:对象创建或最后修改的日期和时间
- Content-Length:被发送对象的字节数
- Content-Type:实体体中对象的类型
报文格式
sp:空格 cr:缓存 lf:换行
COOKIE
cookie允许站点对用户进行跟踪
- HTTP请求报文和响应报文中各有一个cookie首部行
- 用户端系统中有一个cookie文件,由用户的浏览器进行管理
- Web站点有一个后端数据库,用于存储管理cookie表
- cookie由服务器分配设置
Web缓存
Web缓存器(代理服务器),有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本
Web缓存的基本原理
-
可配置用户浏览器,使得用户的所有HTTP请求首先指向Web缓存器
-
浏览器首先创建一个到Web缓存器的TCP连接,并向Web缓存器发送HTTP请求
-
Web缓存器进行检查是否拥有请求对象副本:
-
Web缓存器有请求对象副本:直接使用HTTP响应报文向客户返回对象
-
Web缓存器没有请求对象副本:Web缓存器将创建与该对象初始服务器的TCP连接,并向初始服务器请求对象。
收到初始服务器返回的对象后,在本地存储空间存储一份副本,并使用HTTP响应报文向客户返回对象
-
Web缓存的优点
- 大大减少对客户请求的响应时间
- 大大减少一个机构的接入链路到因特网的通信量
条件GET方法
证实Web缓存器上的对象副本是最新的
如果请求HTTP报文使用GET方法且包括一个If-Modified-Since首部行,则该HTTP请求报文是一个条件GET请求报文
Web缓存器通过向对象的初始服务器发送相应的条件GET请求报文来保证对象副本是最新的
例:Web缓存器向初始服务器发送条件GET请求报文
GET /somedir/page.html HTTP/1.1
Host: www.exotiquecuisine.com
If-Modified-Since: Wed, 9 Sep 2015 09:23:24
该条件GET请求报文指示,仅当请求对象在指示日期(即If-Modified-Since的日期)后被修改过,才发送该对象。
注意,即使对象未被修改,初始服务器也要显式的发送HTTP响应报文(不包含对象),指出原副本可继续使用
- 对象在指示日期后被修改:
HTTP/1.1 200 ok
Date: Mon, 18 Sep 2015 15:44:14
Server: Apache/2.2.3 (CentOS)
Last-Modified: Mon, 18 Sep 2015 15:11:03 GMT
Content-Length:6821
Contet-Type: text/html
(data data data ......)
- 对象在指示日期后未被修改:
HTTP/1.1 304 Not Modified
Date: Mon, 18 Sep 2015 15:44:14
Server: Apache/2.2.3 (CentOS)
(empty entity body) <—— 注意此处实体体为空
SMTP协议
因特网与电子邮件
因特网电子邮件系统有3个主要组成部分:用户代理,邮件服务器,简单邮件传输协议(SMTP)
邮件报文格式
From: YeHai@foxmail.com
TO: YuanShan@foxmail.com
Subject: This is an E-mail
(message message message......)
- From首部行和To首部行是必须的
- Subject首部行是可选的,当然还有其他可选首部行
- 首部行之后紧接一个空白行
- 报文体必须为ASCII码形式
SMTP概述
-
SMTP的支撑传输协议是TCP
-
SMTP使用持续性连接
-
SMTP默认端口为25
-
SMTP要求每个报文(包括报文体),采用7比特ASCII码形式
-
SMTP将所有报文对象放在一个报文中
-
SMTP可以将报文从用户代理推入邮件服务器或在邮件服务器之间中继报文,
但用户代理无法通过SMTP从邮件服务器获得报文
SMTP命令
邮件访问协议
SMTP是一个推协议,收信者的用户代理无法通过SMTP获得报文,该问题通过多种邮件访问协议解决
POP3
- POP3传输支撑协议为TCP
- POP3使用端口110
- POP3的工作分为3个阶段:
- 特许阶段:用户代理以明文发送用户名和口令用于鉴别用户
- 事务处理阶段:用户代理取回报文、对报文做删除标记、取消报文删除标记、获取邮件统计信息
- 更新阶段:用户发送quit命令之后,结束POP3会话,邮件服务器删除被做删除标记的报文
pop3命令:
- 特许阶段:两个命令以明文发送,用于用户鉴别
- user
- pass
- 事务处理阶段:
- list:列举邮件服务器储存的所有发送给接收方的报文及报文长度
- retr:获取报文
- dele:对报文做删除标记
- quit:用户退出,POP3会话结束
- 更新阶段:此阶段由邮件服务器完成,无指令交换
IMAP
- IMAP的支撑传输协议是TCP
- IMAP使用143端口
- 用户不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。
基于Web的电子邮件
用户使用浏览器进行邮件交换,此时浏览器就是用户代理
使用浏览器收发电子邮件时,浏览器与邮件服务器之间使用HTTP进行报文交换,但是邮件服务器之间仍使用SMTP进行通信
DNS:因特网目录服务
DNS概述
-
DNS是:
-
一个由分层的DNS服务器实现的分布式数据库
-
一个使得主机能够查询分布式数据库的应用层协议
-
-
DNS的传输支撑协议是UDP
-
DNS使用53号端口
-
DNS可以提供:
- 规范主机名,主机别名,IP地址之间的相互查找
- 邮件服务器别名与邮件服务器的规范主机名、IP地址之间的查找
- 冗余服务器之间的负载分配
DNS服务器的结构
分布式,层次式数据库
DNS服务器的层次结构有三层:根DNS服务器,顶级域(TLD)DNS服务器,权威DNS服务器
-
根DNS服务器:提供TLD服务器的IP地址
-
顶级域DNS服务器:对每个顶级域(如com、org、net、edu、gov等)和所有国家顶级域(如uk、fr、jp、cn)都有TLD服务器。
TLD服务器提供权威服务器的IP地址
-
权威DNS服务器:在因特网上具有公共可访问主机(如Web服务器和邮件服务 器)的每个组织机构必须提供公共可访问的DNS记
录,这些记录将这些主机的名字映射为IP地址。一个组织机构自己的权威DNS服务器或其选择的服务器提供商的
权威DNS服务器收藏了这些DNS记录。
-
本地DNS服务器:每个ISP都有一台本地DNS服务器,本地DNS服务器不属于DNS服务器的层次结构
主机发出DNS请求时,该请求首先被发送至本地DNS服务器,由本地DNS服务器转
发到DNS层次结构中
-
迭代查询和递归查询:
DNS缓存
同Web缓存服务器类似,本地DNS服务器可以将DNS映射缓存在其本地服务器中
-
当用户的DNS请求可以在本地DNS服务器中满足时,本地DNS服务器将会直接回复用户所需信息
-
不满足时,本地DNS将会向DNS层次架构查询:
- 如果本地DNS缓存了对应TLD服务的IP地址,那么根DNS服务器将会被绕过
- 同理,如果本地DNS缓存了对应权威DNS服务器的IP地址,那么根DNS服务器和TLD服务器将会被绕过
-
缓存中的映射不是永久的,一段时间后会被丢弃
DNS资源记录
DNS服务器中存储者DNS资源记录(RR),RR提供了主机名到IP地址的映射
DNS资源记录是一个4元组:
(Name,Value,Type,TTL)
TTL是记录的生存时间,决定该资源记录应当从缓存中删除的时间
Name和Value的值取决于Type
- Type=A: Name为主机名,Value为对应IP地址
- Type=NS: Name为域名,Value为存储该域内主机IP地址的权威DNS服务器主机名
- Type=CNAME: Name为主机别名,Value为对应规范主机名
- Type=MX: Name为邮箱服务器别名,Value为对应规范主机名
DNS报文
DNS只有查询和回答两种报文,并且两种报文格式一致
-
前12字节为首部:
-
标识符:16比特,用于标识该查询
-
标志:内含若干标志
-
“查询/回答”标志位:1比特,0表示该报文为查询报文,1表示该报文为回答报文
-
“权威的”标志位:1比特,当某DNS服务器是所请求名字的权威DNS服务器时,该标志位被置在回答报文中。
-
“希望递归”标志位:1比特,客户(主机或者DNS服务器)在该DNS服务器没有某记录时希望它执行递归查询
-
“递归可用”标志位:1比特,该DNS服务器支持递归查询,在它的回答报文中会对该标志位置位。
-
-
回答RR数,权威RR数,附加RR数:这三个名词是自解释的
-
-
问题区域:包含着正在进行的查询信息。
-
名字字段,包含正在被查询的主机名字
-
类型字段,指出有关该名字的正被询问的问题类型
-
-
回答区域:包含了对最初请求的名字的资源记录。在回答报文的回答区域中可以包含多条RR,因此一个主机名能够有多个IP地址。
-
权威区域:包含了其他权威服务器的记录
-
附加区域:包含了其他有帮助的记录