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

 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.mzph.cn/news/113307.shtml

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

相关文章

Java多线程编程

文章目录 Java多线程编程线程概念线程常用方法线程创建线程优先级终止线程等待线程线程状态线程安全synchronizedvolatilewait和notify方法ThreadLocal的使用标准库线程安全类 Java多线程编程 线程概念 线程概念: 一个线程就是一个 “执行流”. 每个线程之间都可…

JavaPTA练习题 7-4 计算给定两数之间的所有奇数之和

本题目要求接收输入的2个整数a和b,然后输出a~b之间的所有奇数之和。 输入格式: 分别用两行输入两个整数a,b 输出格式: 输出a~b之间的所有奇数之和 输入样例: 在这里给出一组输入。例如: 1 30输出样例: 在这里给出相应的输出。例如: …

Springboot-案例 增删改查二

准备 前端程序、后端工程(web/mybatis/mysql/lombok)、数据库 开发规范 GET:查询 POST:新增 PUT:修改 DELETE:删除 Result.java Data NoArgsConstructor AllArgsConstructor public class Result {pri…

OracleRAC 安装配置过程中的问题

OS RHAS 3.2 DB 9204 在RAC的安装配置过程中,虽然是严格仔细按照文档来实施,但还是出现不少问题,现整理出来。 现象一 : 在节点一安装数据库的时候出现以下错误 [oraclerac1 dbs]$ sqlplus "/nolog"SQL*Plus: Relea…

LuatOS-SOC接口文档(air780E)--keyboard - 键盘矩阵

keyboard.init(port, conf, map, debounce)# 初始化键盘矩阵 参数 传入值类型 解释 int 预留, 当前填0 int 启用的keyboard管脚掩码, 例如使用keyboard0~9, 则掩码为 0x1FF, 若使用 0~3 则 0xF int keyboard管脚方向映射, 其中输入为0,输出为1, 按位设置. 例如 keyboa…

560. 和为 K 的子数组 --力扣 --JAVA

题目 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。 子数组是数组中元素的连续非空序列。 解题思路 数组项累加可以使用双层循环进行遍历;子数组的长度是不确定的,也可能存在1 1 2和1 1 - 1…

偶数科技发布实时湖仓数据平台Skylab 5.3版本

近日, 偶数发布了最新的实时湖仓数据平台 Skylab 5.3 版本。Skylab包含七大产品,分别为云原生分布式数据库 OushuDB、数据分析与应用平台 Kepler、数据资产管理平台 Orbit、自动化机器学习平台 LittleBoy、数据工厂 Wasp、数据开发与调度平台 Flow、系统…

bazel远程构建(Remote Execution) --- linux安装Redis

采用源码安装方式 下载地址:Download | Redis,下载最新稳定版本。 step1: 下载最新稳定版本 wget https://download.redis.io/redis-stable.tar.gz step2: 解压安装 tar -xzvf redis-stable.tar.gz cd redis-stable make 执行完 make 命令后&#…

鸿蒙HarmonyOS应用开发:扫描仪文件扫描

华为鸿蒙HarmonyOS已经发展到4.0,使用ArkTS作为开发语言。这篇文章结合Dynamsoft Service开发一个简单的鸿蒙应用,用来获取办公室里连接PC的扫描仪(惠普,富士通,爱普生,等),把文档扫描到手机里。 准备工作…

【前端设计模式】之外观模式

外观模式是一种结构型设计模式,它提供了一个简单的接口,隐藏了复杂的子系统,并使得客户端能够更方便地使用这些子系统。在前端开发中,外观模式可以帮助我们简化复杂的代码结构,提高代码的可维护性和可读性。 外观模式…

DevExpress WPF Pivot Grid组件,可轻松实现多维数据分析!(二)

在上文中(点击这里回顾>>)我们主要为大家介绍了DevExpress WPF Pivot Grid组件的超快速枢轴分析功能、Microsoft分析服务等,本文将继续介绍图表透视数据的处理、MVVM支持等。欢迎持续关注我们,探索更多新功能哦~ P.S&#…

【异步爬虫】requests和aiohttp中代理IP的使用

前言 在进行爬虫开发时,我们常常需要使用代理IP来隐藏自己的真实IP地址,以避免被一些网站限制或封禁。requests和aiohttp是两个非常常用的工具,本文将分别介绍如何在它们中使用代理IP,希望可以帮助大家更好地进行异步爬虫开发。 …

电容屏物体识别手工制作

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

STM32的hex文件格式的分析

前言 最近研究Bootloader,通过串口实现STM32程序的更新。需要学习了解STM32的Hex文件格式。在这进行一下总结。 HEX文件格式 我们通过文本形式打开hex文件,可以看到: 这一行就是一条指令数据,这里对数据帧格式进行说明&#xff…

第十二届蓝桥杯模拟赛第一期

A填空题 问题描述 如果整数a是整数b的整数倍,则称b是a的约数。 请问,有多少个正整数是2020的约数。 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数&#xff0…

elementui select组件下拉框底部增加自定义按钮

elementui select组件下拉框底部增加自定义按钮 el-select组件的visible-change 事件&#xff08;下拉框出现/隐藏时触发&#xff09; <el-selectref"select":value"value"placeholder"请选择"visible-change"visibleChange">&…

Kotlin笔记(六):泛型的高级特性

前面学习了Kotlin中的泛型的基本用法,跟Java中的泛型大致相同&#xff0c;Kotlin在泛型方面还提供了不少特有的功能&#xff0c;掌握了这些功能&#xff0c;你将可以更好玩转Kotlin&#xff0c;同时还能实现一些不可思议的语法特性&#xff0c;那么我们自然不能错过这部分内容了…

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

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

LiveGBS流媒体平台GB/T28181常见问题-安全控制HTTP接口鉴权勾选流地址鉴权后401Unauthorized如何播放调用接口

LiveGBS流媒体平台GB/T28181常见问题-安全控制HTTP接口鉴权勾选流地址鉴权后401 Unauthorized如何播放调用接口&#xff1f; 1、安全控制1.1、HTTP接口鉴权1.2、流地址鉴权 2、401 Unauthorized2.1、携带token调用接口2.1.1、获取鉴权token2.1.2、调用其它接口2.1.2.1、携带 Co…

DNS压测工具-dnsperf的安装和使用(centos)

系统调优 系统调优脚本&#xff0c;保存为sh文件&#xff0c;chmod提权后执行即可 #!/bin/sh #系统全局允许分配的最大文件句柄数&#xff1a; sysctl -w fs.file-max2097152 sysctl -w fs.nr_open2097152 echo 2097152 > /proc/sys/fs/nr_open #允许当前会话 / 进程打开文…