C++面试题,TCP和UDP方面(1)

在这里插入图片描述

个人主页 : 个人主页
个人专栏 : 《数据结构》 《C语言》《C++》《Linux》《网络》 《redis学习笔记》

文章目录

  • 前言
  • TCP和UDP的区别
  • UDP如何实现可靠
  • TCP滑动窗口原理
  • TCP流量控制
  • TCP超时重传
  • 总结


前言

这是个人总结的C++方向的面试题,TCP和UDP方面,如果那些地方有错误。欢迎前来纠错!!!


TCP和UDP的区别

TCP和UDP是传输层的两种主要协议。

  1. 连接方式:
    TCP:是面向连接的协议。在开始传输之前,TCP客户端和服务器之间会进行三次握手。在传输结束后,还会执行四次挥手来关闭连接,以确保通信的可靠性(。。。。。)
    UDP:是无连接的协议。在数据传输之前不需要建立连接,数据报只需要指定目标地址(ip:port)即可发送。
  2. 可靠性传输
    TCP:提供可靠的,面向链接的字节流服务。通过确认应答,超时重传,流量控制,连接管理,拥塞控制等机制来保证数据的可靠传输。
    UDP:是一个不可靠,无连接的数据报协议。UDP只保证数据的发送,但不保证数据会被接收方收到,也不会处理丢失,损坏会重复的数据。
  3. 数据传输格式:
    TCP:以字节流(从缓冲区的角度)的方式传输数据,没有明确的报文边界。需要应用层来处理粘包问题
    UDP:传输的是独立的,不可分割的数据报文。UDP数据报通常包含固定大小的数据库,每个数据报的大小由应用层决定(报文的16为UDP长度,决定了UDP数据报的最大长度)。
  4. 传输效率:
    TCP:由于要保证数据的可靠传输,TCP需要进行额外的握手,确认。重传等操作,因此传输效率相当较低
    UDP:不需要保证可靠性,传输效率比较高。(HTTP/3基于QUIC,而QUIC是建立在UDP上的)
  5. 应用场景:
    TCP:适合对数据可靠性要求高的场景,如文件传输,网页浏览,电子邮件。
    UDP:适合用于对延迟敏感,实时性要求高的场景,如视频直播,语言通话,在线游戏等

UDP如何实现可靠

UDP的可靠性需通过应用层协议来解决不可靠性,核心在于序列号确认机制重传策略流量控制等。

在这里插入图片描述


TCP滑动窗口原理

TCP滑动窗口是通过动态调整发送和接受双方的窗口大小,实现数据的可靠传输和流量控制。具体而言,滑动窗口允许发送方在不等待每个数据包确认的情况下连续发生多个数据包,从而提高传输效率。接收方通过维护窗口大小,根据自身处理能力和剩余缓冲区空间大小调整窗口大小,控制发送方的发送速率,避免网络拥塞。

  1. 发送窗口结构
    已确认:数据已发送且受到ACK确认
    已发送未确认:数据已发送但未收到ACK
    不发送:允许立即发送的数据范围
    不可发送:超出接收方窗口或拥塞窗口限制
    在这里插入图片描述
  2. 接收窗口结构
    已接收并确认:数据已提交给引用层
    可接收:缓冲区空闲区间,通过WIN字段通告
    不可接收:超出缓冲区容量
    在这里插入图片描述

TCP流量控制

TCP流量控制的核心目标是防止发送方速率超过接收方的处理能力,避免接收方缓冲区溢出导致丢包。其实现依赖于滑动窗口机制,通过动态调整发送窗口大小实现速率匹配。
特别注意的是,当接收方通告窗口大小为0时,发送方启动零窗口探测(ZWP),周期地发送1字节探测报文。若接收方持续返回零窗口,TCP可能最终断开链接(如三次探测失败后)

流量控制与拥塞控制的区别
流量控制:解决端到端速率匹配问题,防止接收方过载
拥塞控制:解决网络资源竞争问题,避免全网性能恶化
但流量控制的窗口大小可能被拥塞窗口大小限制,如当网络拥塞时,即使接收方有足够缓冲区,发送速率扔受拥塞控制算法制约


