TCP和Udp的区别是什么

article/2025/10/4 23:21:06

如果想要愉快地进行上网冲浪、聊天、视频通话,那么有两个网络协议你不得不知道——
TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)

OSI 和 TCP/IP 模型在传输层定义两种传输协议:TCP(或传输控制协议)和 UDP(或用户数据报协议)。

UDP

指的是用户数据报协议,是一种不可靠无连接、实时性高的协议,在数据发送前,不需要提前建立连接,所以可以更高效地传输数据。但可靠性无法保证,UDP只管把数据送出去,接受者有没有收到也不管。

UDP 在许多方面非常有效。当某个程序的目标是尽快地传输尽可能多的信息时(其中任意给定数据的重要性相对较低),可使用 UDP。ICQ 短消息使用 UDP 协议发送消息。

许多程序将使用单独的TCP连接和单独的UDP连接。重要的状态信息随可靠的TCP连接发送,而主数据流通过UDP发送。

TCP

在这里插入图片描述
在这里插入图片描述

TCP的目的是提供可靠的数据传输,并在相互进行通信的设备或服务之间保持一个虚拟连接。TCP在数据包接收无序、丢失或在交付期间被破坏时,负责数据恢复。它通过为其发送的每个数据包提供一个序号来完成此恢复。记住,较低的网络层会将每个数据包视为一个独立的单元,因此,数据包可以沿完全不同的路径发送,即使它们都是同一消息的组成部分。这种路由与网络层处理分段和重新组装数据包的方式非常相似,只是级别更高而已。

为确保正确地接收数据,TCP要求在目标计算机成功收到数据时发回一个确认(即 ACK)。如果在某个时限内未收到相应的 ACK,将重新传送数据包。如果网络拥塞,这种重新传送将导致发送的数据包重复。但是,接收计算机可使用数据包的序号来确定它是否为重复数据包,并在必要时丢弃它。

TCP适用场景:

适用于对传输质量要求较高,以及传输大量数据的通信场景(如文件传输)。
在需要传输可靠数据的场合通常会选择使用TCP通信协议。
比如QQ/微信/支付宝等通信软件的账户登录和支付相关功能是通常采用可靠的TCP通信协议来实现。

TCP与UDP区别总结

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道;UDP则是不可靠信道

问题

1、UDP不是不可靠吗?为什么QQ发信息用的是UDP,不怕信息对方没收到吗?

答:QQ虽然是用UDP发送信息,但是其实QQ在后台是用TCP与服务器相连的。对于利用UDP发出去的信息,服务器有一套机制保证信息不会丢失。

事实上我们在后面也可以自己设计类似的机制:比如我和你通过UDP收发信息,约定下线之前会相互通知,我收到你的信息之后我会给你回一个“确认收到的信息”。如果你给我发了一个信息,等待了好久都没有收到我的“确认收到”,我也没有给你发“下线通知”,那就代表这个数据包很可能已经丢失了,你要重新给我再发一次。自行设计类似这种的UDP应答机制,可以保证一定的可靠性。

2、UDP不是不可靠吗?为什么音视频通话用的是UDP?
答:首先要解答这个问题,我们首先要知道声音是如何由麦克风输入到网络中传播的。声音通过麦克风采样、量化(模数转换,位数越高还原越好,一般设备是16位)、编码成二进制数据之后输入到对应的设备文件中,然后对应的软件会从该设备文件中一次一次遵循MTU的容量标准读取一定字节的数据并封装成UDP包发送出去。

人说话的时候声音的频率是300hz-3400hz, 而我们耳朵听力范围是20hz~20000hz。根据奈奎斯特采样定律,当采样频率大于信号中最高频率的2倍时,采样之后的数字信号完整地保留了原始信号中的信息。也就是说实际上采样频率为6800hz(一秒钟采样6800次)就已经够我们听清楚对方在说些什么了,为了保证一定的容错率,一般最低采样频率为8khz。而人耳听力极限为20khz,也就是说当采样频率大于40khz的时候理论上我们人耳已经分辨不出和原声的区别了,抽样频率44100Hz则是理论上的CD音质界限了。

我们平时通过网络进行语言聊天显然不需要CD音质那么高的要求(如果你是和周杰伦、陈奕迅打电话则另说),8khz已经够满足我们的日常需求了。如果采样频率从是8khz,采样位数为16位,假设一个包携带的用户数据大小为548字节(在Internet环境下,将UDP数据控制在548字节以下最理想),也就是一秒钟可以生成30个UDP包。即使网络非常不好,出现了部分丢包的情况,也能勉强知道对方在说什么。

同理在线视频聊天也是如此,丢了几个包可能就是画质没那么清晰、没那么顺畅,但实时性高其实并不太影响我们日常使用。

如果用tcp进行聊天的话,因为它效率非常低。很有可能你女朋友和你说她吃完饭准备洗澡了,电话这头的你还是以为女朋友在吃饭(tcp传输效率低,导致延迟很高)。


http://chatgpt.dhexx.cn/article/GNM1iSmW.shtml

相关文章

TCP 和 UDP的区别

前言 一、TCP和UDP的区别 二、OSI七层模型 三、TCP协议的特点 四、UDP协议的特点 五、TCP和UDP的比较 总结 前言 总结一下TCP和UDP的区别。 一、TCP和UDP的区别 1.什么是TCP? TCP (Transmission Control Protocol)传输控制协议 …

TCP与UDP的区别与联系

TCP协议 TCP协议全称传输控制协议,就是对传输过程中的数据有一定的控制!我们来看看它的包头的样子! 我们来分析分析每部分的含义和作用: 源端口号/目的端口号: 表示数据从哪个进程来, 到哪个进程去. 32位序号: 4位首部长度: 表示该tcp报头有多少个4字节(32个bit) 6位保…

