【一文读懂】TCP与UDP协议
TCP协议
概述
TCP(Transmission Control Protocol),即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,常用于保证数据可靠、按顺序、无差错地传输。TCP 是互联网协议族(TCP/IP)的核心协议之一,通常与 IP 协议配合使用,负责实现数据在计算机网络中的传输。TCP 是一个传输层协议,位于 OSI 模型的第四层。
TCP 提供了一个可靠的通信通道,确保应用程序能够成功、完整地传输数据。
TCP 特性
- 面向连接(Connection-Oriented):
- 在数据传输开始之前,客户端和服务器必须通过 三次握手(Three-Way Handshake)过程建立连接。
- 数据传输结束时,连接必须通过 四次挥手(Four-Way Handshake)过程进行正常关闭。
- 可靠性:
- TCP 通过 确认应答(ACK)机制确保数据可靠传输。如果数据包丢失或发生错误,TCP 会请求重新传输。
- 采用 序列号 和 校验和 来确保数据按正确顺序到达且无错误。
- 数据顺序:
- TCP 会将接收到的数据按顺序排列,即使数据包顺序到达错误,TCP 也会重新排序。
- 流量控制(Flow Control):
- TCP 使用 滑动窗口机制 来控制数据传输速率,避免发送方数据过快,导致接收方缓存溢出。
- 拥塞控制(Congestion Control):
- TCP 通过动态调整数据传输速率来避免网络拥塞,使用 慢启动、拥塞避免、快速重传 和 快速恢复 等算法。
TCP 连接的建立和关闭
1. 三次握手(Three-Way Handshake)
在 TCP 连接建立过程中,客户端和服务器通过三次握手来确保双方能够通信,并建立起可靠的连接。
- 第一次握手:客户端向服务器发送一个 SYN(同步)报文,表示客户端请求建立连接。
- 第二次握手:服务器收到客户端的 SYN 报文后,向客户端发送一个 SYN-ACK(同步-确认)报文,表示服务器同意建立连接,并且返回客户端的序列号确认。
- 第三次握手:客户端收到服务器的 SYN-ACK 报文后,再次发送一个 ACK(确认)报文给服务器,表示连接建立成功。
此时,客户端和服务器之间的连接建立完成,数据传输可以开始。
2. 四次挥手(Four-Way Handshake)
在连接关闭时,TCP 使用四次挥手来确保数据的传输完成,双方都可以安全关闭连接。
- 第一次挥手:客户端发送一个 FIN(结束)报文,表示客户端不再发送数据,开始关闭连接。
- 第二次挥手:服务器收到 FIN 报文后,向客户端发送一个 ACK(确认)报文,表示服务器确认收到关闭连接的请求。
- 第三次挥手:服务器发送一个 FIN 报文,表示服务器也没有数据发送,准备关闭连接。
- 第四次挥手:客户端收到服务器的 FIN 报文后,发送一个 ACK 报文,确认连接关闭。
至此,连接完全关闭。
TCP 报文结构
TCP 报文由 TCP 头部 和 数据部分 组成,TCP 头部包含了多个字段,负责控制数据的传输,确保数据按顺序且可靠地到达目标。
1. TCP 头部结构
TCP 头部固定为 20 字节(不含选项字段)。以下是主要字段的说明:
-
源端口(Source Port):发送方端口号(2 字节)。
-
目标端口(Destination Port):接收方端口号(2 字节)。
-
序列号(Sequence Number):数据流的序列号,标识该数据包在整个数据流中的位置(4 字节)。
-
确认号(Acknowledgment Number):如果 ACK 标志位为 1,该字段表示接收方期望接收的下一个字节序号(4 字节)。
-
数据偏移(Data Offset):TCP 头部的长度,单位是 4 字节(4 字节)。
-
标志位(Flags)
:标识报文的不同状态,常见的标志位包括:
- SYN:同步位,用于建立连接。
- ACK:确认位,表示报文是对先前报文的确认。
- FIN:结束位,表示关闭连接。
- RST:重置位,表示连接异常。
- PSH:推送位,表示数据需要立即传输。
- URG:紧急位,表示数据为紧急数据。
-
窗口大小(Window Size):表示接收方的缓冲区大小,控制流量的大小(2 字节)。
-
校验和(Checksum):用于检测数据在传输过程中是否出现错误(2 字节)。
-
紧急指针(Urgent Pointer):如果 URG 标志位为 1,紧急指针标识紧急数据的结束位置(2 字节)。
-
选项字段(Options):可选的字段,包含最大报文段长度、时间戳等信息(可选)。
2. TCP 数据部分
TCP 数据部分包含实际传输的数据,数据部分的大小取决于窗口大小和网络条件,通常在 0 到 1460 字节之间。
TCP 的拥塞控制
TCP 使用多种算法来管理网络拥塞,确保数据能够高效传输:
- 慢启动(Slow Start):在连接建立初期,TCP 发送方从一个小的窗口大小开始逐渐增加发送窗口大小,以避免过多的数据立即发送导致拥塞。
- 拥塞避免(Congestion Avoidance):当网络带宽使用达到一定阈值时,TCP 会减慢数据发送速度,避免拥塞发生。
- 快速重传(Fast Retransmit):如果 TCP 发现某个数据包丢失,它会立即重传该数据包,而不是等待超时。
- 快速恢复(Fast Recovery):与快速重传一起使用,当丢包事件发生时,TCP 会避免立即进入慢启动阶段,而是通过调整拥塞窗口进行恢复。
应用
Web 浏览(HTTP/HTTPS)、电子邮件(SMTP)和文件传输(FTP)
UDP协议
概述
UDP(User Datagram Protocol),即用户数据报协议,是一种无连接的、简单的传输层协议。它在互联网协议族(TCP/IP 协议栈)中与 TCP 一样工作于传输层,负责实现数据包的传输。与 TCP 不同,UDP 是 无连接的,不保证数据的可靠性、顺序性或完整性。因此,它适用于对延迟敏感、能容忍丢包的应用场景,如实时音视频通信、在线游戏等。
UDP 通过提供一种简单且高效的方式来进行数据传输,消除了 TCP 的连接建立、流量控制、拥塞控制等复杂过程,因此它通常具有更低的延迟,但也意味着它牺牲了可靠性和顺序性保障。
特性
- 无连接(Connectionless):
- 在传输数据之前,UDP 不需要进行连接建立。发送方可以随时发送数据包,而接收方也无需建立连接或维持状态。
- 每个数据包都是独立的,发送方和接收方没有任何状态保持。
- 不可靠(Unreliable):
- UDP 不提供数据包的确认、重传或错误修正。数据包可能在传输过程中丢失、重复或乱序。接收方必须自行处理丢包或错误。
- 由于没有拥塞控制机制,UDP 适合需要实时传输且能容忍丢包的应用(如视频流、VoIP、在线游戏)。
- 低延迟(Low Latency):
- 由于没有连接建立和数据重传等机制,UDP 比 TCP 更快,适合对实时性要求高的应用。
- 简单:
- UDP 的协议开销小,数据包头部较小,仅包含最基本的必要字段。因此,传输效率较高。
- 面向数据报(Datagram-Oriented):
- UDP 传输的数据单位为 数据报(Datagram),每个数据报在传输中独立处理,彼此之间没有顺序关系。
UDP 头部结构
UDP 数据包的头部结构非常简洁,固定长度为 8 字节,包含以下字段:
- 源端口(Source Port)(2 字节):指定发送端的端口号。如果发送方没有使用端口,字段可以置为 0。
- 目标端口(Destination Port)(2 字节):指定接收端的端口号。
- 长度(Length)(2 字节):UDP 数据报的总长度,包括 UDP 头部和数据部分。
- 校验和(Checksum)(2 字节):用于错误检测,检查 UDP 数据报在传输过程中是否有错误。校验和不仅覆盖 UDP 数据部分,还包括伪头部,伪头部是 IP 层的一部分,用于校验传输的数据。
- 校验和是可选的,在 IPv4 中并不是强制要求,但在 IPv6 中是强制要求的。如果不使用校验和,可以设置为 0。
- 数据(Data):实际传输的内容,长度由 长度 字段指定。数据部分的长度可以变动,因此 UDP 数据包的总大小不固定。
UDP 头部示例:
| Source Port | Destination Port | Length | Checksum | Data |2 bytes 2 bytes 2 bytes 2 bytes
应用场景
由于 UDP 的低延迟和简单性,它适合以下应用场景:
- 实时通信:
- VoIP(语音通信):如 Skype、Zoom 等,音频流传输要求低延迟和高效率,而丢包可以容忍。
- 视频流:例如网络直播、视频会议等,实时性要求高,但对于轻微的丢包,用户体验影响较小。
- 在线游戏:
- 网络游戏通常需要高效、实时的数据传输,UDP 用于玩家之间的实时动作和游戏状态同步。
- 广播/多播通信:
- UDP 支持广播和多播,适用于数据需要传输给多个接收方的场景,例如 IPTV 广播。
- DNS 查询:
- DNS(域名系统)请求和响应通常通过 UDP 协议进行,传输简单、延迟低。
- SNMP(简单网络管理协议):
- 用于网络设备的监控和管理,UDP 用于简单、高效的请求和响应。
总结
TCP 适用于对可靠性要求高的场景,它提供了连接管理、数据顺序、流量控制和拥塞控制等机制,保证了数据的完整性和可靠性,牺牲了一定的传输效率。
UDP 适用于对实时性要求高、能容忍丢包的场景,如视频通话、在线游戏等。它不提供连接管理、数据重传等保障,减少了协议开销,提高了传输速度,但牺牲了数据的可靠性和顺序性。
相同点:
- 传输层协议:TCP 和 UDP 都属于 传输层(OSI 模型第4层)协议,负责将数据从源主机传输到目标主机。
- 基于 IP 协议:两者都依赖于 IP 协议 来实现数据包的路由和转发,因此在网络通信中都需要通过 IP 地址来寻址。
- 数据分段:两者都会将大的数据块分割成较小的数据段,并通过网络传输。这些数据段的大小由应用层决定,但实际传输过程中,IP 协议负责将其进一步分段。
不同点:
特性 | TCP | UDP |
---|---|---|
连接方式 | 面向连接(Connection-Oriented) | 无连接(Connectionless) |
可靠性 | 可靠(数据传输有确认、重传机制) | 不可靠(数据不保证送达,且可能丢失) |
顺序保证 | 保证数据按顺序到达(有序传输) | 不保证数据顺序(可能乱序到达) |
流量控制 | 有流量控制机制(如滑动窗口) | 无流量控制机制 |
拥塞控制 | 有拥塞控制机制(如慢启动、拥塞避免) | 无拥塞控制机制 |
头部大小 | 20 字节(最小) | 8 字节 |
传输效率 | 传输效率较低,因需额外的控制和确认信息 | 传输效率较高,头部较小且无额外控制信息 |
延迟 | 较高(需要连接建立、流量控制等机制) | 较低(没有连接建立和重传机制) |
用途 | 用于要求高可靠性和数据顺序的应用 | 用于对延迟敏感且能容忍丢包的应用 |
典型应用场景 | Web 浏览、文件传输(HTTP、FTP)、电子邮件 | 实时视频、语音通信、在线游戏 |
连接建立 | 需要三次握手(Three-Way Handshake) | 无需建立连接,直接发送数据 |
数据丢失和错误处理 | 会重传丢失的数据,并进行校验 | 不会重传丢失的数据,校验和可选 |
校验机制 | 校验和是强制的,用于确保数据传输正确 | 校验和可选(但一般会使用) |
相关文章:
【一文读懂】TCP与UDP协议
TCP协议 概述 TCP(Transmission Control Protocol),即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,常用于保证数据可靠、按顺序、无差错地传输。TCP 是互联网协议族(TCP/IP&…...
数据结构 树的存储和遍历
一、树的定义 树的定义 树型结构是⼀类重要的⾮线性数据结构。 • 有⼀个特殊的结点,称为根结点,根结点没有前驱结点。 • 除根结点外,其余结点被分成M个互不相交的集合T1 、T2 、...、Tm T,其中每⼀个集合⼜是⼀棵树,…...

Jenkins项目CICD流程
Jenkins项目流程:1.配置git环境 git config --...2.把前后端的目录初始化位本地工作目录 #git init3.提交到本地git #git add ./ git commit -m "" git tag v14.然后提交到远程git(通过,用户,群组,项目,管理项目)git remote add origin http://...git push -…...

EasyRTC轻量级SDK:智能硬件音视频通信资源的高效利用方案
在智能硬件这片广袤天地里,每一份资源的精打细算都关乎产品的生死存亡。随着物联网技术的疾速演进,实时音视频通信功能已成为众多设备的标配。然而,硬件资源的捉襟见肘,让开发者们常常陷入两难境地。EasyRTC,以它的极致…...
AI Agent未来走向何方?
AI Agent未来走向何方? 目录 AI Agent未来走向何方?AI推理支撑应用开发走向新赛道智能体成为AI应用的主流形式大模型应用正以AI Agent的主流形式赋能终端设备从大到小AI模型发展从通用转向垂直:小型语言模型(SLM)AI推理支撑应用开发走向新赛道 训练与推理,是AI 大模型两大核…...

Visual Studio Code的键盘快捷键
注意:如果您在Mac上访问此页面,您将看到Mac的键盘快捷键。如果您使用Windows或Linux访问,您将看到该平台的密钥。如果您需要其他平台的键盘快捷键,请将鼠标悬停在您感兴趣的键上。 键盘快捷键编辑器 VS Code通过键盘快捷键编辑器…...

【Jenkins流水线搭建】
Jenkins流水线搭建 01、SpringBoot项目 - Jenkins基于Jar持续集成搭建文档基于手动方式发布项目基于dockerfile基于jenkins + dockerfile + jenkinsfile +pieline基于jenkins + jar方式的发布01、环境说明01、准备项目02、准备服务器03、安装git04、安装jdk1.805、安装maven依赖…...
PHP 基础介绍
PHP 学习资料 PHP 学习资料 PHP 学习资料 PHP 是一种广泛使用的开源服务器端脚本语言,尤其适合 Web 开发,能轻松嵌入 HTML 中,生成动态网页内容。接下来,让我们一起了解 PHP 的基础内容。 一、PHP 的安装与配置 在开始编写 PH…...

DeepSeek如何重塑我的编程学习:计算机新生的AI实践
目录 🚀前言🌟邂逅DeepSeek:从困惑到惊喜💯初学编程的困境💯DeepSeek的优势 🖊️DeepSeek在编程学习中的运用💯注释💯算法逐步分析💯调试帮助💯跨语言迁移学习…...
spring boot和spring cloud的关系
Spring Boot和Spring Cloud之间的关系可以概括为构建和扩展的关系,其中Spring Boot提供了基础,而Spring Cloud在此基础上提供了分布式系统和微服务架构所需的扩展和工具。以下是两者关系的详细阐述: 一、基础与扩展 Spring Boot:…...
ThreadLocal原理和存在问题
ThreadLocal 的工作原理 ThreadLocal 是 Java 提供的一个类,用于在多线程环境下存储线程局部变量。每个线程都可以独立地更改存储在其 ThreadLocal 变量中的值,而不会影响其他线程中的变量副本。ThreadLocal 的实现原理基于 Thread 类中的 ThreadLocal.…...

用Echarts的柱状图实现圆柱体效果
用Echarts的柱状图实现圆柱体效果 在数据可视化的世界里,Echarts凭借其强大的功能和丰富的特性,成为众多开发者的首选工具。本文将深入探讨如何利用Echarts的柱状图来实现独特的圆柱体效果,通过详细剖析代码,让大家了解其中的实现…...
Docker 常用命令基础详解(一)
一、Docker 初相识 在当今数字化时代,软件开发和部署的效率与灵活性成为了关键因素。Docker,作为一款开源的应用容器引擎,犹如一颗璀璨的明星,照亮了软件开发与部署的道路,为开发者们带来了前所未有的便利。它就像是一…...

Java并发中的CAS机制:原理、应用与挑战(通俗易懂版)
上一期文章内容:Java并发中的乐观锁与悲观锁, 本期文章我们来讲一下Java并发中的CAS机制 一、从银行账户案例理解CAS CAS 是一种乐观锁机制,用于在不使用锁的情况下实现多线程对共享资源的并发访问。 它包含三个操作数:内存位置&a…...

腾讯发布混元-3D 2.0: 首个开源高质3D-DiT生成大模型
在之前的文章中已经和大家介绍过腾讯HunYuan-3D 1.0,感兴趣的小伙伴可以点击下面链接阅读~ HunYuan-3D 是首个开源高质3D-DiT生成大模型,几何与纹理解藕生成,一键将创意具象化。 2.0模型架构图及介绍 2.0模型将几何和纹理生成解耦࿰…...
【机器学习】线性回归与一元线性回归
线性回归与一元线性回归 V1.1线性回归问题线性方程的最优解一元线性回归一元线性回归的方程一元线性回归距离衡量方法一元线性回归的最优化求解一元线性回归的最小二乘法解法 V1.1 线性回归问题 线性回归问题就是找一条线或超平面,并使用线或超平面来描述数据分布…...
哈希表-两个数的交集
代码随想录-刷题笔记 349. 两个数组的交集 - 力扣(LeetCode) 内容: 集合的使用 , 重复的数剔除掉,剩下的即为交集,最后加入数组即可。 class Solution {public int[] intersection(int[] nums1, int[] nums2) {Set<Integer…...

望远镜成像系统--科学评价光学镜头
望远镜是一种利用透镜或反射镜以及其他光学器件观测遥远物体的光学仪器。其原理是通过透镜的折射或反射镜的反射,将光线聚焦成像,再经过一个放大目镜进行观察。日常生活中的光学望远镜又称“天文望远镜”。1608年,荷兰的一位眼镜商汉斯利伯希…...
服务器延迟给视频网站造成的影响
在数字化时代中,网络视频已经成为人们日常娱乐和获取信息的重要平台,网络视频的流畅性会影响着用户的体验度,那么,当服务器出现延迟会对视频网站造成哪些影响呢?本文就来共同了解一下吧! 当所使用的服务器由…...

C++算法竞赛基础语法-9
快速排序是一种高效的排序算法,由C. A. R. Hoare在1960年提出,基本思想是分治法(Divide and Conquer)策略,通过递归将一个大问题分解为若干个较小的子问题,然后合并这些子问题的解来解决原始问题 快速排序…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...