TCP超时重传

TCP超时重传:当发送方在发送数据报后,启动一个定时器(重传计时器)。如果在指定的超时时间内没有收到接收方的确认,则认为该数据段可能丢失或损坏,触发超时重传机制,重新发送该数据报。

  • 重传策略:TCP采用指数退避算法,每次超时重传时,重传间隔时间会增加一倍,直到达到最大值。目的是为了减少频繁重传对网络的影响
  • 快速重传:当发送方连续三次收到重复的ACK时,会立即重传未确认的数据报,而不需要等待超时定时器到期(RTO超时)

总结

以上就是我总结的C++面试题,TCP和UDP方面(1)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/70509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Huatuo热更新--如何使用

在安装完huatuo热更新插件后就要开始学习如何使用了。 1.创建主框渐Main 新建文件夹Main(可自定义),然后按下图创建文件,注意名称与文件夹名称保持一致 然后新建场景(Init场景),添加3个空物体…

Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例

1. 版本说明 springboot 版本 3.3.8 Java 版本 17 spring-ai 版本 1.0.0-M5 deepseek 模型 deepseek-r1:7b 需要注意一下Ollama的使用版本: 2. springboot项目搭建 可以集成在自己的项目里,也可以到 spring.io 生成一个项目 生成的话,如下…

如何在 macOS 上配置 MySQL 环境变量

如何在 macOS 上配置 MySQL 环境变量 步骤 1: 查找 MySQL 安装路径 打开终端,使用以下命令查找 mysql 的可执行文件路径: which mysql如果该命令没有返回结果,可以使用 find 命令: sudo find / -name "mysql" 2>/de…

Unity Excel导表工具转Lua文件

思路介绍 借助EPPlus读取Excel文件中的配置数据,根据指定的不同类型的数据配置规则来解析成对应的代码文本,将解析出的字符串内容写入到XXX.lua.txt文件中即可 EPPlus常用API //命名空间 using OfficeOpenXml;//Excel文件路径 var fileExcel new File…

【vue项目中如何实现一段文字跑马灯效果】

在Vue项目中实现一段文字跑马灯效果,可以通过多种方式实现,以下是几种常见的方法: 方法一:使用CSS动画和Vue数据绑定 这种方法通过CSS动画实现文字的滚动效果,并结合Vue的数据绑定动态更新文本内容。 步骤&#xff…

AcWing走迷宫-最短路问题-BFS求解

题目描述 给定一个 n * m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。 最初,有一个人位于左上角 (1, 1) 处,已知该人每次可以向上、下、左、右任…

go 错误处理 error

普通错误处理 // 包路径 package mainimport ("errors""fmt" )func sqrt(f1, f2 float64) (float64, error) {if f2 < 0 {return 0, errors.New("error: f2 < 0")}return f1 / f2, nil }func sqrt1(f1, f2 float64) {if re, err : sqrt(f…

MCU Bootloader具备什么条件才能跳转到APP程序

在MCU系统中&#xff0c;BootLoader&#xff08;Boot&#xff09;跳转到应用程序&#xff08;APP&#xff09;的条件通常由硬件和软件协同控制&#xff0c;核心逻辑是确保APP的完整性和合法性。以下是关键条件及流程&#xff1a; 1. 硬件启动模式选择 BOOT引脚电平&#xff1a…

LeeCode题库第二十八题

28.找出字符串第一个匹配项的下标 项目场景&#xff1a; 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 …

深入解析BFS算法:C++实现无权图最短路径的高效解决方案

在无权图中&#xff0c;广度优先搜索&#xff08;BFS&#xff09;是解决最短路径问题的高效算法。接下来博主从专业角度深入探讨其实现细节&#xff0c;并给出C代码示例&#xff1a; 目录 一、核心原理 二、算法步骤 三、C实现关键点 1. 数据结构 2. 边界检查 3. 路径回溯…

