2025前端面试热门题目——计算机网络篇

计算机网络篇------面试

1. 到底什么是 TCP 连接?

TCP 连接的定义

TCP(传输控制协议)是一个面向连接的传输层协议。TCP 连接是通过 三次握手 确立的可靠数据通信链路,保证了在不可靠网络(如互联网)上的数据传输的准确性、有序性和完整性。

TCP 连接的特性
  1. 面向连接: 通信前建立连接(三次握手),通信结束释放连接(四次挥手)。
  2. 可靠传输: 提供数据分段、确认(ACK)、重传机制,确保数据不丢失、不重复。
  3. 有序传输: 数据按序号重组,确保顺序。
  4. 全双工: 支持双向同时通信。
  5. 流量控制与拥塞控制: 防止发送过快或网络拥堵。

2. HTTP 1.0 和 HTTP 2.0 有什么区别?

特性 HTTP 1.0 HTTP 2.0
连接复用 不支持,每次请求需建立新连接(无连接复用)。 支持多路复用,一个 TCP 连接可发送多个请求。
传输格式 基于纯文本。 基于二进制帧,效率更高。
头部压缩 不支持,头部信息冗余较大。 支持 HPACK 算法压缩,减少网络传输量。
服务器推送 不支持。 支持服务端主动推送资源(Server Push)。
队头阻塞 存在,阻塞一个请求会影响整个连接性能。 解决了应用层的队头阻塞问题(但仍有 TCP 层问题)。

3. HTTP 2.0 和 HTTP 3.0 有什么区别?

特性 HTTP 2.0 HTTP 3.0
底层协议 基于 TCP 协议。 基于 QUIC 协议(UDP)。
连接建立 需要 TCP 三次握手+TLS 握手,延迟较高。 支持 0-RTT 快速握手,大幅降低延迟。
队头阻塞 存在 TCP 队头阻塞问题。 无队头阻塞(QUIC 的流独立)。
加密传输 通过 TLS 实现加密。 内置加密,数据始终安全传输。
部署 需要依赖操作系统的 TCP 协议栈支持。 基于用户态协议,灵活易更新。

4. HTTP 和 HTTPS 有什么区别?

特性 HTTP HTTPS
安全性 明文传输,容易被窃听或篡改。 数据加密传输,防止窃听和篡改。
协议 基于 HTTP 协议。 HTTP+SSL/TLS 实现加密。
端口 默认使用端口 80。 默认使用端口 443。
性能 无需加密计算,性能略高。 数据加密解密需额外计算,性能略低。
证书需求 无需证书。 需要申请 SSL 证书,成本较高。

5. TCP 是用来解决什么问题?

TCP 的主要问题解决:
  1. 可靠传输: 确保数据包正确、无丢失地到达目标。
    • 解决:序列号、确认机制、超时重传。
  2. 顺序传输: 确保数据包按发送顺序到达。
    • 解决:序列号与接收端排序机制。
  3. 流量控制: 避免发送端数据过快,导致接收端处理不过来。
    • 解决:滑动窗口协议。
  4. 拥塞控制: 避免网络拥堵,降低整体传输性能。
    • 解决:慢启动、拥塞避免算法。

6. TCP 和 UDP 有什么区别?

特性 TCP UDP
连接方式 面向连接(需三次握手)。 无连接,直接发送。
可靠性 可靠传输,有确认和重传机制。 不可靠传输,无确认机制。
数据顺序 有序传输,接收方数据按序排列。 无序传输,数据可能乱序。
开销 开销较大,需要维护连接状态和控制信息。 开销较小,无需连接管理。
速度 速度较慢,但稳定。 速度快,但可能丢包。
适用场景 文件传输、Web 浏览、邮件等需要可靠性的场景。 视频直播、在线游戏、DNS 查询等需要低延迟的场景。

7. TCP 的粘包和拆包能说说吗?

