TCP、UDP协议

news2024/12/24 21:23:58

TCP与UDP协议的区别

TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常用的传输层协议,它们之间有以下几点区别:

1. 连接性:
   - TCP是面向连接的协议,通过三次握手建立连接,提供可靠的数据传输,保证数据的顺序和完整性。
   - UDP是无连接的协议,不需要建立连接,不保证数据的可靠性和顺序性,适合实时性要求高的数据传输。

2. 数据传输方式:
   - TCP使用流式传输,将数据分割成小块并按顺序传输,保证数据的完整性。
   - UDP使用数据报传输,每个数据包独立传输,没有顺序要求,适合一次性传输少量数据。

3. 可靠性:
   - TCP提供可靠的数据传输,通过确认机制、重传机制、拥塞控制等方式确保数据的可靠性。
   - UDP不提供数据传输的可靠性,数据包可能丢失或乱序,需要应用层自行处理。

4. 消耗:
   - TCP的可靠性和复杂性导致的额外开销会消耗更多的网络资源,适合对数据完整性要求高的应用。
   - UDP的简单性和高效性使其消耗更少的网络资源,适合实时性要求高、数据丢失可以容忍的应用。

总的来说,TCP适用于对数据完整性和顺序性要求高的场景,如文件传输、网页访问等;而UDP适用于实时性要求高、数据量小、丢失可以容忍的场景,如音视频传输、在线游戏等。选择使用哪种协议取决于具体应用的需求。
 

TCP协议

TCP协议的三次握手
在tcp三次握手建立连接时,双方是怎么知道已经完成三次握手了的?

在TCP三次握手过程中,双方通过不同的状态来确认已经完成了三次握手。以下是双方如何知道三次握手已经完成的过程:

1. 客户端发送SYN包:客户端向服务器端发送一个SYN包,表示请求建立连接,并进入SYN_SENT状态。

2. 服务器端发送SYN-ACK包:服务器端接收到客户端发送的SYN包后,会向客户端发送一个SYN-ACK包,表示同意建立连接,并进入SYN_RECV状态。

3. 客户端发送ACK包:客户端收到服务器端发送的SYN-ACK包后,会向服务器端发送一个ACK包,表示确认建立连接,并进入ESTABLISHED状态。

在这个过程中,当服务器端收到客户端发送的ACK包后,双方就确认完成了三次握手,可以开始进行数据传输。
 

TCP是怎么知道发送的是(请求建立连接消息,还是确认连接、关闭连接等)

通过TCP协议头部中的“状态控制码”来标识


序号-sequence number:编号:TCP数挺包时大,分段(10段:1,2,3,4,10)
确认号:ackmowledge number。表示我服务器期望收到你的下一个包的序号
状态控制码(code control flag):标志位信号灯1--亮   0--灭===表示数据包的类型
ACK·acknowledge:确认位。=1,表示这个消遮是一个确认消息
RST-RESET:重置。=1,表示这个消息释放连接。TCP连接出错误主机服务器瑞,断开连接。请重新建立连接。
SYN:synchronous:同步,=1,表示这个消息是:1.一个发起连接的消息+2确认接收连接消息
FIN-Final:终止。=1,表示发送报文结束了完毕了,程放这个连接。--TCP四次挥手

四次挥手过程

 

  • 第一次挥手: Client端发起挥手请求,向Server端发送标志位是FIN报文段,设置序列号seq,此时,Client端进入`FIN_WAIT_1`状态,这表示Client端没有数据要发送给Server端了,但仍可以接收数据。
  • 第二次挥手:Server端收到了Client端发送的FIN报文段,向Client端返回一个标志位是ACK的报文段,ack设为seq加1,Client端进入`FIN_WAIT_2`状态。这个过程表示Server端告诉Client端,我确认并同意你的关闭请求。
  • 第三次挥手: Server端向Client端发送标志位是FIN的报文段,请求关闭连接,同时Client端进入`LAST_ACK`状态。
  • 第四次挥手: Client端收到Server端发送的FIN报文段,向Server端发送标志位是ACK的报文段,然后Client端进入`TIME_WAIT`状态。Server端收到Client端的ACK报文段以后,就关闭连接。此时,Client端等待2MSL的时间后依然没有收到回复,则证明Server端已正常关闭,那好,Client端也可以关闭连接了。

 

参考文章:一文彻底搞懂 TCP三次握手、四次挥手过程及原理 - 知乎 (zhihu.com)

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

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

相关文章

PostgreSQL的学习心得和知识总结(一百三十五)|深入理解PostgreSQL数据库之查找 PostgreSQL C 代码中的内存泄漏

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

Flutter混淆方案对应用性能的影响分析与优化

在移动应用开发中,保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具,帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆,并提供了相关的操作步骤和注意事项。 📝 摘要 本…

练习 17 Web [极客大挑战 2019]PHP

常见的网站源码备份文件名和后缀,反序列化攻击 unserialize():wakeup绕过,private类以及属性序列化后的%00修改 开靶机 提到”备份“ 那看看有没有backup.php啥的 如果网站存在备份文件,常见的备份文件后缀名有:“.gi…

解读命令:icacls “E:\ShareAll“ /grant “Everyone:(OI)(CI)(F)“

命令 icacls "E:\ShareAll" /grant "Everyone:(OI)(CI)(F)" 是在Windows操作系统中用来修改文件或目录权限的命令行操作。该命令执行以下操作: 路径:"E:\ShareAll" 指定了要更改权限的目录位置,即对E盘下的“S…

UDP实现聊天直播间 chatroom

