计算机网络高频面试题
一、输入网址后发生什么
当我们在浏览器网址处输入一个网址后,就开始了一个神奇的过程
流程概括
1)进行DNS解析,找到对应的ip地址的服务器
2)通过TCP协议建立连接(三次握手)
3)建立连接后,浏览器发送HTTP请求
4)服务器根据HTTP请求来返回相应的数据
5)浏览器根据HTTP协议来进行解析数据,得到相应的资源
6)将得到的资源显示在浏览器页面上
7)根据建立连接的Connection的Keep-Alive属性来确定是否断开连接,长连接就不断开,短链接就断开(四次挥手)
具体流程
一、DNS请求,找到相对应ip地址的服务器
DNS解析流程: 浏览器–操作系统–路由器–运营商–根路由器
DNS解析的过程就是寻找哪台机器有你所需要的资源,根据URL得到相应ip地址去寻找
1.先在浏览器本地缓存查找是否有相应的记录,浏览器会保存一些访问过的网址DNS解析信息
2.如果没有找到就在本机的操作系统缓存中查找是否有当前要访问的DNS信息
3.还没找到就查找对应的ip地址,请求到路由器上,路由器根据自身的路由表去查找
4.如果没有找到,这个请求就会发送到运营商上,运营商就是互联网提供商,一般大部分请求都能在这里找到
5.如果还没找到就将请求发送到根服务器上进行搜索
6.如果还没找到,就说明域名不存在,或者域名过期了
二、通过TCP三次挥手进行连接,具体过程写在下一个问题中
三、建立连接后发送HTTP请求,客户端根据HTTP协议向服务器发送请求
四、服务器根据HTTP协议解析请求,并将想要的数据返回给客户端
五、浏览器解析响应,展示响应的页面
六、断开连接(四次挥手)具体流程在下个一问题里面
二、三次握手四次挥手
TCP协议的核心机制就是连接管理,连接管理就是三次握手和四次挥手
三次握手
三次握手的本质确定就是通信双方的接收能力和发送能力都是正常的,需要三次握手来确定接收和发送能力正常
这里通信双方为主机A和主机B
第一次握手:主机A向主机B发送SYN建立连接请求,成功到达后主机B就能直到自己的接收能力和主机A的发送能力是正常的
第二次握手:主机B向主机A发送SYN和ACK(确认应答),通过第二次握手主机A就能直到自己的接收能力和主机B的发送能力是正常的,这里还有隐性条件主机A还能直到主机B的接收能力和自己的发送能力是正常的,因为自己发送数据只有B接收了才能发送确认应答机制,这里主机A已经清楚通信双方接收能力和发送能力都是正常的
为什么不能是两次握手?
因为要确保通信双方接收和发送能力都正常,两次握手,主机B不清楚主机A的接收和自己的发送能力是否正常,如果第一次发送SYN由于其他原因没能发送到主机B,等待一定时间后,主机A重新发送一个SYN和主机B建立连接,如果在两者在传输数据时,第一次SYN尽力种种困难,重新发送到主机B,这时主机B就会以为建立的新连接,造成了刚才连接的中断,数据丢失!!!
第三次握手:主机A向主机B发送确认应答的ACK,主机B接收到ACK后,就直到自己的发送能力和主机A的接收能力正常,这时同行双方的发送能力和接收能力都是正常的,就可以建立连接了
四次挥手
TCP 通信时,通过四次挥手来断开连接
第一次挥手主机A向主机B发送结束报文段FIN
第二次挥手是主机B向主机A发送ACK(确认应答)报文是操作系统内核行为,是立刻响应的,而发送FIN是应用程序的行为,在代码中要等待调用close()才能触发FIN,如果四次挥手要变为三次挥手那么一定是close()很快被调用,那么就是触发延时应答和捎带应答了,这样就成了三次挥手了,但是大概率都是四次挥手
第三次挥手就是程序中调用close()方法,发送FIN
第四次挥手就是主机A发送确认应答报文,主机A这时候进行等待状态,等待2个时间段来断开连接
三、HTTP和HTTPS的区别
HTTP是超文本传输协议,是当今互联网中使用最广泛的应用层协议
HTTP组成 协议+ip地址(域名)+端口号+带层次的路径+查询字符串
ip地址:服务器在哪里