【学习笔记】计算机网络(六)

发布于:2025-04-01 ⋅ 阅读:(17) ⋅ 点赞:(0)

第6章应用层

文章目录

6.1 域名系统DNS

应用层的许多协议都是基于客户服务器方式:

  • 客户(client)和服务器(server)都是指通信中所涉及的两个应用进程。
  • 客户是服务请求方,服务器是服务提供方。

6.1.1 域名系统概述

域名系统 DNS(Domain Name System)

  • 主要功能:被设计成为一个联机分布式数据库系统,采用客户服务器方式,将主机名(域名)转换为 IP 地址

  • 工作原理

    • 本地解析:大多数域名解析在本地完成,少量需要互联网通信。

    • 域名服务器:域名到IP地址的解析是由分布在互联网上的许多域名服务器程序(可简称为域名服务器)共同完成的。域名服务器程序在专设的节点上运行,而也常把运行域名服务器程序的机器称为域名服务器。

    • 解析过程

      • 当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序(resolver),并成为DNS的一个客户,

      • 把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器(使用UDP是为了减少开销)。

      • 本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。

      • 如果本地域名服务器无法解析,它会向其他域名服务器发出查询请求,直到找到答案。

      • 应用进程获得目的主机的IP 地址后即可进行通信。

6.1.2 互联网的域名结构

采用了层次树状结构的命名方法,这种命名方法,任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)

“域”(domain) 是名字空间中一个可被管理的划分域还可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了顶级域、二级域、三级域,等等。

语法:

每一个域名都由标号(label)序列组成,而各标号之间用点隔开

eg:mail.cctv.com

  • 三级域名:mail
  • 二级域名:cctv
  • 顶级域名:com

注意:

  • DNS 规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符(但为了记忆方便,最好不要超过12个字符)
  • 标号不区分大小写字母(例如,CCTV或cctv在域名中是等效的)
  • 标号中除连字符(-)外不能使用其他的标点符号。
  • 级别最低的域名写在最左边,而级别最高的顶级域名则写在最右边。
  • 由多个标号组成的完整域名总共不超过255 个字符。
  • 各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由ICANN进行管理

原先的 顶级域名 共分为三大类:

  • (1) 国家顶级域名TLD: 又常记为ccTLD(cc表示国家代码country-code)。采用ISO3166 的规定。如:cn 表示中国,us 表示美国,uk 表示英国,等等"。

  • (2) 通用顶级域名 gTLD:

    com(公司企业),net(网络服务机构),org(非营利性组织),int(国际组织),edu(美国专用的教育机构),gov(美国的政府部门),mil表示(美国的军事部门),aero(航空运输企业),asia(亚太地区),biz(公司和企业),cat(使用加泰隆人的语言和文化团体),coop(合作团体),info(各种情况),jobs(人力资源管理者),mobi(移动产品与服务的用户和提供者),museum(博物馆),name(个人),pro(有证书的专业人员),tel(TeInic股份有限公司),travel(旅游业)。

  • (3) 基础结构域名(infrastructure domain): 这种顶级域名只有一个,即 arpa,用于反向域名解析,因此又称为反向域名

我国把二级域名划分为两大类

  • 类别域名”共7个,分别为:ac(科研机构),com(工、商、金融等企业),edu(中国的教育机构),gov(中国的政府机构),mil(中国的国防机构),net(提供互联网络服务的机构),org(非营利性的组织)。
  • 行政区域名”共 34个,适用于我国的各省、自治区、直辖市。例如: bj(北京市), js(江苏省),等等。

6.1.3 域名服务器

域名服务器的分区管理
  • 区(Zone)

    • 一个服务器所负责的管辖范围称为区。
    • 区是 DNS 服务器实际管理的范围,可能等于或小于域,但一定不能大于域。
    • 区内所有节点必须连通。
  • 权限域名服务器(Authoritative Name Server)

    • 负责存储区内所有主机的域名到 IP 地址的映射。
    • DNS 服务器的管辖范围以“区”为单位,而不是以“域”为单位。
  • 区的划分

    • 公司或组织根据自身情况划分区。

      在这里插入图片描述

DNS 域名服务器的层次结构

每一个域名服务器都只对域名体系中的一部分进行管辖。根据域名服务器所起的作用,可以把域名服务器划分为以下四种不同的类型:

(1)根域名服务器(Root Name Server)

  • 作用:
    • 最高层次的域名服务器,所有根域名服务器知道所有顶级域名服务器的域名和 IP 地址
    • 本地域名服务器无法解析域名时,首先向根域名服务器求助。
  • 特点:
    • 全球根域名服务器只使用13个不同IP地址的域名,并非仅由13台机器所组成
    • 每组根域名服务器由多台机器组成,分布在全球各地。
    • 使用任播(Anycast)技术,DNS 客户查询时会自动找到最近的根域名服务器。
    • 在许多情况下,根域名服务器并不直接把待查询的域名直接转换成IP地址(根域名服务器也没有存放这种信息),而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。
  • 分布:
    • 截至 2021 年,全球共有 1375 台根域名服务器,我国有 37 台。
    • 分布不均,部分地区根域名服务器较少,影响上网速率。

(2)顶级域名服务器(TLD Server)

  • 作用:
    • 负责管理在该顶级域名下注册的所有二级域名
    • 查询请求时,返回相应结果或下一步需要查询的域名服务器地址。

(3)权限域名服务器(Authoritative Name Server)

  • 作用:
    • 负责一个区的域名解析
    • 若无法直接回答查询,会告知下一步应查询的权限域名服务器。

(4)本地域名服务器(Local Name Server)

  • 作用:
    • 不属于 DNS 层次结构,但对域名解析至关重要。
    • 主机发送 DNS 查询请求时,首先向本地域名服务器查询。
  • 特点:
    • 每个 ISP、大学或组织通常都有自己的本地域名服务器。
    • 距离用户较近,查询速度快。
域名服务器的可靠性
  • 主域名服务器(Master Name Server)
    • 存储主数据,定期将数据复制到辅助域名服务器。
  • 辅助域名服务器(Secondary Name Server)
    • 提高系统可靠性,主域名服务器故障时可继续提供服务。
    • 数据一致性:更改数据只能在主域名服务器中进行。
域名解析过程-两种查询方式

域名解析分为两种查询方式:

(1)递归查询(Recursive Query)

  • 流程:
    1. 主机向本地域名服务器发出查询请求。
    2. 如果本地域名服务器无法解析,它会以 DNS 客户的身份继续向其他域名服务器查询,直到得到结果。【被查询服务器代替本地域名服务器完成查询】
  • 结果:
    • 返回查询的 IP 地址或报错信息。
    • 最终结果一次性返回。

(2)迭代查询(Iterative Query)

  • 流程:
    1. 本地域名服务器向根域名服务器发出查询请求。
    2. 根域名服务器返回下一步应查询的顶级域名服务器地址。
    3. 本地域名服务器继续向顶级域名服务器查询,依此类推,直到得到最终结果。
  • 结果:
    • 依次返回下一步应查询的域名服务器地址或最终 IP 地址【逐步返回查询结果】
    • 最后将解析结果给发起询问的主机。

在这里插入图片描述

DNS 高速缓存机制

高速缓存用来存放 最近查询过的域名以及从何处获得域名映射信息的记录

1. 高速缓存的作用

  • 提高查询效率:
    • 避免重复查询,减少查询时间。
  • 减轻根域名服务器负荷:
    • 通过缓存减少对根域名服务器的查询次数。
  • 减少 DNS 查询报文数量:
    • 通过缓存直接返回结果,减少网络上的 DNS 查询和响应报文。

2. 高速缓存的工作原理

  • 缓存查询结果:
    • 当本地域名服务器收到查询结果时,将域名与其对应的 IP 地址缓存起来。
    • 例如,查询 y.abc.com 的结果会被缓存。
  • 加速后续查询:
    • 如果再次查询 y.abc.com,本地域名服务器直接从缓存返回结果,无需重新查询。
  • 缓存层级信息:
    • 假定本地域名服务器的缓存中并没有y.abc.com的IP地址,而是存放了顶级域名服务器(如 dns.com)的 IP 地址,本地域名服务器可直接向顶级域名服务器查询,无需从根域名服务器开始。

3. 缓存的有效期

  • 计时器机制:
    • 为缓存中的每条记录设置计时器,超过设定时间(如两天)后自动删除,来保持高速缓存中的内容正确。
  • 绑定信息的有效期:
    • 权限域名服务器在响应查询时,会指明绑定信息的有效期(TTL)。
    • 增加有效期可减少网络开销,降低根域名服务器的查询压力。
    • 减少有效期可提高域名转换的准确性。

4. 缓存的更新与维护

  • 缓存更新:
    • 当缓存中的记录过期或被删除后,重新向权限域名服务器获取绑定信息。
  • 主机中的缓存:
    • 主机在启动时会从本地域名服务器下载完整的域名数据库。
    • 主机维护自己最近使用的域名缓存,仅在缓存中找不到时才向域名服务器查询。
  • 一致性维护:
    • 主机定期检查域名服务器以获取新的映射信息。
    • 删除缓存中无效的记录,确保数据一致性。

6.2 文件传送协议

6.2.1 FTP 概述

文件传送协议 FTP (File Transfer Protocol):

  • 提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用ASCI码);允许文件具有存取权限(如访问文件的用户必须经过授权并输入有效的口令)
  • FTP 实现的是通过网络实现异构计算机间文件的“拷贝”:FTP屏蔽了 各计算机系统细节,因而适合于在异构网络中任意计算机之间传送文件。

文件共享协议的两大类:

  • 复制整个文件
    • 特点:
      • 存取文件前需要获取文件的本地副本。
      • 修改文件时只能修改副本,然后将副本传回原节点。
    • 典型协议:
      • FTP:基于TCP的FTP
      • TFTP(Trivial File Transfer Protocol):基于UDP的简单文件传送协议
  • 联机访问 (on-line access)
    • 特点:
      • 允许多个程序同时对一个文件进行存取。
      • 操作系统提供对远地共享文件的透明访问,用户无需调用特殊客户进程。
      • 透明存取:将原来用于处理本地文件的应用程序用来处理远地文件时,不需要对该应用程序做明显的改动。
    • 典型协议:
      • 网络文件系统 NFS(Network File System):

6.2.2 FTP 的基本工作原理

FTP特点:

  • 采用 C/S 模式,可为多个客户提供服务;
  • FTP 的服务器进程由两大部分组成:
    • 一个主进程,负责接受新的请求;
    • 若干个从属进程,负责处理单个请求;
  • 解决不同操作系统下处理文件的不兼容性问题。
  • 实现了文件传送的基本服务;
  • 使用 TCP 可靠传输协议。

