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

嵌软面试每日一阅----通信协议篇(二)之TCP

一. TCP和UDP的区别

  1. 可靠性

    TCP:✅ 可靠传输(三次握手 + 重传机制)

          UDP:❌ 不可靠(可能丢包)

  1. 连接方式

    • TCP:面向连接(需建立/断开连接)

    • UDP:无连接(直接发送数据包)

  2. 传输效率

    • TCP:慢(需保证可靠性)

    • UDP:快(无额外控制开销)

  3. 适用场景

    • TCP:文件传输(FTP)、邮件、网页(HTTP)

    • UDP:实时视频、在线游戏、直播(DNS、VoIP)

⚡ 核心结论

  • 要可靠 → TCP(牺牲速度保数据完整)

  • 要速度 → UDP(牺牲可靠保实时性)!

二. TCP通信如何保证通信的可靠性?

🔥 TCP可靠性极简核心机制

  1. 数据分段与重组
    → 按序切割数据包,接收端按序列号重组,确保顺序正确。

  2. 确认应答(ACK)
    → 接收方每收一包必回ACK,未收到ACK则触发重传。

  3. 超时重传
    → 动态计算超时时间,ACK超时自动重发,直到确认成功。

  4. 流量控制(滑动窗口)
    → 窗口大小动态调整,匹配接收方处理能力,防数据堆积。

  5. 拥塞控制
    → 慢启动 + 拥塞避免 + 快速恢复,动态降速防网络过载。

  6. 数据校验和
    → 每包计算校验和,校验失败则丢弃并重传,确保数据完整。

  7. 连接管理
    → 三次握手建连(防半开连接) + 四次挥手断连(保数据传完)。

  8. 序列号机制
    → 包头含唯一序列号,识别丢失/重复包,保证数据不丢不乱。

⚡ 终极目标
所有机制协同 → 数据不丢失、不重复、不乱序,实现可靠传输!

一句话总结:TCP靠 ACK重传保到达、滑动窗口控流量、拥塞算法防堵网、校验序列保完整

三. TCP为什么是三次握手?

目标:确保双方发送和接收能力正常,防止失效请求误触发连接。

流程图


步骤核心

  1. 第一次握手(SYN):客户端发起连接,证明客户端发送能力正常

  2. 第二次握手(SYN+ACK):服务端确认收到并同意连接,证明服务端收发能力正常

  3. 第三次握手(ACK):客户端确认服务端响应,证明客户端接收能力正常

⚡ 本质:三次握手后,双向通信通道确认可靠

四. 为什么是四次挥手?

目标:全双工通信需双方独立关闭通道,确保数据传完且无残留。

流程图

步骤核心

  1. 第一次挥手(FIN):客户端关闭发送通道(仍可接收数据)。

  2. 第二次挥手(ACK):服务端确认关闭请求,但可能继续发送剩余数据

  3. 第三次挥手(FIN):服务端数据发完后关闭发送通道

  4. 第四次挥手(ACK):客户端确认,双方彻底断开连接

⚡ 本质:全双工需独立关闭,四次保证双方数据传完且无残留

五. TCP两次握手可能引发的问题

  1. 资源浪费与半开连接

    • 问题:若客户端首次SYN因网络延迟未到达服务器,客户端超时重发SYN并完成两次握手。当延迟的SYN最终到达时,服务器误认为新连接请求,分配资源等待数据 → 资源浪费

    • 结果:服务器维护大量无效半开连接,消耗内存和端口资源。

  2. 无法防止历史连接干扰

    • 问题:客户端因网络波动发送多个SYN,旧的SYN可能延迟到达服务器。两次握手下,服务器会接受所有SYN请求,导致重复建立连接

    • 结果:同一端口多连接竞争,数据包错乱或覆盖。

  3. 双向通信能力未完全确认

    • 问题:两次握手仅确认了客户端→服务器的发送能力服务器→客户端的收发能力,但未验证客户端←服务器的接收能力

    • 结果:客户端可能未正确接收服务器的初始数据,导致丢包或乱序。

  4. 无法抵御SYN洪泛攻击

    • 问题:攻击者伪造大量SYN请求,服务器仅需两次握手即分配资源 → 服务器资源耗尽

    • 对比三次握手:第三次ACK需客户端真实响应,过滤无效请求。

⚡ 核心结论:三次握手通过双向能力验证 + 序列号同步,解决两次握手的资源泄露、历史连接干扰及安全性缺陷,确保可靠连接建立。

注:文章随手记录,如有错误,评论区交流

相关文章:

嵌软面试每日一阅----通信协议篇(二)之TCP

一. TCP和UDP的区别 可靠性 TCP:✅ 可靠传输(三次握手 重传机制) UDP:❌ 不可靠(可能丢包) 连接方式 TCP:面向连接(需建立/断开连接) UDP:无连接&#xff0…...

机器学习 --- 模型选择与调优

