关于TCP和UDP两种网络协议的区别

1、tcp协议

TCP (Transmission Control Protocol - 传输控制协议)

TCP 的核心目标是为应用层提供一条可靠的、无差错的、有序的字节流通道

主要特点:

  1. 面向连接:在数据传输之前,必须通过“三次握手”建立稳定的连接,传输结束后通过“四次挥手”断开连接。

  2. 可靠传输:使用确认应答(ACK)超时重传丢包重传等机制来确保数据一定能到达对端。

  3. 流量控制:通过滑动窗口机制,根据接收方的处理能力来动态调整发送数据的速度,防止接收方被淹没。

  4. 拥塞控制:通过复杂的算法(如慢启动、拥塞避免、快速重传、快速恢复)来感知网络状况,防止过多的数据注入网络导致网络瘫痪。

  5. 有序传输:为每个数据包编号(序列号),接收方会按照编号重新组装,保证数据顺序的正确性。

  6. 基于字节流:TCP 不保留消息边界。发送方连续写入多次数据,接收方可能一次全部读出,或者分多次读出。应用程序需要自己处理消息边界问题(例如,通过规定消息长度或使用特殊分隔符)。

优点: 数据可靠,无差错,不丢失,不重复,且按序到达。
缺点: 机制复杂,头部开销大(至少20字节),延迟高,传输效率相对较低。

2、udp协议

UDP 的核心目标是提供一个简单、高效的传输服务,它只负责发送数据,不提供任何可靠性保证。

主要特点:

  1. 无连接:发送数据前不需要建立连接,直接发送。

  2. 不可靠传输:不提供确认、重传、序列号等机制。发送数据后不知道对方是否收到。

  3. 无流量和拥塞控制:不管网络是否拥堵,都会以恒定的速率发送数据。这既是缺点(容易加剧网络拥堵)也是优点(延迟稳定)。

  4. 面向数据报:UDP 保留消息边界。发送方调用一次发送函数发送一个数据包,接收方调用一次接收函数就会收到整个数据包。

  5. 头部开销小:只有8字节的固定头部,非常精简。

优点: 速度快、延迟低、开销小、实时性好。
缺点: 不保证数据一定到达,不保证顺序,不保证不重复。

典型应用场景: 对实时性要求高于可靠性的应用,或者可以自己实现简单可靠性机制的应用。

  • 语音和视频通话(VoIP, Zoom, Teams):丢失少量数据包只会导致短暂卡顿或杂音,但如果用TCP重传,延迟会高到无法正常对话。

  • 在线直播和流媒体:同理,追求实时性。

  • 实时在线游戏:玩家的每一个操作都需要极低的延迟,偶尔丢包比高延迟更能接受。

  • DNS查询:查询请求本身很小,且需要快速响应,如果超时未收到回复,客户端会直接重发请求。

  • DHCP:网络分配IP地址的协议。

  • 选择 TCP:当你需要可靠性和数据正确性时。你希望所有数据都能完整、无误、按顺序地到达目的地。例如:传输一个文件、加载一个网页、发送一封邮件。99%的通用应用都使用TCP

  • 选择 UDP:当你需要速度和低延迟,并能容忍少量数据丢失时。例如:视频通话时的一帧画面丢失,远比等待它重传导致整个对话卡住要好。或者,你可以在UDP的基础上,在应用层自己实现一套简单的确认和重传机制来满足特定需求,从而获得比TCP更好的性能。

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

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

相关文章

Alibaba Lens:阿里巴巴推出的 AI 图像搜索浏览器扩展,助力B2B采购

本文转载自:https://www.hello123.com/alibaba-lens ** 一、🌟 一键截图,轻松找货:采购神器 Alibaba Lens 详解 Alibaba Lens 是阿里巴巴集团专为全球 B2B 采购商打造的一款智能浏览器插件(支持 Chrome 等主流浏览器…

WPF常见问题清单

1.Grid 内容自动换行及自适应行高 <DataGrid Grid.Row"1" FontSize"14" IsReadOnly"True" VerticalScrollBarVisibility"Auto" RowHeight"NaN" ItemsSource"{Binding List}" AutoGenerateColumns"False…

Linux驱动开发笔记(十)——中断

视频&#xff1a;第13.1讲 Linux中断实验-Linux内核中断框架简介_哔哩哔哩_bilibili 文档&#xff1a;《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81.pdf》五十一章 1. 中断API函数 每个中断都有一个中断号&#xff0c;通过中断号即可区分不同的中断。在Linux 内核中使用一…

ubuntu18.04安装PCL1.14

简化版说明 1. 安装依赖库&#xff1a; (1) boost1.84 &#xff08;https://www.boost.org/releases/1.84.0/&#xff09; tar vxf boost_xxx.tar.gz ./bootstrap.sh --prefix/usr/local/ ./b2 sudo ./b2 install (2) vtk9.1.0 &#xff08;https://vtk.org/files/releas…

python将pdf转txt,并切割ai

python将pdf转txt&#xff0c;并切割ai step1:pdf转换 from PIL import Image import pytesseract import os import tempfile from pdf2image import convert_from_path# 设置 Tesseract 路径 pytesseract.pytesseract.tesseract_cmd rC:\Users\wangrusheng\AppData\Local\Pr…

Ubuntu22.04更换阿里镜像源,ubuntu更换源

在 Ubuntu 22.04 上更换为阿里云镜像源可以加速软件包的下载和更新&#xff0c;大幅提升系统更新速度。以下是更换阿里云镜像源的步骤&#xff1a;1. 备份现有源列表在更换镜像源之前&#xff0c;建议先备份当前的源配置文件&#xff1a;bashsudo cp /etc/apt/sources.list /et…

