计算机网络面试题(自己总结)

计算机网络常见面试题

OSI 七层模型是什么?每一层的作用是什么?

  • 物理层:透明地传输比特流
  • 数据链路层: 封装成帧,差错检测
  • 网络层:路由和寻址
  • 传输层:为两台主机进程提供数据传输服务
  • 会话层:管理应用程序之间的会话
  • 表示层:数据处理
  • 应用层:为计算机用户提供服务

TCP/IP 四层模型是什么?每一层的作用是什么?

  • 应用层:提供两个应用程序的数据传输服务,应用层协议(Http)
  • 传输层:两台终端设备进程通讯提供通用的数据传输服务(TCP/UDP)
  • 网络层:为分组交换网上的不同主机提供通信服务,选择合适的路由,运输传输层的分组到目的主机(IP、ARP)
  • 网络接口层:数据链路层的作用(封装成帧,差错检测)和物理层的作用(透明地传输比特流)

为什么网络要分层?

  • 每一层都专注做一件事情,提升效率
  • 各层之间相互独立
  • 提高整体灵活性,符合高内聚,低耦合的设计标准
  • 大问题化小,将复杂的问题分解为更容易理解的小问题,使得问题变得简单易解决

应用层常见协议总结

  • HTTP :超文本传输协议
  • SMTP:简单邮件传输(发送)协议
  • POP3/IMAP:邮件接收的协议
  • FTP:文件传输协议
  • Telent:远程登录协议 (但是所有数据以明文传输,安全性较低,如今很少用)
  • SSH:安全的网络传输协议

TCP 与 UDP 的区别

  • 是否面向连接:UDP 在传送数据之前不需要先建立连接。而 TCP 提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。
  • 是否是可靠传输:UDP不可靠,TCP可靠(数据不出错,不丢失,按序到达)
  • 是否有状态:TCP有传输状态,UDP没有传输状态
  • 传输效率:由于使用 TCP 进行传输的时候多了连接、确认、重传等机制,所以 TCP 的传输效率要比 UDP 低很多。
  • 传输形式:TCP面向字节路,UDP是面向报文的
  • 首部开销:TCP首部开销要大很多
  • 是否提供广播或多播服务 :TCP 只支持点对点通信,UDP 支持一对一、一对多、多对一、多对多;
TCP UDP
面向连接
是否可靠传输
是否有状态
传输效率
传输形式 面向字节流 面向报文
首部开销 大(20 ~ 60 bytes) 小(8 bytes)
是否提供广播服务

什么时候选择 TCP,什么时候选 UDP?

  • UDP一般用于即时通信,要的速度快,允许有差错
  • TCP一般用于对传输准确性要求很高的场合:文件传输,发送和接受邮件等

HTTP 基于 TCP 还是 UDP?

是基于TCP面向连接的

使用 TCP 的协议有哪些?使用 UDP 的协议有哪些?

运行于 TCP 协议之上的协议

  • HTTP 超文本传输协议
  • HTTPS 更加安全的超文本传输协议
  • SMTP 邮件发送协议
  • POP3 邮件接受协议
  • FTP 文件传输协议
  • Telent 远程控制协议
  • SSH 安全的远程控制协议

运行于 UDP 协议之上的协议

  • DHCP 动态主机配置协议
  • DNS 域名系统(将域名转换为ip地址)

TCP三次握手和四次握手

建立连接 三次握手

为什么要三次握手?

三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

第2次握手传回了ACK,为什么还要传回SYN?

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

TCP可靠传输的精髓就是SYN码的确立,两方都知道对方的SYN码就能知道对方传来的信息是否有效

断开连接-TCP 四次挥手

只要四次挥手没有结束,客户端和服务端就可以继续传输数据!

为什么要四次挥手?

TCP是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。

举个例子:A 和 B 打电话,通话即将结束后。

扫描二维码关注公众号,回复: 15674690 查看本文章
  1. 第一次挥手 : A 说“我没啥要说的了”
  2. 第二次挥手 :B 回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话
  3. 第三次挥手 :于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”
  4. 第四次挥手 :A 回答“知道了”,这样通话才算结束

为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?

因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复 ACK,表示接收到了断开连接的请求。等到数据发完之后再发 FIN,断开服务器到客户端的数据传送。

如果第二次挥手时服务器的 ACK 没有送达客户端,会怎样?

客户端没有收到ACK确认,会重复发FIN请求

为什么第四次挥手客户端需要等待 2*MSL(报文段最长寿命)时间后才进入 CLOSED 状态?

更能接受服务器端的重传的FIN

第四次挥手时,客户端发送给服务器的 ACK 有可能丢失,如果服务端没有因为某些原因而没有收到 ACK 的话,服务端就会重发 FIN,如果客户端在 2*MSL 的时间内收到了 FIN,就会重新发送 ACK 并再次等待 2MSL,防止 Server 没有收到 ACK 而不断重发 FIN。

