计算机网络笔记--应用层


Application Layer -- 应用层

网络应用程序

  1. 运行于端系统上
  2. 实现基于网络的通讯
  • 网络核心设备(路由器、交换机)无需为其编写应用层软件

C/S结构

  • server-服务器
    • 固定的IP地址
    • 通过数据中心创建强大的虚拟服务器
  • client-客户端
    • 与服务器通信
    • 通常与服务器间歇性的相连
    • 客户端IP地址可能是动态变化的
    • 客户端之间不会直接互联

P2P结构

  • Peers-对等方: 应用程序在间断连接的主机对之间使用直接通讯
  • 自扩展性
  • 去中心化 高度非集中式
  • 挑战: 安全性、性能和可靠性

进程通讯

进程可以被认为是端系统主机上运行的一个程序。

  • 同一主机中, 两个进程使用进程间通信(由OS管理)
  • 不同主机上的进程, 使用消息交换机制(应用层协议)进行通信

对每对通信进程,常将这两个进程标识为客户服务器

客户端进程:

  • 发起通信的进程

服务器进程:

  • 开始时等待被联系的进程

Sockets--套接字

进程通过一个称为套接字(Sockets) 的软件接口向网络发送报文和从网络接收报文。

Address Processing--进程寻址

要接收报文,进程必须有一个唯一标识(ID):

  1. IP地址
    主机设备拥有一个唯一的32位IP地址
  2. 端口号
    ID包含IP地址和与进程相关联的端口号,例如:
    HTTP服务:80;
    邮件服务:25

可供应用层使用的运输服务

  1. 可靠性
    确保应用程序一端发送的数据准确、完全地交付给应用程序另一端
  2. 吞吐量
    发送进程能向接收进程交付比特的速率。具有吞吐量要求的应用程序被称为带宽敏感应用;反之为**弹性应用
  3. 实时性
  4. 安全性


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连接

  1. 非持续的

    一个对象放在一个连接中,多少个对象需要建立多少次TCP连接

    • 响应时间

      RTT(Round-Trip Time): 一个短分组从客户端到服务器后再返回客户端所花费的时间

      • 一个RTT用于初始化TCP连接
      • 另一个RTT用于HTTP请求和相应文件传输时间
      • 总计两个RTT加上文件传输时间
  2. 持续的

    服务器发送响应后保持该TCP链接打开,后续请求、响应报文能通过同一连接传送

HTTP报文

  • 请求报文
    • 请求行
      三个字段:
      • 方法字段
      • URL字段
      • HTTP版本字段
    • 首部行
    • Post方法会有一个实体体
  • 回复报文
    • 状态行
    • 首部行
    • 实体体

用户与服务器状态--Cookies

四部分组成:

  1. HTTP响应报文的Cookie首部行
  2. 下一次HTTP请求报文的首部行
  3. 位于Web站点的一个后端数据库
  4. 用户端系统中保留的一个cookie文件

Web缓存(cache)

Web缓存器也叫代理服务器,它是能够代表初始Web服务器来满足HTTP请求的网络实体。Web缓存器有自己的磁盘存储空间,在其中保存最近请求过对象的副本。

当浏览器正在请求对象hhttp://www.xxx.com/pic.jpg,将会发生如下情况:

  1. 浏览器创建一个到Web缓存器的TCP连接,并向Web缓存器中的对象发送一个HTTP请求
  2. Web缓存器检查本地是否存储了该对象的副本,有则向客户端用HTTP响应报文发送该副本
  3. 如果没有就打开一个与该对象初始服务器(www.xxx.com)的TCP连接,Web缓存器在该连接上发送一个该对象的HTTP请求。初始服务器收到请求后向Web缓存器发送HTTP响应
  4. Web缓存器收到响应后,在本地创建一份对象的副本并向客户端返回含有请求对象的HTTP响应
  • Web缓存器既是用户又是客户端

    • 对于原始的客户端请求而言,代理服务器扮演服务器的角色
    • 对于原始服务器而言,代理服务器则是客户端
  • 部署Web缓存器的原因

    1. 大大减少对客户端请求的响应时间
    2. 大大减少一个机构的接入链路到因特网的通讯量
    3. 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命令、响应


电子邮件

三要素:

  1. 用户代理
    • 也称为邮件阅读器,写作、编辑、阅读邮件报文
    • 发送、接收的邮件报文存储在服务器上
  2. 邮件服务器
    • 邮箱(mailbox): 存放收到的用户邮件
    • 报文队列message queue: 包含了要发送的邮件报文
    • SMTP协议: 用于邮件服务器之间发送邮件
      • 客户端:将邮件发送到邮件服务器
      • 服务器:接收和转发邮件
  3. SMTP(简单邮件传输协议)

SMTP协议

  • 使用 tcp 可靠的传送邮件报文, 端口25
  • 直接传输: 从发件服务器直接到接受服务器
  • 传输的三个阶段:
    1. 握手
    2. 报文传输
    3. 传输结束
  • 命令/响应交互:
    • 命令: ASCII文本
    • 响应: 状态码和短语
  • 邮件报文必须使用7-bit ASCII表示

SMTP与HTTP的比较

  1. HTTP是一个拉协议,在Web服务器上装载信息,用户使用HTTP从该服务器上拉取这些信息,TCP连接是由想接受文件的机器发起的;SMTP基本上是一个推协议,TCP连接由想发送无文件的机器发起
  2. SMTP要求每个报文采用7-bits ASCII码格式,HTTP数据则不受这种限制
  3. HTTP把每个对象封装到其独自的的响应报文中,SMTP则把所有对象封装到同一个报文中

