TCP和UDP的原理及其区别(三次握手、四次挥手)

news2024/10/6 2:26:25

 TCP和UDP都是在传输层上工作的协议,用于在网络中传输数据。

1、TCP和UDP之间的区别

        TCP和UDP的主要区别在于它们提供的服务和特性。TCP提供可靠的、有序的、基于连接的数据传输,适用于对数据完整性和可靠性要求较高的应用(邮件、短信)。UDP提供不可靠的、无序的数据传输,适用于对实时性要求较高的应用(视频通话)。选择使用TCP还是UDP取决于应用的需求和优先级,需要权衡数据的可靠性、延迟和带宽利用率等因素。

TCP比作是打电话:必须要对方接通才能进行通话,最后进行挂断。

UDP比作写信:只管将要写的内容写入信中发出去,不管对方是否收到,内容是否被篡改等等。

2、TCP连接的工作流程:

        TCP是一种面向连接的协议,TCP通过建立一个连接,确保数据包的可靠传递和按顺序接收。它使用序列号、确认和重传等机制来保证数据的准确传输。TCP还提供流量控制、拥塞控制和错误恢复等功能,以确保数据的完整性和可靠性。缺点就是他比起UDP来说消耗的性能更多,速度更慢。

2.1建立连接:

       

  1. 第一步:客户端向服务器发送一个带有SYN(同步)标志的TCP报文段,表示请求建立连接。
  2. 第二步:服务器收到客户端的请求后,向客户端发送一个带有SYN/ACK(同步/确认)标志的TCP报文段,表示同意建立连接。
  3. 第三步:客户端收到服务器的响应后,再向服务器发送一个带有ACK(确认)标志的TCP报文段,表示连接已建立。

为什么要进行三次握手呢,而不是两次握手就建立连接呢?

        这是因为网络通信的不可靠性,假设一种情况,当客户端给服务端发送第一个SYN包,然后因为网络拥堵,没发到服务端,此时客户端又发了一个SYN包给服务端,服务端接到建立连接的请求,就给客户端发送SYN/ACK包,此时建立了连接,突然之前第一个SYN包发到了服务端,则服务端以为客户端又要建立一个连接请求,则给客户端发送SYN/ACK包,建立了第二条请求。

此时情况就是服务端以为和客户端建立了两条请求,而客户端这边认为只建立了一条请求,则服务端那边有一条连接一直接收不到数据,如果有第三次握手就不会出现这种情况了。

2.2数据传输

TCP协议通过一些机制来处理乱序问题和丢包问题,确保数据的可靠传输。

  • 序列号和确认机制:TCP在每个数据包中使用序列号来标识数据的顺序。接收方收到数据包后,会发送一个确认(ACK)消息,其中包含下一个期望接收的序列号。如果发送方收到确认消息,就知道数据已经成功传输,如果没有收到确认消息,发送方会重新发送数据。

  • 重传机制:如果发送方没有收到确认消息,或者接收方在一定时间内没有收到数据包,TCP会触发重传机制。发送方会重新发送丢失的数据包,确保数据的可靠传输。

  • 滑动窗口机制:TCP使用滑动窗口机制来控制发送方发送数据的速率。接收方会告诉发送方它的接收窗口大小,发送方根据接收窗口大小来发送数据。如果接收方的窗口大小变小,发送方会相应地减少发送的数据量,以避免数据的丢失。

  • 接收方缓冲区:接收方使用缓冲区来存储接收到的数据。如果数据包乱序到达,接收方会根据序列号将数据包重新排序,排序后如果发现某个包丢失会发送请求给发送端,请求他重发这段数据,待数据整合完毕。然后交付给应用程序。

通过这些机制,TCP可以有效地处理乱序问题和丢包问题。它确保数据的有序传输,并通过重传机制和滑动窗口机制来保证数据的可靠性。接收方的缓冲区可以处理乱序到达的数据包,确保数据按正确的顺序交付给应用程序。这些机制使得TCP成为一种可靠的传输协议。TCP是全双工的,所以客户端和服务端都可能是数据的接收方和发送方。