1.memcmp() 函数 int memcmp(const void *s1, const void *s2, size_t n); memcmp() 函数用于比较两个内存区域前 n 个字节的内容。 它接受三个参数: •const void *s1:指向第一个内存区域的指针。 •const void *s2:指向第二个内存区域的…

Java SpringBoot中优雅地判断一个对象是否为空

在Java中,可以使用以下方法优雅地判断一个对象是否为空: 使用Objects.isNull()方法判断对象是否为空: import java.util.Objects;if (Objects.isNull(obj)) {// obj为空的处理逻辑 }使用Optional类优雅地处理可能为空的对象: impo…

使用Excel连接Azure DevOps自动退出的问题

Azure DevOps Server (原名TFS)是微软公司的软件开发管理平台,也是著名的软件开发过程管理工具;系统中记录了软件开发过程中的需求、问题、缺陷和迭代计划等各种软件开发工作项数据。 对于工作项数据的批量操作(例如新增和编辑),Excel是一个非…

关于不同AR(增强现实)SDK(软件开发工具包)的汇总和特性描述

以下是每个AR SDK的核心内容概述: ARCore 开发者:Google支持平台:Android(部分设备不支持)功能:运动追踪、平面追踪、点云图、云锚点、光照估计、环境探针、人脸追踪、2D图片追踪、人物遮挡、射线测试。官网链接:ARCoreARKit 开发者:Apple支持平台:iOS(iPhone和iPad)…

【VSCode+Keil5+STM32CubeMX】开发环境配置

一、软件下载 二、软件安装 三、配置环境 四、验证开发环境 五、Keil与VS Code的同步 从0到1搭建VS Code Keil5 STM32CubeMX开发环境 优点 支持标准库HAL库LL库代码编辑更“现代化”:代码提示、函数跳转、更高自由度的定制主题等优点多端同步,VS Code和…

【Linux】在生产环境中,Linux系统排查常用命令

问题排查 文章目录 问题排查top命令CPU:vmstatprocscpu内存:free硬盘:df硬盘IO:iostat网络IO:ifstat 生产环境服务器变慢,诊断思路和性能评估 top命令 查看整机系统新能 使用top命令的话,重点…

大数据分析与内存计算——Spark安装以及Hadoop操作——注意事项

一、Spark安装 1.相关链接 https://dblab.xmu.edu.cn/blog/4322/ 2.安装Spark(Local模式) 按照文章中的步骤安装即可 遇到问题:xshell以及xftp不能使用 解决办法: 在linux使用镜像网站进行下载:wget https://mi…

视频汇聚/安防监控/视频存储EasyCVR平台EasyPlayer播放器更新:新增【性能面板】

视频汇聚/安防监控/视频存储平台EasyCVR基于云边端架构,可以在复杂的网络环境中快速、灵活部署,平台视频能力丰富,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云…

ClickHouse集群搭建教程

文章目录 前言一、相关介绍1. 端口介绍 二、部署规划1. 准备centos2. 配置集群免密登录3. 部署规划 三、ckman依赖部署1. prometheus搭建1.1 下载并解压1.2 配置启停服务1.3 promethues配置(可选,不影响ckman核心功能)1.4 prometheus启停命令1.4.1 启动prometheus1.…

安全架构设计理论与实践相关知识总结

一、安全架构概述 常见信息威胁介绍: 1. 信息泄露:信息被泄露或透露给某个非授权实体 2. 破坏信息完整性:数据被非授权地进行增删改查货破坏而受到损失 3. 拒绝服务:对信息会其他资源的合法访问被无条件的组织 4. 非法使用&#x…

vue 加 websocket 聊天

<template><div style="height: 100%; width: 100%; background-color: #fff"><div class="wrap"><!-- 头部 --><div class="titleBox"><imgsrc="@/assets/image/avatar.png"style="argin: 10p…

《数据结构学习笔记---第九篇》---循环队列的实现

文章目录 1.循环队列的定义 2.循环队列的判空判满 3.创建队列并初始化 4.入队和出队 5. 返回队尾队首元素 6.释放循环队列 1.循环队列的定义 定义&#xff1a;存储队列元素的表从逻辑上被视为一个环。 我们此次实现的循环队列&#xff0c;采用顺序表 typedef struct {int…

Scikit-Learn K均值聚类

Scikit-Learn K均值聚类 1、K均值聚类1.1、K均值聚类及原理1.2、K均值聚类的优缺点 2、Scikit-Learn K均值聚类2.1、Scikit-Learn K均值聚类API2.2、K均值聚类案例 1、K均值聚类 K-均值&#xff08;K-Means&#xff09;是一种聚类算法&#xff0c;属于无监督学习。K-Means在机器…

Linux学习笔记————C 语言版 LED 灯实验

这里写目录标题 一、实验程序编写二、 汇编部分实验程序编写三、C 语言部分实验程序编写四、编译下载验证 汇编 LED 灯实验中&#xff0c;我们讲解了如何使用汇编来编写 LED 灯驱动&#xff0c;实际工作中是很少用到汇编去写嵌入式驱动的&#xff0c;毕竟汇编太难&#xff0c;而…

鸿蒙原OS开发实例:【ArkTS类库单次I/O任务开发】

Promise和async/await提供异步并发能力&#xff0c;适用于单次I/O任务的场景开发&#xff0c;本文以使用异步进行单次文件写入为例来提供指导。 实现单次I/O任务逻辑。 import fs from ohos.file.fs; import common from ohos.app.ability.common;async function write(data:…

【MySQL】多表查询全解-【多表关系/内外自连接/子查询/多表查询案例链接】(可cv代码&案例演示)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…