概述
应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。
对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统 DNS,支持万维网应用的 HTTP 协议,支持电子邮件的 SMTP 协议等等。
DNS
域名系统DNS:互联网采用层次结构的命名树作为主机的名字,并使用分布式的域名系统DNS,DNS是大多数名字都在本地进行解析,仅少量解析需要互联网上通信。
作用: 将浏览器中输入的域名转换为ip地址。
原理: ip地址与域名的对应关系会存储在某一个“权限域名服务器”上,DNS的解析过程就是查询这个权限域名服务器,并且从该服务器上获取域名对应的ip地址的过程。查询到这个权限域名服务器还需要其他域名服务器的帮忙。
DNS查询方式: 递归查询和迭代查询
DNS解析过程
- 浏览器搜索自身的DNS缓存。缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存
- 若无,搜索操作系统的DNS缓存
- 若无,读取本地的Host文件(位于C:\Windows\System32\drivers\etc)
- 若无,向本地DNS服务器进行查询
- 如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性)
- 若无,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析(此解析不具有权威性)
- 若无,则将根据其设置发起递归查询或者迭代查询
DNS查询方式
递归查询:主机向本地域名服务器查询,采用递归查询(对被查询的域名服务器负担太大)
如果本地域名服务器不知道查询域名的IP,则本地域名服务器以DNS客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让主机自己进行下一步查询。因此,递归查询返回的查询结构是查询的IP地址或报错,即无法查询到IP
- 如果该DNS服务器为被授权的服务器,且它能够回应请求,则返回结果给客户机
- 若不能,则该DNS服务器则代替客户机向它认为能给出结果的DNS服务器发出请求
- 以此类推,得到结果后逐级返回。
迭代查询:本地域名服务器向根域名服务器查询,采用迭代查询(对本地域名服务器的负担较重)
当根域名服务器收到本地域名服务器发出的查询请求报文时,要么给出要查询的IP地址,要么告诉本地域名服务器下一步应向哪个域名服务器查询,然后让本地域名服务器进行后续查询。根域名服务器通常把自己知道的*域名服务器的IP告诉本地域名服务器,让本地域名服务器再向*域名服务器查询
迭代查询思路:每次查询先向*查询(根域名服务器),*根据查询情况返回下一级该向哪一级查询,如此重复进行,知道查询完毕。
- 如果该DNS服务器为被授权的服务器,且它能够回应该请求,则返回给客户机
- 若不能,则该DNS服务器则向客户机返回一个它认为能给出结果的DNS服务器地址,客户机再向这个地址发出请求
- 以此类推,得到结果后逐级返回。并缓存在本地的DNS高速缓存中
高速缓存
DNS用什么传输层协议
DNS占用53号端口,同时使用TCP和UDP协议。
-
域名解析:UDP
- 客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。
- 不用经过三次握手,这样DNS服务器负载更低,响应更快。
- 理论上说,客户端也可以指定向DNS服务器查询时用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。
-
区域传输:TCP
- DNS负载均衡的数据同步传送的数据量比一个请求应答的数据量要多得多。
- TCP是可靠连接,保证了数据的准确性。