TCP/UDP协议原理和区别 笔记

从简单到难吧

区别就是TCP一般用于安全稳定的需求,UDP一般用于不那么需要完全数据的需求,比如说直播,视频等。

再然后就是TPC性能慢于UDP。

再然后我们看TCP的原理(三次握手,数据传输,四次挥手)

首先是三次握手,然后我在后面会问二次握手可不可以,可能面试会被问到。

三次握手:

(第一次)客户端向服务端发起请求,我要连接,然后客户端发送syn包给服务端。

(第二次)服务端发送之前的syn和ack包给客户端

(第三次)客户端收到服务端发给我的syn和自己的syn,如果一致了那么给服务端发起ack。

为什么不是两次握手?

如果是两次的话,客户端给服务端的syn1包卡住了,那么客户端会再发一个syn2包给服务端,服务端给客户端连接,但是这时候syn1包又好了,再次请求给服务端,这时候服务端会再次连接,最后导致客户端认为是一个连接,但是服务端认为是两个。就会出现问题。

数据传输:

  • 分段与编号:应用程序交给 TCP 的数据可能很大,TCP 会将其分成合适大小的数据段(报文段)。每个数据段都有一个序列号,用于标识数据在字节流中的位置 。比如发送一个大文件,会被分成多个数据段,每个数据段都有序列号,便于接收方按序重组 。
  • 确认与重传:发送方发送数据段后,启动一个定时器并等待接收方的确认(ACK)。接收方收到数据段后,会检查数据是否正确,若正确则向发送方发送确认报文,其中确认号表示期望接收的下一个数据段的序列号 。如果发送方在定时器超时前未收到确认,就会重传该数据段 。
  • 流量控制:接收方通过 TCP 报文中的窗口字段告知发送方自己当前的接收缓冲区还能容纳多少字节的数据(即窗口大小 )。发送方根据这个窗口大小来调整自己的发送速率,避免发送过快导致接收方缓冲区溢出 。比如接收方缓冲区快满时,会减小窗口大小,发送方收到通知后降低发送速度 。
  • 拥塞控制:发送方会根据网络的拥塞情况调整自己的发送速率。当网络出现拥塞时,发送方会降低发送数据的速度,避免网络拥塞进一步恶化 。常见的拥塞控制算法有慢开始、拥塞避免、快速重传、快速恢复等 。

这是ai给我发的,很详细,但是我想要的不是这个。所以我精简一下。(主要看下面这个即可)

  • 分段与编号:TCP的数据会把它分成几段进行处理,并且进行编号。
  • 确认与重传:如果发送数据以后拿到ack就是确认。但是发送数据以后等待超时拿不到ack就会重发。
  • 流量控制:接收方会发送窗口大小给发送方,发送方自动根据大小进行发送调整。
  • 拥塞控制:发送方会自动根据网络进行调整发送。

四次挥手:

(第一次挥手)客户端发送fin给服务端,然后服务端返回ack,进入到终止等待状态

(第二次挥手)服务端接收到fin以后进入到终止等待状态(主要是为了要处理还剩余的数据)。

(第三次挥手)服务端发送fin给客户端

(第四次挥手)客户端发送ack给服务端,服务端接收到ack直接关闭,客户端等待超时才会关闭。

为什么要一直等到超时才会关闭,因为如果ack没有发送到服务端就会出现问题,如果一直等待可以避免,如果没有发送到那就重发即可。

至于UDP的工作原理,其实就是直接发送数据给目标地址. hh

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

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

相关文章

Jackson使用详解

