第2章思维导图文字版

应用层

2.1应用层协议原理

2.1.1网络应用程序体系结构

客户机/服务器体系结构
  • 有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户机的主机请求
  • 客户机主机既可能有时打开,也可能总是打开
  • 客户机相互之间不直接通信
  • 服务器具有固定的、周知的地址,称为IP地址
  • 著名的应用程序:Web、FTP、Telnet和电子邮件
  • 通常一台服务器主机跟不上其所有客户机请求,所以常用主机集群(有时称为服务器场)创建强大的虚拟服务器
对等体系结构(P2P)
  • 对总是打开的基础设施服务器有最小的(或者没有)依赖
  • 任意间断的主机对(称为对等方)直接相互通信
  • 对等方并不为服务器提供商所有,而是为用户控制的桌面机和膝上机所有目前,大多数流行的流量密集型应用程序都是P2P体系结构的
  • eg.文件分发、文件搜索/共享、因特网电话和IPTV
  • 最突出的特性之一——自拓展性
  • 不需要庞大的服务器基础设施和服务器带宽
  • 由于具有高度分布和开放的性质,因此要格外关注系统的安全
  • 某些应用具有混合的体系结构,由客户机/服务器和P2P元素结合而成
  • 服务器场用于跟踪用户的IP地址,但用户到用户的报文在用户主机之间直接发送(无需通过中间服务器)

2.1.2进程通信

  • 进行通信的实际上是进程而不是程序
  • 不同端系统上的进程通过跨越计算机网络交换报文而通信
  • 发送进程创建并向网络中发送报文,接收进程接收这些报文并可能负责回送这些报文
客户机和服务器进程
  • 网络应用程序是由成对的进程组成,这些进程用过网络相互发送报文
  • 在给定的一堆进程之间的通信会话中,发起通信的进程被标示为客户机,在会话开始时等待联系的进程是服务器
  • 在P2P文件共享等应用程序中,一个进程可以既是客户机又是服务器
进程与计算机网络之间的接口
  • 多数应用程序由通信进程对组成,每对中的两个进程互相发送报文
  • 从一个进程向另一个进程发送报文必须通过下面的网络
  • 进程通过一个称为套接字(socket)的软件接口在网络上发送和接收报文
  • 套接字是同一台主机内应用层与运输层之间的借口
  • 由于该套接字是在网络上建立网络应用程序的可编程借口,因此也将套接字称为应用程序和网络之间的应用程序编程借口(API)
  • 应用程序开发者可以控制套接字在应用层端的所有东西,但是对该套接字的运输层端几乎没有控制
  • 应用程序开发者对于运输层的控制仅限于
    • 选择运输层协议
    • 也许能设定几个运输层参数(最大缓存、最大报文段长度等)

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

可靠数据传输
  • 当一个运输层协议提供可靠数据传输这种服务时,发送进程只要讲其数据传递到套接字,就可以相信该数据将能无差错地到达接收进程
  • 当一个运输层协议不提供可靠数据传输时,由发送进程发送的数据可能不能到达接收进程
  • 实时音频/视频或存储的音频/视频,它们能承受一定程度的数据丢失
吞吐量
  • 两个进程在一条网络路径上进行通信会话时,可用吞吐量就是发送进程能够向接收进程交付比特的速率
  • 因为其他会话将共享沿着该网络路径上的带宽,并且这些其他会话将会到达和离开,所以可用吞吐量将随时间波动
  • 具有吞吐量要求的应用程序称为带宽敏感的应用,现在许多多媒体应用都是带宽敏感的
  • 弹性应用能够根据需要充分利用可供使用的吞吐量(eg.电子邮件、文件传输以及Web传输)
定时
  • eg1.对交互式实时应用程序非常实用
  • eg2.为了有效性而对数据交付有严格的时间限制
  • 在非实时的应用中,较低的时延总要比较高的时延好,但对端到端的时延没有严格的约束
安全性
  • 提供一种或多种安全性服务
  • eg1.加密和解密进程传输的所有数据
  • eg2.数据完整性和端点鉴别