粘包和拆包的定义:
  • 粘包: 多个小数据包被合并为一个包,接收端无法区分数据边界。
  • 拆包: 一个大数据包被拆分为多个小包传输。
产生原因:
  1. 粘包:

    • 发送端将多个小数据包合并为一个大数据包(节约资源)。
    • TCP 流是无边界的,接收端无法判断每个数据包的分界点。
  2. 拆包:

    • 单个数据包大小超过了 TCP 最大传输单元(MTU)。
解决方法:
  1. 固定长度协议:

    • 每个数据包规定固定长度,接收端按长度解析。
  2. 分隔符协议:

    • 使用特定分隔符(如 \n\r\n)标记数据边界。
  3. 长度前缀协议:

    • 在数据包前附加长度信息,接收端根据长度解析。
示意图:
  • 粘包:

    发送端:包1[Hello] + 包2[World] => 合并为 [HelloWorld]
    接收端:无法区分 Hello 和 World。
    
  • 拆包:

    发送端:包 [LargeData]
    接收端:分为 [Large] 和 [Data]
    
代码举例:
python 复制代码
# 粘包问题示例:发送两条消息,但接收端读取到的是拼接后的数据
client.send("Hello".encode())
client.send("World".encode())

# 接收端可能收到:HelloWorld

1. 说说 TCP 的三次握手?

TCP 的三次握手是建立连接的过程,用于确保通信双方都准备好数据传输并确认网络稳定。

三次握手步骤:
  1. 第一次握手(SYN):

    客户端发送一个带 SYN(同步)标志的数据包,表示请求建立连接,同时指明自己的初始序列号 (Seq = x)。

  2. 第二次握手(SYN-ACK):

    服务器收到客户端的 SYN 后,发送一个带 SYN 和 ACK 标志的数据包,表示同意连接,并告知自己的初始序列号 (Seq = y) 和确认号 (Ack = x+1)。

  3. 第三次握手(ACK):

    客户端收到 SYN-ACK 后,发送一个带 ACK 标志的数据包,确认号 (Ack = y+1),表示握手完成,连接建立。

示意图:
客户端                服务端
   |---SYN(x)--->|
   |<--SYN-ACK(y)-|
   |---ACK(x+1)--->|
连接建立成功

2. 说说 TCP 的四次挥手?

TCP 的四次挥手是断开连接的过程,用于保证双方都可以正常关闭通信。

四次挥手步骤:
  1. 第一次挥手(FIN):

    客户端发送一个带 FIN 标志的数据包,表示数据发送完毕,请求关闭连接。

  2. 第二次挥手(ACK):

    服务器收到 FIN 后,发送 ACK 确认,表示同意关闭连接,但可能还有未处理完的数据。

  3. 第三次挥手(FIN):

    服务器处理完数据后,发送 FIN 请求,表示可以关闭连接。

  4. 第四次挥手(ACK):

    客户端收到 FIN 后,发送 ACK 确认,并进入 TIME_WAIT 状态,等待一段时间以确保服务器收到 ACK。

示意图:
客户端                服务端
   |---FIN--->|
   |<---ACK---|
   |<---FIN---|
   |---ACK--->|
连接断开成功

3. 为什么 TCP 挥手需要有 TIME_WAIT 状态?

TIME_WAIT 的作用:
  1. 确保数据的可靠性:

    • 确保服务器收到客户端的最后一个 ACK,如果服务器未收到,会重新发送 FIN。
  2. 避免端口重用:

    • 等待旧连接的残留数据清理完毕,避免新连接受到干扰。
TIME_WAIT 的持续时间:
  • 通常为 2 × 最大报文段寿命(2×MSL),约 60~240 秒。

4. TCP 超时重传机制是为了解决什么问题?

超时重传机制的目的:

确保数据可靠传输,即使由于网络丢包、拥塞等原因导致数据包未被接收。

