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

简单说网络:TCP+UDP

TCP和UPD:

(1)都工作在传输层

(2)目的都是在程序之中传输数据

(3)数据可以是文本、视频或者图片(对TCP和UDP来说都是一堆二进制数没有太大区别)

一、区别:一个基于连接一个基于非连接

将人与人之间的通信比喻为进程和进程之前的通信:基本上有两种方式(1)写信;(2)打电话;这两种方式在不考虑速度的情况下,这两种方式最大的区别在于:

写信:需要考虑以下三点----所以寄出的的信都变成了未知数,

(1)对方是否可以收到;

(2)收到的信内容是否完整;

(3)先后写两份信过去是否按顺序接收

打电话:

(1)电话接通

(2)互相通话

(3)结束挂断

打电话时以上三个步骤流程都能得到及时的反馈,并且能确认到对方准确的接收到;

重点:打电话是基于连接的也就是TCP协议,而写信是基于非连接的—UDP协议

二、TCP和UDP的实现过程

1、TCP是如何保证以上过程的?有三个关键步骤:三次握手 传输确认 四次挥手;

(1)三次握手是建立连接的过程: 当客户端向服务端发起连接时,会发一个包连接请求数据,过去询问是否可以和服务端建立连接,这个包我们称之为SYN(同步)包;;; 如果服务端收到SYN包同意连接,则回复一个SYN+ACK(同步确认)包;;; 客户端接收到服务器的 SYN-ACK 包后,会发送一个确认包 ACK,确认连接;因为以上过程中相互发送了三包数据,所以称之为三次握手;

在这里插入图片描述

重点:为什么是三次握手而不是两次握手?如果在服务端发送SYN+ACK包后就建立连接,会出现已失效的报文突然又传到服务器引起错误;;;什么意思?假设采用两次握手建立连接,客户端向服务端发送了一个SYN包,来请求建立连接,因为某些未知的原因没有到达服务端,在中间某个网络节点产生了滞留,那么这种情况下为了建立连接,客户端会重发SYN包,这次的数据包正常送达,服务端回复SYN+ACK之后建立了连接,但是第一包数据阻塞的网络节点突然恢复,第一包SYN包有送达到了服务端,这时候服务端会误认为是客户端有新发送了一次请求连接,从而在两次握手之后进入等待数据状态;;;----最终:客户端认为是一次连接,而服务端认为是两次连接,造成了状态不一致,那么如果在三次握手的机制下,服务端收不到最后的ACK包,自然不会认为建立连接成功,所以综上所述,三次握手从本质上来说就是为了解决网络信道不可靠的问题,为了能够在不可靠的信道上建立可靠的连接;经过三次握手之后,客户端和服务端都进入了数据传输状态;

我们以上说过TCP协议需要在不可靠的信道上保证可靠的连接,还有几个问题需要面对:(1)一包数据有可能被拆成多包数据,如何处理丢包问题(2)这些数据包到达的前后顺序不同,如何处理乱序问题;;;针对以上问题,TCP为每一个连接建立了一个发送缓冲区,从建立连接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1,发送数据时,从发送缓存区取一部分数据组成发送报文,在其TCP协议请求头中会附带序列号和长度,服务端在接收到数据后,需要恢复确认报文,确认报文中的ACK=序列号+长度,也就是下一包数据需要发送的起始序列号,这样一问一答的发送方式能够使发送端确认发送的数据被对方收到,发送端可以一次发送连续的多包数据,接收端只需要回复一次ACK就可以了,这样发送端可以把待发送的数据分割成一系列的碎片发送到接收端,接收端根据序列号和长度在接收后重构出来完整的数据,假设其中丢失了某些数据包,在服务端可以要求发送端重传,比如丢失了序列号100-199这一百个字节,接收端向发送端发送ACK=100的报文,客户端收到后会重传这一包数据,然后服务端进行补齐;

在这里插入图片描述