邮件报文格式

  • 首部行
    • From
    • To
    • Subject
  • 报文体

报文体与首部行之间夹一行空白行

邮件访问协议

  1. POP3
    POP3是一个极为简单的邮件访问协议。用户代理打开了一个到邮件服务器端口110上的TCP连接后POP3开始按照三个阶段进行工作:
    1. 特许阶段 用户代理发送明文形式的用户名和口令以鉴别用户
    2. 事务处理阶段 用户代理取回报文或者还可以对报文做删除标记、取消报文删除标记获取邮件的统计信息
    3. 更新阶段 出现在客户发出quit命令后,目的是结束POP3对话。这时,该邮件服务器中被标记为删除的报文被删除
  2. IMAP
    • 将所有报文保留在文件服务器上
    • 允许用户以目录形式组织文件会话过程中保持用户状态

DNS(domain name system)域名系统

DNS的服务

DNS是:

  1. 一个由分层的DNS服务器实现的分布式数据库
  2. 一个可使主机可以查询分布式数据库的应用层协议。DNS协议运行在UDP之上,使用53号端口

DNS协议通常是被其他协议使用的,将用户提供的主机名解析为IP地址。

除此之外DNS还提供了一些重要的服务:

  • 主机别名
    有着复杂主机名的主机可以有一个或多个别名,这种情况下原有的复杂主机名也被称为规范主机名,主机别名更容易记忆。应用程序可以调用DNS来获得主机别名对应的主机名与IP地址。
  • 邮件服务器别名
    电子邮件应用程序可以调用DNS对提供的主机名别名进行解析,得到规范主机名与IP地址。MX记录允许一个邮件服务器和Web服务器使用相同的主机名
  • 负载分配
    繁忙的站点被冗余分布在多台服务器上,每台服务器均运行在不同的端系统上,有着不同的IP地址。对于这些冗余Web服务器,DNS数据库中存储着IP地址集合分别与同一个规范地址名相关联。客户对映射到某地址集合的名发出一个DNS请求时,服务器用IP地址的整个集合进行响应,并不断循环改变集合中各IP地址的次序。

DNS工作机理

集中式DNS存在的问题

  • 单点故障
  • 通讯容量
  • 远距离的集中式数据库
  • 维护
  1. 分布式、层次式数据库

    • 根DNS服务器
      400多个遍及全球,由不同的组织管理。根名字服务器提供TDL服务器的IP地址
    • 顶级域服务器
      每个顶级域(com, org, edu等)和国家顶级域(cn, fr, uk等)都有TLD服务器,提供了权威DNS服务器的IP地址
    • 权威DNS服务器
      因特网上具有公共可访问主机必须提供公共可访问的DNS记录,将其主机名字映射为IP地址

    此外还存在一类特殊的DNS服务器,称为本地DNS服务器

    每个ISP都有一台本地DNS服务器(或称默认名字服务器),当查询DNS时,请求首先被发送到本地DNS服务器

    • 迭代查询
    • 递归查询
  2. DNS缓存
    一个请求链中,当某DNS服务器接收到一个DNS回答,它能将映射缓存在本地存储其中。由于主机名与IP地址的映射并不是永久的,DNS服务器一段时间后将丢弃缓存信息。

DNS记录与报文

  1. DNS记录
    共同实现DNS分布式数据库的DNS服务器存储了资源记录(Resource Record, RR),RR提供了主机名到IP地址的映射
    RR包含了:
    {Name, Value, Type, TTL}
    TTL是该记录的生存时间,决定了资源记录应当从缓存中删除的时间。此外,NameValue的值取决于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)
  2. DNS报文
    • 前12个字节为首部区域
      • 标识符(identification) 16bit,用于查询,相关应答报文有相同标识符
      • 标志(flags)
        • 查询 或 应答
        • 希望递归
        • 可以递归
        • 授权应答
      • 之后还有4个有关数量的字段,指出首部行后4类数据的数量
    • 问题区域 名字字段、类型字段
    • 回答区域 包含了对最初请求的名字的资源记录
    • 权威区域 其他权威服务器的记录
    • 附加区域 其他有价值的记录
  3. DNS数据库中插入记录
    • 需要注册networkuptopia.com域名
      • 提供权威域名服务器的域名和IP地址
      • 在.com域服务器上新增两个RRs
    • 创建权威DNS服务器,增加type A记录和type MX 记录

P2P

P2P体系结构:

  • 没有始终运行着的服务器
  • 任意对等方之间直接通信
  • 对等方之间间歇性互联,IP地址可能发生改变

P2P体系结构的扩展性

  • P2P最小分发时间
  • C/S最小分发时间

BitTorrent

BitTorrnet是一种用于文件分发的流行P2P协议。参与一个特定文件分发的对等方的集合被称为一个洪流(torrent) ,在一个洪流中对等方彼此下载等长度的文件块(chunk) ,典型的块长度为256kb。

  • 当一个对等方首次加入一个洪流时,它没有块
  • 随着时间的流逝对等方会积累越来越多的块
  • 一个对等方下载块时也为其他对等方上载多个块
  • 对等方获得整个文件后,他可以离开洪流,也可以留在洪流中并继续为其他对等方上传块
  • 对等方可以在任何时刻加入洪流并重新加入,不必等一个块全部下载完成

每个洪流拥有一个基础节点,称为追踪器(tracker) 。当一个对等方加入洪流时,它向追踪器注册自己并周期性通知追踪器它仍在洪流中