浏览器输入baidu.com加载的过程是什么,听完我的回答和尚摇了摇头,就这?

    技术2022-07-10  65

    下半年第一天,今天是七一建党节哦

    前言

    回答这个问题的时候是去年三月份,我入职不到三个月还没转正。 ​ 和尚是一个互联网大厂朋友的外号,初中那货剃了光头,后来便有了和尚这个亲切的外号。

    去年那时候我两住一起,下班都会在地铁站等彼此,地铁离家较远,走路20分钟左右,那段路便成了我两吹牛皮,讨论技术,畅想未来的梦想之路。

    有次和尚问我:在浏览器输入baidu.com加载的过程是什么?

    我:巴拉巴拉…

    和尚:就这? 和尚:这也是一道经典的面试题,我给你讲讲。

    正文

    和尚:输入域名后,浏览器会先查询自己DNS缓存,如果没有查到,下一步会在本机的缓存中查找,还是没查到,则在本地host文件中查找,还没查到咋办?操作系统会去查找本地域名服务器,又没找到,再向上层域名服务器依次查找。

    我:那域名服务器有哪些?域名服务器中也没查到咋办?

    和尚:DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。

    你购买一台服务器后,将域名解析到主机上,才能通过域名访问。一般解析后不会立马生效,需要过几个小时才能访问。所以只要你解析了域名到主机肯定能查到。

    域名服务器一般分为:本地域名服务器,根域名服务器,权威域名服务器,顶级域名服务器。找到后返回,浏览器会缓存以便下次访问。

    查到IP地址后,浏览器会发送http请求,通过三次握手建立连接,四次挥手断开连接。

    我:什么是http请求,为啥连接需要三次握手,断开却要四次挥手?

    和尚:我也不知道,可能舍不得断开吧。

    我:呸,渣男。分手吧。 和尚:http是一个简单的请求-响应协议。它运行在TCP上。

    图解三次 “握手”,通俗易懂。

    以生活中的例子讲解,假设客户端是小明,服务端是小红。

    小明喜欢小红好久了,终于鼓起勇气给小红发了一条微信:我喜欢你,我们谈恋爱吧!发完小明晚上忐忑的睡不着觉,不知道小红有没有看到消息,看到消息后的反应是什么。

    小红收到消息后,哇,这厮终于开窍了,再不表白老娘都毕业了。说完小红的脸红了,回复小明:我也喜欢你。

    小明收到后确定了小红也喜欢自己,开心之余给小红发了消息:宝贝,好想和你约会,看电影,去浪迹天涯,等疫情过去了,我们去旅游。

    通过三次心灵的碰撞,双方都知道了对方的心意。 第一次握手:客户端发消息到服务端,客户端什么都不能确定。服务器收到后确定了自己接收正常,客户端发送正常。

    第二次握手:服务器发送消息,客户端收到后确定了自己发送正常,接收正常,服务端发送正常,接收正常。

    第三次握手:客户端发给服务器,服务器收到后确定了自己发送正常,接收正常,客户端发送正常,接收正常。

    图解四次“挥手”,通俗易懂。

    有次视频通话小红没戴口罩,小明深思熟虑后,发消息给小红:分手吧。疫情这么严重你竟然不戴口罩。

    小红内心:终于要分手了,长出一口气,比当初答应在一起还开心。然后给小明回复:等我追完这剧。

    没等小明反应,小红说我看完了,分手吧。

    小明收到后立马回复:再也不见。

    为什么建立连接只需要三次握手,断开却需要四次?

    因为TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式。

    三次握手:

    第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己还要发送SYN请求信息,将SYN设置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;

    四次挥手:

    第一次客户端告诉服务端,我发完了,但还能接收服务端的消息。第二次服务器可能数据还未发完,只能先回复给客户端我收到了你的请求,但我需要确定一下数据发完没。第三次服务器发现如果没有数据要返回了会立马回应,有的话返回完数据后再给客户端回应,告诉客户端我发完了。第四次客户端说我知道了,然后愉快的挥手告别。

    和尚:OSI七层模型与TCP,IP四层模式你知道吗?

    我:这个我知道,就不一一列出了,综合它们的优点说一下。

    综合OSI和TCP/IP模式的优点,有五层参考模型。

    应用层:支持各种网络应用。FTP、SMTP、HTTP。

    传输层:进程-进程之间的数据传输。TCP、UDP。

    网络层:源主机到目的主机的数据分组路由与转发。

    链路层:相邻网络元素(主机,交换机,路由器)之间的数据传输。

    物理层:比特传输。

    最后服务器处理数据,实际上可能会先经过负载均衡机器,根据相应的规则分发到对应的机器,经过一系列处理后返回数据到浏览器。浏览器通过http协议收到服务器发来的http response之后,需要对收到的response中的数据解析渲染,最后我们才能看到如下画面。

    总结

    当然了,真正的流程不会像我说的这么简单,HTTP协议,DNS解析都相对复杂,在这里我只是描述了大概的过程。

    欢迎在下方留言。如果你喜欢这篇文章,别忘了点赞,你们的支持就是失忆的动力。

    Processed: 0.012, SQL: 8