文章目录
- 概述
- 域名系统DNS
- 域名结构
- 域名服务器
- 解析过程
- 常见的DNS记录
- DNS报文格式
- 基础结构部分
- 问题部分
- 资源记录(RR, Resource Record)部分
- 万维网WWW
- URL
- HTTP
- HTTP发展
- HTTP报文结构
- 请求报文
- 响应报文
- cookie
- 内容分发网络CDN
概述
- 应用层的具体内容就是规定应用进程在通信时所遵循的协议
- 应用层的许多协议都是基于客户服务器方式,客户是服务请求方,服务器是服务提供方
应用进程通信的方式:
1、客户/服务器(C/S, Client/Server)方式
应用层的许多协议是基于C/S方式,例如,在移动互联网环境下,每个应用APP都是一个客户端
- 客户是服务请求方(主动请求服务,被服务)
- 服务器是服务提供方(被动接受服务请求,提供服务
C/S方式可以是面向连接的,也可以是无连接的
- 面向连接时,C/S通信关系一旦建立,通信就是双向的,双方地位平等,都可发送和接收数据
客户进程的特点:
- 在进行通信时临时成为客户,它也可在本地进行其它的计算
- 用户计算机上运行,在打算通信时
主动
向远地服务器发起通信 - 客户方必须知道服务器进程所在主机的IP地址才能发出服务请求
- 需要时可以与多个服务器进行通信
服务器进程的特点:
- 专门用来提供某种服务的程序,可“同时”处理多个远地或本地客户的请求
必须始终处于运行状态才有可能提供服务
- 通信开始之前服务器进程不需要知道客户进程所在主机的IP地址,无论客户请求来自哪里,服务器进程被动等待服务请求的到来即可
- 通常是当系统启动时即自动调用并一直运行着。某些服务器程序也可以由用户或其它进程在通信前启动
被动等待
并接受来自多个客户的通信请求
2、浏览器/服务器(B/S,Browser/Server) 方式
B/S方式可以看做C/S方式的特例,即客户软件改为浏览器了
B/S方式采取浏览器请求、服务器响应
的工作模式
在B/S方式下,用户界面完全通过Web浏览器实现
,一部分事务逻辑在前端实现,但主要的事务逻辑在服务器端实现
B/S方式通常采取3层架构
实现
- 数据层:由
数据库服务器承担数据处理逻辑
,其任务是接受Web服务器对数据库服务器提出的数据操作请求,然后由数据库服务器进行数据处理并把处理结果返回给web服务器 - 处理层:由
Web服务器承担业务处理逻辑和页面存储管理
,接受客户浏览器的任务请求,执行相应的事务处理 - 表现层:浏览器仅承担网页信息的浏览功能, 以超文本格式实现信息的输入和浏览
优点:
- 界面统一、使用简单
- 易于维护
- 可扩展性好
- 信息共享度高
3、对等(P2P,Peer to Peer)方式
对等方式是指两个进程在通信时并不区分服务的请求方和服务的提供方
- 只要两个主机都运行P2P软件,它们就可以进行平等、对等的通信
- 双方都可以下载对方存储在硬盘中的共享文档,如果权限允许的话
音频/视频应用推动了P2P对等通信方式的发展
音频/视频流量已占主要比例
P2P方式从本质上看仍然是使用了C/S方式,但强调的是通信过程中的对等,这时每一个P2P进程既是客户同时也是服务器
域名系统DNS
DNS:是互联网重要的基础设施之一,向所有需要域名解析的应用提供服务,主要负责将可读性好的域名映射成IP地址
域名结构
任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名
域还可以划分为子域,还能继续划分,就形成了顶级域,二级域,三级域等等
每一个域名都是由标号序列组成,各标号之间用点“.”隔开
域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母,标号中除连字符(“-”)外不能使用其他标点符号。完整域名总共不超过255个字符。
级别最低的域名卸载最左边
每一级域名由其上一级的域名管理机构管理,顶级域名由ICANN进行管理
顶级域名TLD(Top Level Domain):
1、国家顶级域名nTLD
2、通用顶级域名gTLD
3、基础顶级域名,只有一个,即arpa,用于反向域名解析,又称为反向域名
域名服务器
实现域名系统是使用分布在各地的域名服务器
因特网上的DNS域名服务器是按照层次安排的
1、根域名服务器:最高层次的最重要的域名服务器。
所有的根域名服务器都知道所有顶级域名服务器的域名和IP地址。
因特网上共有13个不同IP地址的根域名服务器,a~m,域名分别是a.rootserver.net,…,m.rootserver.net
并不是13个机器,而是13套装置
大多情况下,根域名服务器并不直接把待查询的域名直接转换成IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询
2、顶级域名服务器:负责管理在该顶级域名服务器注册的所有二级域名。收到DNS查询请求时,就给出相应的回答,可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址
3、权限域名服务器:负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发送查询请求的DNS客户,下一步应当找哪一个权限域名服务器。
4、本地域名服务器:当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。每个因特网服务器提供者ISP,或一个大学,甚至一个系,都可以拥有一个本地域名服务器,有时也称为默认域名服务器。
为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中一个是主域名服务器,其他的是辅助域名服务器。
当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断
主域名服务器定期把数据复制到辅助域名服务器中,更改数据只发生在主域名服务器。
解析过程
1、主机向本地域名服务器的查询一般都是采用递归查询。
即本地域名服务器不知道被查询域名的IP时,本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让主机自己进行进一步查询。
递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。
2、本地域名服务器向根域名服务器的查询通常是采用迭代查询。即当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应该向哪个域名服务器进行查询。然后本地域名服务器进行后续的查询。
常见的DNS记录
下面的摘自https://www.cloudflare.com/zh-cn/learning/dns/dns-records/
A 记录 - 保存域的 IP 地址的记录。
AAAA 记录 - 包含域的 IPv6 地址的记录(与 A 记录相反,A 记录列出的是 IPv4 地址)。
CNAME 记录 - 将一个域或子域转发到另一个域,不提供 IP 地址。
MX 记录 - 将邮件定向到电子邮件服务器。
TXT 记录 - 可让管理员在记录中存储文本注释。这些记录通常用于电子邮件安全。
NS 记录 - 存储 DNS 条目的名称服务器。
SOA 记录 - 存储域的管理信息。
SRV 记录 - 指定用于特定服务的端口。
PTR 记录 - 在反向查询中提供域名。
DNS报文格式
分为三部分:基础结构(报文首部)、问题、资源记录(RR, Resource Record)
报文类型分为查询请求(query)和查询响应(reply)
两类,请求和响应的报文结构基本相同
基础结构部分
-
事务ID:DNS报文的ID标识。对于请求报文和其对应的响应报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的
-
标志:DNS报文中的标志字段
-
QR(Query/Response):查询请求/响应的标志信息。查询请求时值为0;响应时值为1
-
Opcode:操作码。其中,0表示标准查询;1表示反向查询;2表示服务器状态请求
-
AA(Authoritative):授权应答,该字段在响应报文中有效。值为1时表示名称服务器是权威服务器;值为0时表示不是权威服务器
-
TC(Truncated):表示是否被截断。值为1时,表示响应已超过512字节并已被截断,只返回前512个字节
-
RD(Recursion Desired):期望递归。该字段能在一个查询中设置,并在响应中返回。该标志告诉域名服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为0,且被请求的域名服务器没有一个授权回答,它将返回一个能解答该查询的其他域名服务器列表。这种方式被称为迭代查询
-
RA(Recursion Available):可用递归。该字段只出现在
响应报文
中。当值为1时,表示服务器支持递归查询 -
Z:保留字段,在所有的请求和响应报文中,它的值必须为0
-
Rcode(Reply code):返回码字段,表示响应的差错状态。常用Rcode有
- 当值为0(NoError)时,表示没有错误
- 当值为1(FormErr)时,表示报文格式错误,服务器不能理解请求的报文
- 当值为2(ServFail)时,表示域名服务器失败,因为服务器的原因导致没办法处理这个请求
- 当值为3(NXDomain)时,表示域名不存在,只有对授权域名解析服务器有意义,指出解析的域名不存在
- 当值为4(NotImp)时,表示查询类型不支持,即域名服务器不支持查询类型
- 当值为5(Refused)时,表示拒绝应答,一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答
-
问题计数:DNS查询请求的数目
-
回答资源记录数:DNS响应的数目
-
权威资源记录数:权威资源记录的数目
-
附加资源记录数:额外的记录数目(权威名字服务器对应IP地址的数目)
问题部分
-
用来显示DNS查询请求的问题,通常只有一个问题
-
包含正在进行的查询信息,包含查询名(被查询主机名字)、查询类型、查询类
- 查询名(name):一般为要查询的域名,有时是IP地址,用于反向查询
- 查询类型(type):DNS查询请求的资源类型。通常查询类型为A类型,表示由域名获取对应的IP地址
- 查询类(class):地址类型,通常为互联网地址,值为1(IN)
实例:
资源记录(RR, Resource Record)部分
资源记录部分是DNS报文格式的最后3个字段,只有在DNS响应报文中
才出现,包括回答问题区域字段、权威名字服务器区域字段、附加信息区域字段
。这3个字段都采用资源记录
的格式
资源记录格式:
- 域名:DNS请求的域名
- 类型:资源记录的类型,与问题部分中的查询类型值相同
- 类:地址类型,与问题部分中的查询类值相同
- 生存时间:以秒为单位,表示资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间。它同时也可以表明该资源记录的稳定程度,稳定的信息会被分配一个很大的值
- 资源数据长度:资源数据的长度
- 资源数据:表示按查询段要求返回的相关资源记录的数据
实例:
万维网WWW
万维网使用统一资源定位符URL来标志万维网上的各种文档,并使每一个文档在整个原认为的范围内都具有唯一的标识符URL。
用超文本传送协议HTTP来实现万维网上的各种链接
HTTP是一个应用层协议,使用TCP连接进行可靠的传送
使用超文本标记语言HTML使得万维网页面的设计者可以很方便地用链接从本页面的某处链接到因特网上任何一个万维网页面,并且能够在自己的主机屏幕上将这些页面显示出来
URL
格式:
<协议>://<主机>:<端口>/<路径>
HTTP
是面向事务的应用层协议,是万维网上能够可靠地交换文件的重要基础
是无状态的
本身是无连接的
HTTP发展
HTTP报文结构
请求报文
开始行、首部行和实体主体
在请求报文中,开始行就是请求行
方法
- 方法是对所请求的对象进行的操作,实际上也就是一些命令
- 请求报文的类型是由它所采用的方法决定的
URL
- “URL”是所请求资源的URL
响应报文
状态码
cookie
HTTP无状态协议,服务器用cookies保持用户状态
HTTP在响应的首部行里使用一个关键字头set-cookie:选择的cookie号具有唯一性
后继的HTTP请求中使用服务器响应分配的cookie:
Cookie文件保存在用户的主机中,内容是服务器返回的一些附加信息,由用户主机中的浏览器管理
Web服务器建立后端数据库,记录用户信息,cookie作为关键字
Cookies一般包含5个字段
- 域指明Cookie来自何方,每个域为每个客户分配Cookie有数量限制
- 路径标明服务器的文件树中哪些部分可以使用该Cookie:
- 内容采用“名字=值”的形式,是Cookie存放内容的地方,可以达到4K容量,内容只是字符串,不是可执行程序
- 安全指示浏览器只向使用安全传输连接的服务器返回Cookie
内容分发网络CDN
怎样将内容(如从百万的视频中选定的内容)分发给同时发起访问的数百万用户?
单个、大型的“服务器”?
- 单点故障
- 网络拥塞
- 远程用户的长路径
内容分发网络CDN
Content Delivery Network,or Content Distribution Network主要优点
- 降低响应时延,避免网络拥塞
- 避免原始服务器过载及防止DDoS攻击
- 分布式架构,具有良好的可扩展性
- 对用户透明,无需用户感知CDN服务器布局——在多个地理分布的位置存储/服务 多个视频拷贝 CDN缓存位置和内容——在CDN节点上存储内容拷贝订阅者(subscriber)请求内容,服务提供者返回清单CDN
- 通过清单,客户端以可支持的最高速率检索到内容
- 如果网络路径拥塞,可能会选择不同的拷贝或网络速率CDN可以扩展Web 服务器的客户端,这些客户端从就近的CDN结点(或缓存)处得到内容