震惊脸,从没想过这是一个问题!
然而,这是前端小白必须要深刻了解的问题。前端面试经常问道,下面的每个阶段都可以大做文章!!!
在浏览器网址栏输入baidu.com,点击enter出现百度搜索引擎。在这很短的时间,有下面一系列过程
1、输入baidu.com(这是一个域名,方便记忆)
2、根据输入的域名解析出目的服务器的ip(域名解析的递归、迭代过程)
3、建立TCP连接(为什么是三次握手)
4、浏览器发送http请求(请求行,请求体是怎样的)
5、服务器响应请求(响应报文是怎样的)
6、浏览器渲染页面(css树,dom树构造过程)
7、断开连接(四次挥手)
TCP连接(三次握手)
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过四次握手(过程就不细写 了,就是服务器和客户端交互,最终确定断开)。
上面过程写的比较粗略,只是让大家有一个基本印象。具体每个过程都有很多细节,面试的时候,如果在某一个细节上,能讲的很透彻,能给面试官留下好印象。