计算机网络八股文(24面试版,持续更新)

目录

一、计算机网络初识

计算机网络体系结构通过将复杂的网络通信分解成不同的层次,来标准化交互的过程。常见的模型包括 OSI 七层模型、TCP/IP 四层模型和五层体系结构。

开始拷打!(不要死记,要理解性记忆)

1、说说OSI七层模型 

2、TCP三次握手和四次挥手在哪一层

3、数据在各层之间是怎样传输的

4、从输入url网址到网页显示的过程是怎样的/你了解吗?

5、说一说tcp的四次挥手

6、tcp的重传机制

7、tcp和udp的区别

8、tcp和udp的应用场景


一、计算机网络初识

计算机网络体系结构通过将复杂的网络通信分解成不同的层次,来标准化交互的过程。常见的模型包括 OSI 七层模型、TCP/IP 四层模型和五层体系结构。

借鉴网址:计算机网络面试题,63道计算机网络八股文(2.2万字80张手绘图),面渣逆袭必看👍 | 二哥的Java进阶之路

OSI 是理论上的网络通信模型,TCP/IP 是实际应用层面上的网络通信模型,五层结构是为了方便理解和记忆

开始拷打!(不要死记,要理解性记忆)

1、说说OSI七层模型 

OSI(Open System Interconnection)七层参考模型是一个网络架构模型,由国际标准化组织(ISO)提出,用于描述和标准化各种计算机网络的功能和过程。这七层从低到高分别是:

  • 应用层:最靠近用户的层,负责处理特定的应用程序细节。这一层提供了网络服务与用户应用软件之间的接口。例如,Web 浏览器、FTP 客户端和服务器、电子邮件客户端等。
  • 表示层:确保从一个系统发送的信息可以被另一个系统的应用层读取。它负责数据的转换、压缩和加密。例如,确保数据从一种编码格式转换为另一种,如 ASCII 到 EBCDIC。
  • 会话层:管理用户的会话,控制网络上两节点间的对话和数据交换的管理。它负责建立、维护和终止会话。例如,建立一个会话令牌,以便在网络上的两个节点之间传递。
  • 传输层:提供端到端的通信服务,保证数据的完整性和正确顺序。这一层包括 TCP 和 UDP 等。
  • 网络层:负责在多个网络之间进行数据传输,确保数据能够在复杂的网络结构中找到从源到目的地的最佳路径。这层使用的是 IP(Internet Protocol)协议。
  • 数据链路层:在物理连接中提供可靠的传输,负责建立和维护两个相邻节点间的链路。包括帧同步、MAC(媒体访问控制)。
  • 物理层:负责在物理媒介上实现原始的数据传输,比如电缆、光纤和无线信号传输。涉及的内容包括电压、接口、针脚、电缆的规格和传输速率等。

2、TCP三次握手和四次挥手在哪一层

第一次握手:客户端发送一个SYN标志位被设为1的TCP报文给服务器,表明这是一个连接请求报文,发送后客户端进入一个SYN-SENT状态

第二次握手:服务端收到请求报文后,如果同意建立连接,则向客户端发送TCP连接请求确认报文段,该报文段首部中的同步位SYN和确认位ACK都设置为1,表示这是一个TCP连接请求确认报文段,服务器进入同步已接收状态(SYN-RCVD)。要确认客户端的syn包(ack = 客户序列号+1),同时服务端也要发送一个syn+ack包(这个包中包含了服务器的初始序列号和对客户端初始序列号的确认(ACK)),此时服务器进入syn_recv状态。

第三次握手:客户端收到服务器发送的syn+ack包,客户端给服务器发送确认包ack(这个包中只包含对服务器初始序列号的确认(ACK))这个ACK包的作用是告诉服务器,客户端已经准备好发送和接收数据了。

三次握手和四次挥手都是工作在传输层。传输层(Transport Layer)是 OSI 模型的第四层,负责提供端到端的通信服务,包括数据传输的建立、维护和终止。

TCP 作为一种面向连接的协议,通过三次握手建立连接,通过四次挥手终止连接,确保数据传输的可靠性和完整性。

