20天 - TCP 和 UDP 有什么区别?说说 TCP 的三次握手?TCP 是用来解决什么问题?

news/2025/3/13 18:02:59/

TCP 和 UDP 有什么区别?

TCP(传输控制协议)和 UDP(用户数据报协议)都是传输层的网络协议,它们的主要区别如下:

连接方式

  • TCP:面向连接的协议,类似于打电话,在数据传输之前需要建立连接,通信结束后需要断开连接。
  • UDP:无连接的协议,类似于寄信,发送数据时不需要建立连接,直接将数据报发送出去。

可靠性

  • TCP:提供可靠的、字节流服务。发送端确保数据的完整传输,接收端收到数据后需要发送确认信息,如果发送端没有收到确认信息,会重新发送数据。
  • UDP:不保证数据传输的可靠性,不提供确认信息和重传机制。发送端发送数据后不关心接收端是否收到,数据可能丢失或顺序混乱。

传输速度

  • TCP:由于需要建立连接、确认数据和重传机制,速度相对较慢。
  • UDP:没有连接建立和数据确认等过程,传输速度更快。

数据传输形式

  • TCP:基于字节流,将数据视为连续的字节序列进行传输,接收端需要根据应用层协议来解析数据。
  • UDP:基于数据报,每个数据报都有独立的包头和数据部分,接收端收到的是完整独立的数据报。

使用场景

  • TCP:适用于对数据准确性要求高、数据传输量大的场景,如网页浏览、文件传输、电子邮件等。
  • UDP:适用于对实时性要求高、数据传输量小的场景,如视频直播、在线游戏、语音通话等。

总结

TCP 强调数据传输的可靠性和完整性,适用于需要确保数据准确到达的场景;UDP 则更注重传输速度和实时性,适用于对数据丢失不太敏感、追求快速传输的场景。

说说 TCP 的三次握手?

TCP 的三次握手是建立连接的过程,确保双方已准备好进行数据传输。具体步骤如下:

  1. 第一次握手:客户端向服务器发送一个带有 SYN(同步序列编号)标志的数据包,请求建立连接。这个数据包还包含客户端的初始序列号(ISN),用于后续的数据同步。
  2. 第二次握手:服务器收到客户端的 SYN 数据包后,确认客户端的请求,并回送一个带有 SYN 和 ACK(确认)标志的数据包。这个数据包包含服务器的初始序列号,同时将客户端的序列号加 1 作为确认。
  3. 第三次握手:客户端收到服务器的 SYN+ACK 数据包后,发送一个带有 ACK 标志的数据包作为确认,将服务器的序列号加 1 作为确认。服务器收到这个 ACK 数据包后,连接建立完成,双方可以开始数据传输。

三次握手的意义

  • 确保双方都已准备好进行通信:通过三次握手,客户端和服务器都能确认对方收到了自己的连接请求和确认信息,确保了连接的可靠性。
  • 同步序列号:双方交换初始序列号,用于后续的数据传输中的数据顺序控制和丢失重传。

示例

假设客户端的初始序列号为 X,服务器的初始序列号为 Y

  1. 客户端发送 SYN 数据包,序列号为 X
  2. 服务器收到后,发送 SYN+ACK 数据包,序列号为 Y,确认号为 X+1
  3. 客户端收到后,发送 ACK 数据包,序列号为 X+1,确认号为 Y+1

通过这三次握手,客户端和服务器建立了一个可靠的 TCP 连接,可以开始正式的数据传输

TCP 是用来解决什么问题?

TCP(传输控制协议)主要用于解决网络数据传输中的可靠性问题,确保数据能够完整、准确地从发送端传输到接收端。以下是TCP解决的主要问题:

1. 数据丢失

  • 问题:网络传输中数据包可能丢失。
  • 解决方案:TCP通过确认机制和重传机制来解决。发送方在发送数据后会等待接收方的确认信息(ACK)。如果发送方在超时时间内没有收到确认信息,就会认为数据包丢失,并重新发送丢失的数据包。