机器学习 — 模型选择与调优 文章目录 机器学习 --- 模型选择与调优一,交叉验证1.1 保留交叉验证HoldOut1.2 K-折交叉验证(K-fold)1.3 分层k-折交叉验证Stratified k-fold 二,超参数搜索三,鸢尾花数据集示例四,现实世界数据集示例…...

《Python星球日记》 第58天:Transformer 与 BERT

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、引言一、Transformer 架构简介1. 自注意力机制(Self-Attention)工作原理2. 多头注意力与位置编码多头注意力机制位置编码二、BERT 的结构…...

2900. 最长相邻不相等子序列 I

2900. 最长相邻不相等子序列 I class Solution:def getLongestSubsequence(self, words: List[str], groups: List[int]) -> List[str]:n len(groups) # 获取 groups 列表的长度ans [] # 初始化一个空列表,用于存储结果for i, g in enumerate(groups): # 遍…...

AGI大模型(15):向量检索之调用ollama向量数据库

这里介绍将向量模型下载到本地,这里使用ollama,现在本地安装ollama,这里就不过多结束了。直接从下载开始。 1 下载模型 首先搜索模型,这里使用bge-large模型,你可以根据自己的需要修改。 点击进入,复制命令到命令行工具中执行。 安装后查看: 2 代码实现 先下载ollama…...

Python网络请求利器:urllib库深度解析

一、urllib库概述 urllib是Python内置的HTTP请求库,无需额外安装即可使用。它由四个核心模块构成: ​​urllib.request​​:发起HTTP请求的核心模块​​urllib.error​​:处理请求异常(如404、超时等)​​…...

什么是Agentic AI(代理型人工智能)?

什么是Agentic AI(代理型人工智能)? 一、概述 Agentic AI(代理型人工智能)是一类具备自主决策、目标导向性与持续行动能力的人工智能系统。与传统AI系统依赖外部输入和显式命令不同,Agentic AI在设定目标…...

day 17 无监督学习之聚类算法

一、聚类流程 1. 利用聚类发现数据模式 无监督算法中的聚类,目的就是将数据点划分成不同的组或 “簇”,使得同一簇内的数据点相似度较高,而不同簇的数据点相似度较低,从而发现数据中隐藏的模式。 2. 对聚类后的类别特征进行可视…...

《Python星球日记》 第68天:BERT 与预训练模型

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、BERT模型基础1. 什么是BERT?2. BERT 的结构3.预训练和微调对比二、BERT 的预训练任务1. 掩码语言模型 (MLM)2. 下一句预测 (NSP)三、微调 …...

Spring 集成 SM4(国密对称加密)

Spring 集成 SM4(国密对称加密)算法 主要用于保护敏感数据,如身份证、手机号、密码等。 下面是完整集成步骤(含工具类 使用示例),采用 Java 实现(可用于 Spring Boot)。 一、依赖引…...

时源芯微| KY键盘接口静电浪涌防护方案

KY键盘接口静电浪涌防护方案通过集成ESD保护元件、电阻和连接键,形成了一道有效的防护屏障。当键盘接口受到静电放电或其他浪涌冲击时,该方案能够迅速将过电压和过电流引导至地,从而保护后续电路免受损害。 ESD保护元件是方案中的核心部分&a…...

CodeBuddy编程新范式

不会写?不想写? 腾讯推出的CodeBuddy彻底解放双手。 示例 以下是我对CodeBuddy的一个小体验。 我只用一行文字对CodeBuddy说明了一下我的需求,剩下的全部就交给了CodeBuddy,我需要做的就是验收结果即可。 1.首先CodeBuddy会对任…...

ArcGIS+InVEST+RUSLE:水土流失模拟与流域管理的高效解决方案;水土保持专题地图制作

在全球生态与环境面临严峻挑战的当下,水土流失问题已然成为制约可持续发展的重要因素之一。水土流失不仅影响土地资源的可持续利用,还对生态环境、农业生产以及区域经济发展带来深远影响。因此,科学、精准地模拟与评估水土流失状况&#xff0…...

小刚说C语言刷题—1088求两个数M和N的最大公约数