FTP的两个连接和工作过程:

  • 端口号:

    • 客户端使用任意分配的端口号(>1023)

    • 服务器端用熟知端口号21 传输控制信息

    • 服务器端用熟知端口号20 传输数据

  • 主进程与从属进程的处理并发进行:

    • 主进程:负责监听和接受客户端连接请求创建控制进程。不直接参与具体的会话或文件传输。
    • 从属进程:负责处理单个客户请求。在运行期间根据需要可能创建其他子进程
    • 控制进程:由主进程创建的独立进程,管理与客户端的控制连接,接收并解析客户端命令。协调数据传输进程的启动和操作。管理会话状态,直到客户端断开连接。
    • 数据传输进程:由控制进程派生及协调,负责实际的文件传输操作,在传输完成后关闭数据连接并终止–具有生命周期。
    1. 服务器端启动主进程:
    • 主进程启动并绑定到默认的 FTP 端口(端口号 21)。
    • 主进程开始监听(等待)客户端的连接请求。
    1. 客户端发起连接连接:
    • 当客户端尝试连接到 FTP 服务器时,客户端会向服务器的熟知端口(端口号 21)发送连接请求。
    1. 主进程接受客户端的连接请求:
    2. 主进程派生子进程 – 控制进程:
    • 控制进程专门负责处理该客户端的会话,而主进程会监控该控制进程的状态,确保其正常运行,并且继续监听其他客户端的连接请求。
    1. 控制进程:
      • 控制进程管理会话状态
      • 控制进程接收客户端发送的命令(如 LISTRETRSTOR 等),解析这些命令,处理这些命令
        • 当客户端发送文件传输相关命令(如 RETRSTOR)时,控制进程派生数据传输进程
          • 数据传输进程建立与客户端之间的数据连接:
            • 主动模式下,数据传输进程从服务器端向客户端发起数据连接请求【服务器使用端口 20】。
              客户与服务器21号端口建立连接之后(端口号N>1023),
              然后客户端监听N+1号端口,并客户端发送FTP命令“port N+1”到FTP服务器
              服务器用20号数据端口主动向客户N+1端口建立连接
            • 被动模式下,数据传输进程等待客户端发起数据连接请求【服务器使用端口 P(>1023)】。
              客户用端口N(>1023)与服务器21号端口建立连接之后,
              然后客户端打开N+1端口,客户端发送PASV命令给服务器,
              服务端开启端口P(>1023),并发送“PORTP”告知客户,
              客户端从端口N+1和服务器端口P建立连接,用来进行数据传送。
          • 执行文件传输:
            • 数据传输进程根据客户端命令执行文件传输操作:
              • RETR:将服务器上的文件传输给客户端。
              • STOR:将客户端上传的文件保存到服务器。
              • LIST:将服务器上的目录列表传输给客户端。
          • 关闭数据连接:
            • 文件传输完成后,数据传输进程关闭数据连接。
            • 数据传输进程终止,释放资源。
      • 控制进程继续管理会话,直到客户端发送 QUIT 命令或主动断开连接时,控制进程终止

    在这里插入图片描述

FTP文件传输模式:

  • 文本模式: ASCII模式,以文本序列传输数据。主要用于文本文件的传输,它确保文件在不同操作系统间传输时,文本格式保持一致,避免了格式错乱的问题。
  • 二进制模式: Binary模式,以二进制序列传输数据。适用于所有类型的文件,包括程序文件、图像、音频和视频等,它保证文件在传输过程中不会发生任何数据的丢失或改变,确保文件的完整性和一致性。

FTP 的局限性:

效率问题:某些场景下,FTP 传输效率较低。例如,在文件末尾添加一行信息时,需要先下载整个文件,修改后再上传,传输效率低。

网络文件系统 NFS 的优化思路

  • 允许应用进程打开一个远地文件;
  • 并能从文件的某个位置开始读写数据;
  • 无需复制整个文件,只复制文件中很小的片段。

6.2.3 简单文件传送协议 TFTP

TFTP(Trivial File Transfer Protocol)协议:

  • TFTP 使用客户服务器方式和使用 UDP 数据报,因此 TFTP需要有自己的差错改正措施。
  • TFTP 只支持文件传输而不支持交互。
  • TFTP 没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。

TFTP主要特点:

  • 每次传送的数据 PDU中有 512 字节的数据,但最后一次可不足512 字节。
    • 若文件长度恰好为512 字节的整数倍,则在文件传送完毕后,还必须在最后发送一个只含首部而无数据的数据 PDU。
    • 若文件长度不是 512 字节的整数倍,则最后传送数据 PDU 的数据字段一定不满 512 字节,这正好可作为文件结束的标志。
  • 数据 PDU 也称为文件块(block),每个块按序编号,从1开始。
  • 支持 ASCII 码或二进制传送。
  • 可对文件进行读或写。
  • 使用很简单的首部。

工作流程 - 很像停止等待协议:

  • 开始工作时,TFTP 客户进程发送一个读请求PDU(RRQ)或写请求PDU(WRQ) 给 TFTP 服务器进程,其熟知端口号码为69
  • TFTP 服务器进程选择一个新的端口和 TFTP 客户进程进行通信
    • 对于读请求,服务器开始发送文件数据。
    • 对于写请求,服务器等待接收客户端发送的文件数据。
  • 文件传输:
    • 文件被分成固定大小的块(默认 512 字节)进行传输。
    • 每个文件块都带有一个块编号(从 1 开始)。
    • 发送方发送完一个文件块后就等待接收方的确认,
    • 接收方每收到一个文件块后,发送一个 ACK(确认) 报文,确认时应指明所确认的块编号。
  • 注意:
    • 发送文件块的一方发完数据后在规定时间内收不到确认就要重发数据 PDU
    • 发送确认PDU 的一方若在规定时间内收不到下一个文件块,也要重发确认 PDU

TFTP 的报文类型

  1. RRQ(Read Request)- 读请求
  • 客户端请求从服务器读取文件。
  1. WRQ(Write Request)- 写请求
  • 客户端请求向服务器写入文件。
  1. DATA(Data)- 文件块
  • 服务器或客户端发送文件数据块。
  1. ACK(Acknowledgment)
  • 接收方确认收到的数据块。
  1. ERROR(Error)
  • 表示发生错误(如文件未找到、权限不足等)。

在这里插入图片描述

6.3 远程终端协议 TELNET

TELNET 是一种简单的终端仿真协议,通过网络虚拟终端(NVT)适应不同系统的差异,实现透明化的远程登录。

6.3.1 TELNET 概述
  • 定义:TELNET 是一种终端仿真协议,允许用户通过 TCP 连接 从本地主机登录到远程主机
  • 功能:
    • 将用户的击键传输到远程主机。
    • 将远程主机的输出返回到用户屏幕。
  • 特点:
    • 服务是透明的,用户感觉键盘和显示器直接连接在远程主机上。
    • 使用客户/服务器模式。
6.3.2 TELNET 的工作原理
  1. 客户-服务器模式:
    • 本地系统运行 TELNET 客户进程
    • 远程主机运行 TELNET 服务器进程
  2. 主进程与从属进程:
    • 服务器中的 主进程 等待新的请求。
    • 主进程为每个连接派生一个 从属进程 来处理。
  3. TCP 连接:
    • 使用 TCP 协议,通过主机名或 IP 地址连接到远程主机。
  4. 安全性:
    • Telnet应用间的信息交换是 明码交换 过程。
  5. 端口号:
    • 默认使用 23 端口
6.3.3 网络虚拟终端 (NVT)
  • 目的:适应不同计算机和操作系统的差异(如行结束符、中断命令等)。
  • 定义:
    • TELNET 定义了数据和命令应如何通过互联网,即 NVT 格式
    • NVT 是 TELNET 的通用终端格式。
  • 数据传输:
    • 客户软件将用户的击键和命令转换为 NVT 格式,发送给服务器。
    • 服务器将收到的数据和命令从 NVT 格式转换为远程系统所需的格式。
    • 返回数据时,服务器将远程系统格式转换为 NVT 格式,客户再将 NVT 格式转换为本地系统所需的格式。
  • NVT 格式:
    • 所有通信使用 8 位(一个字节)。
    • 7 位 ASCII 码传送数据,高位置 1 时用作控制命令。
    • 使用 CR-LF(回车-换行)作为标准的行结束控制符。
6.3.4 TELNET 的选项协商
  • 选项协商(Option Negotiation):采用双方交互一组选项的方法解决: 启用某项功能(选项)时,双方先进行选项协商,使通信的双方明白哪些功能由对方提供,哪些功能无法完成,即在通信时双方可以达成一致。
  • 控制命令选项协商: 任一方可以在初始化时提出一个选项生效的请求,另一方可以接受,也可以拒绝这一请求。
  • 六种情况
    • 发送方问接收方“激活我的选项X”
      • 接收方 - 同意
      • 接收方 - 不同意
    • 发送方问接收方“激活你的选项X”
      • 接收方 - 同意
      • 接收方 - 不同意
    • 发送方问接收方“禁止我的选项X”
      • 接收方 - 同意
    • 发送方问接收方“禁止你的选项X”
      • 接收方 - 同意
  • 协商双方地位平等。
6.3.5 SSH

SSH 的工作原理

  • 客户-服务器模式:
    • 本地系统运行 SSH 客户端
    • 远程主机运行 SSH 服务器
  • 加密通信
    • SSH 使用加密技术保证数据传输的安全性。
    • 通信分为三个阶段:
      • 协议协商:客户端和服务器协商使用的 SSH 协议版本【SSH-1 和 SSH-2 两种版本】。
      • 密钥交换:双方通过密钥交换算法生成会话密钥。
      • 认证与数据传输:用户认证成功后,进行加密的数据传输。
  • 端口号:
    • 默认使用 22 端口

SSH 和 TELNET

  • 相同点:

    • 远程登录其他主机;

    • 运输层采用TCP协议。

  • 不同点:

    • TeInet明文传送; SSH加密传送,且支持压缩
    • Telnet服务默认端口号为23; SSH服务默认监听22号端口;
    • SSH使用对称加密算法实现数据安全传输; 对称加密算法的密钥是通过非对称加密算法(RSA)进行交换的。

6.4 万维网WWW

6.4.1 万维网概述

定义: 万维网(World Wide Web,简称 Web)是一个大规模的、联机式的信息储藏所,通过超链接(hyperlink)实现信息的互联。

特点: 分布式系统

  • 文档分布在全球各地的服务器上,独立管理。

  • 链接可能失效,因为文档的修改、删除或重命名无需通知其他节点。

超文本(Hypertext):

  • 包含指向其他文档链接的文本。

  • 信息源可以分布在全球各地,文档之间通过链接互联。

超媒体(Hypermedia):

  • 超文本的扩展,包含文本、图形、图像、声音、动画、视频等多媒体内容。

万维网的工作原理:

  • 客户-服务器(C/S)模式:

    • 客户端:浏览器(如 Chrome、IE)运行在用户主机上。
    • 服务器:万维网文档驻留的主机运行服务器程序(如 Apache、Nginx)。
  • 工作流程:

    • 用户通过浏览器点击链接。
    • 浏览器向服务器发送请求。
    • 服务器将文档传送给客户端,并在浏览器中显示。
  • 页面(Page)

    • 在浏览器主窗口上显示的万维网文档。

万维网的核心技术:

  • 统一资源定位符(URL)

    • 用于标志万维网上的文档。
  • 超文本传输协议(HTTP)

    • 用于实现万维网上的链接和文档传输。
    • 基于 TCP 的应用层协议,确保可靠传输。
  • 超文本标记语言(HTML)

    • 用于创建万维网页面。
    • 支持超链接、文本、图像、视频等内容的嵌入。

6.4.2 统一资源定位符 URL

URI 的全称为 Uniform Resource Identifier, 即统一资源标志符 = URL 的全称为Universal Resource Locator,即统一资源定位符URN 的全称为Universal Resource Name, 即统一资源名称 ➕ …

在目前的互联网中,URN使用得非常少,几乎所有的URI都是URL

统一资源定位符(Uniform Resource Locator, URL)用于标识互联网上资源的位置和访问方法。

URL基本的组成格式如下:

scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment]

  • scheme:协议。常用的协议有 http、https、fp等,另外scheme 也被常称作 protocol。不区分大小写
  • usermame、password:用户名和密码。在某些情况下URL需要提供用户名和密码才能访问,这时候可以把用户名和密码放在 host前面。
  • hostname:主机地址。可以是域名【通常以 www 开头,但不是必须的。】或IP地址。不区分大小写
  • port:端口。这是服务器设定的服务端口,有些 URL中没有端口信息,这是使用了默认的端口。http 协议的默认端口是80,https 协议的默认端口是 443。
  • path:路径。指的是网络资源在服务器中的指定地址【可能包含多级目录,用 / 分隔。】有时区分大小写(取决于服务器配置)。
  • parameters:参数。用来指定访问某个资源时的附加信息
  • query:查询。用来查询某类资源,如果有多个查询,则用&隔开。
  • fragment:片段。是对资源描述的部分补充,可以理解为资源内部的书签。目前它有两个主要的应用,一个是用作单页面路由,比如现代前端框架 Vue、React 都可以借助它来做路由管理;另外一个是用作 HTML 锚点,用它可以控制一个页面打开时自动下滑滚动到某个特定的位置。

6.4.3 超文本传送协议 HTTP