Git版本控制工具+基础命令

Git是什么&#xff1f;Git是目前世界上最先进的分布式版本控制系统代码托管平台&#xff1a;Gitlab/Github/Gitee&#xff08;码云&#xff09;什么是版本控制系统&#xff1f;指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。版本控制最主要的功能就是追…

图解设计模式【3】

本系列共分为三篇文章&#xff0c;其中包含的设计模式如下表&#xff1a; 名称设计模式图解设计模式【1】Iterator、Adapter、Template Method、Factory Method、Singleton、Prototype、 Builder、Abstract Factory、 Bridge、 Strategy图解设计模式【2】Composite、 Decorato…

(纯新手教学)计算机视觉(opencv)实战十四——模板与多个对象匹配

图片旋转、图片镜像相关教学&#xff1a; &#xff08;纯新手教学&#xff09;计算机视觉&#xff08;opencv&#xff09;实战十三——图片旋转、图片镜像 的几种常用方法-CSDN博客https://blog.csdn.net/2302_78022640/article/details/151356600?spm1011.2415.3001.5331 模板…

Java面试核心知识点总结:Redis与MySQL高可用、高并发解决方案

在分布式系统开发中&#xff0c;高并发场景下的数据一致性、系统可用性以及性能优化始终是核心挑战。本文基于Java技术栈&#xff0c;结合Redis与MySQL的工程实践&#xff0c;系统梳理分布式系统设计的关键技术要点。一、Redis集群架构演进与高可用实践1.1 主从哨兵模式部署方案…

R 语言科研绘图第 72 期 --- mantel检验图

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

4.2-中间件之MySQL

4.2.1MySQL的基本知识SQL语句用于存取数据以及查询、更新和管理关系数据库系统。包括&#xff1a;DQL&#xff08;select&#xff09;、DML&#xff08;insert,update,delete&#xff09;、DDL&#xff08;create,alter,drop&#xff09;、DCL&#xff08;grant,revoke&#xf…

LVS + Keepalived 高可用负载均衡集群

目录 一、核心组件与作用 1. LVS&#xff08;Linux Virtual Server&#xff09; 2. Keepalived 二、DR 模式下的 LVS Keepalived 工作原理 1. 整体架构 2. 数据包流向&#xff08;DR 模式&#xff09; 三、部署步骤&#xff08;DR 模式&#xff09; 3.1 环境规划 3.2…

知识沉淀过于碎片化如何形成体系化框架

要将过于碎片化的知识沉淀转变为体系化的框架&#xff0c;必须采取一套自上而下设计与自下而上归集相结合的系统性方法&#xff0c;其核心路径在于首先进行战略性诊断与顶层蓝图设计、其次构建统一且可扩展的知识架构&#xff08;分类与标签体系&#xff09;、然后实施系统性的…

XLua教程之C#调用Lua

上一篇文章 XLua教程之入门篇-CSDN博客 在C#脚本中访问lua全局数据&#xff0c;特别是table以及function&#xff0c;代价比较大&#xff0c;建议尽量少做相关操作。 LuaEnv.Global.Get 用于获取一个全局变量&#xff0c;但是无法获取局部变量(用local修饰) 全局基本类型变量…

C++ 标准库中的哈希函数:从std::hash到自定义哈希器

C 标准库中的哈希函数&#xff1a;从 std::hash 到自定义哈希器 1. 引言 在上一篇中&#xff0c;我们介绍了哈希表为什么能够实现 O(1) 查找。 核心秘密在于&#xff1a;哈希函数。 在 C 标准库中&#xff0c;哈希表容器&#xff08;如 unordered_map、unordered_set&#xff0…

在图形 / 游戏开发中,为何 Pixels Per Unit(PPU)数值越小,物体在屏幕上显示的尺寸越大?

1. 什么是 PPU&#xff1f; PPU&#xff08;Pixels Per Unit&#xff09;指的是 多少像素对应游戏世界中的一个单位&#xff08;Unit&#xff09;。 在 Unity 等游戏引擎中&#xff0c;1 Unit 通常被视为世界空间的基本长度&#xff0c;比如 1 米。2. PPU 与物体大小的关系PPU …

【ZYNQ开发篇】Petalinux和电脑端的静态ip地址配置

使用Petalinux工具为ZYNQ板卡搭建嵌入式Linux操作系统&#xff0c;成功搭建后&#xff0c;用户通常会使用客户端软件对ZYNQ板卡上的Linux系统进行访问&#xff0c;软件需要知道ZYNQ板卡的ip地址才能进行访问&#xff0c;如果ip地址是动态变化的&#xff0c;软件每次访问都要重新…

AVL树知识总结

AVL树概念性质一颗AVL树或是空树&#xff0c;或者具有一下性质的二叉搜索树&#xff1a;左右都是AVL树&#xff0c;左右子树高度差的绝对值不超过1AVL树有n个结果&#xff0c;高度保持在O&#xff08;logN&#xff09; 搜索时间复杂度O(logN&#xff09;模拟实现插入定义&#…

返利app的跨域问题解决方案:CORS与反向代理在前后端分离架构中的应用

返利app的跨域问题解决方案&#xff1a;CORS与反向代理在前后端分离架构中的应用 大家好&#xff0c;我是阿可&#xff0c;微赚淘客系统及省赚客APP创始人&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在返利APP的前后端分离架构中&#xff0c;跨…