为什么需要域名解析?
只知道被访问资源的域名,而不知道对用的IP地址时由域名服务器提供解析服务
域名解析
DNS的使用方法:
1 为了将一个名字映射为IP地址,应用程序调用一个叫解析器 ( resolver )的库过程,把名字作为参数传递给这个过程 (如: gethostbyname()就是一个解析器)
2 解析器发送一个UDP分组给本地DNS服务器,它会负责查找该名字, 然后将对应的IP地址返回给解析器
3 解析器返回结果给应用程序,然后应用程序即可开始工作了(封装, 发送……)
查询:
当一个解析器收到一个域名查询时,它将该查询传递给本地 的一个域名服务器
如果待查询的域名落在该名字服务器的管辖范围内,它将返回权威资源记录
一个权威资源记录(authoritative record)是指来自于管理该 记录的权威机构,因此总是正确的,它和缓存的记录不同, 后
者可能是过期的
如果被请求的域名是远程的,且本地没有关于它的信息,那么本地名字服务器向根域服务器发送一条查询此域的消息
查询种类:
主机向本地域名服务器的查询一般都是采用递归查询
递归查询:
本地域名服务器向根域名服务器的查询通常是采用迭代查询
迭代查询:
一次完整的解析:
问题:查询漫长,消耗很多资源,延迟数据发送
优化方法:
高速缓存—减少查询环节,提高效率
上例中,本域中的另一台主机如果查询同一个域名,则马上可得到结果
上例中,本域中的另一台主机如果查询另一个域名,如 Z.abc.com,则可直接发送到权威域名服务器得到权威记录
缺点:缓存中的内容不具有权威性
什么时候使用TCP?
UDP报文超过512Bytes:
从(second)服务器的数据更新
对首次请求响应,返回参数TC置位再请求,建立TCP连接,将数据流分段发送
从(second)服务器的数据更新:
对首次请求响应,返回参数TC置位再请求,建立TCP连接,将数据流分段发送
主、从 服务器间建立TCP连接,进行批量数据流传输