2.1.4因特网提供的运输服务

TCP服务
    • 面向连接服务
    • 可靠数据传输服务
  • 具有拥塞控制机制
  • SSL
    • 全称:安全套接字层(Secure Socket Layer)
    • 是TCP的应用层加强版本
    • 提供了TCP能做的一切还提供了关键的进程到进程的安全性服务,包括加密、数据完整性和端点鉴别
UDP服务
  • 不提供不必要服务的轻量级运输层协议,仅提供最小服务
  • 是无连接的,因此在两个进程通信前没有握手过程
  • 提供的是不可靠数据传输服务
  • 接收进程收到的报文也可能是乱序到达的
  • 没有拥塞控制机制
因特网运输层协议所不提供的服务
  • 吞吐量
  • 时间敏感
进程寻址
  • IP地址是用来唯一标识主机的32比特数
  • 除了知道报文去往的目的主机的IP地址外,发送程序也必须识别运行在主机上的接收进程

2.1.5应用层协议

  • 定义了
    • 交换报文的类型,如请求报文和响应报文
    • 各种报文类型的语法,如报文中的各个字段及其详细描述
    • 字段的语义,即包含在字段中的信息的含义
    • 进程何时、如何发送报文及对报文进行响应的规则
  • 应用层协议只是网络应用的一部分

2.1.6本书涉及的网络应用

  • Web、文件传输、电子邮件、目录服务和P2P

2.2Web应用和HTTP协议

2.2.1HTTP概况

  • Web的应用层协议是超文本传输协议(HyperText Transfer Protocol,HTTP),是Web的核心
  • HTTP协议由两部分实现
    • 一个客户机程序
    • 一个服务器程序
    • 它们运行在不同的端系统,通过交换HTTP报文进行会话
  • HTTP定义了报文的格式以及客户机和服务器是如何进行报文交换的
  • 术语
    • web页面(web page,也叫文档)是由对象组成的
    • 对象(object)简单来说就是文件,如HTML文件,JPEG图形文件等,这些文件可通过一个URL地址寻址
    • 多数web页面含有一个基本HTML文件以及几个引用对象
    • 每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名
    • web浏览器实现了HTTP的客户机端,所以在web浏览器中,“浏览器”和“客户机”这两个术语交替使用
    • web服务器用于存储web对象,每个对象由URL寻址
    • web服务器实现了HTTP的服务器端
  • HTTP定义了web客户机是如何向web服务器请求web页面,以及服务器如何将web页面传送给客户机的
  • HTTP使用TCP(而不是UDP)作为它是支撑运输层协议(因为TCP能提供可靠数据传输服务)
  • HTTP服务器并不保存关于客户机的任何信息,所以我们说HTTP是一个无状态协议
  • web使用了客户机/服务器应用程序体结构

2.2.2非持久连接和持久连接

非持久连接
  • 每个TCP连接在服务器返回对象后关闭
  • 每个TCP连接只传输一个请求报文和一个响应报文
  • 浏览器在浏览器和web服务器之间发起一个TCP连接,这涉及一个“三次握手”过程
  • 缺点
    • 对于每个连接,在客户机和服务器都要分配TCP的缓冲区和变量,这给服务器带来了严重的负担
    • 每一个对象的传输时延为两个RTT(往返时间)
持久连接
  • 服务器在发送响应后保持该TCP打开
  • 在相同的客户机与服务器之间的后续请求和响应报文可通过相同的连接进行传送
  • 对这些对象的请求可一个接一个的发出,而不必等待未决请求的回答(流水线)
  • 如果一个连接经过一定时间间隔(一个可配置的超时间隔)仍未被使用,HTTP服务器就关闭该连接

2.2.3HTTP报文格式

HTTP请求报文
  • 第一行叫做请求行
  • 请求行有三3个字段
    • 方法字段(可取值 GET、POST、HEAD、PUT和DELETE)
    • URL字段
    • HTTP协议版本字段
  • 后继的行叫做首部行
