20250112面试鸭特训营第20天

news2025/1/13 14:35:44

更多特训营笔记详见个人主页【面试鸭特训营】专栏

250112

1. TCP 和 UDP 有什么区别?

特性TCPUDP
连接方式面向连接(需要建立连接)无连接(无需建立连接)
可靠性可靠的,提供确认、重传机制不可靠,没有确认和重传机制
数据顺序保证数据按顺序到达不保证数据顺序或完整性
流量控制有流量控制(滑动窗口)没有流量控制
拥塞控制有拥塞控制(如慢启动、拥塞避免)没有拥塞控制
头部开销较大(最小20字节)较小(最小8字节)
速度较慢(需要建立连接,维护状态)较快(没有连接的建立和维护)
数据传输模式字节流传输模式数据包传输模式
错误校验提供错误检测和校验,保证数据正确提供简单的校验,不保证数据正确
重传机制自动重传丢失的数据包无重传机制,丢失的数据包无法恢复
应用场景需要可靠传输的场合
(如网页、文件传输)
实时性高、能容忍丢包的应用
(如视频流、语音通信)
协议列举HTTP 协议(3.0之前)
HTTPS 协议
FTP 协议
SMTP 协议
POP3 协议
HTTP 3.0 协议
DHCP 协议
DNS 协议

2. 说说 TCP 的三次握手和四次挥手?

客户端和服务端之间,通过三次握手建立连接,通过四次挥手断开连接

三次握手

在这里插入图片描述

  • 第 1 次:客户端 → 服务端,发送 SYN (同步序列编号)
    • A 表达了想和 B 建立连接的意愿
    • 说明客户端的发送能力是正常的
  • 第 2 次:服务端 → 客户端,发送 SYN-ACK (同步序列编号—确认)
    • B 表达了自己的意愿
    • 说明服务端的接收能力和发送能力都是正常的
  • 第 3 次:客户端 → 服务端,发送 ACK (确认)
    • A 告诉 B 他已经知道了 B 的意愿
    • 说明客户端的接收能力是正常的

为什么一定是三次

  • 如果只有一次握手
    • 客户端表达了意愿,但服务端没有表达意愿,无法直接建立联系
  • 如果只有两次握手
    • 客户端表达了意愿,服务端也表达了意愿,但不确定客户端有没有收到服务端的意愿,无法直接建立联系
  • 如有有四次握手
    • 只需要三次握手就能保证客户端和服务端都表达意愿且成功接收到对方的消息
    • 理论上三次及以上的握手都可以成功建立连接,但第四次握手就显得很冗余,浪费资源
    • 三次握手是保障双方信息对等,且能避免出现超时连接导致出现脏连接的最少握手次数

客户端和服务端之间,通过三次握手建立连接,通过四次挥手断开连接

四次挥手

在这里插入图片描述

  • 第 1 次:客户端 → 服务端,发送 FIN 包(FIN = 1,表示要关闭连接)
    • A 表达了想和 B 断开连接的意愿
  • 第 2 次:服务端 → 客户端,发送 ACK 包(ACK = 1,表示确认收到客户端的请求)
    • B 收到了 A 的意愿
  • 第 3 次:服务端 → 客户端,发送 FIN 包
    • B 将所有数据发送给 A
  • 第 4 次:客户端 → 服务端,发送 ACK 包(ACK = 1,表示确认收到服务端的请求)
    • A 收到了 B 的意愿

为什么一定是四次

  • 如果只有一次挥手
    • 客户端表达了意愿,但服务端没有表达意愿,无法直接建立联系
  • 如果只有两次挥手
    • 客户端表达了意愿,服务端收到了客户端的意愿,但服务端没有把数据反馈给客户端
  • 如果只有三次挥手
    • 客户端表达了意愿,服务端收到了客户端的意愿,服务端把数据反馈给客户端,但不确定客户端有没有收到数据信息,无法断开连接
  • 如有有五次挥手
    • 只需要四次挥手就能保证客户端和服务端都表达意愿且确定断开连接
    • 理论上四次及以上的挥手都可以成功建立连接,但第五次挥手就显得很冗余,浪费资源
    • 四次挥手是保障双方信息对等,且能避免出现数据丢失导致出现脏连接的最少挥手次数

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

