文章目录
应用层协议
在传输层之上,便是应用层。传输层的UDP报文和TCP报文段的数据部分就是应用层交付的数据。
不同类型的网络应用有不同的通信规则,因此应用层协议都是多种多样的,比如DNS、FTP、Telent、SMTP、HTTP、RIP、NFS等协议都是用于解决其各自的一类问题。
一、DNS协议
DNS(域名服务)协议基于UDP,使用端口号53.
由数字组成的IP地址很难记忆,所以我们上网使用网站IP地址的别名——域名。实际使用中,域名与IP地址是对应的,这种对应关系保存在DNS服务器之中。
在浏览器中输入一个域名后,会有DNS服务器将域名解析为对应的IP地址。注意这和网络层的ARP协议的不同之处:DNS提供的是域名与IP地址的对应关系,而ARP提供的是IP地址与MAC地址的对应关系。
1.1 DNS服务器
DNS服务器是个分层次的系统:
- 根DNS服务器:全世界共有13台根域名服务器,编号A到M,其中大部分位于美国;
- 顶级(TLD)DNS服务器:负责如com、org、edu等顶级域名和所有国家顶级域名(如cn、uk、jp)。
- 权威DNS服务器:大型组织、大学、企业的域名解析服务;
- 本地DNS服务器:通常与我们主机最近的DNS服务器。
而域名解析的过程,有迭代查询和递归查询两种方式:
1.2 host命令
在Linux系统中,可以使用host命令进行DNS查询,查看一个指定域名的IP,比如要查询baidu.com
的IP地址:
host www.baidu.com
1.3 DNS报文
主机向DNS服务器发出的查询叫做DNS报文,问答报文的内容,都是IP和域名的对应信息,问题中包含域名、类型、类信息,回答中包含指针,类型,类,TTL,长度,IP地址信息。
1.4 DNS缓存和hosts文件
之前DNS解析查询过程的图中,共发出了8分DNS报文,这是非常消耗时间的,所以实际应用中使用DNS缓存:当一个DNS服务器收到一个DNS回答后,会将信息缓存一段时间,当再有一个对相同域名的查询,便可直接回复。
通过DNS缓存,其实很多查询都只需要本地DNS服务器便可完成。
hosts文件可以看做是一个小型的DNS服务器。
使用命令打开hosts文件
sudo gedit /etc/hosts
查看文件内容,可以发现里面全是类似下图中的IP与域名对应记录;
在实际上网过程中,域名解析的优先顺序是:先在DNS缓存查询,若没有查到记录,再查询hosts文件,若还是没有找到记录,再向DNS服务器发出DNS查询报文。
我们可以用dig
命令进行域名查询
# 查询 www.shiyanlou.com 的 ip 地址, +noedns 是不显示edns信息`
dig www.shiyanlou,com +noedns
输出信息:
输出信息解析:
# 这一部分为应答的统计信息
- QUERY:查询任务个数,这里为1一个;
- ANSWER:查询到几条A记录(IP地址),这里为1条;
- AUTHOROTY:几个权威域名服务器,这里为0个;
- ADDITIONAL:几个附加信息,这里为0个。
# 这一部分为问题片段,意思是查询 www.shiyanlou.com的A记录
- ;; QUESTION SECTION
- ;www.shiyanlou.com
# 这一部分为应答片段,意为查询到的IP为121.40.227.60
- ;;ANSWER SECTION: