20250112面试鸭特训营第20天

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

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 之所以被称为可靠的协议,主要是因为它提供了以下功能

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

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

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

导出文件,能够导出但是文件打不开

背景: 在项目开发中,对于列表的查询,而后会有导出功能,这里导出的是一个excell表格。实现了两种,1.导出的文件,命名是前端传输过去的;2.导出的文件,命名是根据后端返回的文件名获取的…

马斯克的Grok-2 Beta APP在苹果应用商店上限了,Grok-2安装尝鲜使用教程

马斯克的Grok-2 Beta APP 已经上线苹果商城了,移动端的Grok挺好用的!无需登录即可使用! (文末有安装教程) 实测之后,Grok-2 绘画方面个人感觉比GPT-4的绘画还要强一些。而且速度还挺快,可以多次…

《机器学习》——sklearn库中CountVectorizer方法(词频矩阵)

CountVectorizer方法介绍 CountVectorizer 是 scikit-learn 库中的一个工具,它主要用于将文本数据转换为词频矩阵,而不是传统意义上的词向量转换,但可以作为词向量转换的一种基础形式。用于将文本数据转换为词频矩阵,它是文本特征…

CV 图像处理基础笔记大全(超全版哦~)!!!

一、图像的数字化表示 像素 数字图像由众多像素组成,是图像的基本构成单位。在灰度图像中,一个像素用一个数值表示其亮度,通常 8 位存储,取值范围 0 - 255,0 为纯黑,255 为纯白。例如,一幅简单的…

支持向量回归(SVR:Support Vector Regression)用于A股数据分析、预测

简单说明 支持向量回归是一种用来做预测的数学方法,属于「机器学习」的一种。 它的目标是找到一条「最合适的线」,能够大致描述数据点的趋势,并允许数据点离这条线有一定的误差(不要求所有点都完全落在这条线上)。 可以把它想象成:找到一条「宽带」或「隧道」,大部分…

ollama教程(window系统)

前言 在《本地大模型工具哪家强?对比Ollama、LocalLLM、LM Studio》一文中对比了三个常用的大模型聚合工具优缺点,本文将详细介绍在window操作系统下ollama的安装和使用。要在 Windows 上安装并使用 Ollama,需要依赖 NVIDIA 显卡&#xff0c…

Flink系统知识讲解之:容错与State状态管理

Flink系统知识之:容错与State状态管理 状态在Flink中叫作State,用来保存中间计算结果或者缓存数据。根据是否需要保存中间结果,分为无状态计算和有状态计算。对于流计算而言,事件持续不断地产生,如果每次计算都是相互…

DolphinScheduler自身容错导致的服务器持续崩溃重大问题的排查与解决

01 问题复现 在DolphinScheduler中有如下一个Shell任务: current_timestamp() { date "%Y-%m-%d %H:%M:%S" }TIMESTAMP$(current_timestamp) echo $TIMESTAMP sleep 60 在DolphinScheduler将工作流执行策略设置为并行: 定时周期调度设置…

ASP.NET Core 实现微服务 - Elastic APM

这次要给大家介绍的是Elastic APM ,一款应用程序性能监控组件。APM 监控围绕对应用、服务、容器的健康监控,对接口的调用链、性能进行监控。在我们实施微服务后,由于复杂的业务逻辑,服务之间的调用会像蜘蛛网一样复杂。有了调用链…

25/1/12 嵌入式笔记 学习esp32

了解了一下位选线和段选线的知识: 位选线: 作用:用于选择数码管的某一位,例如4位数码管的第1位,第2位) 通过控制位选线的电平(高低电平),决定当前哪一位数码管处于激活状…

IMX6U Qt 开发环境

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、交叉编译 1. 安装通用 ARM 交叉编译工具链 2. 安装 Poky 交叉编译工具链 二、编译出厂源码 1. U-boot 2. 内核和模块 3. 编译出厂 Qt GUI 综合 Demo 前言…

【Oracle专栏】2个入参,生成唯一码处理

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 业务需要:2个参数,如 aidbankid ,两个值是联合主键,需要生成一个固定唯一码,长度有限制32位,为了…

跨界融合:人工智能与区块链如何重新定义数据安全?

引言:数据安全的挑战与现状 在信息化驱动的数字化时代,数据已成为企业和个人最重要的资产之一。然而,随着网络技术的逐步优化和数据量的爆发式增长,数据安全问题也愈变突出。 数据安全现状:– 数据泄露驱动相关事件驱…

给DevOps加点料:融入安全性的DevSecOps

从前,安全防护只是特定团队的责任,在开发的最后阶段才会介入。当开发周期长达数月、甚至数年时,这样做没什么问题;但是现在,这种做法现在已经行不通了。 采用 DevOps 可以有效推进快速频繁的开发周期(有时…

CDP中的Hive3之Hive Metastore(HMS)

CDP中的Hive3之Hive Metastore(HMS) 1、CDP中的HMS2、HMS表的存储(转换)3、HWC授权 1、CDP中的HMS CDP中的Hive Metastore(HMS)是一种服务,用于在后端RDBMS(例如MySQL或PostgreSQL&a…

【算法】判断一个链表是否为回文结构

问: 给定一个单链表的头节点head,请判断该链表是否为回文结构 例: 1 -> 2 -> 1返回true;1 -> 2 -> 2 -> 1返回true;15 -> 6 -> 15返回true 答: 笔试:初始化一个栈用来…

Python双指针

双指针 双指针:在区间操作时,利用两个下标同时遍历,进行高效操作 双指针利用区间性质可以把 O ( n 2 ) O(n^2) O(n2) 时间降低到 O ( n ) O(n) O(n) 反向扫描 反向扫描: l e f t left left 起点,不断往右走&…

VMware虚拟机安装Home Assistant智能家居平台并实现远程访问保姆级教程

目录 前言 1. 安装Home Assistant 前言 本文主要介绍如何在windows 10 上用VMware Workstation 17 Pro搭建 Home Assistant OS Host os version:Windows 10 Pro, 64-bit (Build 19045.5247) 10.0.19045 VMware version:VMware Workstation 17 Pro 1. 安装Home …

【MySQL】SQL菜鸟教程(一)

1.常见命令 1.1 总览 命令作用SELECT从数据库中提取数据UPDATE更新数据库中的数据DELETE从数据库中删除数据INSERT INTO向数据库中插入新数据CREATE DATABASE创建新数据库ALTER DATABASE修改数据库CREATE TABLE创建新表ALTER TABLE变更数据表DROP TABLE删除表CREATE INDEX创建…

【Java回顾】Day5 并发基础|并发关键字|JUC全局观|JUC原子类

JUC全称java.util.concurrent 处理并发的工具包(线程管理、同步、协调) 一.并发基础 多线程要解决什么问题?本质是什么? CPU、内存、I/O的速度是有极大差异的,为了合理利用CPU的高性能,平衡三者的速度差异,解决办法…