TCP 是什么

  • TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议,广泛应用于计算机网络中,尤其是互联网中。
  • 它是互联网协议族(TCP/IP协议族)中的核心协议之一。
  • TCP用于在网络中实现端到端的通信,确保数据可靠地传输。

TCP的主要特点

  • 面向连接

    • 在发送数据之前,TCP必须先在通信双方之间建立一个连接。
    • 这个连接是通过三次握手过程来实现的,确保双方都准备好进行数据传输。
  • 可靠性

    • TCP通过数据包的序号和确认机制来保证数据按顺序到达并且没有丢失。
    • 如果数据包丢失或出错,TCP会自动重传。
  • 流量控制

    • TCP使用流量控制机制来避免发送方发送过多的数据,超出接收方的处理能力。
    • 它通过滑动窗口机制来控制双方的数据流量,确保接收方能够处理所有接收到的数据。
  • 拥塞控制

    • TCP能够检测网络中的拥塞并通过调整数据发送速率来缓解网络负担。
    • 它采用多种算法(如慢启动、拥塞避免、快速重传和快速恢复)来控制数据流的发送速度。
  • 有序数据传输

    • TCP确保数据按发送顺序到达接收方。
    • 即使数据包在网络中以不同的路径传输,TCP也会重新排列接收到的数据包,使其按正确的顺序交付给应用程序。
  • 全双工通信

    • TCP支持全双工通信,即双方可以同时发送和接收数据。

TCP 解决的问题

TCP 通过提供可靠性传输、流量控制、拥塞控制和连接管理,解决了数据在不可靠 IP 网络上的传输问题。

  • 可靠性传输
    • TCP 确保数据包在网络传输过程中不丢失、不重复,并且按顺序到达。
    • 通过确认(ACK)、重传机制以及序列号,TCP 能够保证数据在不可靠的 IP 网络上可靠传输。
  • 流量控制
    • TCP 通过滑动窗口机制调节发送方的数据发送速率,防止接收方因为处理能力有限而被数据流淹没。
    • 滑动窗口用于动态调整可以发送的数据量。接收方通过发送窗口大小通告,指示发送方可以发送的最大数据量。
    • 这种机制不仅避免了接收方的溢出,还提高了数据传输效率。
  • 拥塞控制
    • TCP 通过拥塞避免算法 如慢启动、拥塞避免、快速重传和快速恢复 来防止网络过载,确保网络资源的公平使用和稳定性。
    • 慢启动:逐步增加发送窗口,直到检测到网络的拥塞点。
    • 拥塞避免:当达到网络容量后,逐渐增加窗口以避免拥塞。
    • 快速重传和快速恢复:在检测到包丢失时,立即进行重传并调整发送窗口,快速恢复到正常传输状态。
  • 连接管理
    • TCP 是面向连接的协议,采用三次握手(建立连接)和四次挥手(断开连接)机制来管理会话,确保通信的可靠性和状态的同步。
    • 三次握手:建立连接时,双方通过三次信息交换( SYN , SYN-ACK , ACK)来确保双方都准备好进行数据传输,并协商参数(如初始序列号)。
    • 四次挥手:断开连接时,通过四次消息交换来确保数据传输完成且资源可以安全释放,防止未传输的数据丢失。

TCP的工作过程

  • 建立连接(三次握手)

    在这里插入图片描述

    • 在通信双方之间建立连接时,TCP使用三次握手来确认双方都能正常通信。
      • 第一步:客户端发送一个SYN(同步)信号,表示请求建立连接。
      • 第二步:服务器接收到 SYN 信号后,回复一个 SYN + ACK(确认)信号,表示同意连接。
      • 第三步:客户端接收到 SYN + ACK 后,再发送一个 ACK(确认)信号,表示连接建立成功。
  • 数据传输(甜蜜生活ing)

    • 一旦连接建立,TCP开始传输数据。数据以数据段的形式被封装,其中包含序列号、确认号、校验和等信息。
    • 在传输过程中,发送方会给每个数据包分配一个序列号,接收方会对每个收到的数据包发送确认应答(ACK)。如果发送方在一定时间内没有收到确认,它会重传数据包。
  • 连接终止(四次挥手)

    在这里插入图片描述

    • 当数据传输完成时,连接将被终止。这个过程叫做“四次挥手”:
      • 第一步:客户端发送一个FIN(结束)信号,表示数据发送完毕,准备关闭连接。
      • 第二步:服务器收到FIN信号后,确认并回复一个ACK信号。
      • 第三步:服务器发送FIN信号,表示它也准备关闭连接。
      • 第四步:客户端收到服务器的FIN信号后,回复ACK信号,连接最终关闭。