HTTP响应报文
  • 初始状态行
  • 首部行
  • 实体主体

2.2.4用户与服务器的交互:cookie

  • 组成部分
    • 在HTTP响应报文中有一个cookie首部行
    • 在HTTP请求报文中有一个cookie首部行
    • 在用户端系统中保留有一个cookie文件,由用户的浏览器管理
    • 在web站点有一个后端数据库
  • cookie可以用于标识用户
  • cookie可以再无状态的HTTP上建立一个用户会话层
  • 使用有很大争议,它们被看做是对用户隐私的一种侵害

2.2.5Web缓存

  • 也叫代理服务器,它是能够代表初始web服务器来满足HTTP请求的网络实体
  • web缓存器有自己的磁盘存储空间,并在该存储空间中保存最近请求过的对象的拷贝
  • 一旦配置了浏览器,每个浏览器对一个对象的请求首先被定向到web缓存器
  • web缓存器既是服务器又是客户机
  • web缓存器由ISP购买并安装
  • 在因特网上部署web缓存器的原因
    • 大大减少对客户机请求的响应时间
    • 大大减少一个机构内部网与因特网接入链路上的通信量,该机构不必急于增加带宽,因此会降低费用
    • 能从整体上大大降低因特网上的web流量,从而改善了所有应用的性能

2.2.6 条件GET方法

  • HTTP协议有一种机制,允许缓存器证实它的对象是最新的,这种机制就是条件GET方法
  • HTTP请求报文如何是一个条件GET请求报文?
    • 请求报文使用GET方法
    • 请求报文中包含一个 If-modified-since: 首部行

2.3文件传输协议:FTP

  • 典型的FTP会话
  • HTTP和FTP的共同点:都运行在TCP上
  • HTTP和FTP的区别
    • FTP使用两个并行的TCP连接来传输文件:控制连接数据连接
    • 控制连接贯穿了整个用户会话期间
    • 但是针对会话中每一次文件传输都需要建立一个新的数据连接(即数据连接是非持久的)
  • FTP服务器必须在整个会话期间保留用户的状态信息
  • 在用户发出的命令和FTP协议在控制连接上发送的命令之间,一般都有一一对应关系
  • 每个命令都对应着一个从服务器返回到客户机的回答

2.4因特网中的电子邮件

组成部分

  • 用户代理
  • 邮件服务器
  • 简单邮件传输协议

2.4.1SMTP

  • 是因特网电子邮件中主要的应用层协议
  • 是因特网电子邮件应用的核心
  • 使用TCP可靠数据传输服务
  • 有两个部分
    • 运行在发送方邮件服务器的客户机端
    • 运行在接收方邮件服务器的服务器端
  • 每个邮件服务器上既有SMTP的客户机端运行也有SMTP的服务器端运行
  • SMTP一般不使用中间邮件服务器发送邮件

2.4.2与HTTP的对比

共同点
  • 都用于从一台主机向另一台主机传送文件
  • 持久HTTP和SMTP都使用持久连接
区别
    • HTTP主要是一个拉协议,即用户使用HTTP从该服务器拉去协议,特别是,TCP连接是由想获取文件的机器发起的
    • SMTP是一个推协议,即发送邮件服务器把文件推向接收邮件服务器,特别是,这个TCP连接是由要发送文件的机器发起的
    • SMTP要求每个报文都使用7位ASCII码格式
    • HTTP数据则没有限制
  • 如何处理一个既包含文本又包含图形的文档
    • HTTP把每个对象封装到它自己的HTTP响应报文中
    • 因特网电子邮件则把所有报文对象放到一个报文中
    • HTTP使用带内控制
    • FTP使用带外控制

2.4.3邮件报文格式和MIME

2.4.4邮件访问协议

  • 第三版的邮局协议(POP3)
  • 因特网邮件访问协议(IMAP)
  • 基于web的电子邮件

2.5DNS:因特网的目录服务

