自顶向下方法学习笔记:应用层

1. 结构体系

1.1. CS结构

  • 单个数据
  • 数据中心

1.2. P2P

1.2.1. 特性

  • 自扩展性

1.2.2. 挑战

  • ISP友好(不对等网络)
  • 安全性
  • 激励用户

2. 进程间通信

2.1. message

2.2. socket

进程通过socket软件接口向网络发送message。socket被称为应用程序编程接口(API)。

2.3. 进程寻址

  • 主机地址(IP+端口号)
  • 主机中接收进程的标识符

2.4. 运输服务

  • 可靠数据传输
  • 吞吐量:具有吞吐量需求的应用称为带宽敏感的应用,反之为弹性应用
  • 定时:舍弃较长时延
  • 安全性:运输协议对发送的数据进行加密

2.5. 传输层相关协议

2.5.1. TCP和UDP

2.5.1.1. TCP

  • 面向连接,全双工
  • 可靠,无丢失和冗余
  • 无论TCP还是UDP都没有提供加密,因而产生了新的层次SSL(Secure Sockets Layer),用SSL加强TCP。

2.5.1.2. UDP

  • 不可靠传输
  • 无连接

2.6. 应用层协议

  • 交换的报文类型
  • 各种报文的语法
  • 字段的语义
  • 进程发送报文的方法,报文响应的规则

2.6.1. WEB和HTTP

HTTP是WEB协议的核心

  • 无状态

2.6.1.3. 非持续连接

每次请求前后创建/关闭TCP连接。是一种并行连接,可以提高效率。第一次握手请求发送一小段报文,服务器返回一个状态(HTTP响应头的第一行状态码),然后第三次握手时发送HTTP请求报文,收到后服务器开始返回资源,资源传输完成后,关闭TCP连接。非持续连接必须为每一个请求维护一个新的连接,在客户和服务器中都需要分配TCP缓冲区和保持TCP变量,增加了Web服务器的负担。

2.6.1.4. 持续连接

服务器在发送响应后保持TCP连接打开,相同客户端的后续请求能够通过相同的连接进行传送。如果一段时间一个连接没有被使用则自动关闭。HTTP默认使用带流水线的持续连接。

2.6.1.5. 结构

2.6.1.5.1. 请求报文
GET /someUri HTTP/1.1
Host:www.someHost.com
Connection:close
User-agent:Mozilla/5.0
Accept-language:zh

{
    "someParam":"someValue"
}
  • 请求行:请求方法,URI,HTTP版本。
  • 首部行:可以添加大量请求信息。如指明Host(这样URI可以是相对URI),指定是否持续连接,指明客户端,指明语言等。
  • 实体:与首部行以一个空行分割,使用GET方法时没有实体,使用POST方法时使用实体,GET变量加在URI中。

2.6.1.6. 响应报文

和请求报文类似,包括:

  • 状态行:HTTP版本,返回值,返回信息(200 OK,301 Moved Permanently等)
  • 首部行
  • 实体

在客户端记录用户的状态。

  • 响应报文中的cookie首部行。(如Cookie:JSESSIONID)
  • 用户系统中由浏览器管理的cookie文件。
  • 请求报文中的cookie首部行。
  • Web站点的后端数据库。(如Session)

2.6.1.8. web缓存

也叫代理服务器,可以使用户的所有访问先指向Web缓存器,若有资源,则直接获取,若无资源,由Web缓存器发起向目标的TCP连接,并在本地存储获取到的资源的副本,并向用户发送这个资源的副本。延伸:CDN(内容分发网络)

  • 目的:高效利用局域网。
  • 问题:数据同步问题。
2.6.1.8.1. 条件GET

HTTP针对Web缓存器数据同步问题的解决方案,即在用户访问时,Web缓存器发送一段没有实体的GET请求到远端服务器并在请求报文首部行中加入"If-Modified-Since:",其内容是上次从互联网中获取的响应报文首部行中"Last-Modified:"中的value。如果该值小于远端服务器的"Last-Modified"时间,则能获取一个304响应报文。

2.6.2. FTP

用户向远程主机访问,建立一个TCP连接并发送验证(口令/SSL),通过后,开启TCP连接。FTP有两个并行的TCP连接:

  • 控制连接:用户标识,口令,改变远程目录,存放,获取口令。
  • 数据连接:实际发送一个文件(随文件的发送打开连接关闭连接)。

2.6.3. SMTP

比HTTP历史悠久,SMTP一般不使用中间邮件服务器发送邮件,而是两个邮件服务器直接建立TCP连接。HTTP是一个拉协议,SMTP是一个推协议。SMTP要求报文使用7比特ASCⅡ编码,并把所有报文对象(图片等流媒体)放在一个报文中,而HTTP对于每个报文对象有单独的响应报文。

2.6.3.1. SMTP报文

From:xxx@xxx
To:yyy@yyy
Subject:(可选)标题行

ASCⅡ报文体

2.6.4. 邮件访问协议

SMTP是推协议,不能用于客户端访问邮件,此时需要新的协议。

  • POP3:极为简单,三阶段工作:特许,事务处理,更新
  • IMAP:将报文与文件夹联系,允许文件组命令
  • HTTP:略

2.6.5. DNS

主机名转为IP地址的服务。通常由其他应用协议所使用。

客户端->主机名->DNS服务器->ip地址->客户端->发起TCP连接。

2.6.5.1. DNS层次

  • 根DNS服务器
  • 顶级域DNS服务器
  • 权威DNS服务器
  • 本地DNS服务器

2.6.5.2. DNS缓存

各级DNS服务器在查询后存储查询到的信息。

2.6.5.3. DNS资源记录RR

(Name,Value,Type,TTL)

Type:A,NS,CNAME,MX

2.6.5.4. DNS报文

2.6.5.5. DNS插入数据

2.6.6. P2P

2.6.6.1. 文件分发

2.6.6.1.1. BitTorrent
  • 对等方
  • 洪流
  • P2P直播,下载

2.6.6.2. 分布式散列表

  • key:文件(副本)
  • value:对等方
2.6.6.2.1. 环形DHT

2.7. UDP/TCP套接字编程

2.7.1. UDP

2.7.1.3. DatagramSocket

  • DatagramSocket():用于客户端初始化。
  • DatagramSocket(int portNumber):用于服务端初始化。
  • send(DatagramPacket sendPacket):用于发送内容。
  • receive(DatagramPacket receivePacket):用于接收内容。

2.7.1.4. DatagramPacket

  • DatagramPacket(byte[] context,long length,InetAddress hostName,int portNumber):通常用于send。
  • DatagramPacket(byte[] context,long length):通常用于receive。

2.7.2. TCP

2.7.2.1. ServerSocket

  • ServerSocket(int portNumber):服务端初始化。
  • accept():获取和Server连接的下一个Socket对象。
  • close():关闭服务器。

2.7.2.2. Socket

  • Socket(String host,int post):新建一个连接向服务端的Socket。
  • getInputStream():获取Socket的输入流,用于读取。
  • getOutputStream():获取Socket的输出流,用于写入。
  • close():关闭服务器。
posted @ 2017-06-08 08:44  CieloSun  阅读(413)  评论(0编辑  收藏  举报