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


    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():关闭服务器。
  • 相关阅读:
    php 获取完整url地址
    Apache Module mod_reqtimeout
    How To Mitigate Slow HTTP DoS Attacks in Apache HTTP Server
    IE8/IE9/IE10打开网页后,自动设置浏览器模式为“IE8/IE9/IE10兼容性视图”
    关于Slow HTTP Denial of Service Attack slowhttptest的几种慢攻击DOS原理
    apache slowloris mod_antiloris for Apache httpd 2.2 / 2.4
    jquery.min.js v1.10.3版本autocomplete方法会在text前添加搜索出多少项的文本信息 要去除
    Tiling_easy version
    "巴卡斯杯" 中国大学生程序设计竞赛
    人见人爱A+B
  • 原文地址:https://www.cnblogs.com/cielosun/p/6960999.html
Copyright © 2020-2023  润新知