这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
本堂课重点内容
1.数据包发送
2.DNS请求
详细知识点介绍
数据包发送
传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用socket API编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
在TCP/IP模型中,数据包在一端中生成,再由一端接收。在发送之前,发送端的数据经过应用层、传输层、网络层、数据链路层和物理层多种协议的封装。而在接收到之后,接收端会将数据包进行解封,最后应用获得数据。
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。
DNS请求
DNS解析IP的过程是先迭代再递归的过程。首先看本地ISP服务器IP缓存,再看根域名服务器,再看顶级域名服务器,再看权威域名服务器,最后一步是缓存到本地ISP服务器。
其完整的DNS解析过程有以下几个步骤:
(1)查看浏览器缓存
当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的 IP 地址(若曾经访问过该域名且没有清空缓存便存在)。
(2)查看系统缓存
当浏览器缓存中无域名对应 IP 则会自动检查用户计算机系统 Hosts 文件 DNS 缓存是否有该域名对应 IP。
(3)查看路由器缓存
当浏览器及系统缓存中均无域名对应 IP 则进入路由器缓存中检查,以上三步均为客服端的 DNS 缓存。
(4)查看ISP DNS 缓存
当在用户客服端查找不到域名对应 IP 地址,则将进入 ISP DNS 缓存中进行查询。比如你用的是电信的网络,则会进入电信的 DNS 缓存服务器中进行查找。
(5)询问根域名服务器
当以上均未完成,则进入根服务器进行查询。全球仅有 13 台根域名服务器,1 个主根域名服务器,其余 12 为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com、.cn等)服务器 IP 告诉本地 DNS 服务器。
(6)询问顶级域名服务器
顶级域名服务器收到请求后查看区域文件记录,若无记录则将其管辖范围内权威域名服务器的 IP 地址告诉本地 DNS 服务器。
(7)询问权威域名(主域名)服务器
权威域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确记录。
(8)保存结果至缓存
本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个 IP 地址即可访问目标Web服务器。至此,DNS递归查询的整个过程结束。
课后个人总结
在网络数据数据传输过中,实际是多个数据包的传输。数据包由发送端封装数据而成,由接收端解封为数据。
当浏览器、系统和路由器缓存中均没有所要的IP时,DNS会经过递归迭代的过程依次查询本地ISP服务器IP缓存、根域名服务器、顶级域名服务器和权威域名服务器,并且最终会将IP存储在本地ISP服务器中,以便下次使用。