【面试题】计算机网络篇-10道常见面试题总结

2021年11月20日 阅读数:3
这篇文章主要向大家介绍【面试题】计算机网络篇-10道常见面试题总结,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

备战实习,会按期的总结常考的面试题,你们一块儿加油! 🎯html

本文章参考:java

注意:若是本文中有错误的地方,欢迎评论区指正!🍭git

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cbcpzFj8-1637158375575)(file://C:\Users\30287\Pictures%E7%94%B5%E8%84%91%E5%A3%81%E7%BA%B8%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20211108161121.png?lastModify=1636988234)]

1.说一下TCP的三次握手、四次挥手?

TCP三次握手

TCP的三次握手分为三步:web

  • 首先客户端发送带有 SYN 标志的数据包到服务端
  • 而后服务端发送带有 SYN/ACK 标志的数据包到客户端
  • 最后客户端发送带有带有 ACK 标志的数据包到服务端

👨‍💻面试官打断问:为何要三次握手?一次,两次不行吗?面试

三次握手的目的是创建可靠的通讯信道,简单来讲就是数据的发送与接收,而三次握手最主要的目的就是双方确认本身与对方的发送与接收是正常的,能够从如下两个方面考虑(咱们这里假设客户端是首先发起链接请求):算法

  • 假设创建TCP链接仅须要两次握手,那么若是第二次握手时,服务端返回给客户端的确认报文丢失了,客户端这边认为服务端没有和他创建链接,而服务端却觉得已经和客户端创建了链接,而且可能向服务端已经开始向客户端发送数据,但客户端并不会接收这些数据,浪费了资源。若是是三次握手,不会出现双方链接还未彻底创建成功就开始发送数据的状况
  • 若是服务端接收到了一个早已失效的来自客户端的链接请求报文,会向客户端发送确认报文赞成创建TCP链接。但由于客户端并不须要向服务端发送数据,因此这次TCP链接没有意义而且浪费了资源。

因此三次握手就能确认双发收发功能都正常,缺一不可json

👨‍💻面试官又问:第 2 次握手传回了 ACK,为何还要传回 SYN?浏览器

接收端传回发送端所发送的 ACK 是为了告诉客户端,我接收到的信息确实就是你所发送的信号了,这代表从客户端到服务端的通讯是正常的。而回传 SYN也就是同步序列编号则是为了创建并确认从服务端到客户端的通讯缓存


再来讲四次挥手安全

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y6zj7VpL-1637158375584)(C:\Users\30287\AppData\Roaming\Typora\typora-user-images\image-20211116101202704.png)]

断开一个 TCP 链接则须要四次挥手:

  • 第一次挥手:客户端向服务端发送的数据完成后,向服务端发起释放链接报文,报文包含标志位FIN=1,序列号seq=u。此时客户端只能接收数据,不能向服务端发送数据。
  • 第二次挥手:服务端收到客户端的释放链接报文后,向客户端发送确认报文,包含标志位ACK=1,序列号seq=v,确认号ack=u+1。此时客户端到服务端的链接已经释放掉,客户端不能像服务端发送数据,服务端也不能向客户端发送数据。但服务端到客户端的单向链接还能正常传输数据。
  • 第三次挥手:服务端发送完数据后向客户端发出链接释放报文,报文包含标志位FIN=1,标志位ACK=1,序列号seq=w,确认号ack=u+1
  • 第四次挥手:客户端收到服务端发送的释放链接请求,向服务端发送确认报文,包含标志位ACK=1,序列号seq=u+1,确认号ack=w+1

👨‍💻面试官问:为何TCP链接的时候是3次,关闭的时候倒是4次?

  • 关闭链接时,客户端向服务端发送FIN 时,仅仅表示客户端再也不发送数据了可是还能接收数据
  • 服务器收到客户端的FIN 报文时,先回一个ACK应答报文,而服务端可能还有数据须要处理和发送,等服务端再也不发送数据时,才发送FIN 报文给客户端来表示赞成如今关闭链接。

从上面过程可知,服务端一般须要等待完成数据的发送和处理,因此服务端的ACKFIN通常都会分开发送,从而比三次握手致使多了一次。

👨‍💻面试官接着问:为何客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP链接?

MSL的意思是报文的最长寿命。要确保服务器是否已经收到了咱们的ACK报文,过了一个MSL后若是没有收到的话,服务器会从新发FIN报文给客端,此时又花了一个MSL,客户端再次收到FIN报文以后,就知道以前的ACK报文丢失了,而后再次发送ACK报文,一来一去正好2个MSL

2.TCP中拥塞控制和流量控制有什么区别?

流量控制是TCP 提供的可让「发送方」根据「接收方」的实际接收能力控制发送数据量的⼀种机制。由于若是一直无脑的发数据给对方,但对方处理不过来,那么就会致使触发重发机制,从而致使网络流量的无故的浪费