操作过程:

  • 功能:

    • 协议HTTP定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。
  • 特点:

    • 协议HTTP是面向事务的(transaction-oriented)"应用层协议。
    • 协议HTTP是可靠地交换文件
    • HTTP协议永远都是客户端发起请求服务器回送响应
    • 每次交互,都由一个ASCII 码串构成的请求和一个类似的通用互联网扩充,即“类MIME(MIME-like)”的响应组成。
    • 协议HTTP 报文通常都使用 TCP 连接传送
    • 协议 HTTP 本身是无连接的。
    • 协议 HTTP 是无状态的(stateless)。

事务

是指一系列的信息交换,而这一系列的信息交换是一个不可分割的整体;

一次HTTP操作称为一个事务,其工作过程可分为四步:

  • 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始;
  • 建立连接后,客户机发送一个请求给服务器
  • 服务器接到请求后,给予相应的响应信息;
  • 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

HTTP的无连接 - 限制每次连接只处理一个请求

  • 每次请求独立:浏览器(客户端)向服务器发送一个请求后,服务器处理请求并返回响应,随后立即断开连接
  • TCP 连接的使用:虽然 HTTP 不需要保持持续连接,但它依赖于 TCP 作为传输层协议,通过 TCP 连接完成通信。TCP 连接在请求和响应完成后立即释放
  • 解决办法:Keep-Alive

HTTP的无状态 是指HTTP协议对事务处理是没有记忆能力的,或者说服务器并不知道客户端处于什么状态。
客户端向服务器发送请求后,服务器解析此请求,然后返回对应的响应,服务器负责完成这个过程,而且这个过程是完全独立的,服务器不会记录前后状态的变化,也就是缺少状态记录。

解决办法:两种用于保持HTTP连接状态的技术:分别是Session和Cookie。

  • Session 在服务端
  • Cookie 在客户端
  • 过程:

    • 每个万维网网点都有一个服务器进程,它不断地监听TCP的端口80,以便发现是否有浏览器向它发出连接建立请求。

    • 监听到连接建立请求且建立TCP连接成功(TCP三次握手)。

    • 浏览器向万维网服务器发出浏览某个页面的请求。

    • 服务器接着就返回所请求的页面作为响应。

    • 服务器在完成任务后,TCP连接就被释放了。

      在这里插入图片描述

  • 协议:

    • HTTP/1.0 :非持续连接

    • HTTP/1.1 :持续连接(persistent connection)。
      所谓**持续连接**就是万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。
      **协议HTTP/1.1的持续连接有两种工作方式,**即非流水线方式(without pipelining)流水线方式(with pipelining)

      • 非流水线方式: 是客户在收到前一个响应后才能发出下一个请求。因此,在TCP连接已建立后,客户每访问一次对象都要用去一个往返时间RTT。缺点: 服务器在发送完一个对象后,其TCP连接就处于空闲状态,浪费了服务器资源。
      • 流水线方式: 是客户在收到HTTP的响应报文之前就能够接着发送新的请求报文。于是一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。因此,使用流水线方式时,客户访问所有的对象只需花费一个RTT时间。
    • HTTP/2 :

      • 把服务器发回的响应变成可以并行地发回,缩短了服务器的响应时间。
      • 允许复用TCP连接进行多个请求。
      • 在HTTP/1.1中,都是用文本格式传输的,其头部(Headers)、实体(Body)之间也是用文本换行符分隔开的。HTTP/2将文本格式修改为了二进制编码的帧

万维网高速缓存(Web Cache):

1. Web Cache 的原理

  • 当用户首次访问某个资源(如网页)时,Web Cache 会将该资源存储在本地或代理服务器上。
  • 当用户再次请求相同的资源时,Web Cache 会直接返回已存储的副本,而不需要重新从原始服务器下载。

2. Web Cache 的工作过程

  • 首次请求
    • 用户访问某个资源,缓存系统检查本地是否已存储该资源。
    • 如果未存储,向原始服务器发送请求,获取资源并存储在缓存中。
  • 后续请求
    • 用户再次访问相同资源,缓存系统直接返回已存储的副本。
  • 缓存更新
    • 如果资源已过期或原始服务器更新了内容,缓存系统会重新获取并存储最新版本。

3. Web Cache 的缓存控制

Web Cache 的行为通过 HTTP 头部字段进行控制,主要字段包括:

  • Cache-Control
    • 定义资源的缓存策略。例如:
      • max-age=3600:资源在缓存中存储 3600 秒(1 小时)。
      • no-cache:资源每次都需要向服务器验证是否过期。
      • no-store:禁止缓存资源。
  • Expires
    • 指定资源的过期时间。例如:Expires: Wed, 21 Oct 2023 07:28:00 GMT
  • ETag
    • 资源的唯一标识符,用于验证缓存内容是否过期。
  • Last-Modified
    • 资源的最后修改时间,用于比较缓存内容是否最新。

4. Web Cache 的类型

  • 浏览器缓存:存储在用户设备上,仅对当前用户有效。
  • 代理服务器缓存:位于客户端和服务器之间,为多个用户提供服务。
  • CDN(内容分发网络):全球分布的缓存服务器,为不同地区的用户提供快速访问。
  • 网关缓存:位于服务器端,用于减轻原始服务器的负载。

代理服务器(Proxy Server)

定义:

​ 位于客户端和服务器之间的中间服务器,代表客户端向目标服务器发送请求并返回响应。

主要功能包括:

  • 转发请求和响应。客户端将请求发送给代理服务器,代理服务器再将请求转发给目标服务器。
  • 提供安全性(如隐藏客户端 IP 地址,提供匿名性、过滤恶意内容或危险网站)。
  • 控制网络访问(如限制某些网站的访问)。
  • 可以集成缓存功能,存储常用的资源以减少带宽消耗和延迟来提高性能。

HTTP报文结构:

HTTP请求报文和响应报文都是由三个部分组成的:

  • 开始行,用于区分是请求报文还是响应报文。在请求报文中的开始行叫作请求行(Request-Line),而在响应报文中的开始行叫作状态行(Status-Line)。在开始行的三个字段之间都以空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”。
  • 首部行,用来说明浏览器、服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有“回车”和“换行”。整个首部行结束时,还有一空行将首部行和后面的实体主体分开
  • 实体主体(entity body),在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。

在这里插入图片描述

请求报文:

请求报文的第一行“请求行”只有三个内容,即方法、请求资源的URL,以及HTTP的版本。

方法就是对所请求的对象进行的操作也就是一些命令。常见的请求方法有两种: GET和POST

GET和POST请求方法有如下区别:

  • GET请求中的参数包含在URL里面,数据可以在 URL中看到;而POST请求的URL不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中。
  • GET请求提交的数据最多只有1024字节,POST方式则没有限制。
方法 描述
GET 请求页面,并返回页面内容
HEAD 类似于GET请求,只不过返回的响应中没有具体内容。用于获取报头
POST 大多用于提交表单或上传文件,数据包含在请求体中
PUT 用客户端传向服务器的数据取代指定文档中的内容
DELETE 请求服务器删除指定的页面
CONNECT 把服务器当作跳板,让服务器代替客户端访问其他网页
OPTIONS 允许客户端查看服务器的性能
TRACE 回显服务器收到的请求。主要用于测试或诊断

响应报文:

状态行包括三项内容,即 HTTP的版本、状态码,以及解释状态码的简单短语。

状态码(Status-Code): 表示服务器的响应状态, 分为5大类

  • 1xx(信息性状态码):表示接收的请求正在处理。

  • 2xx(成功状态码):表示请求正常处理完毕。

  • 3xx(重定向状态码):需要后续操作才能完成这一请求。

  • 4xx(客户端错误状态码):表示请求包含语法错误或无法完成。

  • 5xx(服务器错误状态码):服务器在处理请求的过程中发生了错误。

Cookie 、 Session、 Token

特性 Cookie Session Token
存储位置 客户端(浏览器) 服务器端 客户端(localStorage/Cookie)
存储形式 浏览器内存或文本文件 服务器内存或数据库
安全性 较低(易被窃取) 较高(数据在服务器) 中等(需防范泄露)
跨域支持 不可直接跨域 不可直接跨域 支持跨域
用途 会话管理、跟踪用户行为 会话管理、身份验证 身份验证、API 鉴权
应用场景 适合小型网站或不需要高安全性的场景 适合传统的 Web 应用,需要维护会话状态的场景 适合分布式系统、跨域应用和 API 驱动的场景(如 SPA、移动端应用)

Cookie 工作原理

  • 创建 Cookie - 当服务器需要为客户端存储某些信息时(如用户登录状态、用户偏好等),服务器通过 HTTP 响应头 Set-Cookie 向浏览器发送 Cookie。
  • 存储 Cookie - 浏览器接收到 Set-Cookie 后,会将 Cookie 存储在本地(通常在浏览器的 Cookie 存储区域)。
  • 发送 Cookie - 当用户再次访问同一网站时,浏览器会自动将 Cookie 附加到 HTTP 请求头 Cookie 中,发送给服务器。

Session工作原理:

  • 创建 Session - 当用户首次访问服务器时,服务器会创建一个唯一的 Session ID。

    【Session ID 通常以 Cookie 的形式发送给浏览器。放在Set-Cookie中】

  • 存储 Session - 服务器将用户的会话数据存储在服务器端(如内存、数据库或文件系统中)。

    【Session ID 作为查找会话数据的唯一标识。】

  • 发回 Session - 当用户再次访问服务器时,浏览器会自动将 session_id 放在Cookie 发回给服务器。

    【服务器根据 session_id 查找对应的会话数据,从而恢复用户的会话状态。】

Token工作原理:

  • 创建 Token - 客户端将用户的身份凭证(如用户名和密码)发送到服务器。服务器验证凭证后,生成一个 Token 并返回给客户端。【JSON 数据(如 JWT - JSON Web Token)】

    • JWT 由三部分组成:
      1. Header:描述 Token 的类型和签名算法。
      2. Payload:携带用户信息和数据。
      3. Signature:用于验证 Token 的完整性和真实性。
  • 存储 Token - 客户端(通常是浏览器或移动应用)接收到 Token 后,需要将其存储在本地。

    • 常见的存储方式:
      • LocalStorage:适合 Web 应用,但需防范 XSS 攻击。
      • SessionStorage:适合会话期间的存储,关闭浏览器时失效。
      • Cookie:适合 Web 应用,可通过 SecureHttpOnly 增强安全性。
  • 发回 Token - 客户端在后续请求中,需要在 HTTP 请求头 中携带 Token。

    • 服务器接收到请求后,会解析并验证 Token:
      • 检查 Token 的签名是否有效。
      • 检查 Token 是否过期。
      • 检查用户权限是否符合请求的资源。

6.4.4 万维网的文档

静态文档(static document)

1、HTTP(HyperText Markup Language)超文本标记语言

为了使任何计算机都能显示万维网服务器上的页面,需要解决页面制作的标准化问题。

文件后缀必须是 .html.htm,浏览器才会解释

2、相关语言与技术

  • XML(Extensible Markup Language)(可扩展标记语言)
    • 设计宗旨:传输数据,而非显示数据。
    • 特点:
      • 标记电子文件,使其具有结构性。
      • 允许用户自定义标记语言。
      • 数据与显示分离,便于集成不同数据源。
    • 与 HTML 的关系:补充而非替代。
  • XHTML(Extensible HTML)(可扩展超文本标记语言)
    • 与 HTML 4.01 几乎相同,但更严格。
    • 作为 XML 应用重新定义的 HTML,逐渐取代 HTML。
  • CSS(Cascading Style Sheets)(层叠样式表)
    • 用于为 HTML 文档定义布局。
    • 与 HTML 的区别:
      • HTML 用于结构化内容。
      • CSS 用于格式化结构化内容。
    • 功能:精确控制字体、颜色、边距、背景等显示效果。
动态万维网文档

1、动态文档

  • 定义:动态文档的内容是在浏览器访问万维网服务器时,由应用程序动态生成的。

  • 特点:

    • 文档内容随每次请求临时生成,用户看到的内容不断变化。
    • 适用于需要实时更新信息的场景,如股市行情、天气预报、民航售票等。
    • 动态文档一旦生成,内容固定,无法实时刷新屏幕【需要刷新页面才能看到新内容】。
    • 依赖于服务器端生成内容,缺乏客户端交互能力
  • 动态文档与静态文档的区别

  • 服务器端:

    • 动态文档:由应用程序临时生成。
    • 静态文档:预先存储并由服务器直接返回。
  • 浏览器端:

    • 无区别,两者都遵循 HTML 格式,浏览器无法直接判断文档类型。
  • 开发者角度:

  • 动态文档需要编写应用程序,静态文档直接编写文档内容。

