在你的浏览器中输入www.baidu.com以后,会在你的浏览器呈现百度首页,这期间发生了什么?
首先我们需要知道TCP/IP的网络模型,这里我就以四层模型为例子。
第一步:在浏览器中输入www.baidu.com后,应用层会使用DNS解析域名,如果本地存有对应的IP,则使用;如果没有,则会向上级DNS服务器请求帮助,直至获得IP。域名解析详细过程会在下文讲到。
第二步:应用层将请求的信息装载入HTTP请求报文,信息包含了请求的方法(GET / POST)、目标url、遵循的协议(http / https / ftp…)等,然后应用层将发起HTTP请求。
第三步:传输层接收到应用层传递下来的数据,并分割成以报文段为单位的数据包进行管理,并为它们编号,方便服务器接收时能准确地还原报文信息。通过三次握手和目标端口建立安全通信。
第四步:网络层接收传输层传递的数据,根据IP通过ARP协议获得目标计算机物理地址—MAC。当通信的双方不在同一个局域网时,需要多次中转才能到达最终的目标,在中转的过程中需要通过下一个中转站的MAC地址来搜索下一个中转目标。
第五步:找到目标MAC地址以后,就将数据发送到数据链路层,这时开始真正的传输请求信息,传输完成以后请求结束。
第六步:服务器接收数据后,从下到上层层将数据解包,直到应用层。
第七步: 服务器接收到客户端发送的HTTP请求后,查找客户端请求的资源,将数据装载入响应报文并返回,响应报文中包括一个重要的信息——状态码,如200,404,500。
DNS域名解析
域名解析就是将域名地址解析为IP地址,从浏览器输入域名到解析为IP地址,其中具体的过程可以分为如下一些步骤!
1.浏览器检查缓存中是否有此域名对应解析过的IP地址,如果有,直接返回结果,解析过程接结束。
2.浏览器没有缓存对应的IP,此时浏览器会查找操作系统中是否有此域名对应的DNS解析结果,如果有,直接返回结果,解析过程接结束。在windows中可以通过C:\Windows\System32\drivers\etc\hosts来设置域名解析过程,linux下是/ect/named.conf。
3.如果在本机中无法完成域名解析过程,就会请求DNS服务器来解析了。在网络设置中我们会配有DNS服务器地址:
操作系统会将域名发送到这里的设置的LDNS(本地区域名服务器),如果LDNS解析成功,则返回结果,解析过程结束。
4.LDNS不能成功解析域名,则会请求RootServer域名服务器请求解析。RootServer将所要解析的域名的主服务器(gTLD)地址返回给LDNS,就好像路标,告诉LDNS应该去哪里寻找结果。
5.LDNS请求gTLD,接收请求的gTLD查找并返回此域名对应的NameServer,NameServer就是此域名注册的域名服务器。gTLD也是一个路牌,告诉你该去此域名注册时的域名服务器那里去寻找结果。
6.NameServer接收请求,并将域名和IP的映射关系表连同一个TTL值返回给LDNS。
7.LDNS将解析结果返回给用户,并且将域名和IP对应关系缓存。
8.本地用户接收到解析结果,并将域名和IP对应关系缓存到本地,整个域名解析过程结束。
参考博客:https://blog.csdn.net/qq_37169817/article/details/78663598?