3、数据在各层之间是怎样传输的

对于发送方而言,从上层到下层层层包装,对于接收方而言,从下层到上层,层层解开包装。

  • 发送方的应用进程向接收方的应用进程传送数据
  • AP 先将数据交给本主机的应用层,应用层加上本层的控制信息 H5 就变成了下一层的数据单元
  • 传输层收到这个数据单元后,加上本层的控制信息 H4,再交给网络层,成为网络层的数据单元
  • 到了数据链路层,控制信息被分成两部分,分别加到本层数据单元的首部(H2)和尾部(T2)
  • 最后的物理层,进行比特流的传输

这个过程类似写信,写一封信,每到一层,就加一个信封,写一些地址的信息。到了目的地之后,又一层层解封,传向下一个目的地。

4、从输入url网址到网页显示的过程是怎样的/你了解吗?

从浏览器地址栏输入 URL 到显示网页的过程包括多个步骤,涵盖了 DNS 解析、TCP 连接、发送 HTTP 请求、服务器处理请求并返回 HTTP 响应、浏览器处理响应并渲染页面等多个环节。

  1. DNS 解析:浏览器发起一个 DNS 请求到 DNS 服务器,将域名解析为服务器的 IP 地址。
  2. TCP 连接:浏览器通过解析得到的 IP 地址与服务器建立 TCP 连接(通常是通过 443 端口进行 SSL 加密的 HTTPS 连接)。这一步涉及到 TCP 的三次握手这包括客户端发送SYN包、服务器返回SYN+ACK包、客户端发送ACK包完成连接。)过程,确保双方都准备好进行数据传输。
  3. 发送 HTTP 请求:浏览器构建 HTTP 请求消息,包括请求行、请求头和请求体(如果有);然后将请求发送到服务器。
  4. 服务器处理请求:服务器接收到 HTTP 请求后,根据请求的资源路径,经过后端处理(可能包括数据库查询等),生成 HTTP 响应消息;响应消息包括状态行、响应头和响应体(请求的资源内容)。
  5. 浏览器接收 HTTP 响应:浏览器接收到服务器返回的 HTTP 响应数据后,开始解析响应体中的 HTML 内容;然后构建 DOM 树、解析 CSS 和 JavaScript 文件等,最终渲染页面。
  6. 断开连接:TCP 四次挥手,连接结束。

我们以输入 www.baidu.com 为例:

各个过程使用了什么协议:

5、说一说tcp的四次挥手

TCP 连接的断开过程称为四次挥手(Four-Way Handshake)。它的目的是在客户端和服务器之间优雅地关闭连接,确保所有数据都被可靠传输。

第一次挥手(FIN):客户端向服务器发送一个 FIN(结束)报文,表示客户端没有数据要发送了,但仍然可以接收数据。客户端进入 FIN-WAIT-1 状态。

第二次挥手(ACK):服务器接收到 FIN 报文后,向客户端发送一个 ACK 报文,确认已接收到客户端的 FIN 请求。服务器进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。

第三次挥手(FIN):服务器向客户端发送一个 FIN 报文,表示服务器也没有数据要发送了。服务器进入 LAST-ACK 状态。

第四次挥手(ACK):客户端接收到 FIN 报文后,向服务器发送一个 ACK 报文,确认已接收到服务器的 FIN 请求。客户端进入 TIME-WAIT 状态,等待一段时间以确保服务器接收到 ACK 报文。服务器接收到 ACK 报文后进入 CLOSED 状态。客户端在等待一段时间后也进入 CLOSED 状态。

大白话说四次挥手:

假如单身狗博主有一个女朋友—由于博主上班九九六,下班肝博客,导致没有时间陪女朋友,女朋友忍无可忍。

  • 女朋友:狗男人,最近你都不理我,你是不是不爱我了?你是不是外面有别的狗子了?我要和你分手?
  • 沙雕博主一愣,怒火攻心:分手就分手,不陪你闹了,等我把东西收拾收拾。

