目录
从输入一个域名的解析过程
以www.baidu.com为例子
本地缓存和hosts文件
mDNS和LLMNR
NBT-NS
路由器广播
Root域名服务器
顶级域名服务器
目标域名服务器
DNS解析完成
操作系统发起TCP连接:
TCP三次握手: TCP连接的建立采用经典的三次握手过程:
TCP连接建立
HTTP请求
服务器处理请求:
HTTP响应:
浏览器渲染:
从输入一个域名的解析过程
-
本地缓存和hosts文件: 首先,系统会检查本地的DNS缓存以及hosts文件,看是否有目标域名的解析记录。如果有,解析过程就直接结束,直接使用缓存或hosts文件中的IP地址。
-
mDNS和LLMNR: 如果本地缓存和hosts文件中没有找到,系统可能会使用mDNS(对于MacOS和Linux)或LLMNR(对于Windows)在局域网中进行主机名解析。这是一种在本地网络中进行零配置的服务发现协议。
-
NBT-NS: 如果mDNS和LLMNR都没有找到,系统可能会尝试使用NBT-NS(NetBIOS Name Service),这是一种用于在Windows网络中解析NetBIOS主机名的服务。
-
路由器广播: 如果上述步骤都没有成功,系统可能会向本地网络的路由器发起广播请求,看是否能够得到目标主机的IP地址。
-
Root域名服务器: 如果局域网中的解析仍然失败,系统将发起DNS查询请求,首先向根域名服务器发起查询。根域名服务器将返回顶级域(例如.com)的权威DNS服务器地址。
-
顶级域名服务器: 然后,系统将向顶级域名服务器发起查询,获取下一级域名服务器的地址。这个过程将一级一级地进行,直到获取到目标域名的权威DNS服务器。
-
目标域名服务器: 最终,系统将向目标域名的权威DNS服务器发起查询,获取目标域名的IP地址。
-
DNS解析完成: 在上述DNS查询中,已经获取了目标域名(例如, www.baidu.com)对应的IP地址。
-
操作系统发起TCP连接: 浏览器或其他网络应用通常会通过操作系统提供的套接字接口来发起TCP连接。操作系统根据DNS解析得到的IP地址,向目标服务器发起TCP连接请求。
-
TCP三次握手: TCP连接的建立采用经典的三次握手过程:
-
第一步(客户端向服务器发送SYN): 客户端发送一个TCP报文,其中包含SYN(同步)标志,表示请求建立连接。
-
第二步(服务器收到SYN并发送ACK和SYN): 服务器接收到客户端的SYN后,发送一个带有ACK(确认)和SYN标志的报文,表示同意建立连接。
-
第三步(客户端收到ACK和SYN): 客户端接收到服务器的ACK和SYN后,发送一个带有ACK标志的报文,表示连接建立成功。
-
TCP连接建立: 当三次握手完成后,TCP连接建立成功,双方可以开始进行数据传输。
-
HTTP请求: 一旦TCP连接建立成功,浏览器向服务器发送HTTP请求,包括请求的资源路径等信息。
-
服务器处理请求: 服务器接收到请求后,根据请求的资源路径等信息,处理并生成相应的HTTP响应。
-
HTTP响应: 服务器将响应内容通过TCP连接发送给浏览器。
-
浏览器渲染: 浏览器接收到HTTP响应后,解析并渲染页面,呈现给用
以www.baidu.com为例子
本地缓存和hosts文件
检查本地DNS缓存和hosts文件,如果其中有"baidu.com"的解析记录,则直接使用相应的IP地址。
图1 本地dns缓存
图二本地hosts文件
mDNS和LLMNR
如果本地缓存和hosts文件中没有找到,系统可能使用mDNS(MacOS和Linux)或LLMNR(Windows)在局域网中进行主机名解析。
NBT-NS
如果mDNS和LLMNR都没有找到,系统可能尝试使用NBT-NS(NetBIOS Name Service),在Windows网络中解析NetBIOS主机名。
路由器广播
如果上述步骤都没有成功,系统可能向本地网络的路由器发起广播请求,寻找"
baidu.com"的IP地址。
Root域名服务器
如果局域网中的解析仍然失败,系统将发起DNS查询请求,向根域名服务器发起查询,获取.com顶级域的权威DNS服务器地址。
顶级域名服务器
系统将向.com顶级域名服务器发起查询,获取"
baidu.com"的权威DNS服务器地址。
对"
baidu.com
."的顶级DNS服务器的信息进行了查询。这里列出了"Baidu"公司的权威DNS服务器(
ns1.baidu.com
.、
ns2.baidu.com
.等)。
目标域名服务器
系统将向"
baidu.com"的权威DNS服务器发起查询,获取"
baidu.com"的IP地址。
并且是一个别名的记录
DNS解析完成
在上述DNS查询中,已经获取了目标域名(例如,www.baidu.com)对应的IP地址。
操作系统发起TCP连接:
浏览器或其他网络应用通常会通过操作系统提供的套接字接口来发起TCP连接。操作系统根据DNS解析得到的IP地址,向目标服务器发起TCP连接请求。
TCP三次握手: TCP连接的建立采用经典的三次握手过程:
-
第一步(客户端向服务器发送SYN): 客户端发送一个TCP报文,其中包含SYN(同步)标志,表示请求建立连接。
-
第二步(服务器收到SYN并发送ACK和SYN): 服务器接收到客户端的SYN后,发送一个带有ACK(确认)和SYN标志的报文,表示同意建立连接。
-
第三步(客户端收到ACK和SYN): 客户端接收到服务器的ACK和SYN后,发送一个带有ACK标志的报文,表示连接建立成功。
TCP连接建立
当三次握手完成后,TCP连接建立成功,双方可以开始进行数据传输。
HTTP请求
一旦TCP连接建立成功,浏览器向服务器发送HTTP请求,包括请求的资源路径等信息。
服务器处理请求:
服务器接收到请求后,根据请求的资源路径等信息,处理并生成相应的HTTP响应。
HTTP响应:
服务器将响应内容通过TCP连接发送给浏览器。
浏览器渲染:
浏览器接收到HTTP响应后,解析并渲染页面,呈现给用