计算机网络高频面试题


一、输入网址后发生什么

当我们在浏览器网址处输入一个网址后,就开始了一个神奇的过程

流程概括
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地址:服务器在哪里

  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
SpringMVC的高频面试包括以下几个方面: 1. SpringMVC的执行流程是怎样的? SpringMVC的执行流程包括以下步骤: - 用户发送请求到前端控制器DispatcherServlet。 - DispatcherServlet收到请求后调用HandlerMapping,找到对应的处理器和拦截器(如果有)。 - DispatcherServlet调用HandlerAdapter适配器,适配调用具体的处理器(Handler/Controller)。 - 处理器方法上可以使用@RequestParam注解指定请求参数的名称,@PathVariable注解从请求路径中获取请求参数,@RequestBody注解用于接收HTTP请求的JSON数据。 - 处理器方法执行完后,通过HttpMessageConverter将返回结果转换为JSON格式,并响应给前端。 2. SpringMVC常见的注解有哪些? SpringMVC常见的注解包括: - @RequestMapping:用于映射请求路径,可以定义在类和方法上,定义在类上表示类中的所有方法都是以该地址作为父路径。 - @RequestBody:用于将HTTP请求的JSON数据转换为Java对象。 - @RequestParam:用于指定请求参数的名称。 - @PathVariable:从请求路径中获取请求参数。 - @ResponseBody:将Controller内方法的返回对象转换为JSON格式传递给前端。 - @RequestHeader:获取指定的请求头数据。 - @RestController:相当于@Controller + @ResponseBody,用于表示返回的是JSON数据。 这些是SpringMVC高频面试的主要内容,掌握了这些知识可以更好地应对相关的面试。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SpringMVC的高频面试](https://blog.csdn.net/qsw1364941774/article/details/131607365)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值