首先需要直到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地址,其中具体的过程可以分为以下一些步骤:
- 浏览器检查缓存中是否有此域名对应解析过的IP地址,如果有,直接返回结果,解析过程接结束。
- 浏览器没有缓存对应的IP,此时浏览器会查找操作系统中是否有此域名对应的DNS解析结果,如果有直接返回结果,解析过程结束。在windows中可以通过C:\Windows\System32\drivers\etc\hosts来设置域名解析过程,linux下是/ect/named.conf。
- 如果在本机中无法完成域名解析过程,就会请求DNS服务器来解析。在网络设置中我们会配有DNS服务器地址:
操作系统会将域名发送到这里设置的LDNS(本地区域名服务器),如果LDNS解析成功,则返回结果,解析过程结束。 - LDNS不能成功解析域名,则会请求RootServer域名服务器请求解析。RootServer将所要解析的域名的主服务器(gTLD)地址返回给LDNS,就好像路标,告诉LDNS应该去哪里寻找结果。
- LDNS请求gTLD,接收请求的gTLD查找并返回此域名对应的NameServer,NameServer就是此域名注册的域名服务器。gTLD也是一个路牌,告诉你该去此域名注册时的域名服务器那里去寻找结果。
- LDNS将解析结果返回给用户,并且将域名和IP对应关系缓存。
- 本地用户接收到解析结果,并将域名和IP对应关系缓存到本地,整个域名解析过程结束。