TCP和UDP的区别·一张图秒懂

tcp和udp少女喝水照片 下面看看具体TCP与UDP区别: TCP用的更多一些。更靠谱。

网络基础——TCP与UDP的区别

Web基础——COOKIE与SESSION的区别 如上表格,区别总结如下: 1)、连接性质不同: TCP是面向有连接,而UDP是面向无连接的。 所谓的面向有连接,通俗讲是指传输数据时,是否需要先建立通讯&#xff0c…

一文搞懂TCP与UDP的区别

摘要:计算机网络基础 引言 网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别。 一、TCP/IP网络模型 计算机与网络设备要相互通信…

TCP和UDP的区别和优缺点

1、TCP与UDP区别总结: 1、 TCP面向连接 (如打电话要先拨号建立连接); UDP是无连接 的,即发送数据之前不需要建立连接 2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不…

终于懂了TCP和UDP协议区别

老样子先认识一下这俩伙计 TCP和UDP都是来自于传输层的协议。 传输层是位于第2层的,如下图所示。 传输层位于应用层和网络层之间,负责位于不同主机中进程之间的通信。 之前一位老哥问我:不同电脑之间是如何通信的呢?是不是还要自己开发协议什么的。 分析:这位老哥觉…

TCP和UDP的区别(简单明了)

目录 1 前言 2 TCP 2.1 TCP如何保证可靠传输 3 UDP 1 前言 你知道什么是TCP和UDP吗?你知道TCP和UDP有什么区别吗?可能大家平时总是听说过TCP和UDP,但是一直不知道它们是怎么回事。今天就给大家介绍一下。我们常用的网络通讯、软件聊天、以…

AndroidStudio清理C盘下AVD模拟器的空间

刚刚打开了Explorer,他奶奶的,少了那么多G。【强迫症不能忍】 于是我查找了一下,发现AndroidStudio官方的模拟器占用很大空间。 就我的来说,一个模拟器.avd占用了我10G。草 在这个目录下可以看到.avd文件和.ini文件。.avd占了我…

AVD配置和使用

android 虚拟设备管理Android Virtual Device Manager以下为直接复制粘贴内容:AVD的全称为:Android Virtual Device,就是Android运行的虚拟设备,他是Android的模拟器识别。建立的Android要运行,必须创建AVD&#xff0c…

IDEA使用AVD Manager创建AVD

1、打开AVDManager 2、 3、 4、选择镜像 5、点击Finish 6、 启动报错: 16:51 Emulator: emulator: ERROR: This AVDs configuration is missing a kernel file! Please ensure the file "kernel-qemu" is in the same location as your system image.16:…

Android studio 创建avd失败

1.问题描述 第一次创建虚拟机,显示 consider using a system image with Google APIs to enable testing with Google Play Services,avd创建失败。 2.原因 sdk文件夹下的 .\sources\system-images 路径变更为 .\system-images。 💡sdk文件夹…

avd模拟器快捷键

正看到一个activity在屏幕朝向改变时有可能会泄漏的帖子,因为activity会重新create http://blog.csdn.net/tu_bingbing/article/details/10395129 结果发现还是自己测试一下的好,于是发现对avd的快捷键还是一无所知 重新google了下 国外版 http://w…

Appium基础 — Android模拟器(AVD)安装

当前市面上Android版本的模拟器还是挺多的,我们主要说明三款Android模拟器。 分别是:Android Virtual Devices、Genymotion、国内安卓模拟器。 Android Virtual Devices是Android SDK自带的模拟器,根据Android SDK不同平台版本,可…

android studio找不到avd,修改android studio中的avd sdk路径、avd sdk找不到的解决方案

类型:编程工具大小:1.53G语言:英文 评分:6.2 标签: 立即下载 很多人都遇到安装android studio之后需要下载gradle和重新下载avd sdk的问题 首先,设置环境变量,ANDROID_SDK_HOME值为sdk所在目录,GRADLE_HOME值为gradle所在目录,在path中添加%ANDROID_SDK_HOME%\bin;%GR…

android avd

avd 记录~ 一、avd 创建1.1、选择创建自己的设备1.2、自定义设备的参数配置1.3、选择自己创建的设备,next,再选择api即可。 二、avd 默认位置安装位置2.1、.android/avd 下2.1.1、.android/avd/xxxx.ini 文件2.1.2、.android/avd/.avd 下 config.ini 三、…

模拟器之AVD模拟器

以下内容全部或部分转自或参考于网络。 注:AVD模拟器运行很慢,第一次启动后可以不用再关闭。 现在新版的AVD模拟器也很快(如果CPU支持会更快),而且是免费的。 AVD模拟器上的按键和电脑物理键盘的对应关系 1.menu键…

Android Studio修改Avd虚拟机位置

一、Android Studio修改Avd虚拟机位置 创建虚拟机后默认位置 Android虚拟机一个版本解禁10个g, c盘往往不够用。 这样就需要修改 第一步:.ini文件和对应的虚拟机avd文件夹 第二步:将avd剪切到其他的盘中 第三步:修改.ini文件的path路径为新的目录

Could not start AVD

Could not start AVD 环境 linux下的Android Studio 问题描述 在启动模拟器时需要先下载Andriod 10.0 (google),我使用over the wall 下载起来比较快,下载之后选择已下载的手机类型之后弹出来“Could not start AVD”,或者在第二次开机使用时下拉选择AVD Manage…

Android AVD 存放路径修改

1、在D盘或者任何你想要的地方建立一个文件夹 AndroidAVD用于存放虚拟机。 2、右击“我的电脑”->"属性"->“高级系统设置"->"环境变量"->"系统变量"->"新建",新建一个环境变量,变量名为ANDROID_SDK_H…