面试计算机网络八股文十问十答第十期
相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!
⭐点赞⭐收藏⭐不迷路!⭐
1)SACK 的引入是为了解决什么问题?
SACK(Selective Acknowledgment,选择性确认)的引入是为了解决 TCP 中的丢包和重传问题。传统的 TCP 在收到乱序或丢失的数据包时,会触发整个 TCP 连接的重传机制,即重传丢失的数据包和所有后续的数据包。这种方法会浪费带宽和增加延迟。SACK 允许接收端向发送端报告它已经成功接收的数据块范围,从而使发送端只需重传确实丢失的数据块,而不是整个连续数据块。这样可以提高 TCP 的效率和吞吐量,特别是在高丢包率或高延迟网络环境下。
2)D-SACK 又是什么东西?
D-SACK(Duplicate SACK,重复的选择性确认)是 SACK 的一个变体,用于处理一些特殊情况下的重复报文。当接收端收到重复的数据报文时,它可以通过 D-SACK 机制通知发送端哪些数据块是重复的,从而避免发送端不必要的重传。D-SACK 的引入主要用于处理网络中的某些异常情况,例如网络重排或复制的数据包。
3)滑动窗口的作用是什么?
滑动窗口是 TCP 协议中的一种流量控制机制,用于在发送端和接收端之间协调数据传输的速率。其作用包括:
- 流量控制: 发送端根据接收端的能力动态调整发送数据的速率,避免发送速度过快导致接收端无法处理。
- 确认管理: 接收端通过滑动窗口大小指示发送端可以发送的数据量,同时确认已经成功接收的数据。
- 窗口调整: 可以根据网络条件和接收端处理能力调整滑动窗口的大小,以优化数据传输的效率和可靠性。
总之,滑动窗口通过动态调整发送和接收数据的速率,帮助 TCP 协议在不同网络环境下有效地管理数据传输,确保高效、可靠地数据交换。
4)已经有滑动窗口了为什么还要拥塞控制?
虽然滑动窗口用于流量控制,但它主要关注的是接收端的处理能力和网络延迟。拥塞控制则是为了控制网络中的数据包数量,避免过多的数据包导致网络拥塞,从而影响数据传输的效率和稳定性。主要原因包括:
- 网络拥塞处理: 滑动窗口只能根据接收端的反馈进行调整,而拥塞控制则是针对整个网络环境的调节。网络中可能存在不同的链路和路由器,它们的传输能力和缓存大小不同,可能会导致数据包堆积和丢失,而拥塞控制可以避免这种情况。
- 全局性能优化: 拥塞控制不仅考虑单个连接的数据传输情况,还会考虑网络的整体性能。它可以通过动态调整发送速率和响应网络状况来优化整体的网络吞吐量和稳定性。
5)说说拥塞控制的步骤?
拥塞控制通常包括以下步骤:
- 慢启动(Slow Start): 发送端初始设置一个拥塞窗口(cwnd),开始以较小的速率发送数据。随着每次收到确认(ACK),拥塞窗口大小按指数增长。
- 拥塞避免(Congestion Avoidance): 一旦拥塞窗口大小达到一个阈值(慢启动阈值),发送端切换到线性增长模式,即每次收到一个确认后增加一个数据包大小的窗口。
- 快速重传(Fast Retransmit): 如果发送端连续收到三个相同的 ACK,则视为某个数据包丢失,立即重传该数据包,而不等待超时。
- 快速恢复(Fast Recovery): 在快速重传后,将慢启动阈值设置为当前拥塞窗口的一半,并将拥塞窗口设置为慢启动阈值加上丢失的数据包数。
- 超时重传(Timeout Retransmission): 如果发送端在预定时间内未收到 ACK,则会认为某个数据包丢失,触发超时重传机制。
这些步骤共同作用,使得 TCP 协议能够根据网络拥塞程度动态调整发送速率,避免造成网络拥塞或者传输性能下降。
6)还有哪些拥塞控制算法?
除了上述基本的拥塞控制算法(如慢启动、拥塞避免、快速重传、快速恢复和超时重传),还有一些其他的拥塞控制算法,主要包括:
- TCP Vegas: 通过主动探测拥塞来调整发送速率,而不是等待丢包发生。
- TCP BIC(Binary Increase Congestion Control): 结合二进制增加和减少拥塞窗口的机制,以更快速地适应网络的拥塞状态。
- TCP CUBIC(Compound TCP): 通过使用平滑增长和急剧减少的拥塞窗口函数,以更好地利用带宽。
- TCP New Reno: 是对传统 TCP Reno 的改进,主要增加了对快速恢复机制的支持,以减少网络拥塞时的传输停滞时间。
每种拥塞控制算法都有其适用的场景和优势,选择合适的算法取决于具体的网络环境和应用需求。
7)ARP 和 RARP 分别是什么?有什么区别?
- ARP(Address Resolution Protocol,地址解析协议): ARP 是用于将 IP 地址解析为 MAC 地址的协议。当主机需要向同一局域网内的另一个主机发送数据时,它首先会检查目标主机的 IP 地址是否在同一子网内。如果是,则主机会使用 ARP 查询获取目标主机的 MAC 地址,然后将数据封装成帧发送到目标主机。
- RARP(Reverse Address Resolution Protocol,逆地址解析协议): RARP 是 ARP 的逆过程,用于将 MAC 地址解析为 IP 地址。通常情况下,RARP 用于无盘工作站或者其他不能自行设置 IP 地址的设备,它们可以通过发送 RARP 请求来获取自己的 IP 地址。
区别:
- ARP 解析 IP 地址到 MAC 地址,而 RARP 则是将 MAC 地址解析到 IP 地址。
- ARP 是广泛使用于局域网中的常见协议,而 RARP 的使用较为有限,主要用于特定设备获取 IP 地址。
- ARP 用于 IPv4 和 IPv6 网络,而 RARP 主要用于早期的 IPv4 网络,随着 BOOTP 和 DHCP 的发展,RARP 的使用逐渐减少。
8)TCP/IP 四层模型是什么?
TCP/IP 四层模型是指 TCP/IP 协议栈中的四个主要协议层,按照从低到高的顺序分别是:
- 网络接口层(Network Interface Layer): 也称为链路层或数据链路层,负责定义数据在物理网络中的传输方式。它包括设备驱动程序、网络接口卡(NIC)、以太网等。
- 网络层(Internet Layer): 主要负责在网络上选择和建立数据传输的最佳路径。它使用 IP 协议,通过 IP 地址来唯一标识每个主机和网络设备。
- 传输层(Transport Layer): 负责提供端到端的数据传输服务,主要有两个主要协议:
- TCP(Transmission Control Protocol,传输控制协议):提供可靠的、面向连接的数据传输服务,适用于需要数据完整性的应用,如 HTTP、FTP 等。
- UDP(User Datagram Protocol,用户数据报协议):提供不可靠的、无连接的数据传输服务,适用于实时应用和对数据传输延迟敏感的应用,如音频和视频流等。
- 应用层(Application Layer): 包含各种应用和协议,为用户提供各种网络服务。常见的协议有 HTTP、FTP、DNS、SMTP 等。
9)OSI 七层模型是什么?
OSI(Open Systems Interconnection,开放系统互联)七层模型是国际标准化组织(ISO)定义的通信系统框架,用于说明计算机或通信系统之间互联互通的各种功能和服务。它包括以下七层:
- 物理层(Physical Layer): 定义物理介质的传输方式,如电压、光信号等。
- 数据链路层(Data Link Layer): 负责在物理介质上传输数据帧,并进行错误检测和纠正,如以太网协议就在此层工作。
- 网络层(Network Layer): 选择和管理数据包的路由,确保数据包从源主机传输到目标主机,如 IP 协议。
- 传输层(Transport Layer): 提供端到端的通信控制,保证数据可靠传输,如 TCP 和 UDP 协议。
- 会话层(Session Layer): 管理用户会话和建立、维护、终止连接。
- 表示层(Presentation Layer): 负责数据的格式化、编码和加密解密,以确保不同设备间数据的兼容性和可读性。
- 应用层(Application Layer): 提供用户接口和各种应用服务,如电子邮件、文件传输、远程登录等。
OSI 模型为理解和设计各种网络和通信协议提供了一个标准的框架。
10)Cookie、Session、Token 之间有什么区别?
- Cookie: 是存储在用户计算机上的小型文本文件,由服务器通过 HTTP 协议发送给客户端,并保存在客户端浏览器中。主要用于跟踪用户的会话状态、存储用户偏好设置等信息。Cookie 是有过期时间的,可以由服务器端设置过期时间,也可以在客户端设置。
- Session: 是指服务器端存储的关于用户会话的信息。在客户端与服务器建立连接后,服务器为每个连接创建一个唯一的会话 ID,用于标识该用户的会话信息。Session 数据存储在服务器的内存或数据库中,通常用于存储用户登录状态、购物车内容等。
- Token: 是一种访问令牌,通常是一个字符串,用于访问受保护的资源。Token 可以包含用户的身份信息和访问权限,通过 Token 认证可以允许用户访问特定的服务或资源。与 Cookie 不同的是,Token 不存储在客户端的文件系统中,而是由客户端在请求中发送给服务器。
区别:
- 存储位置: Cookie 存储在客户端浏览器中,Session 数据存储在服务器端内存或数据库中,Token 通常由客户端保存,并在需要时发送给服务器。
- 安全性: Token 相对较安全,因为它不容易被窃取或篡改,而 Cookie 存在被盗用和 CSRF 攻击的风险。Session 也比 Cookie 更安全,因为它的数据存储在服务器端。
- 用途: Cookie 主要用于跟踪用户状态和存储用户偏好设置;Session 用于存储用户登录状态和会话数据;Token 用于身份验证和授权,通常用于 API 访问控制。
这些技术在不同的应用场景中有各自的优势和适用性,根据具体需求选择合适的方法来管理用户状态和安全性。
开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system
前后端总计已经 1500+ Star,2W+ 访问!
⭐点赞⭐收藏⭐不迷路!⭐