JSON Jackson是java提供处理json数据序列化和反序列的工具类,在使用Jackson处理json前,我们得先掌握json。 JSON数据类型 类型示例说明字符串(String)"hello"双引号包裹,支持转义字符(如 \n&a…

C语言| 指针变量的定义

C语言| 指针的优点-CSDN博客 * 表示“指向”,为了说明指针变量和它所指向的变量之间的联系。 int * i;//表示指针变量i里面存放的地址,所指向的存储单元里的【数据】。 【指针变量的定义】 C语言规定所有变量,在使用前必须先定…

Java 快速转 C# 教程

以下是一个针对 Java 开发者快速转向 C# 的简明教程,重点对比 Java 与 C# 的异同,帮助你快速上手。 项目结构: .sln :解决方案文件,管理多个项目之间的依赖关系。.csproj :项目文件,定义目标框…

EasyExcel详解

文章目录 一、easyExcel1.什么是easyExcel2.easyExcel示例demo3.easyExcel read的底层逻辑~~4.easyExcel write的底层逻辑~~ 二、FastExcel1.为什么更换为fastExcel2.fastExcel新功能 一、easyExcel 1.什么是easyExcel 内容摘自官方:Java解析、生成Excel比较有名的…

jvm安全点(三)openjdk17 c++源码垃圾回收之安全点结束,唤醒线程

1. VMThread::inner_execute() - 触发安全点​​ cpp 复制 void VMThread::inner_execute(VM_Operation* op) { if (op->evaluate_at_safepoint()) { SafepointSynchronize::begin(); // 进入安全点,阻塞所有线程 // ...执行GC等操作... SafepointSynchronize::…

102. 二叉树的层序遍历递归法:深度优先搜索的巧妙应用

二叉树的层序遍历是一种经典的遍历方式,它要求按层级逐层访问二叉树的节点。通常我们会使用队列来实现层序遍历,但递归法也是一种可行且有趣的思路。本文将深入探讨递归法解决二叉树层序遍历的核心难点,并结合代码和模拟过程进行详细讲解。 …

首个窗口级无人机配送VLN系统!中科院LogisticsVLN:基于MLLM实现精准投递

导读 随着智能物流需求日益增长,特别是“最后一公里”配送场景的精细化,传统地面机器人逐渐暴露出适应性差、精度不足等瓶颈。为此,本文提出了LogisticsVLN系统——一个基于多模态大语言模型的无人机视觉语言导航框架,专为窗户级别…

WPF Datagrid 数据加载和性能

这篇文章并非讨论 WPF Datagrid 的性能数据,而只是简单介绍一下为了使其性能良好,你需要注意哪些方面。我不太想使用性能分析器来展示实际数据,而是尽可能地使用了 Stopwatch 类。这篇文章不会深入探讨处理海量数据的技术,例如分页…

matlab求矩阵的逆、行列式、秩、转置

inv - 计算矩阵的逆 用途:计算一个可逆矩阵的逆矩阵。 D [1, 2; 3, 4]; % 定义一个2x2矩阵 D_inv inv(D); % 计算矩阵D的逆 disp(D_inv);det - 计算矩阵的行列式 用途:计算方阵的行列式。 E [1, 2; 3, 4]; determinant det(E); % 计算行列式 disp…

ridecore流水线解读

文章目录 流水线stage分属前后端PCpipelineIFIDDPDP 与 SW 中间没有latchSWCOM 源码地址 流水线stage分属前后端 IF -> ID -> DP -> SW -> EX -> COM分类阶段说明前端IF指令获取阶段。PC 使用分支预测器,访问指令存储器。典型前端操作。前端ID解码并…

【SpringBoot】关于MP使用中配置了数据库表前缀的问题

problem 使用MP时,在application.yml配置文件中配置了MP匹配数据库表中的表名时的前缀作了规定,如下: 那么当我运行时报错了错误,报错信息如下: 因为我数据库表的书类表名是book,MP在匹配时使用了表名前…

印度Rummy游戏支付通道申请策略:技巧类游戏的合规与创新

本文为印度支付申请科普文,自去年开始,印度Rummy类游戏申请印度支付都需要拥有AIGF的会员及产品证书。 如需要rummy可以通过AIGF审核的源。码,或咨询AIGF的相关内容,可以联。系老妙。 印度作为全球棋牌类游戏增长最快的市场之一&…

日志与策略模式

什么是设计模式 IT⾏业 ,为了让 菜鸡们不太拖⼤佬的后腿, 于是⼤佬们针对⼀些经典的常⻅的场景, 给定了⼀些对应的解决⽅案, 这个就是 设计模式 日志认识 计算机中的⽇志是记录系统和软件运⾏中发⽣事件的⽂件,主要作⽤是监控运⾏状态、记录异常信 息&#xff…

解锁Ubuntu高效部署!自动安装配置文件YAML全解析

我们之前介绍了两种Ubuntu系统的安装方式,分别对应桌面版(准备搞OpenStack了,先装一台最新的Ubuntu 23.10)和服务器版(Ubuntu 22.04 LTS服务器版本安装演示)。但对于有些用户,因为技术问题&…

关系代数和关系数据库语言(SQL)

阅读提示:本篇文章较长,建议从目录上选取想看的内容。代码上的话,我习惯用小写,如果看不习惯建议跳过。有问题欢迎讨论!!! 一、基础概念 1.1数据库的概念 数据库(Database)是按照数据结构来组…

EXO 可以将 Mac M4 和 Mac Air 连接起来,并通过 Ollama 运行 DeepSeek 模型

EXO 可以将 Mac M4 和 Mac Air 连接起来,并通过 Ollama 运行 DeepSeek 模型。以下是具体实现方法: 1. EXO 的分布式计算能力 EXO 是一个支持 分布式 AI 计算 的开源框架,能够将多台 Mac 设备(如 M4 和 Mac Air)组合成…

区块链基本理解

文章目录 前言一、什么是分布式账本(DLT)二、什么是P2P网络?二、共识算法三、密码算法前言 区块链是由一个一个数据块组成的链条,按照时间顺序将数据块逐一链接,通过哈希指针链接,所有的数据块共同维护一份分布式账本(DLT),每个节点(可以理解为一个玩家,一台计算机)都拥…

Node.js中的洋葱模型

文章目录 前言 前言 Node.js中的洋葱模型是一种中间件执行机制,主要用于处理HTTP请求和响应的流程控制。该模型通过层层包裹的中间件结构,实现请求从外到内穿透、响应从内向外返回的顺序执行。以下从核心概念、实现原理、框架差异及实际应用等方面解析&…

UI-TARS Desktop:用自然语言操控电脑,AI 重新定义人机交互

在人工智能技术飞速发展的今天,从文本生成到图像识别,AI 的能力边界不断被打破。而字节跳动近期开源的 UI-TARS Desktop,则将这一技术推向了更复杂的交互场景——通过自然语言直接控制计算机界面,实现了图形用户界面(GUI)的智能化自动化。这款工具不仅降低了操作门槛,更…

一个可拖拉实现列表排序的WPF开源控件

从零学习构建一个完整的系统 推荐一个可通过拖拉,来实现列表元素的排序的WPF控件。 项目简介 gong-wpf-dragdrop是一个开源的.NET项目,用于在WPF应用程序中实现拖放功能,可以让开发人员快速、简单的实现拖放的操作功能。 可以在同一控件内…