传输层协议:TCP与UDP协议的区别

news2024/11/17 0:34:37

TCP和UDP有哪些区别?

关于TCP与UDP协议两个协议的区别,大部分人会回答,TCP是面向连接的,UDP是面向无连接的。

什么叫面向连接,什么叫无连接呢?在互通之前,面向连接的协议会先建立连接。例如,TCP会三次握手,而UDP不会。为什么要建立连接呢?你TCP三次握手,我UDP也可以发三个包玩玩,有什么区别吗?

所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。

  • TCP提供可靠交付。通过TCP连接传输的数据,无差错、不丢失、不重复、并且按序到达。而 UDP继承了IP包的特性,不可靠,不保证不丢失,不保证按顺序到达。
  • TCP是面向字节流的。发送的时候发的是一个流,没头没尾。IP包可不是一个流,而是一个个的IP包。之所以变成了流,这也是TCP自己的状态维护做的事情。而 UDP继承了IP的特性,基于数据报的,一个一个地发,一个一个地收。
  • TCP是可以拥塞控制。它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行为,看看是不是发快了,要不要发慢点。 UDP就不会,应用让我发,我就发,管它洪水滔天,所以udp速度也更快
  • TCP只支持单播传输,每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能
  • TCP首部开销20字节;UDP的首部开销小,只有8个字节

具体细节可见下表:

TCPUDP
可靠性可靠不可靠
连接性面向连接无连接
报文面向字节流面向报文
资源占用首部开销20字节UDP的首部开销更小,只有8个字节
效率传输效率低传输效率高
传播方式只支持单播一对一、一对多、多对一、多对多
流量控制滑动窗口
拥塞控制慢开始、拥塞避免、快重传、快恢复
传输效率

因而 TCP其实是一个有状态服务,通俗地讲就是有脑子的,里面精确地记着发送了没有,接收到没有,发送到哪个了,应该接收哪个了,错一点儿都不行。而 UDP则是无状态服务。通俗地说是没脑子的,天真无邪的,发出去就发出去了。

我们可以这样比喻,如果MAC层定义了本地局域网的传输行为,IP层定义了整个网络端到端的传输行为,这两层基本定义了这样的基因:网络传输是以包为单位的,二层叫帧,网络层叫包,传输层叫段。我们笼统地称为包。包单独传输,自行选路,在不同的设备封装解封装,不保证到达。基于这个基因,生下来的孩子UDP完全继承了这些特性,几乎没有自己的思想。

如何选择TCP还是UDP协议?

**根据两个协议的优点,我们可以在传输层有必要实现可靠传输的情况下用TCP协议;在那些对高速传输和实时性有较高要求的通信或者对准确性要求低的情况下用UDP协议。**TCP 和 UDP 应该根据应用的目的按需使用。

例如,当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议选择使用TCP协议,POP、SMTP等邮件传输的协议。当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP(如视频传输、实时通信等)。

img

参考链接

1.https://time.geekbang.org/column/article/8924

2.https://www.51cto.com/article/662343.html

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

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

相关文章

网络工程师备考7章

考点分布: 注:考点不多,这个重点记住即可; 7.1 IPV4的问题与改进 7.2 IPV6的报文格式 注:版本0110表示IPV6,源地址和目的地址都是128位(bit),整个头部固定40个B(字节) 注:通信类型和流标记实际上是没有用的。负载长度是实际的报文长度,下一个头部:IPV6是可以作…

297. 二叉树的序列化与反序列化

297. 二叉树的序列化与反序列化 难度困难 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个…

Linux:查看服务器信息,CPU、内存、系统版本、内核版本等

还是最近工作的总结,性能验证要根据服务器的配置才能做进一步的结论论证,废话不多说 目录查看Linux内核版本查看Linux系统版本CPU查看CPU信息(型号)物理CPU个数每个物理CPU中core的个数(即核数)查看逻辑CPU的个数内存查看内存信息…

【C语言航路】第十三站:动态内存管理

目录 一、为什么存在动态内存分配 二、动态内存函数 1.内存的分区 2.malloc和free (1)malloc和free库函数文档 (2)malloc和free的使用 2.calloc (1)calloc的库函数文档 (2)c…

模糊图像检测(c++)

Opencv-模糊检测 - 知乎图像清晰度,是指影像上各细部影纹及其边界的清晰程度。 解决问题:由于前端摄像机视频中聚焦不当,异物遮挡等原因,所引起的画面视野图像模糊的现象。 算法原理:将彩色图像转化为灰度图像&#xf…

Python深度学习基础(九)——深入浅析卷积核

深入浅析卷积核引言单通道卷积简单图像边缘检测锐化高斯滤波引言 提到卷积,应该多数人都会想到类似上图的这种示例,可以简单的理解成卷积核与图像中和卷积核相同大小的一块区域与卷积核相乘再求和,通过移动区域产生一个有和组成的新的图像&am…