沙雕博主小心翼翼地装起了自己的青轴机械键盘。

  • 哼,蠢女人,我已经收拾完了,我先滚为敬,再见!
  • 女朋友:滚,滚的远远的,越远越好,我一辈子都不想再见到你。

挥手的故事总充满了悲伤和遗憾!

6、tcp的重传机制

重传包括超时重传、快速重传、带选择确认的重传(SACK)、重复 SACK 四种

超时重传

超时重传,是 TCP 协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的 ACK 报文,那么就重新发送数据,直到发送成功为止。

超时时间设置为多少合适捏?

RTT 就是数据完全发送完,到收到确认信号的时间,即数据包的一次往返时间。

超时重传时间,就是 RTO(Retransmission Timeout)。那么,RTO 到底设置多大呢?

  • 如果 RTO 设置很大,等了很久都没重发,这样肯定就不行。
  • 如果 RTO 设置很小,那很可能数据都没有丢失,就开始重发了,这会导致网络阻塞,从而恶性循环,导致更多的超时出现。

一般来说,RTO 略微大于 RTT,效果是最佳的。

其实,RTO 有个标准方法的计算公式,也叫 Jacobson / Karels 算法

  1. 首先计算 SRTT(即计算平滑的 RTT)

SRTT = (1 - α) * SRTT + α * RTT //求 SRTT 的加权平均

2.其次,计算 RTTVAR (round-trip time variation)

RTTVAR = (1 - β) * RTTVAR + β * (|RTT - SRTT|) //计算 SRTT 与真实值的差距

3.最后,得出最终的 RTO

RTO = µ * SRTT + ∂ * RTTVAR = SRTT + 4·RTTVAR

在 Linux 下,α = 0.125β = 0.25, μ = 1∂ = 4。别问这些参数是怎么来的,它们是大量实践,调出的最优参数。

超时重传不是十分完美的重传方案,它有这些缺点:

  • 当一个报文丢失时,会等待一定的超时周期,才重传分组,增加了端到端的时延。
  • 当一个报文丢失时,在其等待超时的过程中,可能会出现这种情况:其后的报文段已经被接收端接收但却迟迟得不到确认,发送端会认为也丢失了,从而引起不必要的重传,既浪费资源也浪费时间。

并且,对于 TCP,如果发生一次超时重传,时间间隔下次就会加倍。

快速重传

TCP 还有另外⼀种快速重传(Fast Retransmit)机制,它不以时间为驱动,⽽是以数据驱动重传。

它不以时间驱动,而是以数据驱动。它是基于接收端的反馈信息来引发重传的。

可以用它来解决超时重发的时间等待问题,快速重传流程如下:

在上图,发送⽅发出了 1,2,3,4,5 份数据:

  • 第⼀份 Seq1 先送到了,于是就 Ack 回 2;
  • 结果 Seq2 因为某些原因没收到,Seq3 到达了,于是还是 Ack 回 2;
  • 后⾯的 Seq4 和 Seq5 都到了,但还是 Ack 回 2,因为 Seq2 还是没有收到;
  • 发送端收到了三个 Ack = 2 的确认,知道了 Seq2 还没有收到,就会在定时器过期之前,重传丢失的 Seq2
  • 最后,收到了 Seq2,此时因为 Seq3,Seq4,Seq5 都收到了,于是 Ack 回 6 。

快速重传机制只解决了⼀个问题,就是超时时间的问题,但是它依然⾯临着另外⼀个问题。就是重传的时候,是重传之前的⼀个,还是重传所有的问题。

⽐如对于上⾯的例⼦,是重传 Seq2 呢?还是重传 Seq2、Seq3、Seq4、Seq5 呢?因为发送端并不清楚这连续的三个 Ack 2 是谁传回来的。

根据 TCP 不同的实现,以上两种情况都是有可能的。可⻅,这是⼀把双刃剑。

为了解决不知道该重传哪些 TCP 报⽂,于是就有 SACK ⽅法。

7、tcp和udp的区别

可以这么形容:TCP 是打电话,UDP 是大喇叭(😂)。

在数据传输开始之前,TCP 需要先建立连接,数据传输完成后,再断开连接。这个过程通常被称为“三次握手”。