2.3四次挥手

  1. 第一步:客户端发送一个带有FIN(结束)标志的TCP报文段给服务器,表示客户端不再发送数据,但仍然可以接收数据。
  2. 第二步:服务器收到客户端的结束请求后,向客户端发送一个带有ACK(确认)标志的TCP报文段,确认收到了结束请求。服务器仍然可以发送数据给客户端。此时服务端处理之前未处理完的数据。
  3. 第三步:当服务端数据处理完毕,也可以关闭时,发送一个带有FIN标志的TCP报文段给客户端,表示服务器不再发送数据。
  4. 第四步:客户端收到服务器的结束请求后,向服务器发送一个带有ACK标志的TCP报文段,确认收到了服务器的结束请求。服务端马上进入了CLOSED状态,客户端等待超时时间后再进入CLOSED状态,连接成功关闭。

为什么客户端在发送ACK(最后一次挥手)后还要进行等待一段时间才正式关闭? 

        这也是因为不稳定网络通信。当客户端接收到服务端的FIN包时,会给服务端发送最后的ACK,此时这个ACK又因为某些因素没发送到服务端,服务端在等待一段时间后没有收到客户端的正式关闭连接的信息ACK包,就会再次给客户端发送FIN包。所以让客户端最后再等待超时时间,是为了看看还会不会收到这个FIN,如果再次收到,则会给服务端重发ACK包,刷新超时等待时间。

3、UDP连接的工作流程:

        UDP的工作流程是简单的。UDP是一种无连接的协议,UDP将数据分割成数据报,每个数据报都是独立的,没有建立连接的过程。发送方将数据分割成数据报并直接发送给目标地址,接收方监听指定的端口号并等待数据报的到达。UDP不提供可靠性保证,数据报可能会丢失、重复或乱序到达。UDP的优势在于它的简单性和低延迟性,适用于那些对实时性要求较高的应用。

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

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

相关文章

CPU飙高问题排查命令

1. 远程客户端连接服务器,top命令查看cpu占用最高的进程id 2. (top -H -p 进程pid) 命令: 找出进程里面线程占用CPU高的线程有哪些 ? 3. (printf 0x%x\n 线程id) 线程id转16进制 4. (./jstack PID | grep TID(十六进制) -A 30)

小县城蔬菜配送小程序制作全攻略

随着互联网的普及和人们对生活品质要求的提高,越来越多的小县城开始开发蔬菜配送小程序,以满足当地居民对新鲜蔬菜的需求。制作一个小县城蔬菜配送小程序,需要经过以下步骤: 步骤一:登录乔拓云平台 首先,打…

2023-10-19 LeetCode每日一题(同积元组)

2023-10-19每日一题 一、题目编号 1726. 同积元组二、题目链接 点击跳转到题目位置 三、题目描述 给你一个由 不同 正整数组成的数组 nums ,请你返回满足 a * b c * d 的元组 (a, b, c, d) 的数量。其中 a、b、c 和 d 都是 nums 中的元素,且 a ! b…

博客系统测试报告

一、项目背景 本项目是一个简单的博客系统,该系统具有注册、登录、编写博客、修改博客、删除博客、浏览博客的功能。 项目地址:博客列表http://59.110.22.4:9011/blog_list.html 二、项目功能 1、注册功能:用户可以创建适当的用户名、密码…

JavaWeb——IDEA相关配置(Tomcat安装)

3、Tomcat 3.1、Tomcat安装 可以在国内一些镜像网站中下载Tomcat,同样也可以在[Tomcat官网](Apache Tomcat - Welcome!)下载 3.2、Tomcat启动和配置 一些文件夹的说明 启动,关闭Tomcat 启动:Tomcat文件夹→bin→startup.bat 关闭&#…

博客自动化测试

1、熟悉项目 2、针对核心流程设计测试用例(手工测试用例) 3、将手工测试用例转化成自动化测试用例 4、部署 1、熟悉项目 2、针对核心流程设计测试用例(手工测试用例) 3、将手工测试用例转化成自动化测试用例 代码结构如何设…

【微信小程序开发】小程序微信用户授权登录(用户信息手机号)

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于小程序的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 授权流程讲解 一.用户信息授权登录 1.w…

基于springboot小区物业管理系统

