当前位置: 首页 > news >正文

计算机基础面试题 |11.精选计算机基础面试题

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • TCP 的主要特点是什么?
    • 解释一下什么是滑动窗口机制。
    • 除了滑动窗口机制,TCP协议还有哪些流量控制方法?
    • 详细解释一下TCP的确认和重传机制。

TCP 的主要特点是什么?

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议,其主要特点包括:

  1. 面向连接:在进行数据传输之前,需要建立一个连接。
  2. 可靠传输:通过使用确认和重传机制,确保数据传输的可靠性。
  3. 全双工通信:允许通信双方同时发送和接收数据。
  4. 流量控制:通过滑动窗口机制,控制发送方的数据流量,以避免数据拥塞和丢失。
  5. 拥塞控制:通过慢启动、拥塞避免、快速重传和快速恢复等机制,控制网络的拥塞状况。
  6. 数据分片和重组:支持将大数据包分割成多个小数据包进行传输,并在接收方进行重组。

在这里插入图片描述

这些特点使得 TCP 协议成为一种非常可靠的传输层协议,适用于需要高可靠性和稳定性的应用场景,如文件传输、网页浏览、电子邮件等。

解释一下什么是滑动窗口机制。

滑动窗口机制是TCP协议中的一种流量控制方法

它通过限制发送方在一定时间内可以发送的数据量,来避免网络拥塞和数据丢失。

具体来说,发送方会维护一个发送窗口,该窗口表示在未收到确认的情况下,可以发送的最大数据量。当发送方发送数据时,它会根据发送窗口的大小来发送数据包。同时,接收方也会维护一个接收窗口,该窗口表示在未收到数据的情况下,可以接收的最大数据量。当接收方收到数据包时,它会根据接收窗口的大小来确认收到的数据包,并将确认信息返回给发送方。

通过这种方式,发送方可以根据接收方的确认信息来调整发送窗口的大小,从而实现流量控制。同时,滑动窗口机制还可以提高网络传输的效率,因为它允许发送方在等待确认信息的同时继续发送数据包,而不是等待所有数据包都被确认后再发送下一批数据包。

除了滑动窗口机制,TCP协议还有哪些流量控制方法?

除了滑动窗口机制,TCP 协议还使用了其他一些流量控制方法,包括:

  1. 拥塞窗口:拥塞窗口是发送方在拥塞控制阶段使用的窗口大小,它表示在未收到确认的情况下,发送方可以发送的最大数据量。拥塞窗口的大小是根据网络拥塞状况动态调整的。
  2. 慢启动:慢启动是 TCP 协议在建立连接时使用的一种流量控制方法。在慢启动阶段,发送方会逐渐增加发送窗口的大小,以避免一开始就发送大量数据导致网络拥塞。
  3. 快速重传和快速恢复:快速重传和快速恢复是 TCP 协议在检测到数据丢失时使用的一种流量控制方法。当发送方检测到数据丢失时,它会立即重传丢失的数据,并将发送窗口缩小到一个较小的值,以避免继续发送大量数据导致网络拥塞。
  4. 延迟确认:延迟确认是 TCP 协议在接收方使用的一种流量控制方法。接收方在收到数据包后,并不会立即发送确认信息,而是等待一段时间后再发送确认信息。这样可以减少网络中的确认信息数量,从而提高网络传输的效率。

这些流量控制方法相互配合,共同实现了 TCP 协议的可靠传输和流量控制功能。

详细解释一下TCP的确认和重传机制。

TCP 协议使用确认和重传机制来确保数据传输的可靠性。

当发送方发送数据时,它会在数据包中设置一个序列号,以便接收方能够识别数据包的顺序。接收方收到数据包后,会检查数据包的序列号是否与之前收到的数据包的序列号连续,如果是,则说明数据包是正确的,接收方会向发送方发送确认信息。如果不是,则说明数据包有丢失或损坏,接收方会向发送方发送一个否认信息,要求发送方重传数据包。

发送方收到确认信息后,会将确认信息中的序列号添加到发送窗口中,以便发送下一个数据包。发送方收到否认信息后,会立即重传数据包,直到收到正确的确认信息为止。

在重传数据包时,发送方会根据数据包的序列号和接收方的确认信息来确定重传的时间和次数。如果发送方在一定时间内没有收到确认信息,它会认为数据包丢失,并立即重传数据包。如果发送方连续收到多个否认信息,它会逐渐增加重传的时间和次数,以避免网络拥塞。

通过确认和重传机制,TCP 协议可以确保数据传输的可靠性和稳定性,避免数据丢失和网络拥塞。

相关文章:

  • C语言实验4:指针
  • VUE--保留小数(过滤器)
  • 在Go语言中处理HTTP请求中的Cookie
  • Huggy Lingo: 利用机器学习改进 Hugging Face Hub 上的语言元数据
  • 第11章 GUI Page462~476 步骤二十三 步骤二十四 Undo/Redo ②“添加操作”支持“Undo/Redo”
  • Android开发中“真正”的仓库模式
  • vue项目报错RangeError: Maximum call stack size exceeded
  • RMAN-03002 RMAN-06059 ORA-19625
  • Ubuntun使用ISO镜像中的软件包作为本地镜像源
  • 2024年MySQL学习指南(四),探索MySQL数据库,掌握未来数据管理趋势
  • 云计算:OpenStack 分布式架构部署(单控制节点与单计算节点)
  • JMeter使用
  • 7nm项目之顶层规划——04 power routing and pushdown
  • 选择 省市区 组件数据 基于vue3 + elment-plus
  • mysql5.7安装-windows安装版本
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Android单元测试 - 几个重要问题
  • Babel配置的不完全指南
  • Laravel Mix运行时关于es2015报错解决方案
  • LintCode 31. partitionArray 数组划分
  • Node项目之评分系统(二)- 数据库设计
  • 理解在java “”i=i++;”所发生的事情
  • 聊聊flink的BlobWriter
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​Python 3 新特性:类型注解
  • #每日一题合集#牛客JZ23-JZ33
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1)(1.9) MSP (version 4.2)
  • (C语言)字符分类函数
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (七)Knockout 创建自定义绑定
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (未解决)macOS matplotlib 中文是方框
  • (一)Linux+Windows下安装ffmpeg
  • (转)菜鸟学数据库(三)——存储过程
  • (转)德国人的记事本
  • (转载)Linux网络编程入门
  • .Mobi域名介绍
  • .Net - 类的介绍
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET下ASPX编程的几个小问题
  • /etc/fstab 只读无法修改的解决办法
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @Not - Empty-Null-Blank
  • @RequestBody与@ModelAttribute
  • @在php中起什么作用?
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [1]-基于图搜索的路径规划基础
  • [Android]使用Android打包Unity工程
  • [Angular] 笔记 20:NgContent
  • [C++]C++基础知识概述