2、通用网关接口(CGI)

  • 定义:CGI 是一种标准,规定了动态文档的创建方式、输入数据的提供方法以及输出结果的使用。
  • 作用:
    • 实现万维网服务器与应用程序之间的通信。
    • 作为网关,访问其他服务器资源(如数据库或图形软件包)。
  • CGI 程序:
    • 正式名称:CGI 脚本(CGI Script)。
    • 特点:
      • 解释程序而非处理器执行
      • 可用脚本语言(如 Perl、JavaScript)或编程语言(如 C、C++)编写。
      • 运行速度较慢,因为每条指令需由解释程序处理。
    • 常见目录:/cgi-bin,用于存放 CGI 程序。
活动万维网文档

1、屏幕连续更新的技术

  • 技术一:服务器推送(Server Push)
    • 原理:
      • 服务器运行与动态文档关联的应用程序,定期更新信息并发送更新后的文档。
    • 优点:
      • 可实现连续更新,用户体验较好。
    • 缺点:
      1. 服务器需运行多个推送程序,开销较大。
      2. 需为每个浏览器客户维持一个不释放的 TCP 连接。
      3. 随着连接数增加,网络带宽分配减少,导致传输时延增大。
  • 技术二:活动文档(Active Document)
    • 原理:
      • 将所有工作转移到浏览器端
      • 服务器返回活动文档程序的副本,程序在浏览器端运行
      • 活动文档可直接与用户交互并连续更新屏幕显示
    • 优点:
      • 无需服务器连续更新,网络带宽要求较低。
      • 活动文档被视为静态文档,可本地缓存和压缩存储。
      • 活动文档的运行依赖浏览器中的支持软件,无需额外加载。
    • 特点:
      • 活动文档内容在服务器上不变,与动态文档不同。
      • 浏览器可缓存活动文档副本,提高效率。

2、活动文档的实现技术

Java 技术:由美国 SUN 公司开发,用于创建和运行活动文档。

Java 技术中使用了一个新的名词“小应用程序(applet)"来描述活动文档程序:

  • 活动文档程序的一种形式。
  • 嵌入在 HTML 文档中,浏览器下载后运行。
  • 可实现动画效果、用户交互等功能。

3、活动文档的核心思想

  • 服务器不负责实时更新内容,而是直接把一个小程序(比如 JavaScript 脚本或者 Java Applet)发给浏览器
  • 浏览器拿到这个小程序后,自己运行它,并根据用户的操作实时更新页面内容。

4、活动文档的常见例子

  • 在线计算器:用户在浏览器中输入数字和操作符,活动文档程序实时计算结果并显示在屏幕上。
  • 动态地图:用户在地图上点击或拖拽,活动文档程序实时更新地图的显示(如放大、缩小、移动)比如百度地图。
  • 网页游戏:用户在浏览器中玩在线游戏,游戏画面和状态实时更新。
  • 表单验证:用户在网页表单中输入数据,活动文档程序实时验证输入是否正确(如邮箱格式、密码强度)。
  • 实时聊天:用户在浏览器中进行实时聊天,消息内容实时更新【使用 WebSocket 和 JavaScript 实现即时通讯】。

5、活动文档和普通网页的区别

特点 普通网页(静态文档+动态文档) 活动文档
内容更新 需要刷新页面才能看到新内容 内容可以实时更新,无需刷新页面
互动性 互动性差,只能点击链接或提交表单 互动性强,支持动画、拖拽、点击等多种操作
服务器负担 服务器需要频繁处理请求,负担较大 服务器负担小,主要工作交给浏览器处理
传输效率 每次更新都需要重新加载整个页面 只需传输小程序,支持本地缓存,效率更高

在这里插入图片描述

6.4.5 万维网的信息检索系统

搜索引擎(search engine)是万维网中最常用的搜索工具,特点:本身不存储信息,只提供信息的位置链接,并不直接存储内容。

全文检索搜索引擎
  • 工作原理:
    • 通过搜索软件(如“蜘蛛”或“网络机器人”程序)在互联网上自动收集信息
    • 按照一定规则建立在线索引数据库
    • 用户输入关键词后,搜索引擎从索引数据库中查找相关信息。
  • 特点:
    • 优点:可以检索出大量信息。
    • 缺点:
      • 查询结果可能不准确。
      • 部分信息可能过时(因为索引数据库需要定期更新)。

Google搜索

  • 特点:
    • 利用互联网上相互链接的计算机快速查找答案,缩短响应时间。
  • 核心技术——PageRank
    • 对搜索结果按重要性排序
    • 基于整个互联网的链接结构,加权统计链接数目
    • 通过稀疏矩阵计算和迭代算法大幅简化计算量。
  • 超文本匹配分析:
    • 确定网页与特定搜索的相关性。
    • 综合考虑重要性和相关性后,将最相关、最可靠的结果放在首位。
分类目录搜索引擎
  • 工作原理:
    • 通过网站提交的信息(如关键词、描述)人工审核后,录入分类目录数据库。
    • 用户按照分类目录逐级查找所需信息。
  • 特点:
    • 优点:查询结果较为准确。
    • 缺点:返回的内容有限(通常是网站主页URL)。
类型 全文检索搜索引擎 分类目录搜索引擎
工作原理 自动收集信息,建立索引数据库 人工审核分类,录入目录数据库
查询方式 输入关键词检索 按照分类目录逐级查找
结果数量 海量信息 内容有限
结果准确性 可能不准确 较准确
典型代表 Google、百度、Bing Yahoo、新浪、搜狐、网易
垂直搜索引擎(vertical search engine)
  • 它针对某一特定领域、特定人群或某一特定需求提供搜索服务。垂直搜索也是提供关键字来进行搜索的,但被放到了一个行业知识的上下文中,返回的结果更倾向于信息、消息、条目等。
  • 结果更精准,目前热门的垂直搜索行业有:购物、旅游、汽车、求职、房产等领域。
元搜索引擎(meta search engine)
  • 它把用户提交的检索请求发送到多个独立的搜索引擎上去搜索,并把检索结果集中统一处理,以统一的格式提供给用户,因此是搜索引擎之上的搜索引擎
  • 主要精力放在提高搜索速度、智能化处理搜索结果、个性化搜索功能的设置和用户检索界面的友好性上。
  • 查全率和查准率较高。

6.4.6 博客和微博

博客(Blog)

(1) 定义

  • 博客:“万维网日志”(Weblog)的简称,也称为“部落格”或“部落阁”。
  • 博文:指博客中的文章。
  • 博客作者:称为“Blogger”,是博客的拥有者、撰写者和维护者。

(2) 博客的特点

  • 内容形式:最初是个人日记,现已扩展为各种形式和主题。
  • 功能:
    • 内容发布:作者可以不断更新内容。
    • 互动性:读者可以阅读、发表评论或不采取任何行动。

(3) 博客与个人网站的区别

博客 个人网站
无需投资(免费搭建) 需要租用空间、域名等
技术要求低(会上网、会打字即可) 需要掌握HTML、网页制作等技术
发布内容快速便捷 制作和维护较为耗时
门槛低,适合普通网民 门槛较高,适合专业人士或机构

微博(Microblog)

(1) 定义: 微博是“微型博客”的简称,又称为“微博客”。

(2) 微博的特点

  • 内容形式:
    • 简短、碎片化,记录生活片段、感想或实时现场。
    • 最初每条微博限制为140个字符,现已支持“长微博”。
  • 功能:
    • 支持插入图片、视频、音乐等。
    • 可通过网页、WAP网、手机短信、客户端等多种方式更新。
  • 互动性强:
    • 实时性、现场感和传播性极强,超过传统媒体。
    • 支持即时通讯(如QQ、MSN)和API接口。

博客与微博的对比

特点 博客 微博
内容形式 长篇文章 简短、碎片化
字数限制 无限制 最初140字符,现支持长微博
更新方式 网页或博客平台 网页、手机、短信、API等多种方式
技术要求 更低
互动性 较强 极强
传播速度 较慢 极快
使用场景 深度表达、记录生活 实时分享、快速传播

6.4.7 社交网站

社交网站的定义

  • 社交网站(SNS, Social Networking Site):为拥有相同兴趣与活动的人群创建在线社区。
  • 前身:BBS(论坛)和微博可看作是社交网站的早期形式。

社交网站的代表

  • Facebook(脸书)

  • YouTube(油管):视频分享网站。

  • Twitter(推特):创建于2006年,提供微博服务。

  • LinkedIn(领英)

  • 微信(WeChat)

6.5 电子邮件

6.5.1 电子邮件概述

技术标准

  1. SMTP(Simple Mail Transfer Protocol)
    • 用于发送邮件的标准协议。
    • 只能传送可打印的7位 ASCII 码邮件。
  2. MIME(Multipurpose Internet Mail Extensions)
    • 1996年发布,扩展了 SMTP 的功能。
    • 支持多种数据类型(如文本、声音、图像、视频等)。
    • 在邮件首部中说明数据类型。
  3. POP3(Post Office Protocol)
    • 用于从邮件服务器读取邮件的协议。
    • 版本3是目前广泛使用的标准。
  4. IMAP(Internet Mail Access Protocol)
    • 另一种邮件读取协议,功能比 POP3 更强大。

电子邮件系统组成

  1. 用户代理(User Agent, UA)
    • 用户与电子邮件系统的接口, 又称为电子邮件客户端软件
      • Outlook Express
      • Foxmail
    • 功能:
      • 撰写:提供编辑环境,支持通信录、自动提取地址等。
      • 显示:显示来信及附件(如声音、图像)。
      • 处理:支持删除、存盘、打印、转发等操作。
      • 通信:通过 SMTP 发送邮件,通过 POP3 或 IMAP 接收邮件。
  2. 邮件服务器
    • 核心组件,负责发送和接收邮件,采用C/S方式。
    • 24小时不间断工作,具有大容量邮箱。
    • 功能:
      • 向发件人报告邮件传送结果(已交付、被拒绝、丢失等)。
      • 支持 SMTP 和 POP3 协议。
    • 既可以充当客户(发送邮件时),也可以充当服务器(接收邮件时)。
  3. 协议
    • SMTP:用于用户代理向邮件服务器发送邮件,或在邮件服务器之间发送邮件。
    • POP3 / IMAP:用于用户代理从邮件服务器读取邮件。

邮件发送与接收流程

  1. 发送流程
    • 发件人撰写邮件:使用用户代理编辑邮件。
    • 发送邮件:用户代理通过 SMTP 【作为SMTP客户】将邮件发送到发送方邮件服务器。
    • 邮件缓存:发送方邮件服务器将邮件暂时存放在缓存队列中。
    • 建立 TCP 连接:发送方邮件服务器与接收方邮件服务器建立 TCP 连接。
    • 传递邮件:发送方邮件服务器通过 SMTP 【作为SMTP客户】将邮件发送到接收方邮件服务器。
    • 存储邮件:接收方邮件服务器将邮件放入收件人邮件服务器。
  2. 接收流程
    • 收件人读取邮件:用户代理通过 POP3 或 IMAP 从接收方邮件服务器读取邮件。
    • 邮件传送方向:
      • SMTP:客户“推”邮件给服务器。
      • POP3:客户从服务器“拉”邮件。

在这里插入图片描述

电子邮件地址格式

  1. 格式

    用户名@邮件服务器的域名
    
    • 例:xyz@abc.com
      • abc.com:邮件服务器的域名。
      • xyz:用户名(邮箱名)。
  2. 唯一性

    • 用户名在邮件服务器中必须唯一。
    • 确保电子邮件地址在全球范围内的唯一性。

6.5.2 简单邮件传送协议 SMTP