拥塞控制和流量控制不一样,拥塞控制是一个全局性的过程,而流量控制指点对点通讯量的控制。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种状况就叫拥塞。而拥塞控制就是为了防止过多的数据注入到网络中,这样就可使网络中的路由器或链路不致于过载。

👨‍💻面试官追问:流量控制具体怎么控制的?

  • TCP利用滑动窗口机制实现流量控制。
  • 在通讯过程当中,接收方根据本身接收缓存的大小,动态地调整发送方的发送窗口大小,即接收窗口rwnd,发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值。

👨‍💻面试官又问:拥塞控制具体的算法怎么样的?

TCP 的拥塞控制采用了四种算法,即慢开始 、 拥塞避免 、快重传、快恢复:

  • 慢开始 : 慢开始算法的思路是当主机开始发送数据时由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd 初始值为 1,每通过一个传播轮次,cwnd 加倍。由于若是当即把大量数据字节注入到网络,那么可能会引发网络阻塞。

  • 拥塞避免 : 拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢增大,即每通过一个往返时间 RTT 就把发送放的 cwnd 加 1

  • 快重传与快恢复: 在 TCP/IP 中,快速传和块恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能**快速恢复丢失的数据包。**没有 FRR,若是数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。

    有了 FRR,若是接收机接收到一个不按顺序的数据段,它会当即给发送机发送一个重复确认。若是发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并当即重传这些丢失的数据段。有了 FRR,就不会由于重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工做。当有多个数据信息包在某一段很短的时间内丢失时,它则不能颇有效地工做。

3.说⼀说TCP与UDP的区别?

UDP

  • 在传送数据以前不须要先创建链接,远地主机在收到 UDP 报文后,不须要给出任何确认。
  • 虽然 UDP 不提供可靠交付,但在某些状况下 UDP 倒是一种最有效的工做方式(通常用于即时通讯),好比: QQ 语音、 QQ 视频 、直播等等。

TCP

  • 提供面向链接的服务。在传送数据以前必须先创建链接,数据传送结束后要释放链接。
  • TCP 不提供广播或多播服务
  • 因为 TCP 要提供可靠的,面向链接的传输服务,这难以免增长了许多开销,如确认,流量控制,计时器以及链接管理等。这不只使协议数据单元的首部增大不少,还要占用许多处理机资源。
  • TCP 通常用于文件传输、发送和接收邮件、远程登陆等场景。

👨‍💻面试官追问:既然你说TCP提供的可靠的服务,那么TCP 协议如何保证可靠传输?

主要有校验和、序列号、超时重传、流量控制及拥塞避免等几种方法:

  1. 应用数据被分割成 TCP 认为最适合发送的数据块。TCP 给发送的每个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
  2. 校验和:TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程当中的任何变化。若是收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  3. TCP 的接收端会丢弃重复的数据。
  4. 流量控制: TCP 链接的每一方都有固定大小的缓冲空间,TCP 的接收端只容许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方下降发送的速率,防止包丢失。TCP 利用滑动窗口实现流量控制。
  5. 拥塞控制: 当网络拥塞时,减小数据的发送。
  6. ARQ 协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就中止发送,等待对方确认。在收到确认后再发下一个分组。
  7. 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。若是不能及时收到一个确认,将重发这个报文段。

4.说⼀说GET与POST有哪些区别?

能够从如下四个方面区别:

  • 做用GET方法的含义是请求从服务器获取资源。而POST方法则是相反操做,它向URI指定的资源提交数据,数据就放在报文的 body里。
  • 参数位置GET的参数放在URL中POST的参数存储在实体主体中,而且GET方法提交的请求的URL中的数据最可能是2048字节,POST请求没有大小限制
  • 安全性:在 HTTP 协议里,所谓的「安全」是指请求方法不会「破坏」服务器上的资源。GET方法是安全的,由于它是「只读」操做,不管操做多少次,服务器上的数据都是安全的。POST由于是「新增或提交数据」的操做,会修改服务器上的资源,因此是不安全的
  • 幂等性:所谓的「幂等」,意思是屡次执行相同的操做,结果都是「相同」的。结合刚才说的,GET方法是具备幂等性的。而POST方法不具有幂等性

5.说一下在浏览器中输入URL 地址到显示主页的过程?

整体来讲分为如下几个过程:

  1. DNS 解析:浏览器查询 DNS,获取域名对应的 IP 地址
  2. TCP 链接:浏览器得到域名对应的 IP 地址之后,浏览器向服务器请求创建连接,发起三次握手
  3. 发送 HTTP 请求:TCP 链接创建起来后,浏览器向服务器发送 HTTP 请求
  4. 服务器处理请求并返回 HTTP 报文:服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处 理,并将处理结果及相应的视图返回给浏览器
  5. 浏览器解析渲染页面
  6. 链接结束