TCP报文结构

  • TCP报文由多个字段组成,具体如下
字段名含义
源端口号发送端的端口
目标端口号接收端的端口
序列号用于数据重排序,保证数据的顺序
确认号表示接收到的数据的下一序列号
数据偏移数据在报文中的起始位置
标志位包括SYN、ACK、FIN等标志,指示连接的状态
窗口大小表示接收方的缓冲区大小,用于流量控制
校验和用于错误检测,保证数据的完整性

TCP 为什么可靠

TCP 之所以被称为可靠的协议,主要是因为它提供了以下功能

  • 数据完整性:使用校验和确保数据在传输中没有被破坏。

  • 数据顺序:保证数据按顺序到达接收方,且接收方能够重新排序乱序到达的数据。

  • 流量控制:通过滑动窗口机制避免接收方溢出。

  • 拥塞控制:通过动态调整发送速率避免网络拥塞。

  • 重传机制:确保丢失的数据会被重新传输。

  • 可靠的连接建立和关闭:通过三次握手和四次挥手确保连接的正确建立和断开。

  • 防止数据重复:通过序列号和确认机制防止重复数据的接收。

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

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

相关文章

深入理解 C 语言中浮点型数据在内存中的存储

文章目录 一、浮点型数据存储格式(IEEE 754 标准)二、举例说明单精度浮点数存储过程三、绘图说明四、双精度浮点数存储示例(以1.5为例) 在 C 语言的世界里,数据类型丰富多样,而浮点型数据用于表示实数&…

使用uniapp 微信小程序一些好用的插件分享