SMTP 定义

  • SMTP 是一种用于发送电子邮件的协议

  • 规定了两个相互通信的 SMTP 进程之间如何交换信息。

  • 使用客户端-服务器模式:

    • SMTP 客户端:负责发送邮件。
    • SMTP 服务器:负责接收邮件。
  • 规定了14 条命令21 种应答信息

    • 命令由几个字母组成。
    • 应答信息以 3 位数字代码开头,可能附带简单文字说明。

SMTP 通信流程

在这里插入图片描述

  • 连接建立
    • SMTP 客户端每隔一段时间(如 30 分钟)扫描邮件缓存。
    • 发现邮件后,使用 端口 25 与接收方 SMTP 服务器建立 TCP 连接。
    • 接收方服务器返回 220 Service ready(服务就绪)。
    • 客户端发送 HELO 命令,附带发送方主机名。
    • 接收方服务器返回:
      • 250 OK(准备接收)。
      • 421 Service not available(服务不可用)。
    • 特点:
      • TCP 连接直接在发送方和接收方邮件服务器之间建立。
      • 不使用中间邮件服务器。
  • 邮件传送
    • MAIL 命令开始,附带发件人地址(如 MAIL FROM: <xiexiren@tsinghua.org.cn>)。
    • 接收方返回:
      • 250 OK(准备接收)。
      • 其他代码(如 451 处理时出错452 存储空间不够500 命令无法识别)。
    • 发送 RCPT 命令,附带收件人地址(如 RCPT TO: <收件人地址>)。同一个邮件发送给一个收件人就会有一个RCPT 命令
      RCPT 命令的作用就是:先弄清接收方系统是否已做好接收邮件的准备,然后才发送邮件
    • 接收方返回:
      • 250 OK(邮箱存在)。
      • 550 No such user here(无此用户)。
    • 发送 DATA 命令,开始传送邮件内容。
    • 接收方返回 354 Start mail input; end with <CRLF>.<CRLF>
    • 客户端发送邮件内容,以 <CRLF>.<CRLF> 结束。
    • 接收方返回 250 OK 或错误代码。
  • 连接释放
    • 客户端发送 QUIT 命令。
    • 接收方返回 221 Service closing transmission channel
    • TCP 连接释放,邮件传送结束。

SMTP 的缺点

  1. 缺乏身份验证
    • FROM 命令后的地址可任意填写,方便垃圾邮件发送者。
    • 垃圾邮件占全球邮件的 50% 至 90%
  2. 设计限制
    • 虽支持 MIME 扩展,但传输非 ASCII 码长报文效率低。
    • 邮件为明文传输,不利于保密。
    • SMTP不能传送可执行文件或其他的二进制对象。
    • SMTP限于传送7位的ASCII码。许多其他非英语国家的文字(如中文、俄文,甚至带重音符号的法文或德文)就无法传送。
    • SMTP服务器会拒绝超过一定长度的邮件。
    • 某些SMTP的实现并没有完全按照SMTP的互联网标准。常见的问题如下:
      • 回车、换行的删除和增加;
      • 超过 76个字符时的处理:截断或自动换行;
      • 后面多余空格的删除;
      • 将制表符 tab 转换为若干个空格。
  3. 扩展改进:ESMTP(Extended SMTP)

6.5.3 电子邮件的信息格式

电子邮件的基本结构

  • 信封(Envelope)
    • 包含邮件传输所需的信息(如收件人地址)。
    • 由邮件系统自动生成,用户无需填写。
  • 内容(Content)
    • 包含邮件的首部(Header)和主体(Body)。
    • 首部格式由 RFC 5322 规定,主体部分用户可自由撰写。

邮件内容的首部

  1. 首部格式

    • 关键字 + 冒号 组成。

    • 最重要的关键字包括:

      ToSubjectCcBccFromDateReply-To

  2. 常用首部关键字详解

    • To:
      • 填入一个或多个收件人的电子邮件地址。
      • 可使用地址簿(Address Book):
        • 将常用联系人姓名和电子邮件地址存入地址簿。
        • 撰写邮件时,点击收件人名字,邮件地址自动填入。
    • Subject:
      • 邮件的主题,反映邮件主要内容。
      • 类似于文件系统的文件名,便于用户查找邮件。
    • Cc:
      • 抄送(Carbon copy),表示给某人发送邮件副本。
      • 收件人可以看到抄送的对象。
    • Bcc:
      • 盲抄送(Blind carbon copy)。
      • 发送邮件副本,但收件人看不到抄送的对象。
      • 适用于需要保密的情况。
    • From:
      • 发件人的电子邮件地址。
      • 邮件系统自动填入。
    • Date:
      • 发信日期。
      • 邮件系统自动填入。
    • Reply-To:
      • 对方回信的电子邮件地址。
      • 可与发件人地址不同。
      • 例如:使用他人邮箱发信,但希望回信发送到自己的邮箱。
      • 可预先设置,无需每次写信时填写。

在这里插入图片描述

6.5.4 邮件读取协议 POP3 和IMAP

邮局协议第3个版本POP3

  1. 工作方式
    • 客户端-服务器模式:
      • 用户计算机运行 POP3 客户端程序
      • 邮件服务器运行 POP3 服务器程序和SMTP 服务器程序
    • 用户需输入 鉴别信息(用户名和密码) 才能读取邮箱。
  2. 特点
    • 用户从 POP3 服务器读取邮件后, 服务器会删除该邮件
    • 可能存在的问题:用户在多个设备上访问邮件时,未复制可能导致邮件丢失。

网际报文存取协议IMAP (Internet Message Access Protocol)

  1. 工作方式

    • 客户端-服务器模式:
      • 用户计算机运行 IMAP 客户端程序,与邮件服务器建立 TCP 连接。
    • 联机协议:
      • 用户在本地计算机上操作邮件服务器的邮箱,就像在本地操作一样。
    • 邮件服务器上的邮件 一直保存,直到用户明确删除。
  2. 特点

    • 多设备访问:用户可在不同设备上随时访问邮件。
    • 邮件管理:支持创建层次式文件夹、移动邮件、条件查找。
    • 部分读取:用户可选择只下载邮件的某一部分(如正文),节省时间和带宽。
    • 未下载的邮件:邮件始终保存在服务器上,用户需联网才能查阅。
  3. 缺点

    邮件一直存储在服务器上,若未将邮件复制到本地设备,可能无法离线查看,需联网才能访问

POP3 与 IMAP 的功能比较

操作位置 操作内容 IMAP POP3
收件箱 阅读、标记、移动、删除邮件等 客户端与邮箱更新同步 仅在客户端内
发件箱 保存到已发送 客户端与邮箱更新同步 仅在客户端内
创建文件夹 新建自定义的文件夹 客户端与邮箱更新同步 仅在客户端内
草稿 保存草稿 客户端与邮箱更新同步 仅在客户端内
垃圾文件夹 接收并移入垃圾文件夹的邮件 支持 不支持
广告邮件 接收并移入广告邮件夹的邮件 支持 不支持

POP3 与 IMAP 的比较

特性 POP3 IMAP
协议版本 POP3(RFC 1939) IMAP4(RFC 3501)
工作方式 下载邮件到本地,服务器删除邮件 在服务器上联机操作邮件
邮件存储 邮件存储在本地设备 邮件存储在服务器上
多设备访问 不支持多设备同步 支持多设备访问和同步
邮件管理 功能有限 支持文件夹创建、移动、查找
部分读取 不支持 支持只读取邮件的某一部分
适用场景 单一设备、离线阅读 多设备、联机操作

6.5.5 基于万维网的电子邮件

  • 万维网电子邮件(Webmail) 解决了传统电子邮件的不便,用户无需安装用户代理软件。
  • 通过浏览器即可在任何地方 方便地收发邮件,数据同步存储在服务器上。
  • HTTP 协议 用于浏览器与邮件服务器之间的通信,SMTP 协议 用于邮件服务器之间的传输。
  • 常见的 Webmail 服务 包括 Gmail、Hotmail、Yahoo 邮箱、网易邮箱、新浪邮箱和 QQ 邮箱。

6.5.6 通用互联网邮件扩充 MIME

MIME并没有改动或取代SMTP。MIME的意图是继续使用原来的邮件格式但增加了邮件主体的结构,并定义了传送非ASCI码的编码规则。也就是说,MIME邮件可在现有的电子邮件程序和协议下传送。

在这里插入图片描述

MIME主要包括以下三部分内容:

  • 5个新的邮件首部字段,它们可包含在原来的邮件首部中。这些字段提供了有关邮件主体的信息。
  • 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。
  • 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。

每个MIME报文包含告知收件人数据类型和使用编码的信息。MIME 把增加的信息加入到原来的邮件首部中。

MIME增加的5个新的邮件首部:

  • MIME-Version: 标志 MIME的版本。现在的版本号是1.0。若无此行,则为英文文本
  • Content-Description: 这是可读字符串,说明此邮件主体是否是图像、音频或视频。
  • Content-ld: 邮件的唯一标识符。
  • Content-Transfer-Encoding: 在传送时邮件的主体是如何编码的。
  • Content-Type: 说明邮件主体的数据类型和子类型。

内容传送编码(Content-Transfer-Encoding)

  • 7位ASCII码

    • 特点:
      • 最简单的编码方式。
      • 每行不能超过 1000 个字符
    • 适用场景:邮件主体完全由 ASCII 码构成。
    • MIME 处理:不对由 ASCII 码构成的邮件主体进行任何转换。
  • quoted-printable编码

    • 特点:
      • 适用于传输数据中只有 少量非 ASCII 码 的情况(如汉字)。
      • 可打印的 ASCII 码 保持不变(特殊字符“=”除外)。
      • 非 ASCII 码 和“=”通过特定规则编码。
    • 编码规则:
      • 每个非 ASCII 码字节的二进制代码用 两个十六进制数字 表示,前面加上“=”。
      • 示例:
        • 汉字“系统” 的二进制编码:11001111 10110101 11001101 10110011
        • 十六进制表示:CF B5 CD B3
        • Quoted-Printable 编码表示:=CF=B5=CD=B3
      • “=”的编码:
        • 二进制代码:00111101(十六进制 3D)
        • Quoted-Printable 编码:=3D
    • 开销:
      • 编码后数据长度可能增加(如 32 位数据编码后为 96 位,开销达 200%)。
  • Base64编码

    • 特点:

      • 适用于 任意二进制文件 的编码。
      • 将二进制数据转换为可打印的 ASCII 字符。
    • 编码规则:

      • 将二进制代码划分为 24 位长 的单元。
      • 每个 24 位单元划分为 4 个 6 位组
      • 每个 6 位组转换为对应的 ASCII 字符:
        • 0-63 分别用A-Z, a-z, 0-9, +, /表示。
          • A 表示 0,B 表示 1,…,Z 表示 25。
          • a 表示 26,b 表示 27,…,z 表示 51。
          • 0 表示 52,1 表示 53,…,9 表示 61。
          • “+”表示 62,“/”表示 63。
      • 填充规则:若最后一组不足 24 位:
        • 两个等号(==) 表示仅剩 8 位。
        • 一个等号(=) 表示仅剩 16 位。
      • 回车和换行都忽略,它们可在任何地方插入。
    • 示例:

      24 位二进制代码 01001001 00110001 01111001

      划分为4个6位组 010010 010011 000101 111001

      对应的 base64 编码 S T F 5

      用 ASCII编码发送 01010011 01010100 01000110 00110101

内容类型

MIME标准规定Content-Type说明:

  • 必须含有两个标识符:内容类型(type)和子类型(subtype),中间用“/”分开。
  • MIME允许发件人和收件人自己定义专用的内容类型。但为避免可能出现名字冲突,标准要求要以字符串X-开始。
内容类型 子类型举例 说明
text(文本) plain, html, xml, css 不同格式的文本
image(图像) gif, jpeg, tiff 不同格式的静止图像
audio(音频) basic, mpeg, mp4 可听见的声音
video(视频) mpeg, mp4, quicktime 不同格式的影片
model(模型) vrml 3D 模型
application(应用) octet-stream, pdf, javascript, zip 不同应用程序产生的数据
message(报文) http, rfe822 封装的报文
multipart(多部分) mixed, alternative, parallel, digest 多种类型的组合