功能如下图所示 摘要 基于Spring Boot的小区物业管理系统是一项重要的解决方案,旨在提升小区物业管理的效率和质量。这个系统整合了现代技术和管理实践,为小区内的住户和物业管理人员提供了便捷的工具,以更好地管理和维护住宅区。该系统的关键…

10_集成学习方法:随机森林、Boosting

文章目录 1 集成学习(Ensemble Learning)1.1 集成学习1.2 Why need Ensemble Learning?1.3 Bagging方法 2 随机森林(Random Forest)2.1 随机森林的优点2.2 随机森林算法案例2.3 随机森林的思考(--->提升学习) 3 随机森林(RF&a…

【RNA biology】RNA的多功能性与早期生命进化

文章目录 RNARNA plays core functions in Central Dogma of BiologyrRNAsnRNA RNA worldReplication催化作用感知环境变化并作出响应 来自Manolis Kellis教授(MIT计算生物学主任)的课 油管链接:6.047/6.878 Lecture 7 - RNA folding, RNA wo…

PHP代码审计工具

PHP代码审计工具 1 环境准备 Seay源代码审计系统.exe 和准备靶场的源码php 2 Seay下载地址 https://github.com/f1tz/cnseay安装Seay源代码审计系统.exe报错时,安装.net framework 3.5 # windows插件.net framework 3.5 下砸地址 https://www.microsoft.com/en…

CSS基础入门01

目录 1.CSS是什么 2.基本语法规范 3.引入方式 3.1内部样式表 3.2行内样式表 3.3外部样式 4.代码风格 4.1样式格式 4.2样式大小写 4.3空格规范 5.选择器 5.1选择器的功能 5.2选择器的种类 6.基础选择器 6.1标签选择器 6.2类选择器 6.3id 选择器 6.4通配符选择…

【趣味随笔】盘点那些国内外知名的扫地机器人品牌

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

电容屏物体识别手工制作

电容屏识别物体效果2 电容屏识别物体效果1 电容屏识别物体效果3 电容屏识别物体效果4 电容识别物理效果5 我们感兴趣的是找到让我们的平面屏幕与物理三维物体和表面交互的方法。 触摸屏无处不在,成千上万的应用程序中有多种设备和屏幕格式,但我们只找到…

十三水中各种牌型判断LUA版

近期回归程序行业,由于业务需求需要做十三水游戏,什么是十三水就不在多讲,下面是判断十三水牌型的方法(带大小王) GetSSSPaiType {}; local this GetSSSPaiType; local huaseTable {}; local numTable {}; functi…

计算机组成原理 new06 第二章 BCD码

文章目录 BCD码8421码余3码2421码三种码的总结 BCD码 概念:在计算机中,除了能够用二进制表示十进制之外,在二进制的基础上还衍生出了很多种的表示方式这些种表示方式的统称就是BCD码。 8421码 概念:8421码用4位二进制来表示一个十…

Python学习第1天-安装Python

文章目录 前言一、下载Python二、执行安装程序三、命令行验证总结 前言 以下榜单来自于TIOBE编程语言流行指数 不多说了,Python天下第一 一、下载Python 从官网下载Python安装程序 二、执行安装程序 找到python-3.12.0-amd64.exe执行,选择Install …

如何使用postman调用若依系统接口(报错401,认证失败,无法访问系统资源)

有时候我们想使用postman调用若依接口,会报下面的401错误,认证失败,无法访问系统资源。 原因是请求中没有token,没法通过若依的权限认证,下面来说一下如何解决。 {"msg": "请求访问:/syste…

提高工作效率的有效途径:五分钟快速学会搭建悟空CRM内网穿透

文章目录 前言1. 无需公网IP,使用cpolar实现悟空CRM远程访问2. 通过公网来访问公司内网悟空CRM3. 设置固定连接公网地址 前言 悟空CRM是一款开源的客户关系管理系统,以"客户关系一对一理论"为基础,通过对企业业务流程的重组来整合…

【数据分享】2023年我国高新技术企业数据(免费获取\excel格式\shp格式)

企业是经济活动的参与主体。一个城市的企业数量决定了这个城市的经济发展水平!比如一个城市的金融企业较多,那这个城市的金融产业肯定比较发达;一个城市的制造业企业较多,那这个城市的制造业肯定比较发达。目前,在城市…