# 二。第二章:应用层

# 1. 应用层原理

# (1). 创建一个新的网络应用

  • 编程:
    • 在不同的端系统上运行
    • 通过网络基础设施提供的服务应用进程彼此通信
    • 如 Web:
      • Web 服务器软件与浏览器软件通信
  • 网络核心中没有应用层软件
    • 网络核心中没有应用层功能
    • 网络核心只有再端系统上存在,快速网络应用开发和部署

# (2). 网络应用的体系加购

  • 客户 — 服务器模式 (C/S:client/server)
    • image-20220329144808351
  • 对等模式 (P2P:Peer to Peer)
    • image-20220329145612589
  • 混合体:客户 — 服务器和对等体系结构
    • image-20220329145627990

# (3). 进程通信

image-20220329151200910

# (4). 分布式进程需要解决的问题

  • image-20220329152821549

  • 标识进程,需要定义两种信息:

    1. 主机的地址
      • 主机由其 IP 地址标识
    2. 再目的主机中指定接收进程的标识符
      • 用目的端口号来进行标识,特定的服务端拥有特定的端口号
  • image-20220330155321152

  • TCP 之上的套接字 (socket)
    image-20220330161252934

  • image-20220330162301890

  • UDP 之上的套接字 (socket)

    image-20220330162620053

  • 套接字
    image-20220330163759101

  • image-20220330164041356

  • 应用层协议
    image-20220330164225194

  • image-20220330164638424

  • Internet 传输层提供的服务

    • TCP 服务
      • 可靠的传输服务
      • 流量控制:发送方不会淹没接收方
      • 拥塞控制:当网络出现用塞时,能抑制发送方
      • 不能提供的服务:时间保证、最小吞吐保证和安全
      • 面向连接:要求再客户端进程和服务器进程之间建立连接
    • UDP 服务
      • 不可靠数据传输
      • 不能提供的服务:可靠、流量控制、拥塞控制、时间、带宽保证、建立连接
      • image-20220330165720561
  • image-20220330170336021

# 2. Web and HTTP

# (1). 术语

  • Web 页:由一些对象组成
  • 对象可以是 HTM 文件,JPEG 图像、Java 小程序、声音剪辑文件等
  • Web 也含有一个基本的 HTML 文件,该基本文件、又包含若干对象的引用 (链接)
  • 通过 URL 对每个对象进行引用
    • 访问协议,用户名,口令字,端口等
  • URL 格式:
    • image-20220330214913519

# (2). HTTP 概况

  • HTTP:超文本传输协议

  • Web 的应用层协议

  • 客户 / 服务器模式

    • 客户:请求、接收和显示 Web 对象的浏览器
    • 服务器:对请求进行响应,发送对象的 Web 服务器
  • HTTP 1.0:RFC 1945

  • HTTP 1.1:RFC 2068

  • image-20220330220029553

  • HTTP 使用在 TCP 上

image-20220330220339190

# (3). HTTP 链接

  • image-20220330220924628

  • 响应时间模型
    image-20220407193744947

  • image-20220407194224093

# (4).HTTP 报文格式

  • image-20220407194357632

  • image-20220407194652014

  • 提交表单输入

    1. POST 方式:

      • 网页通常包括表单输入
      • 包含实体主体 (entity body) 中的输入被提交到服务器
    2. URL 方式:

      • 方法:GET・
      • 输入通过请求行的 URL 字段上载
    3. 方法类型:

      image-20220407195838765

    • image-20220407200305547
      TCP 无边界,需要进程自己去区分前部 message 和后部 message。
    • HTTP 响应状态码:
      image-20220407201555007

# (5). 用户 — 服务器状态:Cookies

  • image-20220407215325951

  • image-20220407215851561

# (6).Web 缓存 (代理服务器)

    • 目标:不访问原时服务器,就满足客户的请求
    • 用户设置浏览器:通过缓存访问 Web
    • 浏览器将所有的 HTTP 请求发给缓存
      • 在缓存中的对象:缓存直接返回对象
      • 如对象不在缓存,缓存请求原始服务器,然后再将对象返回给客户端
    • image-20220407221951845
    • 缓存既是客户端又是服务端
    • 通常缓存是由 ISP 安装 (大学、公司、居民区 ISP)
    • Web 缓存的好处:
      • 降低客户端请求响应时间
      • 可以大大减少一个机构内部网络与 Internet 接入链路上的流量
      • 互联网大量采用缓存:额可以使较弱的 ICP 也能够有效提供内容
  • 非 Web 缓存:
    image-20220409114955328
  • Web 缓存:
    image-20220409120235938