MIME 标准为 multipart 定义了四种可能的子类型:

  • mixed

    • 特点:

      • 允许单个报文包含 多个相互独立的子报文

      • 每个子报文可以有自己的 类型和编码

    • 应用场景:

      • 在单个报文中附加文本、图形、声音 等。

      • 用额外数据段发送一个备忘录,类似商业信笺含有的 附件。

    • Boundary 关键字:

      • Boundary= 定义分隔报文各部分的字符串。

      • 分隔字符串由邮件系统定义,需确保其不会出现在邮件内容中。

      • 当某一行以两个连字符“–”开始,后面紧跟上述的字符串,就表示下面开始了另一个子报文。

  • alternative

    • 特点:允许单个报文包含 同一数据的多种表示形式
    • 应用场景:
      • 向使用不同硬件和软件系统的收件人发送备忘录。
      • 同时用 普通 ASCII 文本 和 格式化文本 发送数据,从而允许拥有图形功能的计算机用户在查看图形时选择格式化的形式。
  • parallel

    • 特点:允许单个报文包含 同一数据的多种表示形式。例如,图像和声音子部分必须一起播放。
  • digest

    • 特点:允许单个报文含有一组其他报文(如从讨论中收集电子邮件报文)。

6.6 动态主机配置协议DHCP

基本概念:

  • DHCP协议的作用: 给刚接入网络的主机动态分配IP地址、配置默认网关(默认路由器的 IP 地址)、子网掩码、域名服务器的 IP 地址
  • 提供了即插即用连网的机制:允许一台计算机加入新的网络和并自动获取 IP 地址
  • DHCP使用客户/服务器模型(C/S):
    • DHCP客户:就是新接入网络主机(希望获得IP地址等配置)
    • DHCP服务器:就是负责分配IP地址的那台主机,管理一系列IP地址池
      注:在家庭网络中,通常由家庭路由器兼职“DHCP服务器”
      在一个大型网络内可以有多台DHCP服务器
  • DHCP是应用层协议基于UDP —— 客户UDP端口号=68服务器UDP端口号=67
  • 中继代理:为减少DHCP服务器的数据
  • 租用期:DHCP服务器分配给DHCP客产的IP地址是临时的,DHCP客户只能在一段有限的时间内使用这个分配到的IP地址。DHCP协议称这段时间为租用期。
    • 租用期过了一半(T时间到),DHCP客户发送请求报文要求更新租用期。
    • 若DHCP服务器不响应以上更新租用期的请求报文,则在租用期过了87.5%时,DHCP客户必须重新发送请求报文

原理:

①客户→服务器:DHCP发现报文

携带信息:客户主机的MAC地址(还可以提出对IP地址租用期的要求)
网络层:源IP地址=0.0.0.0目的IP地址=255.255.255.255(广播IP数据报)
链路层:源MAC=客户的MAC地址,目的MAC=全1(广播帧)

②服务器→客户:DHCP提供报文

携带信息:给客户分配的 IP 地址租用期子网掩码默认网关
网络层:源IP=DHCP服务器的IP地址目的IP=255.255.255.255(广播IP数据报)
链路层:源MAC=服务器的MAC地址,目的MAC=客户的MAC地址(单播帧)

③客户→服务器:DHCP请求报文

携带信息:客户机确认要使用的IP地址
网络层:源IP=0.0.0.0,目的IP=255.255.255.255(广播IP数据报)
链路层:源MAC=客户的MAC地址,目的MAC=全1(广播帧)

④服务器→客户:DHCP确认报文

携带信息:与报文②类似
网络层:源IP=DHCP服务器的IP地址,目的IP=255.255.255.255(广播IP数据报)
链路层:源MAC=服务器的MAC地址,目的MAC=客户的MAC地址(单播帧)

在这里插入图片描述

报文格式:

在这里插入图片描述

6.7 简单网络管理协议 SNMP

6.7.1 网络管理的基本概念

1. 网络管理的基本概念

  • 定义:网络管理是对硬件、软件和人力的综合与协调,以便对网络资源进行监视、测试、配置、分析、评价和控制,从而以合理的价格满足网络需求(如实时运行性能、服务质量等)。
  • 核心目标:确保网络高效、可靠、安全地运行。

2. 网络管理模型的主要构件

  • 管理站(Manager)/ 管理器
    • 由网络管理员(人)操作的:负责向被管设备发送命令。
    • 关键构件:管理程序(Management Program)- 运行时就成为管理进程。
    • 所在的部门 :“网络运行中心(NOC)”(Network Operations Center)
    • 可以指硬件(管理站)或软件(管理程序)。
  • 被管设备(Managed Devices)/ 网络元素 / 网元
    • 网络中被管理的设备,如主机、路由器、打印机、集线器等。
    • 在每一个被管设备中可能有许多被管对象(Managed Object)- 可以是硬件(如网卡)或软件(如路由协议配置参数)。
  • 代理程序(Agent)
    • 运行在每个被管设备中的程序,负责与管理站通信。
    • 在管理程序的命令和控制下,在被管设备上采取本地的行动。
  • 网络管理协议(Network Management Protocol)
    • 管理站与代理之间通信的规则和格式。
    • SNMP(Simple Network Management Protocol)

3. SNMP 的代理与委托代理

  1. 代理(Agent)
    • 运行在被管设备中,负责与管理站通信。
    • 响应 SNMP 请求并执行操作。
  2. 委托代理(Proxy Agent)
    • 用于非 SNMP 协议设备的网关。
    • 提供协议转换和过滤功能,使管理站能管理这些设备。

4. 简单网络管理协议(SNMP)

  • 主要功能
    • 监视网络性能、检测分析网络差错、配置网络设备。
  • 工作原理
    • 客户/服务器模式
      • 管理程序运行 SNMP 客户程序
      • 代理程序运行 SNMP 服务器程序,监听请求并返回信息或执行动作。
    • 一个管理站通常与多个代理交互。
  • 版本
    • SNMPv1:最初版本,功能简单。
    • SNMPv2:增强功能,但仍存在安全问题。
    • SNMPv3:引入安全特性,授权人员才能执行管理操作。
  • SNMP 的组成
    • SNMP 协议:定义了管理站和代理之间所交换的分组格式。所交换的分组包含各代理中的对象(变量)名及其状态(值)。SNMP负责读取和改变这些数值
    • 管理信息结构(SMI)
      • 定义命名对象和对象类型的通用规则,以及把对象和对象的值进行编码的规则。
      • 确保网络管理数据的语法和语义无二义性。
    • 管理信息库(MIB)
      • 在被管设备中创建命名对象,并规定其类型。
      • 类似于程序设计中变量说明的角色。

在这里插入图片描述

6.7.2 管理信息结构SMI

SMI的功能:

一、被管对象应怎样命名

对象命名树(Object Naming Tree)

  • 定义:对象命名树是一个层次化的命名结构,所有被管对象都必须在树上。
  • 作用:为网络管理中的对象提供唯一标识符,便于管理和查找。
  • 特点:
    • 树结构从根节点开始,向下分支出多个层级。
    • 每个节点都有一个标号(数字)名称(英文小写)

对象命名树的层级结构

  1. 根节点

    • 没有名字,是树的起点。
  2. 顶级节点

    • 三大标准制定单位:
      • ITU-T(国际电信联盟电信标准部,原 CCITT),标号为 0
      • ISO(国际标准化组织),标号为 1
      • ISO/ITU-T 联合体,标号为 2
  3. ISO 子节点

    • org(ISO 认同的组织成员),标号为 3
  4. org 子节点

    • dod(美国国防部,Department of Defense),标号为 6
  5. dod 子节点

    • internet(Internet 标准),标号为 1
    • 对象标识符:1.3.6.1
  6. internet 子节点

    • mgmt(管理),标号为 2
  7. mgmt 子节点

    • mib-2(管理信息库),标号为1

    • 对象标识符:1.3.6.1.2.1

    • 包含所有被 SNMP 管理的对象。

8.mgmt 子节点

类别 标号 所包含的信息
system (1) 主机或路由器的操作系统
interfaces (2) 各种网络接口
address translation (3) 地址转换(例如,ARP映射)
iP (4) IP软件
icmp (5) ICMP 软件
tcp (6) TCP 软件
udp (7) UDP 软件
egp (8) EGP 软件

二、用来存储被管对象的数据类型有哪些

SMI使用基本的抽象语法记法1(即ISO 制定的 ASN.1)来定义数据类型,但又增加了一些新的定义。因此 SMI既是 ASN.1的子集,又是ASN.1的超集。

任何数据都具有两种重要的属性,即值(value)与类型(type)。这里“值”是某个值集合中的一个元素,而“类型”则是值集合的名字。如果给定一种类型,则这种类型的一个值就是该类型的一个具体实例。

SMI把数据类型分为两大类:

  • 简单类型
类型 大小 说明
INTEGER 4字节 在-231到 231-1之间的整数
Interger32 4字节 和INTEGER 相同
Unsigned32 4字节 在0到232-1之间的无符号数
OCTET STRING 可变 不超过 65535 字节长的字节串
OBJECT IDENTIFIER 可变 对象标识符
IPAddress 4字节 由4个整数组成的IP地址
Counter32 4字节 可从0增加到232的整数:当它到达最大值时就返回到0
TimeTicks 4字节 记录时间的计数值,以1/100秒为单位
BITS 比特串
Opaque 可变 不解释的串
  • 结构化类型
    • sequence
      • 类似于C语言中的struct或record,它是一些简单数据类型的组合(不一定要相同的类型)。
    • sequence of
      • 类似于C语言中的 array,它是同样类型的简单数据类型的组合,或同样类型的sequence数据类型的组合。

三、 在网络上传送的管理数据应如何编码

SMI 使用 ASN.1制定的基本编码规则 ==BER(Basic Encoding Rule)==进行数据的编码。BER指明了每种数据的类型和值。

工作原理:

  • 发送端用BER编码,可把用ASN.1所表述的报文转换成唯一的比特序列。
  • 接收端用BER进行解码,就可得到该比特序列所表示的ASN.1报文。

编码:

ASN.1 把所有的数据元素都表示为T-L-V 三个字段组成的序列。T字段(Tag)定义数据的类型,L 字段(Length)定义 字段的长度,而 V字段(Value)定义数据的值。

在这里插入图片描述

  • T字段又叫作标记字段,占1字节。T字段又再分为以下三个子字段:

    • 类别(2位) 共四种:
      • 通用类(00),即ASN.1定义的类型:
      • 应用类(01),即SMI定义的类型;
      • 上下文类(10),即上下文所定义的类型:
      • 专用类(11),保留为特定厂商定义的类型。
    • 格式(1位)共两种,指出数据类型的种类:
      • 简单数据类型(0)
      • 结构化数据类型(1)
    • 编号(5位)用来标志不同的数据类型。
      • 编号的范围一般为0~30。
      • 当编号大于30时,T字段就要扩展为多个字节。
  • L字段又叫作长度字段 (单字节或多字节)。

    • 当L字段为单字节时,其最高位为0, 后面的7位定义V字段的长度。

    • 当L字段为多个字节时,其最高位为1,而后面的7位定义后续字节的字节数(用二进制整数表示)。这时,所有的后续字节并置起来的二进制整数定义V字段的长度。

      在这里插入图片描述

  • V字段又叫作值字段,用于定义数据元素的值。该字段还可嵌套其他数据元素的TLV字段,并可多重嵌套。

6.7.3 管理信息库 MIB

1. 管理信息与管理信息库 (MIB) 的概念

  • 管理信息
    • 在互联网的网管框架中,管理信息是被管对象的集合
    • 被管对象必须维护供管理程序读写的控制状态信息
  • 管理信息库 (MIB)
    • 被管对象构成一个虚拟的信息存储器,称为管理信息库 (MIB)。
    • 只有 MIB 中的对象才能被 SNMP 管理
    • 管理程序通过读取或设置 MIB 中的信息值来管理网络。

2. MIB 的作用

  • 存储网络设备的状态信息
    • 路由器维护各网络接口的状态、流量统计、丢包数等。
    • 调制解调器维护发送和接收的字符数、传输速率等。
  • 提供管理接口
    • MIB 中的信息为网络管理程序提供标准化的数据访问接口。
    • 管理程序通过 SNMP 读取或修改 MIB 中的数据。