工作流程:
  1. 发送方发送数据包并启动定时器。
  2. 若在超时时间内未收到确认(ACK),则重新发送数据包。
  3. 若多次超时仍无响应,则认为连接中断。
关键参数:
  • RTT(Round Trip Time): 确认包的往返时间。
  • RTO(Retransmission Timeout): 超时时间动态调整,通常为 RTT 的倍数。

5. TCP 滑动窗口的作用是什么?

滑动窗口的作用:

控制数据的流量,防止发送方发送过快导致接收方处理不过来。

特点:
  1. 动态调整窗口大小:
    • 窗口大小表示发送方可连续发送的最大数据量,无需逐一等待确认。
  2. 提高传输效率:
    • 通过批量发送多个数据包,减少等待时间。
示意图:

滑动窗口机制:

窗口大小 = 4
发送方: [1] [2] [3] [4] | [5] [6]
接收方: ACK [1] => 滑动窗口更新 => [5] 可发送

6. TCP/IP 四层模型是什么?

TCP/IP 模型层次:
  1. 应用层:

    提供用户直接使用的网络服务(如 HTTP、DNS、SMTP)。

  2. 传输层:

    提供可靠或不可靠的端到端通信(如 TCP、UDP)。

  3. 网络层:

    确定路由并传输数据包(如 IP 协议)。

  4. 网络接口层:

    定义数据在物理网络上的传输方式(如 Ethernet)。


7. OSI 七层模型是什么?

层次 功能描述 示例协议
应用层 为用户提供网络服务接口。 HTTP、FTP、SMTP
表示层 数据格式转换和加密解密。 SSL、TLS
会话层 建立、管理和终止会话。 NetBIOS
传输层 提供可靠传输或无连接服务。 TCP、UDP
网络层 选择路由并传输数据包。 IP、ICMP、ARP
数据链路层 确保数据在同一网络中的节点间可靠传输。 Ethernet、PPP
物理层 负责硬件设备间的数据传输。 光纤、电缆等传输介质。

8. Cookie、Session、Token 之间有什么区别?

特性 Cookie Session Token
存储位置 客户端浏览器。 服务器端。 客户端,通常结合 Authorization 头传输。
安全性 较低,易被篡改或劫持。 较高,敏感数据存储在服务器。 高,通过签名防篡改。
生命周期 有效期受限于设置的失效时间。 随 Session 存续,通常依赖 Cookie。 有效期受限于令牌的过期时间。
适用场景 简单状态管理(如购物车)。 用户认证、敏感数据操作。 跨域认证、分布式系统。

9. 如何解决页面请求接口大规模并发问题?

解决思路:
  1. 前端优化:

    • 合并请求:减少接口调用次数。
    • 缓存策略:使用浏览器缓存或 CDN。
    • 限流:对请求进行排队或批量处理。
  2. 服务端优化:

    • 负载均衡: 使用 Nginx 或 LVS 分担流量。
    • 分布式架构: 数据库、缓存服务(如 Redis)分片部署。
    • 数据库优化: 建立索引、读写分离。
  3. 缓存机制:

    • 使用 CDN 分担流量压力。
    • 热点数据缓存到 Redis 或 Memcached。
  4. 消息队列:

    • 使用 RabbitMQ、Kafka 等,将请求异步化,平滑高峰流量。
  5. 监控与扩展:

    • 监控系统性能,动态扩展服务器。
相关推荐
向前看-9 分钟前
验证码机制
前端·后端
燃先生._.1 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
高山我梦口香糖2 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
m0_748235242 小时前
前端实现获取后端返回的文件流并下载
前端·状态模式
m0_748240253 小时前
前端如何检测用户登录状态是否过期
前端
black^sugar3 小时前
纯前端实现更新检测
开发语言·前端·javascript
njnu@liyong3 小时前
图解HTTP-HTTP报文
网络协议·计算机网络·http
寻找沙漠的人4 小时前
前端知识补充—CSS
前端·css