简单说网络:TCP+UDP

news2024/11/15 11:50:52

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.coloradmin.cn/o/1439105.html

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

相关文章

【数据结构】链表OJ面试题2《分割小于x并排序链表、回文结构、相交链表》+解析

1.前言 前五题在这http://t.csdnimg.cn/UeggB 休息一天,今天继续刷题! 2.OJ题目训练 1. 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 。链表分割_牛客题霸_牛客网 思路 既然涉及…

naiveui 上传图片遇到的坑 Upload

我在开发图片上传功能, 需要手动触发上传 但是我调用它内部自定义submit方法, 结果接口一直在报错400 我反反复复的测试了好就, 确定了就是我前端的问题,因为之前一直在做后端的错误排查, 以为是编译问题(因为之前也出现过这个问题) 好 , 我把其中一个参数类型改为String类型, …

NC6X单点登录设计文档说明

前言 因为业务场景需要,第三方系统有些工作需要经常到NC系统里做,如果每次去NC系统做业务单据,都需要反复登录,导致客户使用体验不是很好,所以需要开发实现从第三方系统单点登录到NC系统,提高客户满意度。 …

电力负荷预测 | 基于GRU门控循环单元的深度学习电力负荷预测,含预测未来(Python)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | 基于GRU门控循环单元的深度学习电力负荷预测,含预测未来(Python&

开源!免费!Hugging Face推出GPT商城

Hugging Face发布开源AI助手制造工具,与OpenAI的定制GPT形成竞争 Hugging Face今年1月31日推出一款开源AI代码库——Hugging Chat Assistants,允许用户轻松创建特定功能的定制AI聊天机器人。 不同于OpenAI的ChatGPT商城需要每月20美金成为会员才能使用…

VBA技术资料MF116:测试操作系统是否为64位

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

OLED调试简介

文章目录 一、介绍调试方法介绍OLED简介硬件电路OLED驱动函数 二、操作连接线路使用驱动函数显示内容 OLED.c的内容 一、介绍 调试方法介绍 OLED简介 硬件电路 OLED驱动函数 二、操作 连接线路 因为这两个引脚不做配置是浮空状态,在这里直接用电源给OLED供电 使…

第三模块 面向对象网络并发编程

第三模块 面向对象&网络&并发编程 面向对象基础1. 初识面向对象1.1 对象和self1.2 常见成员1.3 应用示例 2. 三大特性2.1 封装2.2 继承练习题2.3 多态 3. 扩展:再看数据类型总结作业 从今天开始,我们将进入系列课程第3个模块的的学习&#xff0c…

李宏毅LLM——生成式学习的两种策略

文章目录 生成式学习的两种策略:各个击破和一次到位成为专才:成为通才神秘的 In-context Learning 能力Instruction LearningChain of Thought Prompting 生成式学习的两种策略:各个击破和一次到位 对应视频的 P7-P11 生成有结构的复杂物件也…

学习 Redis 基础数据结构,不讲虚的。

学习 Redis 基础数据结构,不讲虚的。 一个群友给我发消息,“该学的都学了,怎么就找不到心意的工作,太难了”。 很多在近期找过工作的同学一定都知道了,背诵八股文已经不是找工作的绝对王牌。企业最终要的是可以创造价…

16:定时器和计数器

定时器和计数器 1、定时器和计数器的介绍2、定时器是如何工作3、寄存器4、51单片机定时器简介(数据手册)5、定时器中的寄存器(数据手册)5.1、TCON(定时器控制寄存器)5.2、TMOD(工作模式寄存器&a…

嵌入式学习之Linux入门篇笔记——13,Linux第一个程序HelloWorld

配套视频学习链接:http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 1.什么是 gcc? gcc 全称(gun compiler…

【附代码】NumPy加速库NumExpr(大数据)

文章目录 相关文献测试电脑配置数组加减乘除数组乘方Pandas加减乘除总结 作者:小猪快跑 基础数学&计算数学,从事优化领域5年,主要研究方向:MIP求解器、整数规划、随机规划、智能优化算法 如有错误,欢迎指正。如有…

iPhone解锁 AnyMP4 iPhone Unlocker

AnyMP4 iPhone Unlocker是一款功能强大的iPhone解锁软件,旨在帮助用户轻松解决iPhone密码忘记、设备锁定等问题。无论是屏幕密码、指纹解锁还是Face ID,该软件都能提供有效的解决方案。 这款软件支持多种iPhone型号,包括最新的iPhone 14系列…

JavaEE作业-实验三

目录 1 实验内容 2 实验要求 3 思路 4 核心代码 5 实验结果 1 实验内容 简单的线上图书交易系统的web层 2 实验要求 ①采用SpringMVC框架,采用REST风格 ②要求具有如下功能:商品分类、订单、购物车、库存 ③独立完成,编写实验报告 …

【Go】三、Go并发编程

并发编程 我们主流的并发编程思路一般有:多进程、多线程 但这两种方式都需要操作系统介入,进入内核态,是十分大的时间开销 由此而来,一个解决该需求的技术出现了:用户级线程,也叫做 绿程、轻量级线程、协…

Leetcode—42. 接雨水【困难】

2024每日刷题&#xff08;112&#xff09; Leetcode—42. 接雨水 空间复杂度为O(n)的算法思想 实现代码 class Solution { public:int trap(vector<int>& height) {int ans 0;int n height.size();vector<int> l(n);vector<int> r(n);for(int i 0; …

《学成在线》微服务实战项目实操笔记系列(P1~P62)【上】

《学成在线》项目实操笔记系列【上】&#xff0c;跟视频的每一P对应&#xff0c;全系列12万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。同时也欢迎大家提问与讨论&#xff0c;我会尽力帮大家解…

RK3568笔记十二:Zlmedia拉流显示测试

若该文为原创文章&#xff0c;转载请注明原文出处。 Zlmediakit功能很强大&#xff0c;测试一下拉流&#xff0c;在通过解码显示。 一、环境 1、平台&#xff1a;rk3568 2、开发板:ATK-RK3568正点原子板子 3、环境&#xff1a;buildroot 测试的代码在GitHub - airockchip/…

ubuntu20安装mongodb

方法一&#xff1a;直接安装(命令是直接从mongo官网Install MongoDB Community Edition on Ubuntu — MongoDB Manual复制的&#xff09; cat /etc/lsb-release sudo apt-get install -y gnupg curl curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \sudo gp…