黑马学ElasticSearch(十二)

目录: (1)ES集群-集群结构介绍 (2)es集群-搭建集群 (3)es集群-集群职责及脑裂 (4)es集群-分布式新增和查询流程 (5) es集群-故障转移 &#…

传输层协议:TCP协议(下)——运作方式(如何三次握手、四次挥手等)

运作方式 TCP协议的运行可划分为三个阶段:连接创建(connection establishment)、数据传送(data transfer)和连接终止(connection termination)。操作系统将TCP连接抽象为套接字表示的本地端点(local end-p…

【PyTorch】教程:学习基础知识-(6) Autograd

AUTOMATIC DIFFERENTIATION WITH torch.autograd 在训练神经网络时,最常用的算法是反向传播算法,在该算法中,参数根据损失函数相对于给定参数的梯度进行调整。 为了计算这些梯度, PyTorch 有一个内置的微分引擎 torch.autograd …

2022秋招算法岗面经题:训练模型时loss除以10和学习率除以10真的等价吗(SGD等价,Adam不等价)

问题描述:训练深度学习模型时loss除以10和学习率除以10等价吗? 先说结论 这个问题的答案与优化器有关 使用Adam、Adagrad、RMSprop等带有二阶动量vtv_tvt​的优化器训练时,当我们将loss除以10,对训练几乎没有影响。使用SGD、Mo…

Streamlit自定义组件开发教程

在这篇文章中,我们将学习如何构建Streamlit组件以及如何发布streamlit组件供其他人使用。 使用 3D场景编辑器快速搭建三维数字孪生场景 1、什么是Streamlit组件? Streamlit 组件是一个可共享的 Streamlit 插件,可让你为应用程序添加新的视觉…

Java——子集

题目链接 leetcode在线oj题——子集 题目描述 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 题目示例 输入:nums [1,2,3] …

MySQL管理

1:MySQL管理1.1:系统数据库Mysql数据库安装完成后,自带了一下四个数据库,具体作用如下: 数据库 含义 mysql 存储MySQL服务器正常运行所需要的各种信息 (时区、主从、用 户、权限等) information…

性能测试/实战演示 H5 性能分析

W3C标准是浏览器标准,一般浏览器都支持W3C标准,它规定使用者可以通过api查询性能信息,可借用W3C协议完成自动化H5性能测试。 W3C官网:Navigation Timing 使用chrome浏览器对webview进行手工查看,伴随着业务增多&#x…

mysql:索引的数据结构,B树,B+树浅聊

mysql:索引的数据结构 什么是索引? 索引(Index)是帮助MySQL高效获取数据的数据结构 为什么学索引? 之前应该有概念说,把索引理解为目录,比如通过s就可以查询到s开头的汉子从哪也开始&#xff…

[网鼎杯 2020 青龙组]AreUSerialz

目录 信息收集 代码审计 前提知识 思路分析 绕过检测 方法一 poc payload 方法二 poc payload 信息收集 进入页面给出了源代码如下&#xff0c;是一道PHP的反序列化题目 <?phpinclude("flag.php");highlight_file(__FILE__);class FileHandler {pro…

Linux多线程 线程概念 | 线程VS进程 | 线程控制【万字精讲】

线程 一、线程概念 1. 知识支持及回顾 在我们一开始学习进程的时候。我们总说进程在内部执行时&#xff0c;是OS操作系统调度的基本单位。其实并不严谨&#xff0c;今天&#xff0c;我们要重新完善这个说法——线程在进程内部运行&#xff0c;线程是OS操作系统调度的基本单位…

WorkPlus移动办公平台,助力企业随时随地“指尖办公”

近年来&#xff0c;随着移动互联网的发展&#xff0c;越来越多的人习惯于随时随地通过移动设备完成工作、购物、游戏等。移动办公应用就是基于移动终端的信息化办公应用&#xff0c;利用企微、钉钉、WorkPlus等移动办公平台&#xff0c;实现企业与员工间的随时随地工作、沟通&a…

技术分享 | ClickHouse StarRocks 使用经验分享

作者&#xff1a;许天云 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 一. 大纲 本篇分享下个人在实时数仓方向的一些使用经验&#xff0c;主要包含了ClickHouse 和 StarRocks 这两款目…

ASP.NET MVC解决方案的搭建(.NET Framework)——C#系列(一)

一、新建项目 1、控制器新建 2、Service层新建 3、Business数据层新建 4、Commons公共层新建 5、Models实体层新建 二、调用接口 1、接口建立 Web API 2 控制器新建 2、调用 三、Swagger接口调试配置 1、添加NuGet包 在启动项中添加Swashbuckle NuGet包 2、访问 htt…