2. 数据重复

  • 问题:网络传输中数据包可能重复到达。
  • 解决方案:TCP使用序列号来标识每个数据包。接收方通过检查序列号来判断数据包是否重复,如果重复则丢弃。

3. 数据顺序错乱

  • 问题:网络传输中数据包可能顺序错乱。
  • 解决方案:TCP使用序列号和确认号来重组数据包,确保接收方收到的数据是按正确顺序排列的。

4. 网络拥塞

  • 问题:网络传输中可能出现拥塞,导致数据传输变慢或丢包。
  • 解决方案:TCP通过拥塞控制算法(如慢启动、拥塞避免等)来动态调整发送方的数据发送速率,以适应网络的当前状况。

5. 连接管理

  • 问题:如何确保双方在数据传输前都已准备好。
  • 解决方案:TCP通过三次握手来建立可靠的连接,确保双方都已准备好进行数据传输。

6. 数据完整性

  • 问题:如何确保数据在传输过程中未被篡改。
  • 解决方案:TCP使用校验和来验证数据的完整性。接收方在收到数据后会计算校验和,如果与发送方的校验和不一致,则认为数据被篡改或损坏,要求重传。

总结

TCP通过上述机制确保了数据传输的可靠性、顺序性和完整性,适用于对数据准确性要求高的场景,如网页浏览、文件传输、电子邮件等。


http://www.ppmy.cn/news/1578846.html

相关文章

《Python实战进阶》No17: 数据库连接与 ORM(SQLAlchemy 实战)

No17: 数据库连接与 ORM(SQLAlchemy 实战) 摘要 本文深入探讨SQLAlchemy在复杂场景下的高级应用,涵盖四大核心主题: 会话生命周期管理:通过事件钩子实现事务监控与审计追踪混合继承映射:结合单表/连接表继…

Linux软件包管理与Vim编辑器指南

一、Linux软件包管理 1. 什么是软件包? 在Linux下安装软件,一种常见的方法是下载程序的源代码,并进行编译,得到可执行程序。然而,这种方法既耗时又繁琐。为了方便,人们将一些常用的软件提前编译好&#x…

仅仅使用pytorch来手撕transformer架构(3):编码器模块和编码器类的实现和向前传播

仅仅使用pytorch来手撕transformer架构(2):编码器模块和编码器类的实现和向前传播 往期文章: 仅仅使用pytorch来手撕transformer架构(1):位置编码的类的实现和向前传播 最适合小白入门的Transformer介绍 仅仅使用pytorch来手撕transformer…

wordpress禁止用户在不同地点同时登录

wordpress禁止用户在不同地点同时登录,管理员除外。 function pcl_user_has_concurrent_sessions() {return (is_user_logged_in() && count(wp_get_all_sessions()) > 2); }add_action("init", function () {// 除了管理员,其他人…

C语言_数据结构总结7:顺序队列(循环队列)

纯C语言实现,不涉及C 队列 简称队,也是一种操作受限的线性表。只允许表的一端进行插入,表的另一端进行删除 特性:先进先出 针对顺序队列存在的“假溢出”问题,引出的循环队列概念。 循环队列 将顺序队列臆造为一个…

【git】 贮藏 stash

贮藏是我在sourcetree上看到的名词。之前只是浅浅的用来收藏一下修改的文件,没有完整的使用过。今天有幸使用了一次就来展开说说。 使用原因就不赘述了,错误的操作少提为好,操作步骤如下: 查看贮藏列表git stash list #输出&…

机器学习(吴恩达)

一, 机器学习 机器学习定义: 计算机能够在没有明确的编程情况下学习 特征: 特征是描述样本的属性或变量,是模型用来学习和预测的基础。如: 房屋面积, 地理位置 标签: 监督学习中需要预测的目标变量,是模型的输出目标。如: 房屋价格 样本: 如: {面积100㎡…

OpenCV开发笔记(八十三):图像remap实现哈哈镜效果

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/146213444 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…