1.题目描述 求两个正整数 M 和 N 的最大公约数(M&#xff0c;N都在长整型范围内&#xff09; .输入 输入一行&#xff0c;包括两个正整数。 输出 输出只有一行&#xff0c;包括1个正整数。 样例 输入 45 60 输出 15 2.参考代码(C语言版) #include <stdio.h> …...

【LLIE专题】基于码本先验与生成式归一化流的低光照图像增强新方法

GLARE: Low Light Image Enhancement via Generative Latent Feature based Codebook Retrieval&#xff08;2024&#xff0c;ECCV&#xff09; 专题介绍一、研究背景二、GLARE方法阶段一&#xff1a;正常光照代码本学习&#xff08;Normal-Light Codebook Learning&#xff09…...

[MySQL数据库] SQL优化

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

AWS VPC 核心笔记(小白向)

AWS VPC 核心笔记&#xff08;小白向&#xff09; 一、核心组成&#xff1a;VPC 云上的“私有网络” 组件名类比说明VPC小区你在 AWS 上自定义的私有网络范围子网&#xff08;Subnet&#xff09;小区里的楼子网是 VPC 的一个切分区域&#xff0c;决定资源的网络分布&#xff…...

召回11:地理位置召回、作者召回、缓存召回

GeoHash 召回 属于地理位置召回&#xff0c;用户可能对附近发生的事情感兴趣。GeoHash 是一种对经纬度的编码&#xff0c;地图上每个单位矩形的 GeoHash 的前几位是相同的&#xff0c;GeoHash 编码截取前几位后&#xff0c;将相同编码发布的内容按时间顺序&#xff08;先是时间…...

【AI News | 20250515】每日AI进展

AI Repos 1、helix-db 专用于RAG以及AI应用的一款高性能图向量数据库&#xff1a;HelixDB&#xff0c;比Neo4j快1000倍&#xff0c;比TigerGraph快100倍&#xff0c;向量搜索性能和Qdrant相当。原生支持图形和矢量数据类型&#xff0c;比较适合RAG和AI应用&#xff0c;像知识图…...

网络编程epoll和udp

# epoll模型核心要点## 1. epoll核心概念### 1.1 高效IO多路复用- 监视列表与激活列表分离- 内核使用红黑树存储描述符- 边缘触发模式(EPOLLET)支持### 1.2 事件触发机制- **水平触发(LT)**&#xff1a;- 默认模式&#xff0c;类似select/poll- 数据未读完持续触发事件- **边缘…...

elementUI如何动态增减表单项

设置prop的字段&#xff1a;:prop"configs.${i}.platform" <template><el-dialogtitle"编辑配置":close-on-click-modal"false":before-close"beforeClose":visible.sync"visible"v-if"visible"class&q…...

【iOS】源码阅读(四)——isa与类关联的原理

文章目录 前言OC对象本质探索clang探索对象本质objc_setProperty源码探索 cls与类的关联原理为什么说bits与cls为互斥关系isa的类型isa_t原理探索isa与类的关联 总结 前言 本篇文章主要是笔者在学习和理解类与isa的关联关系时所写的笔记。 OC对象本质探索 在学习和理解类与isa…...

sql server 2019 将单用户状态修改为多用户状态

记录两种将单用户状态修改为多用户状态&#xff0c;我曾经成功过的方法&#xff0c;供参考 第一种方法 USE master; GO -- 终止所有活动连接 DECLARE kill_connections NVARCHAR(MAX) ; SELECT kill_connections KILL CAST(session_id AS NVARCHAR(10)) ; FROM sys.dm_ex…...

uniapp引入七鱼客服微信小程序SDK

小程序引入七鱼sdk 1.微信公众平台引入2.代码引入3.在pagesQiyu.vue初始化企业appKey4.跳转打开七鱼客服 1.微信公众平台引入 账号设置->第三方设置->添加插件->搜索 QIYUSDK ->添加 2.代码引入 在分包中引入插件 "subPackages": [{"root":…...

uniapp 常用 UI 组件库

1. uView UI 特点&#xff1a; 组件丰富&#xff1a;提供覆盖按钮、表单、图标、表格、导航、图表等场景的内置组件。跨平台支持&#xff1a;兼容 App、H5、小程序等多端。高度可定制&#xff1a;支持主题定制&#xff0c;组件样式灵活。实用工具类&#xff1a;提供时间、数组操…...

SCI写作开挂!把Grammarly语法修订嵌入word

详细分享如何把Grammarly嵌入Word&#xff0c;实现英文写作时的实时语法校改。 ①进入Grammarly官网 ②点击右上角的“Get Grammarly Its free”会直接跳转到注册或者登录界面&#xff0c;如果还没有账号先注册。 ③注册或登录后进入这个页面&#xff0c;点击“Support”。 ④…...

PostgreSQL 配置设置函数

PostgreSQL 配置设置函数 PostgreSQL 提供了一组配置设置函数&#xff08;Configuration Settings Functions&#xff09;&#xff0c;用于查询和修改数据库服务器的运行时配置参数。这些函数为数据库管理员提供了动态管理数据库配置的能力&#xff0c;无需重启数据库服务。 …...

2025年5月-信息系统项目管理师高级-软考高项-成本计算题

成本计算题挣值分析、成本计算题如何学?1、PV&#xff0c;EV&#xff0c;AC需要理解&#xff0c;根据题目给出的一些个条件需要求得这些值;2、CV&#xff0c;SV&#xff0c;CPI&#xff0c;SPI公式必须记住&#xff0c;需要根据求得的值判断项目的进度和成本的执行情况&#x…...

力扣-236.二叉树的最近公共祖先

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以…...

Go 中闭包的常见使用场景

在 Go 中&#xff0c;闭包&#xff08;Closure&#xff09; 是一个函数值&#xff0c;它引用了其定义时所在作用域中的变量。也就是说&#xff0c;闭包可以访问并修改外部作用域中的变量。 Go 中闭包的常见使用场景 ✅ 1. 封装状态&#xff08;无须结构体&#xff09; 闭包可…...