UDP 是无连接的,发送数据之前不需要建立连接,发送完毕也无需断开连接,数据以数据报形式发送。

在此基础上,我们可以得出:TCP 是可靠的,它通过确认机制、重发机制等来保证数据的可靠传输。而 UDP 是不可靠的,数据包可能会丢失、重复、乱序。

8、tcp和udp的应用场景

  • TCP: 适用于那些对数据准确性要求高于数据传输速度的场合。例如:网页浏览、电子邮件、文件传输(FTP)、远程控制、数据库链接。
  • UDP: 适用于对速度要求高、可以容忍一定数据丢失的场合。例如:QQ 聊天、在线视频、网络语音电话、广播通信。容忍一定的数据丢失。

9.http响应状态码有哪些

HTTP响应状态码是服务器在处理客户端请求时返回的三位数代码,用来表示请求的处理结果。状态码分为五类:

  1. 1xx(信息性状态码):表示请求已被接收,需要继续处理。

    • 100 Continue
    • 101 Switching Protocols
  2. 2xx(成功状态码):表示请求已成功被服务器接收、理解并接受。

    • 200 OK
    • 201 Created
    • 202 Accepted
    • 204 No Content
  3. 3xx(重定向状态码):表示需要后续操作才能完成请求。

    • 301 Moved Permanently
    • 302 Found
    • 303 See Other
    • 304 Not Modified
    • 307 Temporary Redirect
    • 308 Permanent Redirect
  4. 4xx(客户端错误状态码):表示请求包含错误或无法被服务器理解。

    • 400 Bad Request
    • 401 Unauthorized
    • 403 Forbidden
    • 404 Not Found
    • 405 Method Not Allowed
    • 408 Request Timeout
    • 409 Conflict
    • 413 Payload Too Large
    • 415 Unsupported Media Type
    • 429 Too Many Requests
  5. 5xx(服务器错误状态码):表示服务器在尝试处理请求时发生了错误。

    • 500 Internal Server Error
    • 501 Not Implemented
    • 502 Bad Gateway
    • 503 Service Unavailable
    • 504 Gateway Timeout
    • 511 Network Authentication Required

这些状态码是HTTP协议的一部分,用于确保客户端和服务器之间的通信清晰明了。

10、http和HTTPS有什么区别

HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)是两种用于网络通信的协议,它们在互联网上用于传输数据。以下是它们之间的主要区别:

  1. 安全性

    • HTTP:是明文传输,不加密,数据在传输过程中可能会被窃听或篡改。
    • HTTPS:通过SSL/TLS协议进行加密,保护数据传输过程中的安全性,防止数据被窃听或篡改。
  2. 端口

    • HTTP:默认使用80端口。
    • HTTPS:默认使用443端口。
  3. 证书

    • HTTP:不需要证书。
    • HTTPS:需要SSL证书,该证书用于在客户端和服务器之间建立安全层。
  4. 连接建立

    • HTTP:建立连接只需要三次握手。
    • HTTPS:除了三次握手外,还需要SSL握手过程,包括密钥交换、证书验证等。
  5. 性能

    • HTTP:由于不需要加密解密过程,通常性能略高。
    • HTTPS:由于加密解密过程,可能会稍微影响性能,但现代的SSL/TLS实现了高效的算法,这种影响通常可以忽略不计。
  6. SEO(搜索引擎优化)

    • 使用HTTPS的网站可能会获得更好的搜索引擎排名,因为Google等搜索引擎倾向于将安全性作为排名因素之一。
  7. 信任度

    • HTTPS协议由于其加密特性,通常被认为比HTTP更可信,特别是在涉及敏感信息传输的场合。
  8. 浏览器显示

    • 浏览器对HTTP网站通常没有特殊显示。
    • 对于HTTPS网站,浏览器通常会显示一个锁形图标,表示该网站是安全的。

总的来说,HTTPS是HTTP的安全版本,它通过加密提供了数据传输的安全性和完整性保护,是现代网站推荐使用的协议。

  • 21
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值