👨‍💻面试官追问:整个过程会使用哪些协议?

  1. 首先浏览器查找域名的IP地址的过程会使用DNS协议
  2. 与服务器创建TCP链接使用到了TCP协议
  3. 创建TCP协议时,须要发送数据,发送数据在网络层使用IP协议
  4. IP数据包在路由器之间,路由选择使用OPSF协议
  5. 路由器在与服务器通讯时,须要将ip地址转换为MAC地址,须要使用ARP协议
  6. 在TCP创建完成后,使用HTTP协议访问网页

6.HTTP 1.0 和 HTTP 1.1 的主要区别是什么?

  1. 长链接 : 在 HTTP/1.0 中,默认使用的是短链接,也就是说每次请求都要从新创建一次链接。HTTP 1.1 起,默认使用长链接 ,默认开启 Connection: keep-alive
  2. 错误状态响应码:在 HTTP1.1 中新增了 24 个错误状态响应码
  3. 缓存处理:在 HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来作为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略例如 Entity tagIf-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。
  4. 带宽优化及网络链接的使用:在HTTP 1.0中会存在浪费带宽的现象,主要是由于不支持断点续传功能,客户端只是须要某个对象的一部分,服务端却将整个对象都传了过来。在HTTP1.1中请求头引入了range头域,它支持只请求资源的某个部分,返回的状态码为206

7.谈下你对 HTTP 长链接和短链接的理解?

HTTP/1.0 中默认使用短链接。也就是说,客户端和服务器每进行一次 HTTP 操做,就创建一次链接,任务结束就中断链接。当客户端浏览器访问的某个 HTML 或其余类型的 Web 页中包含有其余的 Web 资源(如 JavaScript 文件、图像文件、CSS 文件等),每遇到这样一个 Web 资源,浏览器就会从新创建一个 HTTP 会话。

而从 HTTP/1.1 起,默认使用长链接,用以保持链接特性。使用长链接的 HTTP 协议,会在响应头加入这行代码:

Connection:keep-aliveCopy to clipboardErrorCopied

在使用长链接的状况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 链接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经创建的链接。

Keep-Alive 不会永久保持链接,它有一个保持时间,能够在不一样的服务器软件(如 Apache)中设定这个时间。实现长链接须要客户端和服务端都支持长链接。

HTTP 协议的长链接和短链接,实质上是 TCP 协议的长链接和短链接。

8.说一下HTTP 和 HTTPS 的区别?

有下面几个区别:

  • 开销HTTPS协议须要到CA申请证书,通常免费证书不多,须要交费
  • 资源消耗HTTP是超文本传输协议,信息是明文传输,HTTPS则是具备安全性的SSL加密传输协议,须要消耗更多的CPU和内存资源
  • 端口不一样HTTPHTTPS使用的是彻底不一样的链接方式,用的端口也不同,前者是80,后者是443
  • 安全性HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。而HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络络层之间加入了 SSL/TLS 安全协议,使得报文可以加密传输

9.说说HTTP的优缺点(特色)?

HTTP最凸出的优势是「简单、灵活和易于扩展、应用普遍和跨平台」。

  1. 简单:HTTP基本的报文格式就是header + body ,头部信息也是key-value 简单文本的形式,易于理解,下降了学习和使用的门槛。
  2. 灵活和易于扩展
    • HTTP协议里的各种请求方法、URI/URL、状态码、头字段等每一个组成要求都没有被固定死,都容许开发人员自定义和扩充。
    • 同时HTTP因为是工做在应用层,则它下层能够随意变化。
    • HTTPS也就是在HTTP与TCP层之间增长了SSL/TLS安全传输层,HTTP/3甚至把TCP层换成了基于UDP的QUIC。
  3. 应用普遍和跨平台:互联网发展至今,HTTP的应用范围很是的普遍,从台式机的浏览器到手机上的各类APP。

👨‍💻面试官问:答得不错,在说说缺点?

  • 通讯使用明文(不加密),内容可能会被窃听
  • 不验证通讯方的身份,所以有可能遭遇假装
  • 没法证实报文的完整性,因此有可能已遭篡改

10.说说URI 和 URL 的区别是什么?

  • URI(Uniform Resource Identifier)是统一资源标志符,能够惟一标识一个资源。
  • URL(Uniform Resource Locator)是统一资源定位符,能够提供该资源的路径。它是一种具体的 URI,即 URL 能够用来标识一个资源,并且还指明了如何 locate 这个资源。

打个比喻,URI 的做用像身份证号同样,URL 的做用更像家庭住址同样。URL 是一种具体的 URI,它不只惟一标识资源,并且还提供了定位该资源的信息。

在这里插入图片描述

最后喜欢的小伙伴,记得三连哦!😏🍭😘