总结一下自己在开发中遇见的一问题,通过引入组件可以快速的解决 1.zxz-uni-data-select 下拉框选择器(添加下拉框检索,多选功能,多选搜索功能,自定义 下拉框插件,使用这个的原因是因为 uniui uview 组件库下拉框太…

kafka消费堆积问题探索

背景 我们的商城项目用PHP写的,原本写日志方案用的是PHP的方案,但是,这个方案导致资源消耗一直降不下来,使用了20个CPU。后面考虑使用通过kafka的方案写日志,商城中把产生的日志丢到kafka中,在以go写的项目…

使用conda出现requests.exceptions.HTTPError 解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

智能化文档开发(DI)

这个文档涉及到多模态(文本、发票、订单、语音) 对于普通的文本,我们希望对某些实体的某些属性挖空生成文档模版,并根据预设字段填空最后生成正式文件对于发票、订单,我们想提取它的字段信息,写入DB对于一些…

RAID储存技术

RAID独立磁盘冗余技术是一种把2个或者多个HDD或SSD合并为一个协调的存储单元或列阵,从而预防数据丢失的技术,其最早由加州大学伯克利分校的计算机科学家David Patterson、Garth Gibson和Randy Katz在1987年提出。他们的研究论文“关于RAID的论证”提出了…

Java Web开发基础:HTML的深度解析与应用

文章目录 前言🌍一.B/S 软件开发架构简述🌍二.HTML 介绍❄️2.1 官方文档❄️2.2 网页的组成❄️2.3 HTML 是什么❄️2.4html基本结构 🌍三.HTML标签1.html 的标签/元素-说明2. html 标签注意事项和细节3.font 字体标签4.标题标签5.超链接标签…

使用 WPF 和 C# 绘制图形

绘图困难 此示例展示了如何在 WPF 和 C# 中绘制图形。绘制图形总是很棘手,因为您通常需要在至少两个不同的坐标系中工作。首先,您要为图形使用世界坐标。例如,您可能希望 X 值的范围为 2000 年至 2020 年,Y 值的范围为 10,000 美元…

年度技术突破奖|中兴微电子引领汽车芯片新变革

随着以中央计算区域控制为代表的新一代整车电子架构逐步成为行业主流,车企在电动化与智能化之后,正迎来以架构创新为核心的新一轮技术竞争。中央计算SoC,作为支撑智驾和智舱高算力需求的核心组件,已成为汽车电子市场的重要新增量。…

【JVM-2.3】深入解析JVisualVM:Java性能监控与调优利器

在Java应用的开发和运维过程中,性能监控与调优是不可或缺的环节。无论是排查内存泄漏、分析CPU瓶颈,还是优化线程使用,开发者都需要借助一些强大的工具来辅助诊断。JVisualVM 正是这样一款由Oracle提供的免费工具,它集成了多种性能…

filestream安装使用全套+filebeat的模块用法

1 filestream介绍 官方宣布:输入类型为log在filebeat7.16版本已经弃用了 Filestream 是 Filebeat 中的一种 输入类型(Input),用于处理日志文件的读取。它是为了取代 Filebeat 中传统的 log 输入(Input)设…

超燃预告!Origin百图绘制系列即将登场

Hello,大家好 这里是练习时长两年半的菜狗~ 持续更新各种竞赛,科研,保研,学习干货ing 回想刚开始打比赛那会,啥都不懂,就从用 Excel 画图起步,绘制的图形实在太难看。后来运用 Matlab&#xf…

八、系统托盘与配置面板

没有人会把你变得越来越好,时间和经历只是陪衬。 支撑你变得越来越好的,是你自己坚强的意志、修养、品行、以及不断的反思和经验。 人生最好的贵人,就是努力向上的自己。 一、系统托盘 1、资源文件夹 新建资源文件夹,我们需要把…

uniapp 之 uni-forms校验提示【提交的字段[‘xxx‘]在数据库中并不存在】解决方案

目录 场景问题代码结果问题剖析解决方案 场景 uni-forms官方组件地址 使用uniapp官方提供的组件,某个表单需求,单位性质字段如果是高校,那么工作单位则是高校的下拉选择格式,单位性质如果是其他的类型,工作单位则是手动…

Java面试核心知识4

公平锁与非公平锁 公平锁(Fair) 加锁前检查是否有排队等待的线程,优先排队等待的线程,先来先得 非公平锁(Nonfair) 加锁时不考虑排队等待问题,直接尝试获取锁,获取不到自动到队尾…

基于 SSH 的任务调度系统

文末附有完整项目代码 在当今科技飞速发展的时代,任务调度系统的重要性日益凸显。本文将详细介绍一个基于 SSH(SpringStruts2Hibernate)的任务调度系统的设计与实现。 一、系统概述 本系统旨在改变传统人工任务调度方式,通过计算…

我的128天创作之路:回顾与展望

大家好呀!今天来和你们分享一下我的创作历程😁。 一、机缘 最开始创作呢,是因为在学习 C 的 STL 时,像 string、list、vector 这些模板可把我折腾得够呛,但也让我学到了超多东西!我就想,要是把我…

性能测试工具Jmeter中的FTP脚本开发

FTP文件传输协议是TCP/IP协议组织中的常用协议之一,主要用在internet上双向传输文件。FTP协议具有客户端和服务器端两个部分组成部分,具有上传与下载两种功能。Jmeter也提供了FTP请求的测试支持,实现了上传和下载功能测试。 对于上图的FTP请求…

【C++】string的关系运算与比较分析

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯基础知识:C 中的 string 关系运算器1. 关系运算器概述2. 字符串比较的本质 💯代码解析与扩展代码例一:相等比较代码解析输出 代码例二&a…

mysql本地安装和pycharm链接数据库操作

MySQL本地安装和相关操作 Python相关:基础、函数、数据类型、面向、模块。 前端开发:HTML、CSS、JavaScript、jQuery。【静态页面】 Java前端; Python前端; Go前端 -> 【动态页面】直观: 静态,写死了…