(2)四次挥手:处于连接状态的客户端和服务端都可以发起关闭的连接请求,此时需要四次挥手来进行关闭连接,假设客户端主动发起了关闭连接请求:第一次挥手:客户端需要向服务端发送一包FIN包,表示要关闭连接,自己进入终止等待1状态;第二次挥手:服务端收到FIN包,发送一包ACK包表示自己进入关闭等待状态,客户端进入终止等待2状态,此时服务器不再接收客户端的数据,但仍可以向客户端发送数据,客户端也可以接收数据;第三次挥手:当服务器也准备好关闭连接时,会发送一个 FIN 包给客户端,进入最后确认状态;第四次挥手:客户端收到服务器的 FIN 包后,发送一个 ACK 包作为确认。此时,进入超时等待状态,经过超时时间之后TCP 连接关闭,服务端收到ACK包后立即关闭连接;(为什么客户端需要等待超时时间,为了保证服务端已收到ACK包,如果客户端发送ACK包后,不等待超时时间直接释放了连接,一旦ACK包在网络中丢失,服务端将一直停留在最后确认状态)

在这里插入图片描述

四次挥手的目的:在不可靠的网络连接中进行可靠的连接断开确认

二、UDP协议:UDP协议是基于非连接的,发送数据就是简单的将数据封装一下,将数据从网卡发出去就可以了,数据包之间并没有状态上的联系,正因为有UDP这种简单的处理方式,导致它的性能损耗非常少,对于CPU内存资源的占用也远小于TCP,但是对于网络传输过程中产生的丢包UDP协议并不能保证,所以UDP在传输稳定性上要弱于TCP

在这里插入图片描述

综上:

TCP:稳定可靠,需要准确无误的传输给对方,传输文件、发送邮件、浏览网页

UPD:速度快,但是可能产生丢包,适用于对实时性要求较高的,但是对少量丢包并没有太大要求的场景:语音通话、视频直播等

相关文章:

简单说网络:TCP+UDP

TCP和UPD: (1)都工作在传输层 (2)目的都是在程序之中传输数据 (3)数据可以是文本、视频或者图片(对TCP和UDP来说都是一堆二进制数没有太大区别) 一、区别:一个基于连接一个基于非连接 将人与人之间的通信比喻为进程和进程之前的通信:基本上有两种方式(1)写信;(2)打电话;这…...

Containerd 的前世今生和保姆级入门教程

Containerd 的前世今生 很久以前,Docker 强势崛起,以“镜像”这个大招席卷全球,对其他容器技术进行致命的降维打击,使其毫无招架之力,就连 Google 也不例外。Google 为了不被拍死在沙滩上,被迫拉下脸面&…...

分享78个行业PPT,总有一款适合您

分享78个行业PPT,总有一款适合您 78个行业PPT下载链接:https://pan.baidu.com/s/19UL58I5Z1QZidVrq50v6fg?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易…...

VR全景技术可以应用在哪些行业,VR全景技术有哪些优势

引言: VR全景技术(Virtual Reality Panorama Technology)是一种以虚拟现实技术为基础,通过360度全景影像、立体声音、交互元素等手段,创造出沉浸式的虚拟现实环境。该技术不仅在娱乐领域有着广泛应用,还可…...

c#cad 创建-点(六)

运行环境 vs2022 c# cad2016 调试成功 一、代码说明 创建一个点的命令方法。代码的主要功能是在当前活动文档中创建一个点,并将其添加到模型空间块表记录中。 代码的主要步骤如下: 获取当前活动文档、数据库和编辑器对象。使用事务开始创建点的过程…...

【JS逆向八】逆向某企查网站的headers参数,并模拟生成 仅供学习

逆向日期:2024.02.07 使用工具:Node.js 加密方法:未知 / 标准库Hmac-SHA512 文章全程已做去敏处理!!! 【需要做的可联系我】 可使用AES进行解密处理(直接解密即可):AES加…...

Springboot+vue的社区智慧养老监护管理平台设计与实现(有报告),Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的社区智慧养老监护管理平台设计与实现(有报告),Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的社区智慧养老监护管理平台设…...

STM32学习笔记——定时器

目录 一、定时器功能概述 1、基本定时器(TIM6&TIM7) 工作原理 时序 2、通用计时器(TIM2&TIM3&TIM4&TIM5) 时钟源 外部时钟源模式1&2 外部时钟源模式2 外部时钟源模式1 定时器的主模式输出 输入捕获…...