2.5.1DNS提供的服务

  • DNS协议是应用层协议
  • 使用客户机/服务器模式在通信的端系统之间运行
  • 在通信的端系统之间通过下面的端到端运输层协议来传送DNS报文
  • DNS为因特网上的用户应用程序以及其他软件提供一种核心功能,即将主机名转换为它们的IP地址
  • 域名解析系统(DNS)
    • 由分层的DNS服务器实现的分布式数据库
    • 允许主机查询分布式数据库的应用层协议
  • 通常由其他应用层协议(包括HTTP、SMTP和FTP)所使用,用于将用户提供的主机名解析为IP地址
  • 提供其他服务
    • 主机别名
    • 邮件服务器别名
    • 负载分配

2.5.2DNS工作机理概述

过程
  • 应用程序将调用DNS的客户机端,并指明需要被转换的主机名
  • 用户主机上的DNS收到后,向网络中发送一个DNS查询报文
  • 经过若干毫秒到若干秒的时延后,用户主机上的DNS接收到一个提供所希望映射的DNS回答报文
  • 这个查询结果则被传递到调用DNS的应用程序
集中式设计
  • 概念:客户直接将所有查询直接发往单一的DNS服务器,同时该DNS服务器直接堆所有的查询客户机做出响应
  • 问题
    • 单点故障:如果该DNS服务器崩溃,整个因特网随之瘫痪
    • 通信容量:单个DNS服务器不得不处理所有的DNS查询
    • 远距离的集中式数据库:远距离的传输可能经过低速和拥塞的链路,这将导致严重的时延
    • 维护:单个DNS服务器将不得不为所有的因特网主机保留记录
分布式设计
  • DNS是一个在因特网上实现分布式数据库的精彩范例
  • 使用大量的DNS服务器,以层次方式组织,并且分步在全世界范围内
  • 没有一台DNS服务器具有因特网上所有主机的映射,因为所有主机的映射分布在所有的DNS服务器上
  • 分类
    • 根DNS服务器:目前有13个,大部分位于北美洲
    • 顶级域DNS服务器:负责顶级域名(如com、org、net和gov)和所有国家的顶级域名(如uk、fr、ca和jp)
    • 权威DNS服务器:存放公共可访问的主机名字映射成的IP地址的DNS记录
  • 本地DNS服务器
    • 并不属于DNS服务器的层次结构,但是对其很重要
    • 每个ISP都有一台本地DNS服务器
    • 当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用
DNS缓存
  • 改善时延性
  • 减少在因特网上到处传输的DNS报文数量
  • 每当本地DNS服务器从某个DNS服务器接收到一个回答,它就缓存包含在该回答中的任何信息
  • 如果在DNS服务器中缓存了一个主机名/IP地址对,另一个对相同主机名查询到达该DNS服务器时,该服务器能够提供所要求的的IP地址,即使它不是该主机名的权威服务器
  • 由于主机和主机名与IP地址间的映射绝不是永久的,所以DNS服务器在一段时间后(通常是两天)将丢弃缓存信息

2.5.3DNS记录和报文

  • 实现DNS分布式数据库的所有DNS服务器共同存储着资源记录(Resource Record,RR)
  • RR提供了主机名到IP地址的映射
  • 每个DNS回答报文包含了一条或多条资源记录
  • DNS报文
    • 前12个字节是首部区域
    • 问题区域包含着正在进行的查询信息
    • 在来自DNS服务器的回答报文中,回答区域包含了对最初请求的名字的资源记录
    • 权威区域包含了其他权威DNS服务器的记录
    • 附加区域包含了其他一些有帮助的记录
  • 在DNS数据库中插入记录
  • DNS攻击
    • DDoS带宽洪泛攻击
      • 向每个DNS根服务器连续不断地发送大量分组,从而使大多数合法DNS请求得不到回答
      • 更有效的DDoS攻击是向顶级域名服务器发送大量的DNS请求
    • 中间人攻击:攻击者截获来自主机的请求并返回伪造的回答
    • 充分利用DNS基础设施来对目标主机发起DDoS攻击

