【学习笔记】计算机网络(六)
第6章应用层
文章目录
- 第6章应用层
- 6.1 域名系统DNS
- 6.1.1 域名系统概述
- 6.1.2 互联网的域名结构
- 6.1.3 域名服务器
- 域名服务器的分区管理
- DNS 域名服务器的层次结构
- 域名服务器的可靠性
- 域名解析过程-两种查询方式
- DNS 高速缓存机制
- 6.2 文件传送协议
- 6.2.1 FTP 概述
- 6.2.2 FTP 的基本工作原理
- 6.2.3 简单文件传送协议 TFTP
- 6.3 远程终端协议 TELNET
- 6.3.1 TELNET 概述
- 6.3.2 TELNET 的工作原理
- 6.3.3 网络虚拟终端 (NVT)
- 6.3.4 TELNET 的选项协商
- 6.3.5 SSH
- 6.4 万维网WWW
- 6.4.1 万维网概述
- 6.4.2 统一资源定位符 URL
- 6.4.3 超文本传送协议 HTTP
- 6.4.4 万维网的文档
- 静态文档(static document)
- 动态万维网文档
- 活动万维网文档
- 6.4.5 万维网的信息检索系统
- 全文检索搜索引擎
- 分类目录搜索引擎
- 垂直搜索引擎(vertical search engine)
- 元搜索引擎(meta search engine)
- 6.4.6 博客和微博
- 6.4.7 社交网站
- 6.5 电子邮件
- 6.5.1 电子邮件概述
- 6.5.2 简单邮件传送协议 SMTP
- 6.5.3 电子邮件的信息格式
- 6.5.4 邮件读取协议 POP3 和IMAP
- 6.5.5 基于万维网的电子邮件
- 6.5.6 通用互联网邮件扩充 MIME
- 6.6 动态主机配置协议DHCP
- 6.7 简单网络管理协议 SNMP
- 6.7.1 网络管理的基本概念
- 6.7.2 管理信息结构SMI
- 6.7.3 管理信息库 MIB
- 6.7.4 SNMP的协议数据单元和报文
- 6.8 应用进程跨越网络的通信
- 6.8.1 系统调用和应用编程接口
- 6.8.2 几种常用的系统调用
- 6.9 P2P应用
- 6.9.1 具有集中目录服务器的P2P 工作方式
- 6.9.2 具有全分布式结构的P2P 文件共享程序
- 6.9.3 P2P 文件分发的分析
- 6.9.4 在P2P 对等方中搜索对象
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)
- 流程:
- 主机向本地域名服务器发出查询请求。
- 如果本地域名服务器无法解析,它会以 DNS 客户的身份继续向其他域名服务器查询,直到得到结果。【被查询服务器代替本地域名服务器完成查询】
- 结果:
- 返回查询的 IP 地址或报错信息。
- 最终结果一次性返回。
(2)迭代查询(Iterative Query)
- 流程:
- 本地域名服务器向根域名服务器发出查询请求。
- 根域名服务器返回下一步应查询的顶级域名服务器地址。
- 本地域名服务器继续向顶级域名服务器查询,依此类推,直到得到最终结果。
- 结果:
- 依次返回下一步应查询的域名服务器地址或最终 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
传输数据
。
-
-
主进程与从属进程的处理并发进行:
- 主进程:负责
监听和接受客户端
的连接请求
,创建控制进程
。不直接参与具体的会话或文件传输。 - 从属进程:负责
处理单个客户请求
。在运行期间根据需要可能创建其他子进程
。 - 控制进程:由主进程创建的独立进程,管理与客户端的控制连接,接收并解析客户端命令。协调数据传输进程的启动和操作。管理会话状态,直到客户端断开连接。
- 数据传输进程:由控制进程派生及协调,负责实际的文件传输操作,在传输完成后关闭数据连接并终止–具有生命周期。
- 服务器端启动主进程:
- 主进程启动并绑定到默认的 FTP 端口(端口号 21)。
- 主进程开始监听(等待)客户端的连接请求。
- 客户端发起连接连接:
- 当客户端尝试连接到 FTP 服务器时,客户端会向服务器的熟知端口(端口号 21)发送连接请求。
- 主进程接受客户端的连接请求:
- 主进程派生子进程 – 控制进程:
- 控制进程专门负责处理该客户端的会话,而主进程会监控该控制进程的状态,确保其正常运行,并且继续监听其他客户端的连接请求。
- 控制进程:
- 控制进程管理会话状态
- 控制进程接收客户端发送的命令(如
LIST
、RETR
、STOR
等),解析这些命令,处理这些命令- 当客户端发送文件传输相关命令(如
RETR
或STOR
)时,控制进程派生数据传输进程- 数据传输进程建立与客户端之间的数据连接:
- 在主动模式下,数据传输进程
从服务器端向客户端发起数据连接请求
【服务器使用端口 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 的报文类型
- RRQ(Read Request)- 读请求:
- 客户端请求从服务器读取文件。
- WRQ(Write Request)- 写请求:
- 客户端请求向服务器写入文件。
- DATA(Data)- 文件块:
- 服务器或客户端发送文件数据块。
- ACK(Acknowledgment):
- 接收方确认收到的数据块。
- ERROR(Error):
- 表示发生错误(如文件未找到、权限不足等)。
6.3 远程终端协议 TELNET
TELNET 是一种简单的终端仿真协议,通过网络虚拟终端(NVT)适应不同系统的差异,实现透明化的远程登录。
6.3.1 TELNET 概述
- 定义:TELNET 是一种
终端仿真协议
,允许用户通过 TCP 连接
从本地主机登录到远程主机
。 - 功能:
- 将用户的击键传输到远程主机。
- 将远程主机的输出返回到用户屏幕。
- 特点:
服务是透明的
,用户感觉键盘和显示器直接连接在远程主机上。- 使用客户/服务器模式。
6.3.2 TELNET 的工作原理
客户-服务器
模式:- 本地系统运行 TELNET 客户进程。
- 远程主机运行 TELNET 服务器进程。
- 主进程与从属进程:
- 服务器中的
主进程
等待新的请求。 - 主进程为每个连接派生一个
从属进程
来处理。
- 服务器中的
- TCP 连接:
- 使用
TCP 协议
,通过主机名或 IP 地址连接到远程主机。
- 使用
- 安全性:
- Telnet应用间的信息交换是
明码交换
过程。
- Telnet应用间的信息交换是
- 端口号:
- 默认使用
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”
- 接收方 - 同意
- 发送方问接收方“激活我的选项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的工作开始;
- 建立连接后,客户机发送一个请求给服务器
- 服务器接到请求后,给予相应的响应信息;
- 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
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 由三部分组成:
- Header:描述 Token 的类型和签名算法。
- Payload:携带用户信息和数据。
- Signature:用于验证 Token 的完整性和真实性。
- JWT 由三部分组成:
-
存储 Token - 客户端(通常是浏览器或移动应用)接收到 Token 后,需要将其存储在本地。
- 常见的存储方式:
- LocalStorage:适合 Web 应用,但需防范 XSS 攻击。
- SessionStorage:适合会话期间的存储,关闭浏览器时失效。
- Cookie:适合 Web 应用,可通过
Secure
和HttpOnly
增强安全性。
- 常见的存储方式:
-
发回 Token - 客户端在后续请求中,需要在 HTTP 请求头 中携带 Token。
- 服务器接收到请求后,会解析并验证 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)
- 原理:
- 服务器运行与动态文档关联的应用程序,定期更新信息并发送更新后的文档。
- 优点:
- 可实现连续更新,用户体验较好。
- 缺点:
- 服务器需运行多个推送程序,开销较大。
- 需为每个浏览器客户维持一个不释放的 TCP 连接。
- 随着连接数增加,网络带宽分配减少,导致传输时延增大。
- 原理:
- 技术二:活动文档(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 电子邮件概述
技术标准
SMTP(Simple Mail Transfer Protocol)
:- 用于发送邮件的标准协议。
- 只能传送可打印的7位 ASCII 码邮件。
MIME(Multipurpose Internet Mail Extensions)
:- 1996年发布,扩展了 SMTP 的功能。
- 支持多种数据类型(如文本、声音、图像、视频等)。
- 在邮件首部中说明数据类型。
POP3(Post Office Protocol)
:- 用于从邮件服务器读取邮件的协议。
- 版本3是目前广泛使用的标准。
IMAP(Internet Mail Access Protocol)
:- 另一种邮件读取协议,功能比 POP3 更强大。
电子邮件系统组成
用户代理(User Agent, UA)
:- 用户与电子邮件系统的接口, 又称为电子邮件客户端软件
- Outlook Express
- Foxmail
- 功能:
- 撰写:提供编辑环境,支持通信录、自动提取地址等。
- 显示:显示来信及附件(如声音、图像)。
- 处理:支持删除、存盘、打印、转发等操作。
- 通信:通过 SMTP 发送邮件,通过 POP3 或 IMAP 接收邮件。
- 用户与电子邮件系统的接口, 又称为电子邮件客户端软件
邮件服务器
:- 核心组件,负责发送和接收邮件,采用C/S方式。
- 24小时不间断工作,具有大容量邮箱。
- 功能:
- 向发件人报告邮件传送结果(已交付、被拒绝、丢失等)。
- 支持 SMTP 和 POP3 协议。
- 既可以充当客户(发送邮件时),也可以充当服务器(接收邮件时)。
协议
:- SMTP:用于用户代理向邮件服务器发送邮件,或在邮件服务器之间发送邮件。
- POP3 / IMAP:用于用户代理从邮件服务器读取邮件。
邮件发送与接收流程
- 发送流程:
- 发件人撰写邮件:使用用户代理编辑邮件。
- 发送邮件:用户代理通过 SMTP 【作为SMTP客户】将邮件发送到发送方邮件服务器。
- 邮件缓存:发送方邮件服务器将邮件暂时存放在缓存队列中。
- 建立 TCP 连接:发送方邮件服务器与接收方邮件服务器建立 TCP 连接。
- 传递邮件:发送方邮件服务器通过 SMTP 【作为SMTP客户】将邮件发送到接收方邮件服务器。
- 存储邮件:接收方邮件服务器将邮件放入收件人邮件服务器。
- 接收流程:
- 收件人读取邮件:用户代理通过 POP3 或 IMAP 从接收方邮件服务器读取邮件。
- 邮件传送方向:
- SMTP:客户“推”邮件给服务器。
- POP3:客户从服务器“拉”邮件。
电子邮件地址格式
-
格式:
用户名@邮件服务器的域名
- 例:xyz@abc.com
abc.com
:邮件服务器的域名。xyz
:用户名(邮箱名)。
- 例:xyz@abc.com
-
唯一性:
- 用户名在邮件服务器中必须唯一。
- 确保电子邮件地址在全球范围内的唯一性。
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 的缺点
- 缺乏身份验证:
FROM
命令后的地址可任意填写,方便垃圾邮件发送者。- 垃圾邮件占全球邮件的 50% 至 90%。
- 设计限制:
- 虽支持 MIME 扩展,但传输非 ASCII 码长报文效率低。
- 邮件为明文传输,不利于保密。
- SMTP不能传送可执行文件或其他的二进制对象。
- SMTP限于传送7位的ASCII码。许多其他非英语国家的文字(如中文、俄文,甚至带重音符号的法文或德文)就无法传送。
- SMTP服务器会拒绝超过一定长度的邮件。
- 某些SMTP的实现并没有完全按照SMTP的互联网标准。常见的问题如下:
- 回车、换行的删除和增加;
- 超过 76个字符时的处理:截断或自动换行;
- 后面多余空格的删除;
- 将制表符 tab 转换为若干个空格。
- 扩展改进:ESMTP(Extended SMTP)
6.5.3 电子邮件的信息格式
电子邮件的基本结构
信封(Envelope)
:- 包含邮件传输所需的信息(如收件人地址)。
- 由邮件系统自动生成,用户无需填写。
内容(Content)
:- 包含邮件的首部(Header)和主体(Body)。
- 首部格式由 RFC 5322 规定,主体部分用户可自由撰写。
邮件内容的首部
-
首部格式:
-
由 关键字 + 冒号 组成。
-
最重要的关键字包括:
To
,Subject
,Cc
,Bcc
,From
,Date
,Reply-To
-
-
常用首部关键字详解:
To:
:- 填入一个或多个收件人的电子邮件地址。
- 可使用地址簿(Address Book):
- 将常用联系人姓名和电子邮件地址存入地址簿。
- 撰写邮件时,点击收件人名字,邮件地址自动填入。
Subject:
:- 邮件的主题,反映邮件主要内容。
- 类似于文件系统的文件名,便于用户查找邮件。
Cc:
:- 抄送(Carbon copy),表示给某人发送邮件副本。
- 收件人可以看到抄送的对象。
Bcc:
:- 盲抄送(Blind carbon copy)。
- 发送邮件副本,但收件人看不到抄送的对象。
- 适用于需要保密的情况。
From:
:- 发件人的电子邮件地址。
- 邮件系统自动填入。
Date:
:- 发信日期。
- 邮件系统自动填入。
Reply-To:
:- 对方回信的电子邮件地址。
- 可与发件人地址不同。
- 例如:使用他人邮箱发信,但希望回信发送到自己的邮箱。
- 可预先设置,无需每次写信时填写。
6.5.4 邮件读取协议 POP3 和IMAP
邮局协议第3个版本POP3
- 工作方式:
- 客户端-服务器模式:
- 用户计算机运行
POP3 客户端程序
。 - 邮件服务器运行
POP3 服务器程序和SMTP 服务器程序
。
- 用户计算机运行
- 用户需输入 鉴别信息(用户名和密码) 才能读取邮箱。
- 客户端-服务器模式:
- 特点:
- 用户从 POP3 服务器读取邮件后,
服务器会删除该邮件
。 - 可能存在的问题:用户在多个设备上访问邮件时,未复制可能导致邮件丢失。
- 用户从 POP3 服务器读取邮件后,
网际报文存取协议IMAP (Internet Message Access Protocol)
-
工作方式:
- 客户端-服务器模式:
- 用户
计算机
运行IMAP 客户端程序
,与邮件服务器建立 TCP 连接。
- 用户
- 联机协议:
- 用户在本地计算机上操作邮件服务器的邮箱,就像在本地操作一样。
- 邮件服务器上的邮件
一直保存
,直到用户明确删除。
- 客户端-服务器模式:
-
特点:
- 多设备访问:用户可在不同设备上随时访问邮件。
- 邮件管理:支持创建层次式文件夹、移动邮件、条件查找。
- 部分读取:用户可选择只下载邮件的某一部分(如正文),节省时间和带宽。
- 未下载的邮件:邮件始终保存在服务器上,用户需联网才能查阅。
-
缺点:
邮件一直存储在服务器上,若未将邮件复制到本地设备,可能无法离线查看,
需联网才能访问
。
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。
- 0-63 分别用A-Z, a-z, 0-9, +, /表示。
- 填充规则:若最后一组不足 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
- 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 的代理与委托代理
- 代理(Agent):
- 运行在被管设备中,负责与管理站通信。
- 响应 SNMP 请求并执行操作。
- 委托代理(Proxy Agent):
- 用于非 SNMP 协议设备的网关。
- 提供协议转换和过滤功能,使管理站能管理这些设备。
4. 简单网络管理协议(SNMP)
- 主要功能:
- 监视网络性能、检测分析网络差错、配置网络设备。
- 工作原理:
客户/服务器模式
:管理程序
运行SNMP 客户程序
。代理程序
运行SNMP 服务器程序
,监听请求并返回信息或执行动作。
- 一个管理站通常与多个代理交互。
- 版本:
- SNMPv1:最初版本,功能简单。
- SNMPv2:增强功能,但仍存在安全问题。
- SNMPv3:引入安全特性,授权人员才能执行管理操作。
- SNMP 的组成:
SNMP 协议
:定义了管理站和代理之间所交换的分组格式。所交换的分组包含各代理中的对象(变量)名及其状态(值)。SNMP负责读取和改变这些数值管理信息结构(SMI)
:- 定义命名对象和对象类型的通用规则,以及把对象和对象的值进行编码的规则。
- 确保网络管理数据的语法和语义无二义性。
管理信息库(MIB)
:- 在被管设备中创建命名对象,并规定其类型。
- 类似于程序设计中变量说明的角色。
6.7.2 管理信息结构SMI
SMI的功能:
一、被管对象应怎样命名
对象命名树(Object Naming Tree)
- 定义:对象命名树是一个层次化的命名结构,所有被管对象都必须在树上。
- 作用:为网络管理中的对象提供唯一标识符,便于管理和查找。
- 特点:
- 树结构从根节点开始,向下分支出多个层级。
- 每个节点都有
一个标号(数字)
和名称(英文小写)
。
对象命名树的层级结构
-
根节点:
- 没有名字,是树的起点。
-
顶级节点:
- 三大标准制定单位:
ITU-T
(国际电信联盟电信标准部,原 CCITT),标号为0
。ISO
(国际标准化组织),标号为1
。ISO/ITU-T 联合体
,标号为2
。
- 三大标准制定单位:
-
ISO 子节点:
org
(ISO 认同的组织成员),标号为3
。
-
org 子节点:
dod
(美国国防部,Department of Defense),标号为6
。
-
dod 子节点:
internet
(Internet 标准),标号为1
。- 对象标识符:
1.3.6.1
。
-
internet 子节点:
mgmt
(管理),标号为2
。
-
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数据类型的组合。
- 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 变量
:- 是指
特定对象的一个实例
。 - 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)
进行配置。
- 探询的优点:
- 系统相对简单。
- 能够限制网络中管理信息的通信量。
- 探询的缺点:
- 不够灵活,管理的设备数量有限。
- 开销较大,如果探询频繁但未得到有用信息,会浪费通信线路和 CPU 资源。
2.2 陷阱机制
- SNMP 不是完全的探询协议,它支持
陷阱(Trap)机制
:被管设备的代理
可以在检测到事件时主动发送陷阱信息
,无需等待管理进程的探询。- 陷阱用于
报告特殊事件
(如故障或异常)。
- 陷阱的特点:
- 代理会根据
门限值(Threshold)
过滤事件,只报告达到门限值的事件。 - 仅在严重事件发生时发送,减少不必要的通信
- 陷阱信息简单,字节数较少,通信开销小,提高网络管理效率。
- 代理会根据
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、连接建立阶段
-
服务器端:
步骤:
socket
→bind
→listen
→accept
(创建新套接字和从属进程)- 套接字创建:
- 通过
socket
系统调用创建套接字,此时套接字的 端口号和 IP 地址 都是空的。
- 通过
- 绑定(bind)- 本地地址绑定到套接字:
- 应用进程调用
bind
指明套接字的 本地地址(包括本地端口号和本地 IP 地址)。 - 调用
bind
时,将 熟知端口号(如 HTTP 的 80 端口)和 本地 IP 地址 填写到套接字中。
- 应用进程调用
- 监听(listen):
- 服务器调用
listen
将套接字设置为 被动方式,使其能够接受客户端的服务请求。 - UDP 服务器:UDP 服务器因提供无连接服务,不使用
listen
系统调用。
- 服务器调用
- 接受连接(accept):
- 服务器调用
accept
提取远地客户进程发来的连接请求。 - 并发服务器的实现:
- 服务器需要同时处理多个连接,常采用 并发方式。
- 主服务器进程(M)- 负责接受新的连接请求:
- 调用
accept
为每一个新的连接请求创建一个 新的套接字,并将套接字标识符返回给客户端。 - 同时,创建一个 从属服务器进程(S) 处理新建立的连接。
- 调用
- 从属服务器进程(S)- 负责处理已建立的连接:
- 使用新创建的连接套接字 与客户进程建立连接,并进行双向数据传送。
- 数据通信结束后,关闭套接字并撤销从属服务器进程。
- 在任何时刻,服务器中有一个 主服务器进程 和零个或多个 从属服务器进程。
UDP 服务器:UDP 服务器因提供无连接服务,不使用 accept 系统调用。
- 服务器调用
- 套接字创建:
-
客户端
步骤:
socket
→connect
-
套接字创建(socket)
- 通过
socket
系统调用创建套接字,此时套接字的 端口号和 IP 地址 都是空的。 - 可以不调用
bind
,操作系统内核会自动分配一个 动态端口号(通信结束后由系统收回)。
- 通过
-
连接(connect):
- 调用
connect
与远地服务器建立连接。 - 主动打开:相当于客户端发出的连接请求。
- 参数:必须指明 远地端点(即远地服务器的 IP 地址和端口号)。
- 调用
-
2、数据传送阶段
客户端和服务器通过 send
和 recv
系统调用在 TCP 连接上传输数据。
-
客户端的角色:
-
使用
send
发送 请求。 -
使用
recv
接收服务器的 回答。
-
-
服务器的角色:
-
使用
recv
接收客户端的 请求。 -
使用
send
发送 回答。
-
send:
把数据复制到操作系统内核的缓存(缓冲区),再通过网络传输到目标套接字。若系统的缓存已满,send就暂时阻塞,直到缓存有空间存放新的数据。
调用send 需要三个变量
:
- 数据要发往的套接字的描述符
- 要发送的数据的地址
- 数据的长度
返回值
:
- 成功时返回实际发送的字节数,失败时返回错误码。
recv:
从内核缓冲区接收数据,并将其复制到用户空间。如果内核缓冲区没有数据,recv 会 阻塞,直到数据到达。
调用recv也需要三个变量
:
- 要使用的套接字的描述符
- 缓存的地址
- 缓存空间的长度
返回值
:
- 成功时返回实际接收的字节数,失败时返回错误码。
- 如果连接关闭,返回
0
。
send 和 recv 的阻塞特性
- 阻塞模式:
send
和recv
默认处于阻塞模式。- 如果内核缓冲区不可用(
send
时缓冲区满,recv
时缓冲区空),调用会阻塞直到条件满足。
- 非阻塞模式:
- 可以通过设置套接字为非阻塞模式,使
send
和recv
立即返回。 - 如果条件不满足,返回错误码(如
EAGAIN
或EWOULDBLOCK
)。
- 可以通过设置套接字为非阻塞模式,使
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版 谢希仁
相关文章:
【学习笔记】计算机网络(六)
第6章应用层 文章目录 第6章应用层6.1 域名系统DNS6.1.1 域名系统概述6.1.2 互联网的域名结构6.1.3 域名服务器域名服务器的分区管理DNS 域名服务器的层次结构域名服务器的可靠性域名解析过程-两种查询方式DNS 高速缓存机制 6.2 文件传送协议6.2.1 FTP 概述6.2.2 FTP 的基本工作…...
RK3588使用笔记:系统算法依赖库安装
一、前言 嵌入式设备随着需求的提升,不再仅仅只只运行个单机程序那么简单了,社会发展设备升级,都会逐步引用人工智能,涉及到算法模型,这里基础的部分就是算法环境的安装,有的算法是C,大部分算法…...
数据结构C语言练习(单双链表)
本篇练习题(单链表): 1.力扣 203. 移除链表元素 2.力扣 206. 反转链表 3.力扣 876. 链表的中间结点 4.力扣 21. 合并两个有序链表 5. 牛客 链表分割算法详解 6.牛客 链表回文结构判断 7. 力扣 160. 相交链表 8. 力扣 141 环形链表 9. 力扣 142 环形链表 II…...
Linux驱动开发 中断处理
目录 序言 1.中断的概念 2.如何使用中断 中断处理流程 中断上下文限制 屏蔽中断/使能 关键区别与选择 上半部中断 下半部中断 软中断(SoftIRQ) 小任务(Tasklet) 工作队列(Workqueue) 线程 IRQ(Threaded IRQ…...
C++ set map
1.set和map是什么 set和map是 C STL 提供的容器,用于高效的查找数据,底层采用红黑树实现,其中set是Key模型,map是Key-Value模型 set和map的基本使用较为简单,这里不再叙述,直接进入实现环节 2.set和map的…...
Vue2和Vue3响应式的基本实现
目录 简介Vue2 响应式Vue2 响应式的局限性 Vue3 响应式Vue3 响应式的优点 Vue2 和 Vue3 响应式对比 简介 在 Vue 框架中,数据的响应式是其核心特性之一。当页面数据发生变化时,我们希望界面能自动更新,而不是手动操作 DOM。这就需要对数据进…...
PyQt6实例_批量下载pdf工具_界面开发
目录 前置: 代码: 视频: 前置: 1 本系列将以 “PyQt6实例_批量下载pdf工具”开头,放在 【PyQt6实例】 专栏 2 本系列涉及到的PyQt6知识点: 线程池:QThreadPool,QRunnable; 信号…...
FOC 控制笔记【三】磁链观测器
一、磁链观测器基础 1.1 什么是磁链 磁链(magnetic linkage)是电磁学中的一个重要概念,指导电线圈或电流回路所链环的磁通量。单位为韦伯(Wb),又称磁通匝。 公式为: 线圈匝数 穿过单匝数的…...
前端Material-UI面试题及参考答案
目录 Material-UI 的设计理念与 Material Design 规范的关系是什么? 如何通过 npm/yarn/pnpm 安装 Material-UI 的核心依赖? Material-UI 的默认主题系统如何实现全局样式管理? 如何在项目中配置自定义字体和颜色方案? 什么是 emotion 和 styled-components,它们在 Ma…...
【LeetCode基础算法】链表所有类型
1. 遍历链表 二进制链表转整数找出临界点之间的最小和最大距离 2. 删除节点 移除链表元素从链表中移除在数组中存在的节点删除排序链表中的重复元素删除排序链表中的重复元素 II 3. 插入节点 在链表中插入最大公约数 计算最大公约数的内置函数gcd(a,b),也可以m…...
备赛蓝桥杯之第十六届模拟赛第1期职业院校组第五题:回忆画廊
提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题࿰…...
51 驱动 INA219 电流电压功率测量
文章目录 一、INA219简介二、引脚功能三、寄存器介绍1.配置寄存器 0x002.分流电压寄存器 0x013.总线电压寄存器 0x024.功率寄存器 0x035.电流寄存器 0x046.基准寄存器 0x05 四、IIC 时序说明1.写时序2.读时序 五、程序六、实验现象1.线路图2.输出数据 一、INA219简介 INA219是…...
JavaScript弹出框的使用:对话框、确认框、提示框、弹窗操作
关于 Window对象和 Document 对象的详细使用,系列文章: 《Window对象的常用属性和方法》 《Document对象的常用属性和方法:getElementById()、getElementsByName()、createElement()方法》 《Document获取元素并修改内容:getElementById()方法、value属性、innerHTML属性、…...
【设计模式】深入解析设计模式:门面模式(外观模式)的定义、优点和代码实现
门面模式(外观模式) SLF4J是门面模式的典型应用(但不仅仅使用了门面模式)。 门面模式定义 门面模式(Facade Pattern)又称为外观模式,提供了一个统一的接口,用来访问子系统中的一群…...
UE5学习笔记 FPS游戏制作34 触发器切换关卡
文章目录 搭建关卡制作触发器传送门显示加载界面 搭建关卡 首先搭建两个关卡,每个关卡里至少要有一个角色 制作触发器传送门 1 新建一个蓝图,父类为actor,命名为portal(传送门) 2 为portal添加一个staticMesh&#…...
UE5学习笔记 FPS游戏制作26 UE中的UI
文章目录 几个概念创建一个UI蓝图添加UI获取UI的引用 切换设计器和UI蓝图将UI添加到游戏场景锚点轴点slotSizeToContent三种UI数据更新方式(Text、Image)函数绑定属性绑定事件绑定 九宫格分割图片按钮设置图片绑定按下事件 下拉框创建添加数据修改样式常用函数 滚动框创建添加数…...
Spring Boot分布式项目重试实战:九种失效场景与正确打开方式
在分布式系统架构中,网络抖动、服务瞬时过载、数据库死锁等临时性故障时有发生。本文将通过真实项目案例,深入讲解Spring Boot项目中如何正确实施重试机制,避免因简单粗暴的重试引发雪崩效应。 以下是使用Mermaid语法绘制的重试架构图和决策…...
首个物业plus系列展 2025上海国际智慧物业博览会开幕
AI赋能服务升级!首个“物业plus”系列展 2025上海国际智慧物业博览会盛大开幕 3月31日,2025上海国际智慧物业博览会(简称“上海物博会”)在上海新国际博览中心N4馆隆重开幕。本届展会由广州旭杨国际展览有限公司主办,…...
《C++多线程下单例 “锁钥” 法则》
一、概述 本文章介绍了一段 C 代码,该代码实现了在多线程环境下的单例模式。单例模式确保一个类只有一个实例,并提供全局访问点。在多线程场景中,需要额外的同步机制来保证单例对象创建的线程安全性。单例模式在许多场景中都有重要应用&#…...
WEB或移动端常用交互元素及组件 | Axure / 元件类型介绍(表单元件、菜单和表格 、流程元件、标记元件)
文章目录 引言I Axure / 元件类型介绍基本元件表单元件菜单和表格流程元件标记元件II Axure 基础Axure / 常用功能介绍Axure / 常用元素实例Axure / 动态交互实例Axure / 常用设计分辨率推荐III Axure / 创建自己的元件库元件库作用元件库的创建及使用引言 I Axure / 元件类型介…...
开发环境解决Secure Cookie导致302重定向
问题现象与根源分析 故障现象 前端本地开发时(HTTP协议),调用接口返回302 Found状态码浏览器控制台警告:“Cookie被阻止,因为设置了Secure属性但未通过HTTPS传输”登录态无法保持,页面陷入重定向循环 技…...
华为三进制逻辑与高维量子计算的对比分析
此博客深入探讨华为三进制逻辑状态的技术意义,并与高维量子计算系统进行对比。文章将全面展开技术原理、实现机制、计算能力对比、未来应用前景等方面的内容。 目录 引言 华为三进制逻辑的创新意义 2.1 二进制逻辑的局限与历史探索 2.2 三进制逻辑的优势ÿ…...
网红指路机器人是否支持环境监测功能?
嘿呀,你可知道?如今的叁仟网红指路机器人那可太牛啦!它们可不单单局限于为行人指明方向,还纷纷兼职当起了 “环境小卫士”,为咱们的城市生活注入了前所未有的超智能便利。就拿那个依托叁仟智慧杆打造的数智指路机器人来…...
【进阶】vscode 中使用 cmake 编译调试 C++ 工程
基于 MSYS2 的 MinGW-w64 GCC 工具链与 CMake 构建系统,结合VSCode及其扩展插件( ms-vscode.cmake-tools),可实现高效的全流程C开发调试。既可通过 VSCode 可视化界面(命令面板、状态栏按钮)便捷完成配置、…...
突发,国行 iPhone 17,支持 eSIM
古人云“无心生大用”,往往你感到绝望的时候,转机就莫名其妙的来了。 根据供应链的最新消息,国行 iPhone 17 Air,有望用上 eSIM。 不仅如此,国产手机厂商,也计划推出类似iPhone 17 Air的超薄机型…...
红宝书第二十二讲:详解JavaScript类型化数组与二进制数据处理
红宝书第二十二讲:详解JavaScript类型化数组与二进制数据处理 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、为什么需要类型化数组? 普通JavaScript数组(Array࿰…...
Elasticsearch安全与权限控制指南
在Elasticsearch维护中,安全管理是保障数据合规性和集群稳定性的关键。本文将详细介绍用户与角色管理、索引/字段级权限控制、HTTPS加密通信、审计日志与合规性检查等核心安全实践,希望可以帮助你构建更安全的Elasticsearch环境。 1 用户与角色管理 1.1…...
SAP 学习笔记 - 系统移行业务 - MALSY(由Excel 移行到SAP 的收费工具)
以前有关移行,也写过一些文章,比如 SAP 学习笔记 - 系统移行业务 - Migration cockpit工具 - 移行Material(品目)-CSDN博客 SAP 学习笔记 - 系统移行业务 - Migration cockpit工具2 - Lot导入_sap cockpit-CSDN博客 SAP学习笔记…...
【群智能算法改进】一种改进的蜣螂优化算法IDBO[3](立方混沌映射Cubic、融合鱼鹰勘探策略、混合高斯柯西变异)【Matlab代码#92】
文章目录 【获取资源请见文章第5节:资源获取】1. 原始DBO算法2. 改进后的IDBO算法2.1 立方混沌映射Cubic种群初始化2.2 融合鱼鹰勘探策略2.3 混合高斯柯西变异 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节:资源获取】 1. 原始DB…...
《异常检测——从经典算法到深度学习》30. 在线服务系统中重复故障的可操作和可解释的故障定位
《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …...
座舱与智驾“双轮驱动”,芯擎科技打造智能汽车“芯”标杆
在比亚迪、吉利、奇瑞等各大主机厂打响“全民智驾”的关键时期,以芯擎科技为代表中国芯片厂商开始“放大招”。 2025年3月27日,芯擎科技在南京举办了“擎随芯动、智融万象”生态科技日,重磅发布了“星辰一号”、“星辰一号Lite”,…...
观察者模式在Java单体服务中的运用
观察者模式主要用于当一个对象发生改变时,其关联的所有对象都会收到通知,属于事件驱动类型的设计模式,可以对事件进行监听和响应。下面简单介绍下它的使用: 1 定义事件 import org.springframework.context.ApplicationEvent;pu…...
html5时钟升级!支持切换深浅模式 Canvas实现现代化动态时钟
HTML5 Canvas实现现代化动态时钟 这里写目录标题 HTML5 Canvas实现现代化动态时钟项目介绍技术实现1. 项目架构2. Canvas绘图实现2.1 表盘绘制2.2 刻度绘制2.3 指针绘制 3. 动画效果4. 主题切换 项目亮点技术要点总结项目收获改进方向结语 项目介绍 本项目使用HTML5 Canvas技术…...
Scala(2)
For循环控制 循环守卫 基本语法 for(i <- 1 to 3 if i ! 2) { print(i " ") }println() 说明: 循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环体内部,为false 则跳…...
DataGear 5.3.0 制作支持导出表格数据的数据可视化看板
DataGear 内置表格图表底层采用的是DataTable表格组件,默认并未引入导出数据的JS支持库,如果有导出表格数据需求,则可以在看板中引入导出相关JS支持库,制作具有导出CSV、Excel、PDF功能的表格数据看板。 在新发布的5.3.0版本中&a…...
项目-苍穹外卖(十六) Apache ECharts+数据统计
一、介绍 二、营业额统计 需求分析和设计: Controller: Service: /*** 营业额统计* param begindate* param enddate* return* */Overridepublic TurnoverReportVO turnoverStatistics(LocalDate begindate, LocalDate enddate) {//创建时间集合List<LocalDate&…...
使用 PowerShell 脚本 + FFmpeg 在 Windows 系统中批量计算 MP4视频 文件的总时长
步骤 1:安装 FFmpeg 访问 FFmpeg 官网(Download FFmpeg),下载 Windows 版编译包(如 ffmpeg-release-full.7z)。或者到(https://download.csdn.net/download/zjx2388/90539014)下载完整资料 解压文件&#…...
低成本文件共享解决方案:Go File本地Docker部署与外网访问全记录
文章目录 前言1. 安装Docker2. Go File使用演示3. 安装cpolar内网穿透4. 配置Go File公网地址5. 配置Go File固定公网地址 前言 在这个信息爆炸的时代,谁还没遇到过这样的囧事呢?正在办公室电脑上赶工报告,手机却突然蹦出一条紧急邮件&#…...
python文件的基本操作和文件读写
目录 文件的基本操作 文件读写 文件的基本操作 Python 中对文件的基本操作主要包括打开文件、读取文件、写入文件和关闭文件等操作。下面是一个简单的示例: 打开文件: file open(example.txt, r) # 使用 open() 函数打开一个名为 example.txt 的文…...
大数据与datax1.0
一、datax含义 是一个数据搬运工具 二、需要注意的点 插件(plugin)下面的reader和writer 要删除(第一步执行肯定会报错 所以请记得一定要删除reader和writer下的隐藏文件) 三、心得 做任何事要事半功倍,而不要事倍功半,好的学习方法永远比盲目的努力更重要--------谨记3.31…...
蚂蚁集团主导的ISO密码学国际标准立项,纳入国产算法
蚂蚁集团主导的ISO密码学国际标准 ISO 25330-3 立项, 国产算法Ferret成为标准方案。 近日,在美国弗吉尼亚州举行的 ISO/IEC JTC 1/SC 27 全体会议上,ISO/IEC 25330第三部分《Information Security — Oblivious Transfer — Part 3: Obliv…...
【新人系列】Golang 入门(十):错误处理详解 - 上
✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12898955.html 📣 专栏定位:为 0 基础刚入门 Golang 的小伙伴提供详细的讲解,也欢迎大佬们…...
Unity 2022.3.x部分Android设备播放视频黑屏问题
Android平台视频兼容性问题很多…类似的黑屏问题真的很头大,总结一些常见问题: 1. 视频文件不支持压缩 如果使用AssetBundle加载视频,这个AssetBundle压缩格式要选None。有人可能会说最新版Unity已经支持bundle压缩下播放视频,稳…...
基于Python的Django框架的个人博客管理系统
标题:基于Python的Django框架的个人博客管理系统 内容:1.摘要 本文围绕基于Python的Django框架构建个人博客管理系统展开。背景方面,随着互联网发展,个人博客成为信息分享与交流重要平台,传统博客管理系统在功能与灵活性上存在不足。目的是开…...
Unity加载OSGB倾斜摄影数据
Unity加载OSGB倾斜摄影数据 显而易见有一个最方便的办法就是使用CesiumForUnity确定是可以通过osgb数据转换成3dtiles进行加载的,然而有没有直接加载osgb格式数据的方法呢? 我们知道osgb的osg推出的倾斜摄影数据的数据结构,所以,…...
RabbitMQ简单介绍和安装
RabbitMQ简单介绍 一.RabbitMQ介绍二.RabbitMQ的作用1.异步解耦2.流量削峰3.消息分发4.延迟通知 三.RabbitMQ安装(Ubuntu)1.先安装Erlang2.安装RabbitMQ3.安装RabbitMQ的管理界面4.创建虚拟机5.端口号信息 四.工作原理图 一.RabbitMQ介绍 RabbitMQ 是一款…...
【清华大学】DeepSeek政务应用场景与解决方案
目录 一、政务数字化转型三阶段演进二、人工智能政务应用场景四大方向 三、技术方案核心技术 四、解决方案案例1. 公文写作2. 合同协议智能审查3. 行政执法4. 就业指导 五、风险及对策六、落地大四步法七、未来发展展望AI职业替代逻辑空间智能与具身智能人机共生 一、政务数字化…...
spring boot自动装配原理
springboot自动装配几乎是现在面试必问的面试题,要是逐行分析自动装配流程肯定是很复杂的,因此我们从大体上来梳理即可。 一、 自动装配总览 首先要搞清楚两个问题,springboot自动装配是什么?解决了什么问题? springbo…...
【SDMs分析1】基于ENMTools R包的生态位分化分析和图像绘制(identity.test())
基于ENMTools包的生态位分化 1. 写在前面2. 生态位分化检验案例13. 生态位分化检验案例21. 写在前面 最近学了一个新的内容,主要是关于两个物种之间生态位分化检验的 R 语言代码。生态位分化是物种分布模型(SDM )研究中的关键部分,许多 SCI 论文都会涉及这一分析。该方法主…...
蓝桥杯比赛python程序设计——纯职业小组
问题描述 在蓝桥王国,国王统治着一支由 nn 个小队组成的强大军队。每个小队都由相同职业的士兵组成。具体地,第 ii 个小队包含了 bibi 名职业为 aiai 的士兵。 近日,国王计划在王宫广场举行一场盛大的士兵检阅仪式,以庆祝王…...