应用层协议原理
网络核心设备仅在较低层起作用,特别是网络层及以下层。
应用程序:能够运行在不同端系统,能通过网络彼此通信的程序。
网络体系结构是固定的,并为应用程序提供了特定的服务集合。
01 应用程序体系结构:由应用程序研发者设计,规定了如何在各终端系统上组织该应用程序。
- 客户-服务器:客户之间不直接通信;服务器有固定IP地址,并总是打开的。数据中心用于创建强大的虚拟服务器,以解决单台服务器无法跟上所有客户请求的情况。
- web应用程序
- 对等P2P:对服务器有很小的(或没有)依赖。应用程序在间断连接的主机对(对等方)之间直接通信。
- 文件共享、对等方协助下载器、网络电话、视频会议
- 客户-服务器混合P2P
- 即时通讯:服务器用于跟踪用户IP,但用户间报文直接发送
02 网络进程通信
1. 客户进程:发起通信;服务器进程:等待联系。
2. 进程与计算机网络间的接口:进程通过套接字(软件接口)向网络发送和接收报文。套接字是同一台主机内应用层与运输层之间的接口。
应用开发者可以控制应用层的一切,对运输层的控制是:选择运输层协议;设定几个运输层参数。
3. 进程寻址:ip + port
03 应用程序服务要求
- 可靠数据传输:没有数据丢失(多媒体应用,如交谈式音视频能够承受一定量的数据丢失)
- 吞吐量:发送进程能够向接收进程交付的比特速率。
- 带宽敏感应用:具有吞吐量要求的应用程序,如多媒体应用。
- 弹性应用:能根据当时可用的带宽或多或少的利用可供使用的吞吐量。如电邮、文件传输、web传送等。
- 定时:为了服务有效性要求数据交付有严格的时间限制。如电话会议、多方游戏等。
- 安全性:运输协议能够为应用程序提供安全性服务。如发送时加密,接收后解密;数据完整性;端点鉴别。
04 运输协议
1. TCP服务:全双工
- 面向连接服务:数据报文开始流动前建立连接,结束后拆除连接。
- 可靠数据传输服务:无差错,有顺序
- 用塞控制机制:当发送或接收方出现网络拥塞时,会抑制发送进程。拥塞机制也会试图通过限制每个TCP连接,来实现公平共享网络带宽。
安全套接字层SSL:是在应用层实现的一种对TCP的加强。提供关键的进程到进程的安全性服务。
2. UDP服务:无连接,提供不可靠数据传输服务,乱序
05 应用层协议
HTTP协议:定义了浏览器和web服务器之间传输的报文格式和序列。
06 网络应用
- WEB应用
- 组成:文档格式标准(HTML);web浏览器;web服务器;应用层协议
- 电子邮件:使用了多个应用层协议
- DNS:为因特网提供目录服务(网络名字到地址的转换)
WEB和HTTP
web页面:由对象组成,对象可通过一个URL寻址得到。
web浏览器:HTTP的客户端。
web服务器:HTTP的服务端,用于存储web对象。
HTTP协议:不同端系统中的程序通过交换HTTP报文进行会话。HTTP定义了报文结构和报文交换的方式。
- 无状态协议:http服务器不保存关于客户的任何信息。
- 使用TCP作为运输协议。
02 持续连接和非持续连接
往返时间Round Trip Time:一个短分组从客户到服务器再返回客户花费的时间。
- 非持续连接:每个客户端服务器请求/响应对是经一个单独的TCP连接发送。总响应时间 = 2RTT (发起连接,请求文件)+ 传输HTTP文件。
- 必须为每个请求对象建立和维护新连接。在客户端和服务端都要分配和保持TCP变量,造成服务器负担
- 每个对象经受两倍RTT交付时延
- 持续连接:一系列请求/响应对是经相同TCP连接发送(HTTP默认)
- 服务器在发送响应后保持该TCP连接打开。如一条连接经一段时间未被使用,自动关闭。
- http2允许相同连接中多个请求和回答交错
03 HTTP报文格式
- HTTP请求报文:
- 请求行request line:
- 方法:
- GET:请求对象
- POST:请求页面的特定内容依赖于用户输入的内容
- HEAD:不返回请求对象,用于调试跟踪
- DELETE:用户或应用程序删除web服务器上的对象
- PUT:用户上传对象
- URL
- HTTP版本
- 方法:
- 首部行header line:
- Host:所在对象主机
- Connection:是否使用持续连接
- User-agent:用户代理,即想服务器发请求的浏览器类型(服务器会为不同用户代理发送对象的不同版本)
- Accept-language:语言
- 实体体entity body:包含POST请求时的用户输入值
- HTTP响应报文
- 状态行status line:HTTP/1.1 200 OK
- 协议版本
- 状态码
- 状态信息
- 首部行
- 实体体
04 Cookie
允许站点对用户进行跟踪。可用于标识一个用户。可以在无状态的http上建立用户会话层。
- http响应报文中的cookie首部行
- http请求报文中的cookie首部行
- 用户端系统中保留的cookie文件
- web站点的数据库
05 web缓存
web缓存器/代理服务器:保存最近请求过得对象的副本。
响应时间 = 局域网时延(可忽略不计) + 接入时延 + 因特网时延(一般是2s)
如何减少接入时延? 1. 升级链路带宽 2. 通过安装web缓存器,去除部分对象请求的接入时延
- 减少客户请求的响应时间
- 降低因特网上的web流量,改善所有应用性能
因特网中的电子邮件
01 SMTP
用于从发送方的邮件服务器发送报文到接收方的邮件服务器。
SMTP与HTTP的对比?
- HTTP主要是拉协议(pull protocol),TCP连接时由接收方机器发起;SMTP是推协议(push protocol),TCP连接又发送方发起。
- SMTP要求报文采用7比特ASCII码格式;HTTP不受限制。
- SMTP将所有对象放在一个报文中;HTTP将每个对象封装到响应报文中。??
02 POP3 拉协议
因特网的目录服务 DNS: 域名系统
01 DNS提供的服务
DNS是一个由分层的DNS服务器实现的分布式数据库。一个使主机能够查询分布式数据库的应用层协议。运行在UDP 53上。
- DNS提供主机名到IP地址的转换;复杂主机可以拥有多个名字,DNS还可以用来获得规范主机名。
- 用于冗余服务器之间的负载分配。(当站点被分配在多个相同别名cname的服务器上,DNS可以循环给这些服务器分配负载)
02 DNS的工作机理
DNS服务器层次结构:
- 根DNS服务器:返回顶级域名的TLD服务器IP
- 顶级域DNS服务器 TLD:返回权威服务器IP
- 权威DNS服务器:返回主机名对应的IP
本地DNS服务器:临近主机,代理转发主机的DNS请求到DNS服务器层次结构中。
DNS缓存:减少因特网上传输的dns报文数量,改善时延。
P2P文件分发
从单一服务器向大量主机分发一个大文件。每个对等方能够向任何其他对等方分发它已经收到的该文件的任何部分,从而协助服务器。
内容分发网 CDN
CDN管理分布在多个地理位置的服务器,在它的服务器中存储视频等web内容的副本。将每个用户请求定向到一个提供最好的用户体验的CDN位置。
用户发送url请求 -> cdn截获该请求:1. 确定此时适合的cdn服务集群 2. 将请求重定向到该集群的某个服务器。
- 用户输入要访问的域名,向dns服务器请求域名解析
- dns服务器解析出域名的cname后,将域名解析交给cdn专用dns服务器,将cdn的负载均衡ip返回用户
- cdn负载均衡设备会为用户选择一台合适的缓存服务器提供服务(集群选择策略)
- 地理最近
- 负载最小
- 用户向cdn服务器ip创建tcp连接并发出获取内容的请求,cdn缓存服务器响应请求并返回内容
套接字编程
01 UDP
UDP服务器再将分组丢进套接字前必须附上目的地的IP + 端口号
02 TCP
TCP是面向连接的服务,进程通信前需要先建立连接(欢迎套接字)。之后通过连接套接字进行数据传输。