Android编程权威指南(第四版)- 第 4 章 UI状态的保存与恢复

文章目录 代码:依赖MainActivityQuizViewModelQuestion知识点代码: 大体是一样的,修改了一些 依赖 implementation("androidx.lifecycle:lifecycle-extensions:2.2.0")MainActivity package com.example.geoquizimport androidx.appcompat.app.AppCompatActivi…...

代理模式

如有错误或有补充,以及任何改进的意见,请留下您的高见 定义 代理模式是一种设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式是一种结构型模式,它可以在不修改源码的情况下增强方法,在方法前后增…...

C++三剑客之std::any(一) : 使用

相关系列文章 C三剑客之std::any(一) : 使用 C之std::tuple(一) : 使用精讲(全) C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二):深入剖析​​​​​​​ 目录 1.概述 2.构建方式 2.1.构造函数 2.2.std::make_any 2.3.operator分配新值 3.访问值…...

2024年:用OKR管理你的生活

在科技高速发展的时代,越来越多的企业和团队开始采用OKR(Objectives and Key Results)管理方法来设定目标并跟踪进度。你是否想过,将OKR理念引入个人生活,以更有效地实现人生目标?本文将探讨如何在2024年运…...

Lua迭代器以及各种源函数的实现

范型for 范型for的格式如下所示&#xff1a; for <var-list> in <exp-list> do<body> end var-list指变量名列表&#xff0c;可以为多个&#xff0c;exp-list指表达式列表&#xff0c;通常情况下只有一个值。可以更具体地写为另一种形式&#xff1a; fo…...

e5 服务器具备哪些性能特点?

随着云计算和大数据技术的不断发展&#xff0c;服务器作为数据中心的核心设备&#xff0c;其性能特点也日益受到关注。其中&#xff0c;E5服务器作为当前主流的服务器类型之一&#xff0c;具备许多优秀的性能特点。本文将详细介绍E5服务器的性能特点&#xff0c;帮助读者更好地…...

《C++ Primer Plus》《2、开始学习C++》

文章目录 0 前言&#xff1a;1 进入C1.1 main()函数1.2 C注释1.3 预处理器和iostream1.4 头文件名1.5 名称空间1.6 使用cout进行C输出1.7 C源代码的格式化 2 C语句2.1 声明语句和变量2.2 赋值语句2.3 cout语句 3 其他C语句3.1使用cin3.2 使用cout进行拼接3.3 类简介 4 函数4.1 …...

Backtrader 文档学习- Sizers

Backtrader 文档学习- Sizers 1.概述 智能仓位 Strategy提供了交易方法&#xff0c;即&#xff1a;buy&#xff0c;sell和close。看一下buy的定义&#xff1a; def buy(self, dataNone,sizeNone, priceNone, plimitNone,exectypeNone, validNone, tradeid0, **kwargs):注意&…...

基于YOLOv8算法的照片角度分类项目实践

目录 一、任务概述二、YOLOv8算法简介2.1 算法改进2.2 算法特点2.3 网络结构2.4 性能比较 三、工程实践3.1 安装算法框架库ultralytics3.2 库存照片预处理3.2.1 提取所有图片3.2.2 去除冗余的相同照片3.2.3 去除无车辆照片3.2.4 随机提取指定数量的图片 3.3 照片朝向分类3.3.1 …...

go语言进阶篇——面向对象(一)

什么是面向对象 在我们设计代码时&#xff0c;比如写一个算法题或者写一个问题结局办法时&#xff0c;我们常常会使用面向过程的方式来书写代码&#xff0c;面向过程主要指的是以解决问题为中心&#xff0c;按照一步步具体的步骤来编写代码或者调用函数&#xff0c;他在问题规…...

C#,栅栏油漆算法(Painting Fence Algorithm)的源代码

