计算机网络笔记--应用层
Application Layer -- 应用层
网络应用程序
- 运行于端系统上
- 实现基于网络的通讯
- 网络核心设备(路由器、交换机)无需为其编写应用层软件
C/S结构
- server-服务器
- 固定的IP地址
- 通过数据中心创建强大的虚拟服务器
- client-客户端
- 与服务器通信
- 通常与服务器间歇性的相连
- 客户端IP地址可能是动态变化的
- 客户端之间不会直接互联
P2P结构
- Peers-对等方: 应用程序在间断连接的主机对之间使用直接通讯
- 自扩展性
- 去中心化 高度非集中式
- 挑战: 安全性、性能和可靠性
进程通讯
进程可以被认为是端系统主机上运行的一个程序。
- 同一主机中, 两个进程使用进程间通信(由OS管理)
- 不同主机上的进程, 使用消息交换机制(应用层协议)进行通信
对每对通信进程,常将这两个进程标识为客户与服务器。
客户端进程:
- 发起通信的进程
服务器进程:
- 开始时等待被联系的进程
Sockets--套接字
进程通过一个称为套接字(Sockets) 的软件接口向网络发送报文和从网络接收报文。
Address Processing--进程寻址
要接收报文,进程必须有一个唯一标识(ID):
- IP地址
主机设备拥有一个唯一的32位IP地址 - 端口号
ID包含IP地址和与进程相关联的端口号,例如:
HTTP服务:80;
邮件服务:25
可供应用层使用的运输服务
- 可靠性
确保应用程序一端发送的数据准确、完全地交付给应用程序另一端 - 吞吐量
发送进程能向接收进程交付比特的速率。具有吞吐量要求的应用程序被称为带宽敏感应用;反之为**弹性应用 - 实时性
- 安全性
TCP
- 面向连接
- 可靠传输
- 拥塞控制
- full-duplex(全双工)
两边收发可以同时进行
UDP
- 仅提供最小服务
SSL
- 提供加密的TCP连接
- 数据的完整性
- 端-点的安全认证
- 应用程序通过SSL类库调用TCP服务
应用层协议
URL: Uniform Resource Locater
HTTP:hypertext transfer protocol(超文本传输协议)
HTTP协议
C/S架构
- client: 浏览器,请求、接收,并展示web元素
- server: web服务器响应客户端请求并发送web元素
传输层使用TCP协议
为无状态协议
原因:复杂性
- 存储历史状态复杂
- C、S端可能不同步
HTTP连接
-
非持续的
一个对象放在一个连接中,多少个对象需要建立多少次TCP连接
- 响应时间
RTT(Round-Trip Time): 一个短分组从客户端到服务器后再返回客户端所花费的时间
- 一个RTT用于初始化TCP连接
- 另一个RTT用于HTTP请求和相应文件传输时间
- 总计两个RTT加上文件传输时间
- 响应时间
-
持续的
服务器发送响应后保持该TCP链接打开,后续请求、响应报文能通过同一连接传送
HTTP报文
- 请求报文
- 请求行
三个字段:- 方法字段
- URL字段
- HTTP版本字段
- 首部行
- Post方法会有一个实体体
- 请求行
- 回复报文
- 状态行
- 首部行
- 实体体
用户与服务器状态--Cookies
四部分组成:
- HTTP响应报文的Cookie首部行
- 下一次HTTP请求报文的首部行
- 位于Web站点的一个后端数据库
- 用户端系统中保留的一个cookie文件
Web缓存(cache)
Web缓存器也叫代理服务器,它是能够代表初始Web服务器来满足HTTP请求的网络实体。Web缓存器有自己的磁盘存储空间,在其中保存最近请求过对象的副本。
当浏览器正在请求对象hhttp://www.xxx.com/pic.jpg,将会发生如下情况:
- 浏览器创建一个到Web缓存器的TCP连接,并向Web缓存器中的对象发送一个HTTP请求
- Web缓存器检查本地是否存储了该对象的副本,有则向客户端用HTTP响应报文发送该副本
- 如果没有就打开一个与该对象初始服务器(www.xxx.com)的TCP连接,Web缓存器在该连接上发送一个该对象的HTTP请求。初始服务器收到请求后向Web缓存器发送HTTP响应
- Web缓存器收到响应后,在本地创建一份对象的副本并向客户端返回含有请求对象的HTTP响应
-
Web缓存器既是用户又是客户端
- 对于原始的客户端请求而言,代理服务器扮演服务器的角色
- 对于原始服务器而言,代理服务器则是客户端
-
部署Web缓存器的原因
- 大大减少对客户端请求的响应时间
- 大大减少一个机构的接入链路到因特网的通讯量
- Internet收缩:使得服务较匮乏的提供商可以更高效的发布信息
条件GET方法
高速缓存能减少用户感受到的响应时间,但存在有存放在储存其中的对象副本可能是陈旧的这样的问题。HTTP协议通过条件GET机制来解决这样的问题。
如果请求报文使用GET方法,且报文中包含一个"If-Modified-since:"首部行那么该请求报文就是一个条件GET请求报文。
- 代理服务器(客户端): 在http请求报文中声明所缓存拷贝的生成日期
If-modified-since: - 服务器: 如果客户端缓存的拷贝是最新的,则在响应报文中不发请求的对象:
HTTP/1.0 304 Not Modified
FTP协议
FTP:文件传输协议
- 实现文件到远程服务器的下载与上传
- 使用C/S模式
控制连接与数据连接相分离
- FTP客户端通过TCP协议连接FTP服务器的21号端口
- 客户端认证基于控制连接
- 客户端浏览远程服务器目录、发送控制命令等也基于控制连接
- 服务器收到文件传输命令后打开另一个到客户端的TCP数据连接,文件传输结束后关闭该连接;当有其他文件传输时服务器均会开启一个TCP连接
- FTP的控制信息可以说是带外传输的
- FTP 维持状态(state): 当前目录、先前的认证信息等
FTP命令、响应
电子邮件
三要素:
- 用户代理
- 也称为邮件阅读器,写作、编辑、阅读邮件报文
- 发送、接收的邮件报文存储在服务器上
- 邮件服务器
- 邮箱(mailbox): 存放收到的用户邮件
- 报文队列message queue: 包含了要发送的邮件报文
- SMTP协议: 用于邮件服务器之间发送邮件
- 客户端:将邮件发送到邮件服务器
- 服务器:接收和转发邮件
- SMTP(简单邮件传输协议)
SMTP协议
- 使用 tcp 可靠的传送邮件报文, 端口25
- 直接传输: 从发件服务器直接到接受服务器
- 传输的三个阶段:
- 握手
- 报文传输
- 传输结束
- 命令/响应交互:
- 命令: ASCII文本
- 响应: 状态码和短语
- 邮件报文必须使用7-bit ASCII表示
SMTP与HTTP的比较
- HTTP是一个拉协议,在Web服务器上装载信息,用户使用HTTP从该服务器上拉取这些信息,TCP连接是由想接受文件的机器发起的;SMTP基本上是一个推协议,TCP连接由想发送无文件的机器发起
- SMTP要求每个报文采用7-bits ASCII码格式,HTTP数据则不受这种限制
- HTTP把每个对象封装到其独自的的响应报文中,SMTP则把所有对象封装到同一个报文中
邮件报文格式
- 首部行
- From
- To
- Subject
- 报文体
报文体与首部行之间夹一行空白行
邮件访问协议
- POP3
POP3是一个极为简单的邮件访问协议。用户代理打开了一个到邮件服务器端口110上的TCP连接后POP3开始按照三个阶段进行工作:- 特许阶段 用户代理发送明文形式的用户名和口令以鉴别用户
- 事务处理阶段 用户代理取回报文或者还可以对报文做删除标记、取消报文删除标记获取邮件的统计信息
- 更新阶段 出现在客户发出quit命令后,目的是结束POP3对话。这时,该邮件服务器中被标记为删除的报文被删除
- IMAP
- 将所有报文保留在文件服务器上
- 允许用户以目录形式组织文件会话过程中保持用户状态
DNS(domain name system)域名系统
DNS的服务
DNS是:
- 一个由分层的DNS服务器实现的分布式数据库
- 一个可使主机可以查询分布式数据库的应用层协议。DNS协议运行在UDP之上,使用53号端口
DNS协议通常是被其他协议使用的,将用户提供的主机名解析为IP地址。
除此之外DNS还提供了一些重要的服务:
- 主机别名
有着复杂主机名的主机可以有一个或多个别名,这种情况下原有的复杂主机名也被称为规范主机名,主机别名更容易记忆。应用程序可以调用DNS来获得主机别名对应的主机名与IP地址。 - 邮件服务器别名
电子邮件应用程序可以调用DNS对提供的主机名别名进行解析,得到规范主机名与IP地址。MX记录允许一个邮件服务器和Web服务器使用相同的主机名 - 负载分配
繁忙的站点被冗余分布在多台服务器上,每台服务器均运行在不同的端系统上,有着不同的IP地址。对于这些冗余Web服务器,DNS数据库中存储着IP地址集合分别与同一个规范地址名相关联。客户对映射到某地址集合的名发出一个DNS请求时,服务器用IP地址的整个集合进行响应,并不断循环改变集合中各IP地址的次序。
DNS工作机理
集中式DNS存在的问题
- 单点故障
- 通讯容量
- 远距离的集中式数据库
- 维护
-
分布式、层次式数据库
- 根DNS服务器
400多个遍及全球,由不同的组织管理。根名字服务器提供TDL服务器的IP地址 - 顶级域服务器
每个顶级域(com, org, edu等)和国家顶级域(cn, fr, uk等)都有TLD服务器,提供了权威DNS服务器的IP地址 - 权威DNS服务器
因特网上具有公共可访问主机必须提供公共可访问的DNS记录,将其主机名字映射为IP地址
此外还存在一类特殊的DNS服务器,称为本地DNS服务器
每个ISP都有一台本地DNS服务器(或称默认名字服务器),当查询DNS时,请求首先被发送到本地DNS服务器
- 迭代查询
- 递归查询
- 根DNS服务器
-
DNS缓存
一个请求链中,当某DNS服务器接收到一个DNS回答,它能将映射缓存在本地存储其中。由于主机名与IP地址的映射并不是永久的,DNS服务器一段时间后将丢弃缓存信息。
DNS记录与报文
- DNS记录
共同实现DNS分布式数据库的DNS服务器存储了资源记录(Resource Record, RR),RR提供了主机名到IP地址的映射
RR包含了:
{Name, Value, Type, TTL}
TTL是该记录的生存时间,决定了资源记录应当从缓存中删除的时间。此外,Name和Value的值取决于Type- Type=A
Name:主机名
Value:主机名对应的IP地址
e.g:(relay1.bar.foo.com, 145.37.93.126, A) - Type=NS
Name:个域
Value:一个知道如何获取该域中主机IP的权威DNS服务器的主机名
e.g:(foo.com, dns.foo.com,NS) - Type=CNAME
Name:主机名
Value:主机名对应的规范主机名
e.g:(foo.com, relay1.bar.foo.com, CNAME) - Type=MX
Name:主机名
Value:个别名为Name的邮件服务器的规范主机名
e.g:(foo.com, mail.bar.foo.com, MX)
- Type=A
- DNS报文
- 前12个字节为首部区域
- 标识符(identification) 16bit,用于查询,相关应答报文有相同标识符
- 标志(flags)
- 查询 或 应答
- 希望递归
- 可以递归
- 授权应答
- 之后还有4个有关数量的字段,指出首部行后4类数据的数量
- 问题区域 名字字段、类型字段
- 回答区域 包含了对最初请求的名字的资源记录
- 权威区域 其他权威服务器的记录
- 附加区域 其他有价值的记录
- 前12个字节为首部区域
- DNS数据库中插入记录
- 需要注册networkuptopia.com域名
- 提供权威域名服务器的域名和IP地址
- 在.com域服务器上新增两个RRs
- 创建权威DNS服务器,增加type A记录和type MX 记录
- 需要注册networkuptopia.com域名
P2P
P2P体系结构:
- 没有始终运行着的服务器
- 任意对等方之间直接通信
- 对等方之间间歇性互联,IP地址可能发生改变
P2P体系结构的扩展性
- P2P最小分发时间
- C/S最小分发时间
BitTorrent
BitTorrnet是一种用于文件分发的流行P2P协议。参与一个特定文件分发的对等方的集合被称为一个洪流(torrent) ,在一个洪流中对等方彼此下载等长度的文件块(chunk) ,典型的块长度为256kb。
- 当一个对等方首次加入一个洪流时,它没有块
- 随着时间的流逝对等方会积累越来越多的块
- 一个对等方下载块时也为其他对等方上载多个块
- 对等方获得整个文件后,他可以离开洪流,也可以留在洪流中并继续为其他对等方上传块
- 对等方可以在任何时刻加入洪流并重新加入,不必等一个块全部下载完成
每个洪流拥有一个基础节点,称为追踪器(tracker) 。当一个对等方加入洪流时,它向追踪器注册自己并周期性通知追踪器它仍在洪流中