计算机网络:应用层
网络应用程序体系结构
应用程序的体系结构明显不同于网络的体系结构
- 从应用程序的研发者的角度,网络体系结构是固定的,并为应用程序提供了特定的服务集合。
- 应用程序体系结构由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序
客户-服务器体系结构(client-server architecture)
- 一个总是打开的主机称为服务器,它服务于来自许多其他称为客户的主机的请求
- 服务器具有固定的、周知的地址称为IP地址,客户能够通过向服务器的IP地址发送分组来与其联系
- 客户相互之间不直接通信
P2P体系结构
- 应用程序在间断连接的主机之间使用直接通信,这些主机对被称为对等方
- 自扩展性(self-scalability)
进程通信
进行通信的实际上是进程,而不是程序
客户和服务器进程
- 对每对通信进程,通常将这两个进程之一表示为客户(client),另一个进程标识为服务器(server)
- 在一对进程的对话场景中,发起通信的进程被标识为客户,在会话开始时等待联系的进程是服务器
进程和计算机网络之间的接口
- 进程通过被称为套接字(socket)的的软件接口向网络发送报文和从网络中接收报文
- 套接字是同一台主机内应用层和运输层的接口,也称为应用程序和网络之间的应用程序编程接口(Aplication Programming Interface,API)
- 应用程序开发者对运输层的控制权限仅限与选择运输层协议,也许能设定某个应用层参数(如最大报文段长度)
进程寻址
- 主机的地址:IP地址(IP address)
- 接收进程的标识符:端口号(port number)
运输服务
- 可靠数据传输(Reliable Data Transfer, RDT)
- 吞吐量:发送进程能够向接收进程交付比特的速率
- 定时
- 安全性:数据加密
因特网提供的运输服务
TCP服务
- 面向连接服务:经过握手阶段后再两个进程之间建立TCP连接
- 可靠数据传输服务
- 拥塞控制机制
UDP服务
- 不提供不必要服务,仅提供最小服务
- 不可靠数据传输服务
因特网不提供的服务
- 不能提供定时或带宽保证
应用层协议
定义了不同端系统上的应用程序如何相互传递报文
- 交换的报文类型
- 各种报文类型的语法
- 字段的语义
- 确定一个进程何时以及如何发送报文,对报文进行响应的规则
HTTP(HyperText Transfer Protocal)
HTTP概况
- HTTP由一个客户程序和一个服务器程序组成
- URL包含两部分,存放对象的主机名和对象的路径名
- HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户发送Web页面的方式
- HTTP使用TCP作为支撑运输协议
- HTTP是一个无状态协议:服务器向客户发送被请求的文件,而不存储任何关于该客户的状态信息
非持续连接和持续连接
- 每个请求及其响应经一个单独的TCP连接发送(非持续连接, non-persistent connection),所有的请求和响应经相同的TCP连接发送(持续连接 persistent connection)
- HTTP默认情况下使用持续连接
- 非持续连接:每个TCP连接只传输一个请求报文和一个响应报文
- 必须为每个请求的对象建立和维护一个全新的连接,服务器负担大
- 每个对象经历两倍RTT的交付时延,一个RTT用于创建TCP,一个RTT用于请求和接收一个对象
- 持续连接:服务器发送响应后保持TCP连接打开,如果一条连接经过一定的时间间隔仍未被使用,HTTP服务关闭该连接
- 往返时间 RTT(Round-Trip Time):一个短分组从客户到服务器再到客户所花费的时间
HTTP报文格式
HTTP响应报文
- 初始状态行(status line):协议版本字段、状态码和相应状态信息
- 首部行(header line):首部字段名+值
- 实体体:报文的主要部分
用户与服务器的交互:cookie
- 在HTTP响应报文和请求报文中由cookie首部行
- 在用户端系统中保留一个cookie文件,由用户的浏览器进行管理
- 位于Web站点的后端数据库,每个用户对应唯一的识别码
Web缓存器(Web cache)或代理服务器(proxy server)
- 可以减少客户请求的响应时间
条件Get方法
- 请求报文使用Get方法且请求报文中包含一个"If-Modified-Since"首部行
- 由代理缓存器向Web服务器发送
- Web服务器的响应报文不需要包含所请求的对象
因特网中的电子邮件
主要组成部分:用户代理(user agent),邮件服务器(mail server),简单邮件传输协议(Simple Mail Transfer Protocol, SMTP)
SMTP
- 使用TCP协议
- SMTP一般不使用中间邮件服务器发送邮件
- SMTP使用的是持续连接
- 与HTTP相比,HTTP主要是一个拉协议,而SMTP主要是一个推协议
DNS(Domain Name System)
主机名到IP地址转换的目录服务
- 一个由分层的DNS服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库的应用层协议
一些重要的DNS服务
- 主机别名(host aliasing)
- 邮件服务器别名(mail server aliasing)
- 负载分配:DNS可以在冗余的服务器之间进行负载分配
DNS分布式数据库
- 单一DNS服务器的问题:单点故障(服务器崩溃为导致互联网瘫痪),通信容量(服务器将会需要为上万台主机处理请求),远距离的集中式服务(距离远的客户将会忍受很长的时延),维护(频繁更新庞大的数据库)
- DNS使用分布式分层次的数据库分为三种层次
- 根DNS服务器:提供TLD服务器的IP地址
- 顶级域(Top-Level Domain, TLD)服务器,顶级域包括(com, org, rdu......),提供了权威DNS服务器的IP地址
- 权威DNS服务器
- 本地DNS服务器:严格来说不属于DNS服务器的层析结构,有代理和缓存的功能
DNS缓存
- 在一个请求链中,当一个DNS服务器接收到一个DNS回答,它能将映射缓存在本地服务器中
- DNS服务器在一段时间后将丢弃缓存的信息
DNS记录
- DNS记录是一个包含下列字段的四元组(Name, Value, Type, TTL)
- TTL是该记录的生存时间
- Name和Value的值取决于Type
DNS报文
- DNS回答和查询报文有着相同的格式
P2P文件分发
- 从单一服务器向大量主机分发一个大文件
- 每个对等方能够向任何其他对等方重新分发它已经收到的该文件的任何部分
视频流
- 视频的特征:高比特率
- 使用压缩生成相同视频的多个版本供用户选择
- DASH(Dynamic Adaptive Streaming over HTTP)(经HTTP的动态适应性流)
内容分发网(CDN, Content Distribution Network)
- CDN管理分布在多个地理位置上的服务器,在它的服务器上存储备份的资源
- 试图将每个用户请求定向到一个将提供最好的用户体验的CDN位置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义