第二章-应用层 复习大纲
- 网络应用程序体系结构
- Web应用和HTTP协议
- 基本术语(网页、URL等)
- HTTP的特性及其区别(无状态、非持久和持久)
- 请求和响应报文
- cookie技术
- Web缓存
- 电子邮件:组成及其使用的协议
- DNS的功能和实现
网络应用程序体系结构
网络应用程序体系结构定义了应用程序在网络上的部署和运行方式。常见的网络应用程序体系结构包括:
- 客户端-服务器模型:
- 客户端请求服务,服务器提供服务。
- 例如,Web浏览器与Web服务器之间的关系。
- 三层架构:
- 分为表示层(客户端)、逻辑层(应用服务器)和数据层(数据库服务器)。
- 提高了应用的可扩展性和维护性。
- 分布式架构:
- 应用程序的组件分布在多个网络节点上。
- 常见于大规模的企业应用和云计算环境。
- 微服务架构:
- 应用程序由多个小的、独立部署的服务组成,每个服务实现特定功能。
- 提高了灵活性和可维护性。
Web应用和HTTP协议
基本术语
- 网页(Web Page):通过Web浏览器访问的文档,通常使用HTML、CSS和JavaScript编写。
- URL(Uniform Resource Locator) :统一资源定位符,用于定位互联网上的资源。例如,
https://www.example.com/index.html
。HTTP的特性及其区别
- 无状态(Stateless):
- 每个HTTP请求都是独立的,服务器不会保留之前请求的状态。
- 非持久连接(Non-Persistent Connection):
- 每次请求/响应后,连接即关闭。
- 需要多个连接来请求多个资源。
- 持久连接(Persistent Connection):
- 一个TCP连接可以用于多个请求/响应对,减少了建立和关闭连接的开销。
请求和响应报文
HTTP请求报文:
包括请求行(方法、URL、HTTP版本)、头部(Headers)和可选的消息体(Body)。
示例:
GET /index.html HTTP/1.1 Host: www.example.com
HTTP响应报文:
包括状态行(HTTP版本、状态码、状态描述)、头部(Headers)和可选的消息体(Body)。
示例:
HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1234
Cookie技术
Cookie
由服务器发送到客户端的小数据文件,用于存储会话信息。
通过HTTP头部
Set-Cookie
设置,客户端在后续请求中通过Cookie
头部发送回服务器。示例:
Set-Cookie: sessionId=abc123; Path=/; HttpOnly
Web缓存
- Web缓存
- 存储经常访问的网页内容以减少服务器负担和提高访问速度。
- 缓存控制
- 通过HTTP头部
Cache-Control
和Expires
控制缓存行为。- 条件GET请求(If-Modified-Since、If-None-Match)用于验证缓存资源是否仍然有效。
电子邮件:组成及其使用的协议
- 电子邮件组成:
- 邮件头:包含发件人、收件人、主题等信息。
- 邮件体:邮件的实际内容。
- 附件:可以包含多种格式的文件。
- 使用的协议:
- SMTP(Simple Mail Transfer Protocol):用于发送邮件。通常在端口25或465(加密连接)上运行。
- POP3(Post Office Protocol version 3):用于从邮件服务器下载邮件。通常在端口110或995(加密连接)上运行。
- IMAP(Internet Message Access Protocol):用于在服务器上管理和同步邮件。通常在端口143或993(加密连接)上运行。
DNS的功能和实现
DNS的功能
- 域名解析:
- 将域名转换为IP地址,便于网络设备之间通信。
- 负载均衡:
- 通过返回多个IP地址来分配网络流量,提高服务的可用性。
- 域名注册与管理:
- 域名注册机构管理顶级域名的注册和分配。
- 缓存功能:
- 缓存解析结果以减少重复查询和提高解析效率。
- 安全性:
- 通过DNSSEC(DNS Security Extensions)提供数据完整性和来源验证。
DNS的实现
- 层次结构:
- 根域名服务器:管理顶级域(如.com、.org)。
- 顶级域名服务器(TLD):管理特定顶级域下的域名(如example.com)。
- 权威域名服务器:存储特定域名的实际IP地址。
- 本地域名服务器:缓存和解析局域网内的DNS请求。
- DNS查询过程:
- 用户输入域名。
- 本地域名服务器检查缓存。
- 若未命中缓存,向根域名服务器查询。
- 根域名服务器指向相应的TLD服务器。
- TLD服务器指向权威域名服务器。
- 权威域名服务器返回IP地址,本地域名服务器缓存结果并返回给用户设备。
- 常见记录类型:
- A记录:将域名映射到IPv4地址。
- AAAA记录:将域名映射到IPv6地址。
- CNAME记录:将一个域名别名映射到另一个域名。
- MX记录:指定邮件服务器。
- TXT记录:存储任意文本数据,如SPF记录。
通过以上这些功能和实现,DNS系统确保了互联网的正常运作,使用户能够通过域名访问网络资源,并提供负载均衡、安全和缓存等多种高级功能。
2.1 应用层协议原理
-
网络应用程序体系结构
-
C/S体系结构(客户机/服务器体系结构)
- 服务器:
- 总是打开的主机
- 具有固定的、众所周知的IP地址
- 主机集群(cluster)常被用于创建强大的虚拟服务器
- 客户机:
- 同服务器端通信
- 可以间断地同服务器连接
- 可以拥有动态IP地址
- 客户机相互之间不直接通信
- 服务器:
-
P2P体系结构
- 特点:
- 没有总是打开的服务器
- 任意一对主机直接相互通信
- 对等方(peer,即参与网络的各个节点)间歇连接并且可以改变IP地址
- 优点:自拓展性、自主平等、资源共享(如带宽、存储空间、算力)、分布式架构(无单点故障)、去中心化
- 缺点:难以管理(安全性)、资源分配不均衡、搜索查找效率低
- 特点:
-
以上二者混合的体系结构
- Napster
- 文件在对等方之间交换
- 中心服务器记录对等方内容,文件搜索通过服务器
- 即时讯息
- 两个聊天用户之间是P2P
- 注册、查询通过服务器
- 用户上线时要在中心服务器上注册,用户与中心服务器联系以找出在线伙伴
- Napster
-
-
进程通信
-
同一主机上的两个进程通过内部进程通信机制进行通信
-
不同主机上的进程通过 交换报文 相互通信
- 客户进程:发起通信的进程
- 服务器进程:等待联系的进程
-
注:具有P2P体系结构的应用程序既有客户进程,也有服务器进程
-
-
进程与计算机网络的接口------ 套接字
-
进程通过其套接字在网络上发送和接收报文(可以将 套接字 类比为 大门)
-
套接字又叫做 API(应用程序编程接口)
- 用户通过API对传输层的控制仅限于:
- 选择传输协议;
- 能设定几个参数
- 用户通过API对传输层的控制仅限于:
-
-
进程寻址
-
进程为了能接收报文,他需要一个标识:
- 主机的IP地址足够标识进程吗?------不能,因为一台主机上可能有多个进程
-
主机上的进程标识------ IP地址+端口号
常用端口号:
- Web服务:80
- 发送邮件:25
- 接收邮件:10
- HTTPS:443
-
-
应用层协议
- 分类:
- 公共领域协议:由RFC文档定义,可供大家使用。如HTTP,SMTP。
- 专用协议:如KaZaA,Skype
- 服务要求:数据丢失率?时延?带宽和吞吐量?安全?
- 分类:
-
因特网运输协议提供的服务
- TCP服务
- UDP服务
TCP(Transmission Control Protocol)
特点:
- 面向连接:TCP是一种面向连接的协议,通信双方在传输数据前必须先建立连接(通过三次握手)。
- 可靠传输:TCP提供可靠的数据传输服务,确保数据包按序到达,并且没有重复或丢失。如果数据包丢失,TCP会进行重传。
- 流量控制:TCP通过滑动窗口机制进行流量控制,防止发送方发送数据过快而使接收方无法处理。
- 拥塞控制:TCP具有拥塞控制机制,可以动态调整数据传输速率,以避免网络拥塞。
- 数据完整性:TCP使用校验和(checksum)来确保数据在传输过程中没有被损坏。
应用场景:
- 网页浏览:HTTP/HTTPS协议基于TCP。
- 文件传输:FTP协议基于TCP。
- 电子邮件:SMTP协议基于TCP。
- 远程登录:SSH和Telnet协议基于TCP。
UDP(User Datagram Protocol)
特点:
- 无连接:UDP是一种无连接的协议,数据在传输前不需要建立连接,数据包独立发送。
- 不保证可靠性:UDP不提供可靠传输服务,数据包可能会丢失、重复或乱序到达。
- 无流量控制和拥塞控制:UDP没有流量控制和拥塞控制机制,数据传输速率不受限制。
- 低开销:UDP头部较简单,开销较小,适合对延迟敏感的应用。
应用场景:
- 实时应用:视频会议、VoIP(网络电话)等对延迟敏感但允许少量数据丢失的应用。
- 广播和组播:UDP支持广播和组播,适用于多点传输。
- 在线游戏:一些实时在线游戏使用UDP来减少延迟。
对比总结
- 连接性:TCP是面向连接的,UDP是无连接的。
- 可靠性:TCP提供可靠传输,UDP不保证可靠性。
- 流量控制:TCP有流量控制,UDP没有。
- 延迟:UDP延迟较低,适合实时应用;TCP延迟较高,因为需要保证可靠性。
- 应用场景:TCP适用于需要可靠传输的数据,如网页浏览、文件传输;UDP适用于实时应用和多点传输,如视频会议、在线游戏。
2.2 Web应用和HTTP协议
-
网页(Web页,或称文档)由许多对象(即文件,如HTML文件、JPEG图像、音频...)组成
-
多数网页由单个基本 HTML网页+若干引用的对象构成
-
每个对象被一个 URL(Uniform Resource Locator)寻址
举例:http://www.someschool.edu/someDept/pic.gif
其中,http是协议;www.someschool.edu是主机名;someDept/pic.gif是路径名
-
-
HTTP(HyperText Transfer Protocol)
- Web的应用层协议
- C/S模式
- client:浏览器请求,接收,解释显示 Web 对象
- server:Web 服务器响应请求,发送 Web 对象
- 使用TCP:
- 客户初始化一个与HTTP服务器80端口的TCP连接(创建套接字)
- HTTP服务器接受来自客户的TCP连接请求,建立连接
- HTTP client(Browser)和HTTP server(Web服务器)交换HTTP消息(应用层协议消息),包括HTTP请求和响应消息
- 最后结束TCP连接
- HTTP是无状态协议(HTTP不维护客户先前的状态信息)
- HTTP连接分类:
- 非持久HTTP连接:每个TCP连接只传送一个对象
- 持久HTTP连接:一个TCP连接上可以传送多个对象
-
非持久HTTP连接的响应时间模型
-
往返时间RTT(Round-Trip Time):1个小分组从客户主机到服务器再到客户主机所花费的时间
-
响应时间= 2*RTT + transmit time
-
1个RTT用于建立TCP连接
-
1个RTT用于HTTP请求/响应消息的交互
-
html文件传输时间
-
-
-
持久HTTP连接:服务器发送响应消息后保持连接
- 非持久的问题:
- 每个对象需要2个RTT
- OS必须为每个TCP连接分配主机资源
- 大量客户的并发TCP连接形成服务器的严重负担
- 分类:
- 不带流水线的持久HTTP连接:客户收到前一个响应消息再发出新的请求消息,每次引用对象经历1个RTT
- 带流水线的持久HTTP连接:客户遇到1个引用对象就发送请求消息,所有引用对象只经历1个RTT
- 非持久的问题:
-
HTTP/2:减缓HOL阻塞(减少多对象HTTP请求的延迟)
-
HTTP1.1:在单个TCP连接上引入了多个流水线GET,服务器按顺序响应GET请求(FCFS)
- 导致的问题:由于FCFS,小对象可能在大对象后面等待传输(HOL,head-of-line blocking,线头阻塞)
- 丢失回复(重新传输丢失的TCP段)对对象传输时间的影响
-
HTTP/2:增加了 服务器向客户端发送对象的灵活性。
- 基于 客户端指定的优先级 的请求对象的传输顺序(所以就不一定是FCFS)
- 将未请求的对象推送到客户端
- 将对象划分为框架,安排框架以减少HOL阻塞
-
对比图如下:
-
-
HTTP/3:采用基于 UDP 的 QUIC 协议(Quick UDP Internet Connection)
-
HTTP/2通过单个TCP连接------如果要从数据包丢失中恢复,仍然要暂停所有对象的传输!
并且普通 TCP 连接没有安全性
-
优点:
- 更快的连接建立、传输速率
- 更好的拥塞控制和丢包恢复性能
- 彻底消除队头阻塞
- 更高的安全性
-
-
HTTP报文格式:
-
请求报文格式:
GET /index.html HTTP/1.1 // 请求行 Host: www.example.com // 以下四行为头部行 User-Agent: Mozilla/5.0 // 该代理类型的对象版本 Connection:Close // 不使用持久连接 Accept-language:zh-cn
-
响应消息格式:
HTTP/1.1 200 OK Content-Type: text/html Content-Length: 137 <html> <head> <title>Example</title> </head> <body> <h1>Hello, World!</h1> </body> </html>
HTTP响应的状态码:
200 OK;301 请求对象已永久迁移,本响应消息的头部会指出新的URL;
400 该请求无法被服务器解读;404 Not Found;505 HTTP版本不支持
-
-
Cookies:跟踪用户
-
4个重要方面:
- cookie头部行在HTTP请求消息中,也在HTTP响应消息中
- cookie文件保存在用户主机中,被用户浏览器管理;也保存在Web站点的后端DB
-
作用:
- 身份认证、用户会话状态
- 购物车、推荐广告
-
Web缓存(代理服务器)
- 代理服务器 代表 起始服务器,满足HTTP请求
-
所有HTTP请求指向缓存(用户的Web访问经由缓存):
- 若对象在缓存中,缓存器返回对象;否则,缓存器向起始服务器发出请求,接收到请求后再转发给客户机。
-
缓存器既是服务器又是客户机,典型的缓存器由 ISP 提供
-
作用:
- 减少客户机请求的响应时间
- 减少内部网络与接入链路上的通信量
- 能从整体上大大降低因特网的Web流量
-
降低时延的方法:
-
方法1:增加介入链路的速率------成本高
-
方法2:安装缓存器
-
-
条件 GET 方法:一种减少网络带宽消耗和提高响应速度的机制
允许客户端(通常是浏览器或缓存代理)在发送HTTP GET请求时附带某些条件,如果这些条件满足,服务器才会返回资源;如果不满足,服务器则返回一个状态码(通常是304 Not Modified),指示资源没有变化,客户端可以继续使用缓存中的版本。
客户端在请求头中包含此字段,并附带一个日期时间值。服务器比较请求的资源的最后修改时间(Last-Modified)和这个时间值,如果资源在此时间后没有修改,则返回304状态码。
例如:
GET /index.html HTTP/1.1 Host: www.example.com If-Modified-Since: Tue, 08 Jun 2021 10:18:14 GMT
2.3 文件传输协议 FTP (了解 = 不考)
2.4 因特网中的电子邮件 SMTP,POP3,IMAP
-
电子邮件
- 三个主要组成部分:
- 用户代理:允许用户阅读、回复、转发、保存、编辑邮件信息
- 邮件服务器
- 简单邮件传送协议(SMTP)和邮件接收协议
- 三个主要组成部分:
-
SMTP(Simple Mail Transfer Protocol)
-
客户使用TCP来可靠传输邮件信息到服务器端口号25
-
三个部分:
- 邮件头
- 空行
- 正文
-
传输的3个阶段:
- 握手(问候)
- 传输邮件信息
- 结束
例子:A 发邮件给 B
- A 使用用户代理编写邮件信息给 B@qq.com
- A 的用户代理发送邮件信息到她的邮件服务器,邮件消息存放在邮件消息队列
- A 邮件服务器的 SMTP 客户端发起建立一个到 B 的邮件服务器的 SMTP 服务器端的 TCP 连接,经过应用层握手
- SMTP 客户在这个 TCP 连接上发送 A 的邮件消息
- B 服务器存放邮件消息存到 B 的邮箱
- B 调用他的用户代理读邮件消息
如下图:2和4采用了SMTP,6采用邮件访问协议(如POP,IMAP)
-
邮件访问协议:从服务器获取邮件消息
-
POP(Post Office Protocol),110端口号
-
IMAP(Internet Message Access Protocol),143端口,更复杂
对比分析 POP3 和 IMAP:
存储位置:
- POP3:邮件通常存储在本地设备。
- IMAP:邮件存储在服务器上,设备之间同步。
功能和灵活性:
- POP3:功能简单,适合单一设备使用,不支持邮件同步。
- IMAP:功能丰富,支持多设备同步,适合需要在多个设备之间访问和管理邮件的用户。
适用性:
- POP3:适合需要将邮件下载到本地并离线阅读的用户。会话是无状态的。
- IMAP:适合需要在多个设备之间同步邮件和状态的用户。跟踪用户会话状态信息。
-
-
特点:
- SMTP 使用持久连接
- SMTP 要求邮件消息(header & body)必须是 7-bit ASCII
- SMTP 服务器使用 CRLF.CRLF 来判断邮件消息的结束
-
2.5 DNS:因特网的目录服务
-
DNS(Domain Name System)
-
功能:
-
域名解析------域名到IP地址的转换
-
负载均衡------可以通过设置多个IP地址来实现负载均衡,将用户请求分发到不同的服务器上
-
管理域名------创建、更新、删除
-
分布式系统------每一层负责管理不同层次的域名信息,提升了系统的可扩展性和可靠性
不用集中式 DNS,避免单点故障、巨大访问量,同时便于维护
-
缓存功能------缓存解析过的域名和对应的IP地址,以减少重复查询。缓存时间由 TTL(Time To Live)字段控制
-
>问:客户机怎样决定 主机名 www.amazon.com 的 IP 地址? > >1. 查询根服务器,得到com DNS服务器 >2. 查询com DNS服务器得到amazon.com DNS服务器 >3. 查询amazon.com DNS服务器得到www.amazon.com 的IP地址
-
-
DNS 查询方法:
-
方法1:递归查询
- 名字解析的负担交给被查询的名字服务器
-
方法2:迭代查询
-
被查询的名字服务器 回复可以被查询的名字服务器的IP地址
"我不知道它的名字,但是你可以问服务器xx"
-
-
-
DNS记录
- 一旦名字服务器获得DNS映射,它将缓存该映射到局部内存(一定时间后丢弃),即本地DNS服务器可以缓存TLD(Top-Level Domain)
- 存储资源记录(RR,Resource Records)的分布式数据库
- 格式:(name,value,type,ttl)
-
DNS协议:分为 查询报文 与 应答报文,二者有相同的报文格式:
-
DNS攻击:
- DDoS攻击:对根域名服务器或顶级域名服务器发起拒绝服务攻击
- 重定向攻击:发送欺骗的域名解析结果给DNS服务器
- DNS reflector attacks:伪造客户地址向大量的dns服务器发出请求,导致客户无法访问dns服务器进行域名解析
- 常见的攻击方法
- 本机Host文件被篡改
- DNS劫持
- DNS污染
2.6 P2P(了解 = 不考)
2.7 内容分发网络(CDN)
-
如何从海量视频中,挑选出某些内容,采用流的方式发送给成千上万的用户?
-
选项1:单点、庞大的服务器------单点故障、单点网络阻塞、远距离用户访问路径长、输出链路上发送同一视频的多份重复拷贝
不具有可拓展性
-
选项2:将多分拷贝存储在地理上分散的不同站点来提供服务(CDN)
- 优先选最近的,若网络路径拥塞则可能选择其他拷贝
-
2.8 构造一个简单的Web服务器
参考实验
第二章小结:
- 应用程序体系结构
- C/S
- P2P
- 混合
- 应用服务器需要的服务
- 可靠、带宽、时延
- 网络运输层协议
- TCP:面向连接,可靠
- UDP:速度快,不可靠
- 通用协议:
- HTTP
- FTP
- SMTP,POP,IMAP
- DNS
- 应用层协议(重点)
- 典型的请求/应答消息交换
- 客户请求消息或服务
- 服务器以数据or状态码应答
- 消息格式
- 头部
- 数据