2.6P2P应用

  • 使用P2P体系结构,对总是打开的基础设施服务器有最小的(或者没有)依赖
  • 任意间断连接的主机对(称为对等方)直接通信

2.6.1P2P文件分发

1.P2P体系结构的扩展性
  • 对于客户机/服务器体系结构,随着对等方数量的增加,分发时间呈线性增长并且没有界
  • 对于P2P体系结构,最小分发时间不仅总小于客户机/服务器体系结构的分发时间,而且对任何多的对等方其总是小于1小时
2.BitTorrent
  • 是一种用于文件分发的流行P2P协议
  • 有趣的机制
    • 解决了免费搭车
    • 残局模型
    • 反怠慢

2.6.2在P2P区域中搜索信息

  • P2P应用程序中一个重要的部分是索引,即信息到主机位置的映射
  • 方法
    • 集中式索引
      • 服务器从每个活动的对等方那里收集这些信息,从而建立一个集中式动态索引,将每个文件拷贝映射到一个IP地址集合
      • 具有集中式索引的P2P文件共享系统实际上是一种P2P和客户机/服务器混合体系结构(文件分发的P2P的,但搜索是客户机/服务器的)
      • 许多即时讯息应用程序都采用了这样的混合体结构
      • 缺点
        • 单点故障:如果索引服务器崩溃,则整个P2P应用也就随之崩溃
        • 性能瓶颈和基础设施费用
        • 侵犯版权:P2P文件
    • 查询洪泛
      • 是完全分布式的索引方法
      • 索引全面地分布在对等方的区域中,每个对等方索引可供共享的文件而不索引其他文件
      • 只要某对等方发起查询,该查询就会传播到整个覆盖网络中的每个其他对等方,从而正在连接对等方的支撑网络会产生大量流量
    • 层次覆盖
      • 结合了集中式索引和洪泛查询
      • 不适用专用的服务器(或服务场)来跟踪和索引文件
      • 并非所有对等方都是平等的
      • 特别是,与因特网高速连接并具有高可用性的对等方被指派为超级对等方,它承担更多的任务
      • 如果某对等方不是超级对等方,则它就是一个普通对等方,并被指派为一个超级对等方的子对等方
      • 一个新的对等方与超级对等方之一创建一个TCP连接
      • 新对等方将它可供共享的所有文件高速超级对等方
      • 超级对等方就维护着一个索引,该索引包括了其子对等方正在共享的所有文件的标识符、有关文件的元数据和保持这些文件的子对等方的IP地址
      • 超级对等方之间相互建立TCP连接,从而形成一个覆盖网络
DHT
  • 全称:分布式散列表(Distributed Hash Table)
  • 产生一个全分布式索引,该索引将文件标识符映射到文件位置
  • 允许用户确定文件的所有位置,而不会产生过量的搜索流量

2.6.3案例学习:Skype的P2P因特网电话

  • 展示了以不用于内容分发和文件共享的方式应用P2P
  • 专用协议,分组传输都是加密的

2.7TCP套接字编程

2.7.1TCP套接字编程

  • 客户机负责发起与服务器的联系
  • 客户机在程序中生成套接字,客户机的TCP与服务器的TCP发起三次握手并建立一个TCP连接
  • 这个三次握手过程发生在运输层,对于客户机程序和服务器程序是完全透明的

2.7.2一个Java客户机/服务器应用程序例子

2.8UDP套接字编程

  • 允许运行在不同机器上的两个(或多个)进程彼此通信
  • 和TCP的区别
    • UDP是一种无连接服务,即在两个进程间没有创建管道时所需的初始握手阶段
    • 一个进程需要向另一个进程发送一批字节时,发送进程需要为这批字节附上目的进程地址
    • 目的地址由二元组组成:目的主机的IP地址和目的进程的端口号
    • 将带有IP目的地址和端口号的一批字节数据称为分组
    • UDP提供一种不可靠的面向报文的服务模型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值