Plant Simulation培训教程-双深堆垛机立库仿真模块

原创 知行 天理智能科技 2025年01月03日 17:02 浙江 又到年终盘点的时候了&#xff0c;在这里我把之前录制的Plant Simulation培训教程-双深堆垛机立库仿真模块分享出来&#xff0c;有需要的可以直接联系我。 双深堆垛机立库仿真模块基于单深模块开发&#xff0c;适用于双深堆…

文本和语音互转

目录 1. 下载依赖ddl 2. 引入Pom依赖 3. java代码 二. 语音转文本 1. 下载中文语音转文本的模型 2. 引入pom依赖 3. java代码 4. 运行效果 1. 下载依赖ddl 文字转语音文件需要使用jacob的dll文件放在jdk安装目录下的bin文件夹下 点击官网下载录或者通过csdn下载 2. …

DeepSeek破局启示录:一场算法优化对算力霸权的降维打击

导言 2024年,中国AI大模型赛道杀出一匹黑马——深度求索(DeepSeek)。从数学推理能力超越GPT-4,到API价格仅为Claude 3.5的1/53,再到开源生态的快速扩张,DeepSeek的崛起不仅打破了“算力霸权”的固有认知,更揭示了AI行业底层逻辑的深刻变革。这场技术革命背后,隐藏着技术…

Python大数据可视化:基于python大数据的电脑硬件推荐系统_flask+Hadoop+spider

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 价格区间界面 用户信息界面 品牌管理 笔记本管理 电脑主机…

阿里云虚机的远程桌面登录提示帐户被锁定了

提示由于安全原因&#xff0c;帐户被锁定。 阿里云虚机ECS的远程桌面登录提示帐户被锁定了&#xff0c;只能登录阿里云处理 阿里云-计算&#xff0c;为了无法计算的价值 需选择通过VNC连接 然后计算机管理&#xff0c;解除帐户锁定即可。

Grok 使用指南

文章来源&#xff1a;Grok 漫游指南 | xAI Docs 欢迎&#xff01;在本指南中&#xff0c;我们将引导您了解使用 xAI API 的基础知识。 #第 1 步&#xff1a;创建 xAI 帐户 您需要一个 xAI 帐户才能访问 xAI API。在此处注册帐户。 创建账户后&#xff0c;您需要为其加载积分…

Node.js高频面试题精选及参考答案

目录 什么是 Node.js?它的主要特点有哪些? Node.js 的事件驱动和非阻塞 I/O 模型是如何工作的? 为什么 Node.js 适合处理高并发场景? Node.js 与传统后端语言(如 Java、Python)相比,有哪些优势和劣势? 简述 Node.js 的运行原理,包括 V8 引擎的作用。 什么是 Nod…

Servlet概述(Ⅰ)

目录 一、Servlet概述 演示 创建JavaWeb项目&#xff08;2017版本为例&#xff09; 1. 打开 IntelliJ IDEA 2. 选择项目类型 3. 配置框架 二、Servlet初识(熟练) 1.servlet说明 2.Servlet 接口方法 3.创建Servlet 4.JavaWeb请求响应流程 ​编辑 ​编辑 5.servlet…

Windows 小记 18 —— 子窗口继承父窗口的样式

子窗口会继承父窗口或者所有者窗口的一些样式。 当我们使用 CreateWindowExW 创建窗口后&#xff0c;指定其 HwndParent 参数时&#xff0c;或者通过 SetWindowLongPtr(vd->Hwnd, GWLP_HWNDPARENT, (LONG_PTR)vd->HwndParent); 指定所有者窗口时&#xff0c;子窗口将从父…

19、《Springboot+MongoDB整合:玩转文档型数据库》

SpringbootMongoDB整合&#xff1a;玩转文档型数据库 摘要&#xff1a;本文全面讲解Spring Boot与MongoDB的整合实践&#xff0c;涵盖环境搭建、CRUD操作、聚合查询、事务管理、性能优化等核心内容。通过15个典型代码示例&#xff0c;演示如何高效操作文档数据库&#xff0c;深…