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

Posted LL.LEBRON

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题计算机网络篇-10道常见面试题总结相关的知识,希望对你有一定的参考价值。

备战实习,会定期的总结常考的面试题,大家一起加油! 🎯

本文章参考:

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

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

TCP的三次握手分为三步:

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

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

三次握手的目的是建立可靠的通信信道,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的,可以从以下两个方面考虑(我们这里假设客户端是首先发起连接请求):

  • 假设建立TCP连接仅需要两次握手,那么如果第二次握手时,服务端返回给客户端的确认报文丢失了,客户端这边认为服务端没有和他建立连接,而服务端却以为已经和客户端建立了连接,并且可能向服务端已经开始向客户端发送数据,但客户端并不会接收这些数据,浪费了资源。如果是三次握手,不会出现双方连接还未完全建立成功就开始发送数据的情况
  • 如果服务端接收到了一个早已失效的来自客户端的连接请求报文,会向客户端发送确认报文同意建立TCP连接。但因为客户端并不需要向服务端发送数据,所以此次TCP连接没有意义并且浪费了资源。

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

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

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


再来说四次挥手

断开一个 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,它不仅唯一标识资源,而且还提供了定位该资源的信息。

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

以上是关于面试题计算机网络篇-10道常见面试题总结的主要内容,如果未能解决你的问题,请参考以下文章

面试题Redis篇-常见面试题p1

面试题Redis篇-常见面试题p1

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

Java集合面试题看这篇就够了

Java集合面试题看这篇就够了

面试题Java并发篇-10道常见面试题p1