3. MIB 的结构

  • 对象命名树 (Object Naming Tree)
    • MIB 位于对象命名树的 mib-2 节点下,对象标识符为 1.3.6.1.2.1
    • mib-2 节点包含多个信息类别,例如 IP、ICMP、TCP、UDP 等。
  • MIB 变量
    • 是指特定对象的一个实例
    • MIB 中的每个对象都有一个唯一标识符(OID)和名称。
    • 对象实例通常通过后缀 0 表示。
    • 映射关系:
      • MIB 变量与设备内部数据结构可能不同。
      • 设备上的 SNMP 代理负责将 MIB 变量映射到内部数据结构。

4. MIB 变量的表示

  • 简单类型的变量:
    • 用整数表示,例如 ipInReceives 表示收到的 IP 数据报数, 这个变量的标号是3 即1.3.6.1.2.1.4.3
  • 复杂类型的变量:
    • 定义复杂结构,例如 ipRoutingTable 表示路由表。
    • 可以访问单个项目,如前缀、地址掩码、下一跳地址等。
  • MIB 变量的实例化
    • 实例表示:
      • 后缀 0 表示变量的实例。
      • 例如,ipInReceives 的实例为 1.3.6.1.2.1.4.3.0

示例:IP 相关对象

  • 对象标识符 (OID):
    • IP 相关对象的前缀为 1.3.6.1.2.1.4
  • MIB 变量示例:
    • 变量名:iso.org.dod.internet.mgmt.mib.ip.ipInReceives
    • 对象标识符:1.3.6.1.2.1.4.3
    • 变量实例:1.3.6.1.2.1.4.3.0(表示收到的 IP 数据报数)

5. 常见的 MIB 变量:

变量名 OID 所属类别 描述
sysDescr 1.3.6.1.2.1.1.1 system 系统描述信息
sysUpTime 1.3.6.1.2.1.1.3 system 系统运行时间 - 距上次重启动的时间
ifNumber 1.3.6.1.2.1.2.1 interfaces 网络接口数量
ifMtu 1.3.6.1.2.1.2.2.1.4 interfaces 特定接口的最大传送单元 MTU
ipDefaultTTL 1.3.6.1.2.1.4.2 ip IP在生存时间字段中使用的值
ipInReceives 1.3.6.1.2.1.4.3 ip 收到的 IP 数据报数目
ipForwDatagrams 1.3.6.1.2.1.4.6 ip 转发的数据报数目
ipOutNoRoutes 1.3.6.1.2.1.4.12 ip 路由选择失败的数目
ipReasmOKs 1.3.6.1.2.1.4.15 ip 重装的数据报数目
ipFragOKs 1.3.6.1.2.1.4.14 ip 分片的数据报数目
ipRoutingTable 1.3.6.1.2.1.4.21 ip IP 路由表
icmplnEchos 1.3.6.1.2.1.5.8 icmp 收到的ICMP 回送请求数目
tcpCurrEstab 1.3.6.1.2.1.6.9 tcp 当前建立的 TCP 连接数
tcpRtoMin 1.3.6.1.2.1.6.19 tcp TCP允许的最小重传时间
tcpMaxConn 1.3.6.1.2.1.6.4 tcp 允许的最大 TCP连接数目
tepinSegs 1.3.6.1.2.1.6.10 tcp 已收到的 TCP 报文段数目
udpInDatagrams 1.3.6.1.2.1.7.1 udp 收到的 UDP 数据报数

6.7.4 SNMP的协议数据单元和报文

1. SNMP 的基本功能

SNMP 的操作只有两种基本的管理功能:

  • 读操作:
    • 使用 Get 报文(如 GetRequest、GetNextRequest、GetBulkRequest)。
    • 用于检测被管理对象的当前状态。
  • 写操作:
    • 使用 Set 报文(SetRequest)。
    • 用于修改被管理对象的状态或配置。

2. SNMP 的工作机制

探询与陷阱结合:

  • 使用探询(至少是周期性地)维持对网络资源的实时监视
  • 使用陷阱机制报告特殊事件,确保网络管理的灵活性和高效性

2. 1 探询机制

  • SNMP 通过探询(Polling)操作实现其功能:
    • 管理进程定时向被管理设备发送探询信息
    • 探询的时间间隔可通过 SNMP 的 管理信息库(MIB) 进行配置。
  • 探询的优点:
    1. 系统相对简单。
    2. 能够限制网络中管理信息的通信量。
  • 探询的缺点:
    1. 不够灵活,管理的设备数量有限。
    2. 开销较大,如果探询频繁但未得到有用信息,会浪费通信线路和 CPU 资源。

2.2 陷阱机制

  • SNMP 不是完全的探询协议,它支持陷阱(Trap)机制
    • 被管设备的代理可以在检测到事件时主动发送陷阱信息,无需等待管理进程的探询。
    • 陷阱用于报告特殊事件(如故障或异常)。
  • 陷阱的特点:
    1. 代理会根据 门限值(Threshold) 过滤事件,只报告达到门限值的事件。
    2. 仅在严重事件发生时发送,减少不必要的通信
    3. 陷阱信息简单,字节数较少,通信开销小,提高网络管理效率。

3. SNMP 使用的端口

  • 服务器端(代理):
    • 使用 端口 161 接收 Get/Set 报文并发送响应报文。
  • 客户端(管理站):
    • 使用 端口 162 接收来自代理的 Trap 报文。

4.SNMP报文格式

在这里插入图片描述

一个SNMP 报文共由四个部分组成,即版本、首部、安全参数和 SNMP 报文的数据部分

  • 版本:最新版本是版本 3

  • 首部

    • 报文标识(messag identitication)
    • 最大报文长度
    • 报文标志(message flag),占1字节
  • 安全参数

  • 数据部分

    • 上下文引擎ID上下文名:需要加密时才使用的两个字段

    • SNMP PDU

      • PDU 类型

        PDU 类型 用途
        GetRequest 0(A0) 管理者从代理读取一个或一组变量的值。
        GetNextRequest 1(A1) 管理者从代理读取MIB树上的下一个变量的值(即使不知道此变量名也行)。-- 用于遍历 MIB 树
        Response 2(A2) 代理向管理者或管理者向管理者发送对五种Request报文的响应,并提供差错码、差错状态等信息
        SetRequest 3(A3) 管理者对代理的一个或多个MIB变量的值进行设置
        GetBulkRequest 5(A5) 管理者从代理读取大数据块的值(如大的列表中的值)
        InformRequest 6(A6) 管理者从另一远程管理者读取该管理者控制的代理中的变量值
        SNMPv2Trap 7(A7) 代理向管理者报告代理中发生的异常事件(例如故障或状态变化)。
        Report 8(A8) 在管理者之间报告某些类型的差错,目前尚未定义
      • 请求ID(request ID)

        • 由管理进程设置的4字节整数值
        • 代理进程在发送响应报请求ID(request ID)文时也要返回此请求ID。
        • 请求ID可使管理进程能够识别返回的响应是对应于哪一个请求报文。
      • 差错状态(error status)

        • 请求报文中,这个字段是
        • 代理进程响应时,就填入 0~18中的一个数字。
          • 0表示 noError(一切正常),
          • 1表示 tooBig(代理无法把回答装入到一个 SNMP 报文之中),
          • 2表示 noSuchName(操作指明了一个不存在的变量),
          • 3 表示 badValue(无效值或无效语法)
      • 差错索引(error index)

        • 请求报文中,这个字段是
        • 代理进程响应时,若出现 noSuchName,badValue 或readOnly 的差错,代理进程就设置一个整数,指明有差错的变量在变量列表中的偏移
      • 变量绑定(variable-bindings)

        • 指明一个或多个变量的名和对应的值。
        • 在请求报文中,变量的值应忽略(类型是 NULL)。

6.8 应用进程跨越网络的通信

6.8.1 系统调用和应用编程接口

系统调用(System Call)

  • 系统调用是应用程序操作系统之间**传递控制权**的机制。
  • 它允许应用程序请求操作系统提供特定的服务(如文件操作、网络通信等)。

系统调用接口 - 应用编程接口 API (Application Programming Interface)

  • 定义:系统调用接口实际上就是应用进程的控制权和操作系统的控制权进行转换的一个接口。

  • 具体实现过程:

    • 当某个应用进程启动系统调用时,控制权就从应用进程传递给了系统调用接口。
    • 此接口再把控制权传递给计算机的操作系统。
    • 操作系统把这个调用转给某个内部过程,并执行所请求的操作。
    • 内部过程一旦执行完毕,控制权就又通过系统调用接口返回给应用进程。

    只要应用进程需要从操作系统获得服务,就要把控制权传递给操作系统,操作系统在执行必要的操作后把控制权返还给应用进程。

可供应用程序使用 TCP/IP 的应用编程接口API

现在TCP/IP协议软件已驻留在操作系统中。可供应用程序使用 TCP/IP 的应用编程接口API分类:

  • 美国加利福尼亚大学伯克利分校定义的API 用在UNIX 操作系统 ==> 套接字接口(socket interface)(或插口接口)

  • 微软公司定义的API 用在Windows操作系统 ==> Windows Socket,简称为WinSock

  • AT&T定义的API 用在UNIX 操作系统 ==> TLI (Transport Layer Interface)

套接字接口

网络编程时常常把套接字作为应用进程和运输层协议之间的接口。

只要应用程序使用TCP/IP协议进行通信,它就必须通过套接字与操作系统交互(这就要使用系统调用函数)并请求其服务。

在这里插入图片描述

1、创建与使用:

  • 创建套接字:
    • 应用程序通过 socket 系统调用,请求操作系统为其创建一个“套接字”。
    • 实际上是请求操作系统把网络通信所需要的一些系统资源(存储器空间、CPU 时间、网络带宽等)分配给该应用进程。
  • 套接字描述符
    • 这些资源的总和叫作套接字描述符(小的整数)。操作系统会返回给应用进程这个套接字描述符。
    • 用于标识套接字,几乎所有网络系统调用都将其作为第一个参数。
    • 在处理系统调用的时候,通过套接字描述符,操作系统就可以识别出应该使用哪些资源来完成应用进程所请求的服务。
  • 关闭套接字:
    • 使用 close 系统调用,关闭套接字且操作系统回收相关资源。

2、套接字数据结构:

  • 套接字描述符表

    • 由于在一个进程中可能同时出现多个套接字,因此需要有一个存放套接字描述符的表,而每一个套接字描述符有一个指针指向存放套接字的地址。
  • 参数:

    • 已填写好参数协议族(PFINET,表示使用Intermet的TCP/IP协议族)和服务(SOCK STREAM,表示使用流式服务,也就是使用TCP服务)。

    • 未填写好参数:初始时的本地和远地的 IP 地址本地和远地的端口,需后续绑定或连接。

在这里插入图片描述

6.8.2 几种常用的系统调用

在这里插入图片描述

1、连接建立阶段

  • 服务器端:

    步骤:socketbindlistenaccept(创建新套接字和从属进程)

    • 套接字创建:
      • 通过 socket 系统调用创建套接字,此时套接字的 端口号和 IP 地址 都是空的。
    • 绑定(bind)- 本地地址绑定到套接字:
      • 应用进程调用 bind 指明套接字的 本地地址(包括本地端口号和本地 IP 地址)。
      • 调用 bind 时,将 熟知端口号(如 HTTP 的 80 端口)和 本地 IP 地址 填写到套接字中。
    • 监听(listen):
      • 服务器调用 listen 将套接字设置为 被动方式,使其能够接受客户端的服务请求。
      • UDP 服务器:UDP 服务器因提供无连接服务,不使用 listen 系统调用
    • 接受连接(accept):
      • 服务器调用 accept 提取远地客户进程发来的连接请求。
      • 并发服务器的实现:
        • 服务器需要同时处理多个连接,常采用 并发方式
        • 主服务器进程(M)- 负责接受新的连接请求:
          • 调用 accept 为每一个新的连接请求创建一个 新的套接字,并将套接字标识符返回给客户端。
          • 同时,创建一个 从属服务器进程(S) 处理新建立的连接。
        • 从属服务器进程(S)- 负责处理已建立的连接:
          • 使用新创建的连接套接字 与客户进程建立连接,并进行双向数据传送。
          • 数据通信结束后,关闭套接字并撤销从属服务器进程。
        • 在任何时刻,服务器中有一个 主服务器进程 和零个或多个 从属服务器进程
      • UDP 服务器:UDP 服务器因提供无连接服务,不使用 accept 系统调用。
  • 客户端

    步骤:socketconnect

    • 套接字创建(socket)

      • 通过 socket 系统调用创建套接字,此时套接字的 端口号和 IP 地址 都是空的。
      • 可以不调用 bind,操作系统内核会自动分配一个 动态端口号(通信结束后由系统收回)。
    • 连接(connect):

      • 调用 connect 与远地服务器建立连接。
      • 主动打开:相当于客户端发出的连接请求。
      • 参数:必须指明 远地端点(即远地服务器的 IP 地址和端口号)。