# (7). 条件 GET 方法

  • image-20220409120801163

# 3. FTP:文件传输协议

  • 向远程主机上传输文件或从远程主机接收文件

  • 客户 / 服务器模式

    • 客户端:发起传输的一方
    • 服务器:远程主机
  • ftp:RFC 959

  • ftp 服务器:端口号为 21

  • image-20220409172523400

  • image-20220409172853927

  • image-20220409173600878

# 4. Email

  1. 3 个主要组成部分:

    • 用户代理

      • 又名 “邮件阅读器”
      • 撰写、编辑和阅读邮件
      • 如 outlook、Foxmail
      • 输出和输入邮件保存在服务器上
    • 邮件服务器

      • 邮箱中管理和维护发送给用户的邮件
      • 输出报文队列保持待发送邮件报文
      • 邮件服务器之间的 SMTP 协议:发送 email 报文
        • 客户:发送方邮件服务器
        • 服务器:接收端邮件服务器
    • 简单邮件传输协议:SMTP

      • image-20220410143108077

      • image-20220410143758639

  2. image-20220410133046345

  3. image-20220410145028517

  4. POP3 协议
    image-20220410144433916

  5. image-20220410144621340

# 5. DNS

# (1). DNS 必要性

  • image-20220410150903728
  • DNS 完成域名到 IP 地址的转化

# (2). DNS 总体思路和目标

  1. DNS 的主要思路
    • 分层的、基于域的命名方式,用于解决设备命名问题
    • 若干分布式的数据库存储域名和相应 IP 地址,完成名字到 IP 地址的方式,解决域名到 IP 地址的问题
    • 运行在 UDP 之上端口号为 53 的应用服务,DNS 的实现具有事务性特点,需要即时转换
    • 核心的 Internet 功能,但以应用层协议实现,在网络边缘实现
      • 网路边缘处理复杂性
  2. DNS 主要目的
    • 实现主机名 - IP 地址的转换 (name/IP translate)
    • 其他目的
      • 主机别名到规范名字的转化:Host aliasing
      • 邮件服务器别名到邮件服务器的正规名字的转换:Mail server aliasing
      • 负载均衡:Load Distribution

# (3). DNS 域名结构

  • 一个层面命名设备会有很多重名
  • DNS 采用层次树状结构的命名方法,以倒着的树来命名
  • Internet 跟被划分为几百个顶级域 (top lever domains)
    • image-20220410155911558
  • 每个 (子) 域下面课可划分为若干个子域 (subdomains)
  • 树叶是主机
  • 全球共有 13 个根名字服务器

# (4). DNS 的名字空间

  • 域名
    • 从本域网上,直到树根
    • 中间使用 “.” 间隔不同的级别
    • 例如:ustc.edu.cn auto.usts.edu.cn
    • 域的域名:可以用于表示一个域
    • 主机的域名:一个域上的一个主机
  • 域名的管理
    • image-20220410161313729
  • 域与物理网络无关
    • 域遵从组织界限,而不是物理网络
      • 一个域的主机可以不在一个网络上
      • 一个网络的主机可以不在一个域
    • 域的划分是逻辑的,而不是物理的

# (5). 域名 - IP 地址转化

  • 一个名字服务器的问题

    • 可靠性问题:单点故障
    • 扩展性问题:通信容量
    • 维护问题:远距离的集中式数据库
  • 区域

    • 区域的划分有区域管理者自己决定
    • 将 DNS 名字空间划分为互不相交的区域,每个区域都是树的一部分
    • 名字服务器:
      • 每个区域都有一个名字服务器;维护着它所管辖区域的权威信息
      • 名字服务器允许被放置在区域之外,以保障可靠性
  • 权威 DNS 服务器:组织机构的 DNS 服务器,提供组织机构服务器 (如 Web 和 mail) 可访问的主机和 IP 之间的映射。组织机构可以选择实现自己维护或某个服务提供商来维护。

  • 顶级域 (TLD) 服务器:
    image-20220410211022227

  • 区域名字服务器维护资源记录
    image-20220410211152953

    image-20220410211757078

# (6). DNS 的大致工作过程

  • image-20220410215330879

  • 本地名字服务器 (Local Name Server)
    image-20220410215735041

  • 名字服务器

    • 当本地名字服务器拥有本地缓存时,直接返回

    • image-20220410215820227

  • 递归查询

    • 当本地服务器没有缓存,不能解析时,会顺着上一层次的服务器进行查询,
    • image-20220410220447168
  • 迭代查询

    • image-20220410220546365

# (7). DNS 协议、报文

  • image-20220410220829143

    image-20220410221015919

  • 提高性能
    image-20220410221105628

  • 维护问题:新增一个域
    image-20220410221135331

  • 攻击 DNS
    image-20220410221318811