1 刷油漆问题 给定一个有n根柱子和k种颜色的围栏&#xff0c;找出油漆围栏的方法&#xff0c;使最多两个相邻的柱子具有相同的颜色。因为答案可以是大的&#xff0c;所以返回10^97的模。 计算结果&#xff1a; 2 栅栏油漆算法的源程序 using System; namespace Legalsoft.Tr…...

java_error_in_pycharm.hprof文件是什么?能删除吗?

java_error_in_pycharm.hprof文件是什么&#xff1f;能删除吗&#xff1f; &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;hprof格式文件介绍&#x1f333;&#x1f333;java_error_in_pycharm.hprof文件什么情况下能删除&#x1f333;&…...

LeetCode 491 递增序列

给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]说明: 给定数组的长度不会超过15。 数组中的整数范围是 [-…...

考研/计算机二级数据结构刷题之顺序表

目录 第一题 顺序表的初始化&#xff0c;销毁&#xff0c;头插&#xff0c;尾插&#xff0c;头删&#xff0c;尾删&#xff0c;指定位置插入&#xff0c;指定删除以及打印 第二题 移除元素 题目链接&#xff1a; OJ链接 题目详解&#xff1a;移除元素 第三题&#xff1a;删…...

Git 代码协同的使用方法 for Azure DevOps

1. 登陆Azure 步骤1.1. VS Code&#xff0c;登陆Azure Cloud的Ubuntu环境&#xff0c;如下&#xff1a; 重点: 这里的Azure Cloud的用户名是YourAzureUserName&#xff0c;口令是YourAzurePassword 步骤1.2. 登陆Azure Cloud的Ubuntu环境后&#xff0c;配置Git账户信息&…...

数据库学习笔记2024/2/5

2. SQL 全称 Structured Query Language&#xff0c;结构化查询语言。操作关系型数据库的编程语言&#xff0c;定义了 一套操作关系型数据库统一标准 2.1 SQL通用语法 在学习具体的SQL语句之前&#xff0c;先来了解一下SQL语言的通用语法。 1). SQL语句可以单行或多行书写&…...

PSM-Net根据Stereo图像生成depth图像

一、新建文件夹 在KITTI数据集下新建depth_0目录 二、激活anaconda环境 conda activate pt14py37三、修改submission.py文件 3.1 KITTI数据集路径 parser.add_argument(--datapath, default/home/njust/KITTI_DataSet/00/, helpselect model)3.2 深度图像输出路径 save…...

Mocaverse NFT 概览与数据分析

作者&#xff1a;stellafootprint.network 编译&#xff1a;mingfootprint.network 数据源&#xff1a;Mocaverse NFT Collection Dashboard Mocaverse 是 Animoca Brands 推出的专属 NFT&#xff08;非同质化代币&#xff09;系列&#xff0c;包含 8,888 个独特的 "M…...

SpringBoot之事务源码解析

首先事务是基于aop的&#xff0c;如果不了解aop的&#xff0c;建议先去看下我关于aop的文章: Spring之aop源码解析  先说结论&#xff0c;带着结论看源码。首先&#xff0c;在bean的生命周期中&#xff0c; 执行实例化前置增强&#xff0c;会加载所有切面并放入缓存&#xff0…...

FPGA高端项目:解码索尼IMX327 MIPI相机转USB3.0 UVC 输出,提供FPGA开发板+2套工程源码+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存UVC 时序USB3.0输出架构FPGA逻辑设计工程源码架构SDK软件工程源…...

基于高通滤波器的ECG信号滤波及心率统计matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 ECG信号简介 4.2 高通滤波器原理 4.3 心率统计 5.完整工程文件 1.课题概述 通过高通滤波器对ECG信号进行滤波&#xff0c;然后再统计其心率。 2.系统仿真结果 3.核心程序与模型 版本&#xff1a…...

springCould中的gateway-从小白开始【9】

目录 1.&#x1f35f;网关是什么 2.&#x1f37f;gateway是什么 3.&#x1f95a;gateway能什么 4.&#x1f32d;核心概念 5.&#x1f9c2;工作流程 6.&#x1f9c8;实例 7.&#x1f953;gateway网关配置的方式 8.&#x1f373;配置动态路由 9.&#x1f9c7;pred…...