2、数据传送阶段

客户端和服务器通过 sendrecv 系统调用在 TCP 连接上传输数据。

  • 客户端的角色:

    • 使用 send 发送 请求

    • 使用 recv 接收服务器的 回答

  • 服务器的角色:

    • 使用 recv 接收客户端的 请求

    • 使用 send 发送 回答

send:

把数据复制到操作系统内核的缓存(缓冲区),再通过网络传输到目标套接字。若系统的缓存已满,send就暂时阻塞,直到缓存有空间存放新的数据。

调用send 需要三个变量:

  • 数据要发往的套接字的描述符
  • 要发送的数据的地址
  • 数据的长度

返回值

  • 成功时返回实际发送的字节数,失败时返回错误码。

recv:

从内核缓冲区接收数据,并将其复制到用户空间。如果内核缓冲区没有数据,recv 会 阻塞,直到数据到达。

调用recv也需要三个变量:

  • 要使用的套接字的描述符
  • 缓存的地址
  • 缓存空间的长度

返回值

  • 成功时返回实际接收的字节数,失败时返回错误码。
  • 如果连接关闭,返回 0

send 和 recv 的阻塞特性

  • 阻塞模式:
    • sendrecv 默认处于阻塞模式。
    • 如果内核缓冲区不可用(send 时缓冲区满,recv 时缓冲区空),调用会阻塞直到条件满足。
  • 非阻塞模式:
    • 可以通过设置套接字为非阻塞模式,使 sendrecv 立即返回。
    • 如果条件不满足,返回错误码(如 EAGAINEWOULDBLOCK)。

3、连接释放阶段

调用close释放连接和撤销套接字

6.9 P2P应用

特性 C/S P2P
角色划分 客户端与服务器角色固定
客户端:发起请求,使用服务。 服务器:提供服务,响应请求。
每个节点既是客户端又是服务器
每个节点兼具客户端和服务器的功能。 角色动态变化,节点可以同时提供服务和请求服务。
通信方式 集中式通信
客户端与服务器之间的通信是 一对多 或多对一的,依赖中心服务器
分布式通信
节点之间可以直接通信,通信是 多对多 的,没有中心服务器
资源分布 资源集中存储在服务器,客户端从服务器获取资源 资源分布存储在各个节点上,节点之间共享资源
扩展性 受限(服务器瓶颈),增加客户端数量会对服务器造成更大压力 高(节点越多性能越强)每个节点都可以提供服务,新节点的加入可以提高系统的资源和计算能力
容错性 低(单点故障) 高(无单点故障)
应用场景 集中式服务(Web 服务、邮件服务等) 分布式资源共享(文件共享、流媒体传输等)

6.9.1 具有集中目录服务器的P2P 工作方式

具有集中目录服务器P2P(Peer-to-Peer) 工作方式是一种 混合型 P2P 架构,它结合了 C/S(Client/Server)P2P ,通过引入一个中心化的目录服务器来管理 P2P 网络中的节点信息,从而提高系统的效率和可管理性。

架构概述

  • 集中目录服务器
    • 作为一个中心化的服务,用于维护网络中所有节点的信息(如 IP 地址、可用资源等)。
    • 不直接参与数据传输,仅负责 节点发现资源索引
  • P2P 网络
    • 节点之间直接通信,共享资源。
    • 数据传输不经过目录服务器,而是直接在节点之间进行。

工作流程

  • 节点加入网络:
    • 新节点启动时,向 集中目录服务器 注册自己的信息(如 IP 地址、端口、共享资源等)。
    • 目录服务器将该节点的信息加入其维护的目录中。
  • 资源查找 - 文件定位(集中的):- C/S
    • 当某个节点需要查找资源时,向目录服务器发送查询请求
    • 目录服务器根据查询条件,返回拥有该资源的节点列表
  • 节点选择与连接:
    • 请求节点根据返回的列表,选择其中一个或多个节点,直接与其建立连接。
  • 数据传输(分散的):- P2P
    • 数据传输在选定的节点之间直接进行,不通过目录服务器。
  • 节点退出网络:
    • 当节点退出时,向目录服务器发送注销请求,目录服务器从其维护的目录中移除该节点信息。

6.9.2 具有全分布式结构的P2P 文件共享程序

具有 全分布式结构P2P 文件共享程序 是一种完全去中心化的网络架构,不依赖于任何中心服务器或目录服务器。在这种结构中,所有节点之间通过点对点的方式直接通信和共享资源。

比特洪流BitTorrent(BT)

第三代P2P共享文件程序,使用分散定位和分散传输技术。

1. 核心概念

  • 洪流(Torrent)
    • 指参与某个文件分发的所有对等方(Peer)的集合。
  • 文件块(Chunk)
    • 文件被分成固定大小的块(例如 256KB),每个对等方通过下载和上传文件块参与分发。
  • 追踪器(Tracker)
    • 每个洪流有一个追踪器,负责跟踪参与洪流的对等方,并为新加入的对等方提供其他对等方的信息。

2. 工作流程

  • 加入洪流:
    • 一个新对等方 A 加入洪流时,向追踪器注册。
    • 追踪器随机选择若干对等方(例如 30 个)并返回它们的 IP 地址,A 与这些对等方建立 TCP 连接,称为“相邻对等方”
  • 文件块请求:
    • A 向相邻对等方索取它们拥有的文件块列表。
    • 根据收到的列表,A 请求自己缺少的文件块。
  • 文件块传输:
    • A 从多个相邻对等方下载不同的文件块,同时为其他对等方上传文件块。
  • 退出洪流:
    • 对等方在下载完成后可以选择退出洪流或继续上传文件块。

3. 关键技术

  • 最稀有的优先(Rarest First)

    • 对等方优先请求在其他对等方中副本最少的文件块,以防止这些稀有文件块丢失。
  • 速率优化算法

    • 凡当前有以最高数据率向A传送文件块的某相邻对等方,A就优先把所请求的文件块传送给该相邻对等方

      A持续地测量从其相邻对等方接收数据的速率,并确定速率最高的4个相邻对等方。A就把文件块发送给这4个相邻对等方。每隔10秒钟,A还要重新计算数据率,然后可能修改这4个对等方。【这4个对等方叫作已疏通的或无障碍的(unchoked)对等方。】

6.9.3 P2P 文件分发的分析

从互联网传送数据到主机,称为下载(download)

从主机向互联网传送数据,称为上传(upload)或上载

服务器的文件只是单方向上传到互联网

有 N 台主机要从互联网上的服务器下载一个大文件,其长度为 F bit。服务器的上传速率 us bit/s。主机与互联网连接的链路的上传速率和下载速率分别为ui和di,单位都是 bit/s。假定互联网的核心部分不会产生拥塞。瓶颈只会发生在服务器的接入链路,或者是某些主机的接入链路。

C/S方式:计算给所有主机分发完毕的最短时间 Tcs

  • 服务器端:N台主机共需要从服务器得到的数据总量(比特数)是NF。如果服务器能够不停地以其上传速率us向各主机传送数据,一直到各主机都收到文件F,就需要时间 NF/us 秒。由此可见,Tcs 不可能小于NF/us。【Tcs与主机数成正比】
  • 客户端:如果N台主机都以各自的下载速率不停地下载文件F,那么下载速率最慢的主机(设其下载速率为 dmin)的下载文件时间(F/dmin),将是N个下载时间中最大的一个。由此可见,Tcs也不可能小于 F/dmin

由此可得出所有主机都下载完文件F的最少时间是 T c s = m a x { N F u s , F d m i n } T_{cs} = max \{ \frac{NF}{u_s},\frac{F}{d_{min}}\} Tcs=max{usNF,dminF}

  • 如果 NF/us ≥ F/dmin,则瓶颈在服务器端的接入链路。这时 Tcs = NF/us
  • 如果 F/dmin ≥ NF/us ,则瓶颈在下载最慢的主机的接入链路。这时 Tcs = F/dmin

P2P方式:文件全部分发完毕的最少时间 Tp2p

  • 服务器上传:在文件分发开始时,只有服务器有文件F。服务器必须把文件F的每一个比特通过接入链路传送到互联网(至少要传送一次)。由此可见,Tp2p不可能小于 F/us
  • 主机下载:下载速率最慢的主机(设其下载速率为dmin),下载文件F的时间是F/dmin,这是N个对等方下载时间中最大的一个。由此可见,Tp2p不可能小于 F/dmin
  • 整个系统中所有主机(包括服务器)的上传速率之和:uT = us + u1 + u2 + … + uN。由此可见,Tp2p不可能小于 NF/uT

由此可得出所有主机都下载完文件F的最少时间是 T p 2 p = m a x { F u s , F d m i n , N F u T } T_{p2p} = max \{ \frac{F}{u_s},\frac{F}{d_{min}},\frac{NF}{u_T}\} Tp2p=max{usF,dminF,uTNF}

6.9.4 在P2P 对等方中搜索对象

利用散列函数来定位对等方

设法构建一种分布式数据库,以进行对等方及其资源的定位。存储在数据库中的信息只有两个部分:

  • (1)要查找资源名K(例如,电影或歌曲的名字)。资源名也可称为关键字
  • (2)存放该对象的节点的IP地址N。有的IP地址还附带有端口号。

存放在数据库中的信息就是大量成对出现的 (资源名K,节点的IP地址N)。在查找某资源名K时,只要在数据库中查找到匹配的资源名K,数据库就能够返回对应的节点的IP地址N。

如何查找资源名K

现住广泛使用的索引和查找技术叫作分布式散列表 DHT(Distributed Hash Table)。DHT也可译为分布式哈希表,它是由大量对等方共同维护的散列表。

具体算法:Chord, Pastry,CAN(Content Addressable Network),以及 Kademilia 等。

Chord算法

分布式散列表DHT利用散列函数,把资源名K及其存放的节点P地址N分别映射资源名标识符KID节点标识符NID

如果所有的对等方都使用散列函数 SHA-1,那么通过散列得出的标识符KID 和 NID 都是 160位二进制数字,且其数值范围在[0, 2160-1]之间。虽然从理论上讲,散列函数SHA-1是多对一的函数,但实际上不同输入得到相同的输出的概率是极小的。

例子:假定现在标识符只有5位二进制数字,也就是说,所有经散列函数得出的标识符的数值范围都在[0,31]之间。Chord 把节点按标识符数值从小到大沿顺时针排列成一个环形覆盖网络,按以下规则映射:

  • 节点标识符NID按照其标识符值映射到Chord环上对应的点。

  • 资源名标识符KID则按照其标识符值映射到与其值最接近的下一个NID

    最接近的下一个”NID就是指:从KID值开始,按顺时针方向沿 Chord 环遇到的下一个 NID。这表示要查找存放资源的IP地址,应当到NID节点去查找。并非存放在NID节点。

在这里插入图片描述

为了加速查找,在Chord 环上可以增加一些指针表(finger table),它又称为路由表或查找器表

若Chord环上的标识符有m位,则在节点n上的指针表可设置不超过m个指针,指向其后继的节点。

在这里插入图片描述


参考:

教材:

计算机网络(第8版) (谢希仁) (Z-Library).pdf

Python3网络爬虫开发实战 第2版 (崔庆才) (Z-Library).pdf

视频:

王道计算机考研 计算机网络

计算机网络 第8版 谢希仁