TCP 如何保证传输的可靠性?

  • 基于数据快传输:应用数据切块,再传输给网络层,数据块称为报文
  • 对失序数据包重新排序以及去重:每个包有一个序号,可以排序并去重
  • 校验和:检测传输变化,有差错会选择丢弃该报文
  • 超时重传:启当发送方发送数据之后,它启动一个定时器,等待目的端确认收到这个报文段。接收端实体对已成功收到的包发回一个相应的确认信息(ACK)。如果发送端实体在合理的往返时延(RTT)内未收到确认消息,那么对应的数据包就被假设为已丢失并进行重传。
  • 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议(TCP 利用滑动窗口实现流量控制)。
  • 拥塞控制:当网络拥塞时,减少数据的发送

TCP如何实现流量控制?

TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

为什么需要流量控制? 这是因为双方在通信的时候,发送方的速率与接收方的速率是不一定相等,如果发送方的发送速率太快,会导致接收方处理不过来。如果接收方处理不过来的话,就只能把处理不过来的数据存在 接收缓冲区(Receiving Buffers) 里(失序的数据包也会被存放在缓存区里)。

TCP 的拥塞控制是怎么实现的?

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

ARQ协议

自动重传请求(Automatic Repeat-reQuest,ARQ)是 OSI 模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认信息(Acknoledgements,就是我们常说的 ACK),它通常会重新发送,直到收到确认或者重试超过一定的次数。

ARQ 包括停止等待 ARQ 协议和连续 ARQ 协议。

停止等待ARQ协议

停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认(回复 ACK)。如果过了一段时间(超时时间后),还是没有收到 ACK 确认,说明没有发送成功,需要重新发送,直到收到确认后再发下一个分组;在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认。

连续 ARQ 协议

连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。

从输入URL 到页面展示到底发生了什么?

类似的问题:打开一个网页,整个过程会使用哪些协议?

  • DNS域名解析
  • 建立TCP连接
  • 发送HTTP请求
  • 服务器处理请求并返回HTTP报文
  • 浏览器解析渲染页面
  • 连接结束

HTTP 状态码有哪些?

HTTP状态码用于描述HTTP请求的结果

在这里插入图片描述

HTTP 和 HTTPS 有什么区别?

  • 端口号不同:HTTP默认端口号是80,HTTPS默认端口号是443
  • URL前缀页不同:http://,另一个是https://
  • 安全性和资源消耗:HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。

HTTP 是不保存状态的协议, 如何保存用户状态?

利用Session保存用户状态

在服务端保存 Session 的方法很多,最常用的就是内存和数据库(比如是使用内存数据库 redis 保存)。既然 Session 存放在服务器端,那么我们如何实现 Session 跟踪呢?大部分情况下,我们都是通过在 Cookie 中附加一个 Session ID 来方式来跟踪。

如今用jwt技术实现(分布式更合适,session只保存在服务器端)

URI 和 URL 的区别是什么?

  • URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。
  • URL(Uniform Resource Locator) 是统一资源定位符,可以提供该资源的路径。

URI 的作用像身份证号一样,URL 的作用更像家庭住址一样。URL 是一种具体的 URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。

ARP

什么是MAC地址?

MAC 地址的全称是 媒体访问控制地址(Media Access Control Address)。如果说,互联网中每一个资源都由 IP 地址唯一标识(IP 协议内容),那么一切网络设备都由 MAC 地址唯一标识。

MAC 地址具有可携带性、永久性,身份证号永久地标识一个人的身份,不论他到哪里都不会改变。而 IP 地址不具有这些性质,当一台设备更换了网络,它的 IP 地址也就可能发生改变,也就是它在互联网中的定位发生了变化。

最后,记住,MAC 地址有一个特殊地址:FF-FF-FF-FF-FF-FF(全 1 地址),该地址表示广播地址。

ARP 协议解决了什么问题地位如何?

ARP 协议,全称 地址解析协议(Address Resolution Protocol),它解决的是网络层地址和链路层地址之间的转换问题。因为一个 IP 数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但 IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 协议解决了 IP 地址转 MAC 地址的一些问题。

IP地址到物理地址的映射

ARP 协议的工作原理?

ARP 协议工作时有一个大前提,那就是 ARP 表

利用ARP表,找到目的ip地址

在一个局域网内,每个网络设备都自己维护了一个 ARP 表,ARP 表记录了某些其他网络设备的 IP 地址-MAC 地址映射关系,该映射关系以 <IP, MAC, TTL> 三元组的形式存储。其中,TTL 为该映射关系的生存周期,典型值为 20 分钟,超过该时间,该条目将被丢弃。

猜你喜欢

转载自blog.csdn.net/weixin_51209821/article/details/127309292
今日推荐