简单说网络: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:速度快,但是可能产生丢包,适用于对实时性要求较高的,但是对少量丢包并没有太大要求的场景:语音通话、视频直播等

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

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

相关文章

Docker容器化K8s集群部署教程(一键部署sheel脚本)

本文通过脚本,可以快速地部署和配置Kubernetes环境,省去了各插件手动部署、配置的繁琐过程。 先看最终结果: [rootlocalhost home]# kubectl get node NAME STATUS ROLES AGE VERSION k8smaster Ready control-p…

LlamaIndex 入门实战

文章目录 LlamaIndex 入门实战1. 基本概念2. 优劣势分析3. 简单代码示例4. Index持久化5. 使用场景6. 总结 LlamaIndex 入门实战 LlamaIndex是一个连接大型语言模型(LLMs)与外部数据的工具,它通过构建索引和提供查询接口,使得大模…

Java学习17-- super类

重点:super类 & 方法重写 super类 super指的是本级的上一级,即father class父类 很好理解,比如Person class>Student class 当前在Student class执行,那么就写this.xxx 需要在Student程序里面调用Person,那就…

HarmonyOS应用/服务发布:打造多设备生态的关键一步

目前 前言HarmonyOS 应用/服务发布的重要性使用HarmonyOS 构建跨设备的应用生态前期准备工作简述发布流程生成签名文件配置签名信息编译构建.app文件上架.app文件到AGC结束语 前言 随着智能设备的快速普及和多样化,以及编程语言的迅猛发展,构建一个无缝…

大数据 - Spark系列《四》- Spark分布式运行原理

Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 目录 🍠…

sqli-labs-master靶场训练笔记(38-53|boss战)

2024.2.4 level-38 (堆叠注入) 这题乍一看感觉又是来卖萌的,这不是和level-1一模一样吗 然后仔细看了一下源代码,根据 mysqli_multi_query 猜测这题的本意应该是堆叠注入 mysqli_multi_query() 是 PHP 中用于执行多个 SQL 查…

品牌如何营造生活感氛围?媒介盒子分享

「生活感」简而言之是指人们对生活的感受和意义,它往往没有充斥在各种重要的场合和事件中,而是更隐藏在细碎平凡的生活场景中。在营销越来越同质化的当下,品牌应该如何打破常规模式,洞察消费情绪,找到更能打动消费者心…

2023:AI疯狂进化年

嘿,大家好!让我们一起来回顾一下这疯狂的 2023 年吧!记得那个二月初吗?ChatGPT 上线了,然后呢?短短两个月,用户数量就像火箭一样突破了 1 亿!这速度,简直比超级赛亚人还快…

前端JavaScript篇之对执行上下文的理解

目录 对执行上下文的理解创建执行上下文 对执行上下文的理解 当我们在执行JavaScript代码时,JavaScript引擎会创建并维护一个执行上下文栈来管理执行上下文。执行上下文有三种类型:全局执行上下文、函数执行上下文和eval函数执行上下文。 在写代码的时…

(6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理

目录 一、为什么要使用Adaboost建模? 二、泰坦尼克号分析(工作环境) (插曲)Python可以引入任何图形及图形可视化工具 三、数据分析 四、模型建立 1、RandomForestRegressor预测年龄 2、LogisticRegression建模 引入GridSearchCV 引入RandomizedSearchCV 3、Deci…

第三百一十回

我们在上一章回中介绍了"再谈ListView中的分隔线",本章回中将介绍showMenu的用法.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在第一百六十三回中介绍了showMenu相关的内容,它主要用来显示移动PopupMenu在页面中的位置…

C语言第二十一弹---指针(五)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 转移表 1、转移表 总结 1、转移表 函数指针数组的用途:转移表 举例:计算器的⼀般实现: 假设我们需要做一个能够进行加减…

CoreSight学习笔记

文章目录 1 Components1.1 ROM Table 2 使用场景2.1 Debug Monitor中断2.1.1 参考资料 2.2 Programming the cross halt2.2.1 编程实现2.2.2 参考资料 2.3 CTI中断2.3.1 编程实现2.3.1.1 准备工作2.3.1.2 触发中断2.3.1.3 中断响应 2.3.2 参考资料 1 Components 1.1 ROM Table…

rust语言tokio库底层原理解析

目录 1 rust版本及tokio版本说明1 tokio简介2 tokio::main2.1 tokio::main使用多线程模式2.2 tokio::main使用单线程模式 3 builder.build()函数3.1 build_threaded_runtime()函数新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图…

国产三维剖面仪—MPAS-100相控参量阵浅地层剖面仪

最近声学所东海站邹博士发来了他们最新的浅地层剖面仪—MPAS-100相控参量阵浅地层剖面仪的资料,市场型号GeoInsight,委托Ocean Physics Technology公司销售,地大李师兄的公司负责技术支持。 MPAS-100相控参量阵浅地层剖面仪就是俗称的三维浅…

git安装配置

1、下载安装 下载地址 2、配置git用户 git config --global user.name "yw" git config --global user.email "88888qq.com" 3、git init 初始化 4、生成ssh密钥 mkdir .ssh //创建文件夹cd .ssh //进入新建文件夹 ssh-keygen -t rsa // 输入密钥文…

Uniapp真机调试:手机端访问电脑端的后端接口解决

Uniapp真机调试:手机端访问电脑端的后端接口解决 1、前置操作 HBuilderX -> 运行 -> 运行到手机或模拟器 -> 运行到Android App基座 少了什么根据提示点击下载即可 使用数据线连接手机和电脑 手机端:打开开发者模式 -> USB调试打开手机端&…

使用 WMI 查询安全软件信息

在这篇文章中,我们将详细介绍如何使用 Windows Management Instrumentation (WMI) API 来查询当前计算机上安装的安全软件的基本信息。我们将分析代码的各个部分,并解释每个步骤所涉及的技术和原理。 一、什么是 WMI? WMI 是 Windows Manag…

Vue安装与配置

写入借鉴网址:好细的Vue安装与配置_vue配置-CSDN博客 下载Vue安装地址: Node.js — Download 查看是否安装成功: node -v npm -v 配置全局模式及缓存 结果通过: C:\Windows\system32>npm install vue -g added 20 packages …

大学生活的“三角平衡”与“合法”偷懒艺术

在那个被称为大学的神奇乐园里,我终于找到了自我,或者说,我找到了一种平衡。这种平衡被我称为“三角平衡”,它是由懒觉、兴趣爱好和学习这三者构成的。在这个平衡中,我像一名杂技演员一样,稳稳地站在三个顶…