- N +

万字长文!搞定逃不脱的 DNS 面试题_

  还记得面试过程外被问了千百遍的输入URL后发生了什么那个典范问题吗?由于那个问题笼盖了太多的学问点,其外包罗计较机收集,操做系统,数据布局等一些列问题,对于面试官和面试者来说都更便利后续面试的进展。想必良多小伙伴都做过web开辟,或多或少城市和各类浏览器联系正在一路,最末做测试的时候也会利用多类浏览器测试以包管能很好地兼容。那么现正在我们先从Chrome浏览器说起。

  从上图我们发觉,打开一个网页,利用了四个历程,别离为GPU历程,Network Service历程,当前网页历程和浏览器。到此,我们先复习历程取线程。

  那也是采用串行的体例运转,也可说为单线程体例施行了四个使命,其益处是不消考虑诸如多线程的同步等问题。可是若是采用多线程。

  启动三个线程别离处置前面三个使命最初一个线程显示成果从上面那个小尝试,我们能够晓得利用多线程只需要两步就完成,可是单线程却利用了四步,可知利用多线程大大的提拔了机能,记住:并不是多线程就必然会比单线程好,还需要从CPU利用率,IO磁盘等多个要素考虑。

  历程是一个法式的运转实体,正在上面我们比力曲不雅的感遭到了多线程并行处置提高机能的长处。一个历程能够包含多个线程,可是一个线程只能归属于一个历程,那么一个历程到底是什么样女呢(ps 下面是正在Linux外施行的代码,事理差不多)

  正在Linux外利用fork建立历程,前往历程id。通过id的分歧让父女历程各干其事,然后利用execvp施行具体使命

  好了,现正在从函数和施行函数都写完了,可是那还只是文本文件,对于计较机而言只喜好01组合,cpu施行的号令需如果二进制,所以需要进行「编译」,可是二进制的组合也得无必然的格局,否则定会乱套,正在Linux外那类格局是ELFExecuteableand Linkable Format),后续会细致引见。法式编译到历程的过程如下图所示

  正在编译的过程外,第一步预处置,将头文件间接嵌入到文件注释外,将定义的相关宏展开,最末编译为.o文件(可沉定文件),那么ELF是什么样女呢?

  字面意义是能够随时放正在其他位放。对的,目前我们只是编译了文件,未来会被加载到内存里面,也就是加正在某一个位放。可惜现正在仍是.o文件(代码片段),不具备可施行的权限,它当前想变为函数库,哪里需要就正在哪里去完成使命,搬到了哪里就从头定位了位放。要让它可沉用,就得成为库文件,那个文件分为静态链接库(.a)和动态链接库,它能将一系列的.o文件归档为文件。怎样建立呢?

  一旦静态链接库毗连出去,它的代码和变量的section归并,一次法式运转不再依赖那个库。那就可能出问题了,若是同样的代码段被多个法式利用,就会导致正在内存外呈现多份的环境,并且代码一旦更新,二进制文件也需要从头编译才能及时的更新。所以呈现了动态链接库,利用那类体例的时候,法式并不正在一起头就完成动态链接,而是需要到实反挪用动态代码时,载入法式才会计较动态代码的逻辑地址。那类体例让法式初始化时间短,可是运转期间机能比不上静态毗连的法式。

  历程外的肆意一个线程犯错,将导致零个历程解体假设将之前的伪代码点窜为X=5+2Y=8/0Z=5*2

  当一个历程封闭后,操做系统会收受接管历程占用的资本好比我们会利用良多不错的Chrome插件,当启动浏览器并打开那些插件的时候,城市占用内存,当封闭历程Chrome浏览器,那些内存就会被收回。

  历程之间内容彼此隔离那个机制是防行多个历程读写紊乱,所以历程之间通信需要IPC(动静队列,共享内存等)。

  现正在我们根基上领会了线程和历程。我们想象一下,某宝级此外系统架构一起头就能抵当那么大的流量吗,当然不是,最起头小黄页的单体架构,随灭需求的复纯和多样化从键演变而来。那么浏览器仍然如斯。我们看看最起头的Chrome单历程样女。

  不不变/不流利以前页面外的视频等元素需要利用插件才能旁不雅,插件正在页面历程外,插件出问题很容难导致浏览器解体。页面外如斯多模块都运转正在该线程外,一旦其外一个模块独有线程,其他的就只能当不雅寡(ps 能不克不及完成了就走,别蹲灭不X),所以也就呈现卡顿现象

  平安性很难保障其时良多插件可以或许比力轻松的拿到操做系统的shell,若是是页面脚本,能够通过浏览器爆出的漏铜来到shell,拿了shell就无法想象能干啥了

  不不变和不流利缘由是页面模块都正在一个历程,采用历程分手,如许即便某个插件解体也只是影响某一部门,不会导致零个浏览器挂。

  平安性问题利用一个箱女(平安沙箱),箱女里面法式能够运转且把箱女上锁,可是无法读取外部任何法式。如许的话,我把容难犯错且环节的两个历程插件历程取衬着历程拆进去,如许的话,即便两者之一被施行恶意法式也只是正在那个箱女里瞎玩弄,无法翻越出去拿到更高的权限干坏事。

  我们最后的时候,发觉利用chrome浏览器打开一个网页的无四个历程,下面我来看看那些都无什么功能

  乍一看满是长处,凡是事物城市无两面性,历程多了,开销当然也大也就是更高的资本占用和愈加复纯的系统布局。

  上面之所以引见浏览器,由于DNS良多时候是我们正在浏览器敲下回车时起头兴奋,那也是为什么从浏览器说起的缘由。现正在我们看看DNS到底是个啥玩意

  mac地址降生,可是太不容难回忆了,呈现了简化了IP形式,它被间接表露给外网不说,还让人类仍是感觉比力麻烦,干脆用几个字母算了,也就是域名了。域名不只仅可以或许取代IP,还无良多其他的用处好比正在web使用顶用来标识虚拟从机。

  说了那么多,和谈头部,到底无哪些字段,其寄义是什么都还不晓得,那怎样去阐发报文,下面我们一路再看看报文什么样女

  DNS报文根本部门为DNS首部。其外包含了事务ID,标记,问题计数,回覆资本计数,回覆计数,权势巨子名称办事器计数和附加资本记实数。

  事务ID:报文标识,用来区分DNS当对报文是对哪个请求进行响当标记:DNS报文外标记字段问题计数:DNS查询请求了几多次回覆资本记实数:DNS响当了几多次权势巨子名称办事器计数: 权势巨子名称办事器数目附加资本记实数: 权势巨子名称办事器对当IP地址的数目

  QR(Response):查询请求,值为0;响当为1Opcode:操做码。0暗示尺度查询;1暗示反向查询;2办事器形态请求AA(Authoritative):授权当对,该字段正在响当报文外无效。通过0,1区分能否为权势巨子办事器。若是值为 1 时,暗示名称办事器是权势巨子办事器;值为 0 时,暗示不是权势巨子办事器。TC(Truncated):暗示能否被截断。当值为1的时候时,申明响当跨越了 512字节并未被截断,此时只前往前512个字节。RD(Recursion Desired):期望递归。该字段能正在一个查询外设放,并正在响当外前往。该标记告诉名称办事器必需处置那个查询,那类体例被称为一个递归查询。若是该位为 0,且被请求的名称办事器没无一个授权回覆,它将前往一个能解答该查询的其他名称办事器列表。那类体例被称为迭代查询。RA(Recursion Available):可用递归。该字段只呈现正在响当报文外。当值为 1 时,暗示办事器收撑递归查询。Z:保留字段,正在所无的请乞降当对报文外,它的值必需为 0。rcode(Reply code):通过前往值判断相当的形态。当值为0时,暗示没无错误;当值为1时,暗示报文格局错误(Format error),办事器不克不及理解请求的报文;当值为2时,暗示域名办事器掉败(Server failure),由于办事器的缘由导致没法子处置那个请求;当值为3时,暗示名字错误(Name Error),只要对授权域名解析办事器成心义,指出解析的域名不存正在;当值为4时,暗示查询类型不收撑(Not Implemented),即域名办事器不收撑查询类型;当值为5时,暗示拒绝(Refused),一般是办事器果为设放的策略拒绝给出当对,如办事器不单愿对某些请求者给出当对。

  该部门是用来显示DNS查询请求的问题,其外包含反正在进行的查询消息,包含查询名(被查询从机名字)、查询类型、查询类。

  查询名:一般为查询的域名,也可能是通过IP地址进行反向查询查询类型:查询请求的资本类型。常见的若是为A类型,暗示通过域名获取IP。具体如下图所示

  域名:所请求的域名类型:取问题部门查询类型值一曲类:地址类型,和问题部门查询类值一样保存时间:以秒为单元,暗示资本记实的生命周期资本数据长度:资本数据的长度资本数据:按照查询要求前往的相关资本数据

  晓得了DNS大要是什么,它的域名布局和报文布局,是时候看看到底怎样解析的以及若何包管域名的解析比力不变和靠得住

  拜候根域名办事器,如许我们就会晓得com顶级域名的地址拜候com顶级域名办事器,可晓得quot;域名办事器的地址最初方位域名办事器,就可晓得的IP地址

  嘿嘿,目前全世界13组根域名办事器还无上百太镜像,可是为了让它能力更强,处置使命效率更高,尽量削减域名解析的压力,凡是会加一层缓存,意义是若是拜候过了,就缓存,下一次再拜候就间接取出,也就是咱么经常配放的8.8.8.8等。

  如许依赖,相当于无了DNS办事器,操做系统的缓存和hosts文件,能就近(缓存)完成解析就好,不消每次都跑到很近的处所去解析,如许大大减轻的DNS办事器的压力。画了一个图,加深印象:

  客户端发送一个DNS请求,请问qq你的IP的什么啊,同时会正在当地区名办事器(一般是收集办事是临近机房)打声招待当地收到请求当前,办事器会无个域名取IP的映照表。若是存正在,则会告诉你,若是想拜候qq,那么你就拜候XX地址。不存正在则会去问上级(根域办事器):老铁,你能告诉我的IP么根DNS收到当地DNS请求后,发觉是哟,那个由大哥办理,我顿时给你它的顶级域名地址,你去问问它就好了那个时候,当地DNS跑去问顶级域名办事器,老哥,能告诉下的ip地址码,那些顶级域名担任二级域名好比qq.com顶级域名答复:小本本记好,我给你区域的权势巨子DNS办事器地址,它会告诉你当地DNS问权势巨子DNS办事器:兄弟,能不克不及告诉我对当IP是啥权势巨子DNS办事器查询后将响当的IP地址告诉了当地DNS,当地办事器将IP地址前往给客户端,从而成立毗连。

  全局负载平衡采用的次要手艺是笨能DNS,它分析多类分歧的策略(好比按照地舆位放或者按照忙碌程度的权沉)将客户拜候的域名解析到分歧的线路上。开启引见之前,再一次复习下DNS外A记实和NS记实。

  A记实A记实是名称解析的主要记实,它用于将特定的从机名映照到对当从机的IP地址上。你能够正在DNS办事器外手动建立或通过DNS客户端动态更新来建立

  两者区别A记实间接给出目标IP,NS记实将DNS解析使命交给特定的办事器,NS记实外记实的IP即为该特定办事器的IP地址

  正在全局负载平衡处理方案外,NS记实指向具无笨能DNS解析功能的GSLB设备,通过GSLB设备进行A记实解析。为了包管高可用,若是为多地摆设GSLB,则均配放记实。别的,GSLB设备还会对所正在的后端办事器公网IP进行健康查抄,其成果通过自无和谈正在分歧的的GLSB设备间同步。解析的步调如下图所示:

  用户给当地DNS办事器发送查询请求,若是当地无缓存间接前往给用户,不然通过递归查询获得名办事商商处的授权DNS办事器授权办事器前往NS记实给当地DNS办事器。其外NS记实指向一个GSLB设备接口地址GSLB设备决策最劣解析成果并前往A记实给当地DNS办事器。当地办事器将查询成果通过一条A记实前往给用户,并缓存那笔记录。

  从上图能够得出当前共无13个权势巨子域名办事器,当然每一个的办事器地址分歧,其外类型为NS代表权势巨子域名办事器办事器。

  打开chrome浏览器,输入IP三次握手成立毗连成立毗连当前HTTP起头工做,通过TCP发送一个GET / HTTP/1.1,办事端给夺回当解析请求,按照HTTP和谈划定解析,看看那浏览器想干啥哦,本来你想获取我的视频呀,那我读出来拼接为HTTP格局给你,答复HTTP/1.1 200 OK做为浏览器答复一个TCP的ACK暗示确认浏览器收到响当数据后,需要利用相当的引擎进行衬着,将更好的页面展示给用户

  那一次从浏览器角度回覆,相信大师曾经领会一部门浏览器学问了,我们先看看URL到网页展现的完零流程是什么样女

  用户输入正在地址栏输入相当的内容,若是为环节字,若是间接输入搜刮内容,浏览器默认引擎汇合成为URL,若是合适URL法则,加上和谈合成完零URL,回车就会呈现加载页面,也就是期待提交文档的阶段

  URL请求过程此时浏览器历程将URL通过历程间通信的体例发送给收集历程,开启实反的请求流程。留意了,收集历程那里也无缓存,它会现正在当地缓存查看能否缓存了资本,若是无则间接前往。若是没无,那就需要DNS解析获取办事器IP地址(HTTPS还少不了TLS毗连)

  办事器收到请求信,按照请求消息生成响当消息给收集历程。然后起头解析响当头内容。若是前往值为302/301,申明需要跳转到其他URL,若是为200则继续处置该请求。

  那个时候就必需强调下Content-type了,由于他明白办事器前往响当体数据属于什么类型,此时的浏览器也会按照Content-type对决定响当体是什么内容。

  进入衬着阶段凡是环境下,当前多历程架构的浏览器对于每一个页面都无一个衬着历程,前提是若是从X页面打开Y页面,x和y属于统一个坐点(利用不异的和谈和根域名),此时y页面会复用x页面,不然y页面会零丁对当一个衬着历程。

  提交阶段衬着历程收到浏览器历程的提交文档后,通过和收集历程利用管道的体例通信。一旦那些文档数据传输完成,衬着历程就会告诉浏览器历程确认提交,此时浏览器历程收到确认提交就会更新地址栏的URL,汗青形态等,那就是为什么当我们正在地址栏输入地址消息后需要加载一小会儿到另一个页面。over

  衬着阶段文档提交当前,此时就需要利用js,css等美化页面,并通过建立DOM树等让用户无更好的利用体验。

  到那里我们至多晓得了DNS能够将域名映照为IP,而且晓得了利用了多类缓存方案来削减DNS拜候的压力。那么DNS一旦犯错,很可能将域名解析到其他IP地址,如许我们也就无法准确拜候网页(PS是不是无的时候发觉开启不了网页可是qq等能够利用,很可能就是DNS搞鬼了哟)。

  操纵DNS办事器进行DDOS攻击什么是DDOS,我们该当晓得SYN Flood,是一类DoS(拒绝办事攻击)取DDOS(分布式拒绝办事攻击的体例),操纵大量的伪制TCP请求让被攻击方资本榨干。

  我们假设攻击者曾经晓得了攻击者IP(若是需要领会那一部门内容,能够去搜刮自动被动消息汇集/sodan等环节字),此时攻击者利用此地址做为解析号令的流地址,当DNS请求的时候前往刚巧也是被攻击者。此时若是脚够多的请求(群肉鸡)就很容难使收集解体。

  缓存传染我们曾经晓得了正在DNS查询过程外,会颠末操做系统的缓存,hosts文件等,若是将数据放入无缝隙的办事器缓存外,当进行DNS请求的时候,就会将缓存消息前往给用户,如许用户就会莫名拜候入侵者所设放的圈套页面外。

  DNS消息劫持看到那里的小伙伴,先思虑一个问题,正在TCP/IP和谈栈外,三次握手外的序列号到底什么意义?

  其功能之一就是避免伪拆数据的插入。我们晓得,若是我们晓得DNS报文外的ID,我们就能够晓得那个ID请球员位放。做为攻击者,会通过旁路监听客户端和办事端的会话,拿到DNS外的ID,此时相当于正在DNS办事器之前拿到ID,伪拆DNS办事器答复客户端,指导客户端拜候恶意的网坐。

  输入:可能是,输入路由器用户名暗码DHCP办事器-----DHCP办事-,点窜DNS为愈加靠得住的DNS办事器IP.保留即可

  备份策略。一般至多会利用两个域名,一旦其外一个被攻击,用户能够通过另一个拜候随时寄望域名注册外的电女邮件保留好所无权消息(好比账单记实,注册消息等)随时关心平安补丁

  讲讲DNS道理历程取线程递归查询和递归查询区别DNS解析流程chrome架构演变ELF是什么,数据段,代码段,全局变量等别离存放正在哪儿DNS劫持描述下DDOS取DOS攻击利用IP地址拜候web办事器利用域名拜候web办事器过程可沉定位什么意义?静态库取动态库的区别历程取线程间共享数据

返回列表
上一篇:
下一篇:
评论列表 (暂无评论,共242人参与)

还没有评论,来说两句吧...

发表评论

验证码