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

news2025/5/16 18:20:49

一. 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需客户端真实响应,过滤无效请求。

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

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

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

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

相关文章

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

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

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

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

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

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

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

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

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

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

CodeBuddy编程新范式

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

小刚说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与…

网络编程epoll和udp

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

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

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

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”。 ④…

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

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

SpringBoot中的Lombok库

一&#xff09;Lombok库简介 Lombok是一个Java库&#xff0c;通过注解的方式简化代码编写&#xff0c;减少样板代码。它能够自动生成getter、setter、构造函数、toString等方法&#xff0c;提升开发效率。Lombok只是一个编译阶段的库&#xff0c;因此不会影响程序的运行。 二…

AI中的MCP是什么?MCP的作用及未来方向预测 (使用go-zero 快速搭建MCP服务器)

AI是当下最热的风。在当今AI技术飞速发展的时代&#xff0c;AI的应用已经渗透到我们日常生活的方方面面。然而&#xff0c;随着AI系统的复杂性不断增加&#xff0c;如何让AI具备更强的自主性和灵活性成为了业界关注的焦点。这就引出了Model Context Protocol&#xff08;MCP&am…

mac安装cast

背景 pycharm本地运行脚本时提示cast没有安装 问题原因 脚本尝试调用cast命令&#xff08;以太坊开发工具foundry中的子命令&#xff09;&#xff0c;但您的系统未安装该工具。 从日志可见&#xff0c;错误发生在通过sysutil.py执行shell命令时。 解决方案 方法1&#xf…

一个简单点的js的h5页面实现地铁快跑的小游戏

以下是一个简化版的"地铁快跑"小游戏H5页面实现。这个游戏包含基本的角色跳跃、障碍物生成和计分系统&#xff0c;使用Canvas绘图技术实现。 完整源码 登录后复制 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-…

Hugging Face 中 LeRobot 使用的入门指南

相关源文件 .github/ISSUE_TEMPLATE/bug-report.yml .github/PULL_REQUEST_TEMPLATE.md README.md examples/1_load_lerobot_dataset.py examples/2_evaluate_pretrained_policy.py examples/3_train_policy.py lerobot/scripts/eval.py lerobot/scripts/train.py 本页面提供 …

零基础入门Hadoop:IntelliJ IDEA远程连接服务器中Hadoop运行WordCount

今天我们来聊一聊大数据&#xff0c;作为一个Hadoop的新手&#xff0c;我也并不敢深入探讨复杂的底层原理。因此&#xff0c;这篇文章的重点更多是从实际操作和入门实践的角度出发&#xff0c;带领大家一起了解大数据应用的基本过程。我们将通过一个经典的案例——WordCounter&…