# 6. P2P 应用

# (1). 纯 P2P 架构

image-20220412103342009

# (2). 文件分发时间

  • image-20220412103756158

  • image-20220412104136824

# (3).P2P 文件分发

  • 结构化 (DHT) 和非结构化 P2P

    • 覆盖网络:Peer 节点之间有逻辑撒上的网络连接,有数据上的交流,有 “边”,有邻居的关系

    • 结构化:Peer 节点构成的的覆盖网络是有序的,像树,环类似的有序结构

      • image-20220412132002881

      • 每一份资源都由一组关键字进行标识。系统对其中的每一个关键字进行 Hash,根据 Hash 的结果决定此关键字对应的那条信息(即资源索引中的一项)由哪个用户负责储存。

    • 非结构化:Peer 节点构成的的覆盖网络是无序的

      • 集中化目录

        • image-20220412110606345

          • 问题:

            • 单点故障
            • 性能瓶颈
            • 侵犯版权
          • 完全分布式

            • image-20220412110942921

              • Gnutella:
                • 在已有的 TCP 连接上发送查询报文
                • 对等方转发查询报文
                • 以反方向返回查询命中报文
            • 混合体

              • image-20220412111705950

              • image-20220412111754652

  • BitTorrent:(非结构化代表)

    • 文件被分为一个个块 256KB,再使用另一张由每个 1bit 组成的 map 来表示是否拥有文件块。一个 bit 中 1 表示拥有,0 表示没有

    • 网络中的这些 peer 发送接收文件块,相互服务

    • image-20220412105030898

    • image-20220412125219735

    • image-20220412130809889

# (4). CDN

  • image-20220414210941322

  • 流化服务

    • 将视频为许多的流组成,在看视频时,一边播放视频一边加载后面的内容,而不是将整个视频先下载,再观看。这样大大减少了用户的等待时间
    • DASH
      image-20220414211902293 > image-20220414212610023
  • CND (内容分发网)

    • CDN 原理

      img

      上图假设一个内容提供商 NetCinema 雇佣了第三方内容提供商 KingCDN 来分发视频,在 NetCinema 的 Web 网页上,它的每个视频都被指派了一个 URL,如 video.netcinema.com/23425235 ,接下来将会发生图中的 6 个步骤:

      1. 用户访问 www.NetCinema.com , 并返回 video.netcinema.com/23425235
      2. 用户点击 video.netcinema.com/23425235 时,该用户的主机发送了一个对于 video.netcinema.com 的 DNS 请求
      3. 用户的本地 DNS 服务器(LDNS)将该 DNS 请求中继到一个用户 NetCinema 的权限 DNS 服务器,该服务器看到是 video,就将 DNS 请求移交给 KingCDN,NetCinema 权威 DNS 服务器不返回 IP 地址,而是返回一个 KingCDN 域的主机名,如 123.kingcdn.com
      4. 当 LDNS 拿到 123.kingcdn.com 时,就去请求 KingCDN 权威 DNS 服务器,KingCDN 权威 DNS 服务器这时返回的才是 KindCDN 服务器的 IP 地址
      5. LDNS 把 KindCDN 服务器的 IP 地址返回给用户
      6. 用户拿到 KindCDN 服务器的 IP 地址后,就发起连接请求,并获取资源
    • 集群选择策略

      • 任何 CDN 的部署,其集群选择策略很重要,因为关乎到用户体验和网络性能,用户选择太远的集群,就会造成网络损耗,所以集群选择策略有两种:
        • 基于地理位置最为临近的。这种可以根据用户 IP 作出选择,比如基于商用地理位置数据库可以查询到用户的地理位置
        • 基于当前流量条件选择最优。这种需要对集群和客户之间的时延和丢包性能做周期性的实时测量

# (5). TCP 套接字编程

  • 2 种传输层服务的 socket 编程
    • TCP:可靠的、字节流服务
    • UDP:不可靠 (数据 UDP 数据报) 服务
  • 套接字:应用进程与端到端船速协议 (TCP 或 UDP) 之间的门户
  • TCP 服务:从一个进程向另一个进程可靠地传输字节流
  • 工作过程:
    image-20220417160025382
  • 两种结构体
    • image-20220417160815547
    • image-20220417160838113
    • image-20220417162204843 > image-20220417162414038
    • image-20220417162513540 > image-20220417162527933

# (6). UDP 套接字编程

  • image-20220417162726140
    • image-20220417163109859 > image-20220417163128298
    • image-20220417163149229 > image-20220417163210315