TCP/UDP的区别

首先来介绍一下什么是TCP和UDP

TCP(传输控制协议)和UDP(用户数据报协议)是互联网协议套件中两个重要的传输层协议。它们在数据传输的方式、可靠性、连接性等方面有显著的区别。

总之他们两个就是个协议,协议也就是数据结构,是数据传输的方式。看不太懂?我们先讲讲他们两个的区别,在文末我们会举个生动形象的例子。

TCP和UDP的主要区别

1. 连接性

  • TCP面向连接
    • 类似于打电话需要先拨号建立连接,TCP在数据传输前要通过三次握手(Three-way Handshake)建立连接。
    • 连接建立后,进行数据传输,最后通过四次挥手(Four-way Handshake)断开连接。
  • UDP无连接
    • 类似于发送信件,不需要先建立连接,数据包可以直接发送。
    • 这种无连接的特性使得UDP的延迟较低,适合实时应用。

2. 可靠性

  • TCP提供可靠服务

    • 通过序列号和确认机制保证数据无差错、不丢失、不重复、按序到达。
    • 拥有重传机制(当丢包或出错时重新发送)和流量控制机制(确保接收方不被数据淹没)。
  • UDP尽最大努力交付

    • 不提供可靠性保障,数据包可能丢失、重复或乱序到达。
    • 适合对实时性要求高的应用,如VoIP、视频会议等。

3. 数据传输方式

  • TCP面向字节流

    • 数据被看成一个连续的字节流,没有明确的边界。
    • 数据以流的形式发送,接收方需要按顺序组装。
  • UDP面向报文

    • 数据作为独立的报文进行传输,每个报文有明确的边界。
    • 每个报文独立传输,接收方接收到的是完整的报文。

4. 拥塞控制

  • TCP具有拥塞控制
    • 通过慢启动、拥塞避免、快速重传和快速恢复等机制,动态调整发送速率,防止网络拥塞。
  • UDP没有拥塞控制
    • 没有内建的拥塞控制机制,发送速率不受网络状况的影响。
    • 对实时应用很有用,但可能导致网络拥塞。

5. 通信模式

  • TCP点到点通信

    • 每条TCP连接只能在两个端点之间进行,确保可靠的双向通信。
  • UDP支持多种通信模式

    • 支持一对一、一对多、多对一和多对多的通信模式,灵活性更高。
    • 适合广播和多播场景,如视频会议、多点传输等。

6. 首部开销

  • TCP首部开销大

    • TCP首部至少20字节,包含序列号、确认号、窗口大小等信息。
    • 提供丰富的控制信息,确保可靠性和流量控制。
  • UDP首部开销小

    • UDP首部只有8字节,包含源端口、目的端口、长度和校验和。
    • 更轻量,适合对首部开销敏感的应用。

7. 逻辑通信信道

  • TCP提供全双工的可靠信道

    • 在同一连接中,双向数据传输都可以同时进行,保证可靠性。
  • UDP是不可靠信道

    • 数据包可能丢失、重复或乱序,不保证可靠性。

适用场景

  • TCP适用于

    • 需要可靠传输的应用,如网页浏览(HTTP/HTTPS)、文件传输(FTP)、电子邮件(SMTP/IMAP)。
  • UDP适用于

    • 对实时性要求高、不需要可靠传输的应用,如视频流(IPTV)、语音通话(VoIP)、在线游戏、DNS查询。
TCP/UDP的区别
特性TCPUDP
连接性面向连接(需要连接)无连接(不需要建立连接)
可靠性可靠(无差错、不丢失、不重复、按序到达)尽最大努力交付(不保证可靠交付)
数据传输方式面向字节流面向报文
拥塞控制具有拥塞控制无拥塞控制
通信模式仅支持点到点支持一对一、一对多、多对一、多对多
首部开销20字节或更多,开销较大8字节,开销较小
逻辑通信信道全双工的可靠信道不可靠信道

 

下面我举个生动点的例子来帮助理解:

TCP:打电话

情景:假设你要和一个朋友进行长时间的电话聊天。

  1. 建立连接(三次握手):

    • 你拨打朋友的电话号码(发送SYN)。
    • 朋友接听电话并回应:“喂?”(发送SYN-ACK)。
    • 你确认接听并说:“你好,是我。”(发送ACK)。
    • 现在,电话连接已经建立,你们可以开始交流。
  2. 可靠传输

    • 在通话过程中,你们每说一句话都会得到对方的确认(对方听到并回应)。
    • 如果某一句话没有听清楚,你们会要求对方重复(重传机制)。
    • 整个对话是按序进行的,你不会先听到结尾,再听到开头。
  3. 连接断开(四次挥手):

    • 当你们的对话结束时,你会说:“再见”(发送FIN)。
    • 朋友回应:“再见”(发送FIN-ACK)。
    • 你确认收到并挂断电话(发送ACK)。
    • 朋友也挂断电话,连接关闭。

特点

  • 建立连接(打电话前需要拨号)。
  • 可靠传输(每一句话都能被确认)。
  • 按序传输(对话有序进行)。
  • 连接关闭(挂电话)。
UDP:寄信件

情景:假设你要给一个朋友发送几封信,每封信是独立的,内容没有特定顺序。

  1. 无连接

    • 你直接写信,把信投入邮筒,不需要提前通知朋友(不需要建立连接)。
    • 朋友会在某个时间收到信件,直接打开阅读。
  2. 尽最大努力交付

    • 信件在邮寄过程中可能会丢失,朋友可能收不到某封信(不保证可靠传输)。
    • 朋友可能会在不同时间收到不同的信件,顺序也可能不一致(不保证按序到达)。
    • 如果某封信丢失了,你不会自动得知(没有确认机制)。
  3. 面向报文

    • 每封信都是一个独立的整体,有完整的内容和明确的边界。

特点

  • 无需建立连接(直接寄信)。
  • 尽最大努力交付(信件可能丢失)。
  • 独立的报文(每封信独立)。
  • 不保证按序到达(信件到达顺序不确定)

具体应用场景

  • TCP:想象你在使用网上银行服务,需要确保每一笔交易都可靠、完整地传输和处理。
  • UDP:想象你在观看一个直播视频,即使有少量的数据包丢失,也不会影响整体体验,你希望视频流畅,不想因为重传导致延迟。

 我写到这,已经大致理解了,总而言之,言而总之,说的就一件事:TCP可靠,UDP不太可靠,但是TCP比较慢,UDP比较快。

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

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

相关文章

PG 数据库常用参数调整

1.shard_buffers Postgresql使用自己的缓冲区,也使用操作系统缓冲区。这意味着数据存储在内存中两次,首先是 Postgresql缓冲区,然后是操作系统缓冲区。 与其他数据库不同, Postgresql不提供直接IO。这称为双缓冲(就是磁盘中的时候读的时候先放在数据库的缓冲区&am…

【上下界分析 差分数组】798得分最高的最小轮调

本文涉及知识点 差分数组 本题同解 C算法前缀和的应用:798得分最高的最小轮调 LeetCode798得分最高的最小轮调 给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调,这样可以使数组变为 [nums[k], nums[k 1], … nums[nums.lengt…

leetcode168:Excel表列名称

题目链接&#xff1a;168. Excel表列名称 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:string convertToTitle(int columnNumber) {string ss1;int MOD 0;if(columnNumber < 26){ss1 (columnNumber A - 1);return ss1;}while(columnNumber){int MO…

Web学习_SQL注入_布尔盲注

盲注就是在SQL注入过程中&#xff0c;SQL语句执行后&#xff0c;查询到的数据不能 回显到前端页面。此时&#xff0c;我们需要利用一些方法进行判断或者尝 试&#xff0c;这个过程称之为盲注。而布尔盲注就是SQL语句执行后&#xff0c;页面 不返回具体数据&#xff0c;数据库只…

【AIGC调研系列】chatTTS与GPT-SoVITS的对比优劣势

ChatTTS和GPT-SoVITS都是在文本转语音&#xff08;TTS&#xff09;领域的重要开源项目&#xff0c;但它们各自有不同的优势和劣势。 ChatTTS 优点&#xff1a; 多语言支持&#xff1a;ChatTTS支持中英文&#xff0c;并且能够生成高质量、自然流畅的对话语音[4][10][13]。细粒…

未卸载干净的proteus安装教程7.8

提醒&#xff1a; 针对第一次安装推荐博文&#xff1a;https://jingyan.baidu.com/article/656db918f8590de381249cbf.html 1、一定要以管理员身份运行软件。 2、以管理员身份运行软件后&#xff0c;默认的ISIS Professional路径是C:\Program Files \Labcenter Electronics\…

802.11漫游流程简单解析与笔记_Part1

最近在进行和802.11漫游有关的工作&#xff0c;需要对wpa_supplicant认证流程和漫游过程有更多的了解&#xff0c;所以通过阅读论文等方式&#xff0c;记录整理漫游相关知识。Part1将记录802.11漫游的基本流程、802.11R的基本流程、与认证和漫游都有关的三层秘钥基础。Part1将包…

Excel行列条件转换问题,怎么实现如图一到图二的效果?

图一 图二 如果数据比较&#xff0c;不建议一上来就用公式&#xff0c;风速值那一列的数据可以确定都是数值型数字&#xff0c;可以先试试用数据透视表做转换工具&#xff1a; 1.创建数据透视表 将采集时间放在行字段&#xff0c;测风放在列字段&#xff0c;风速放在值字段 2.…

对象业务的截断接口

依据AWS S3&#xff0c;没有定义截断对象的操作。 本文有如下假定&#xff1a; 对象存储服务基于文件语义实现。 接口定义 依据前述&#xff0c;业界主流对象存储服务比如AWS S3并未定义截断对象的操作&#xff0c;而国内的各家公有云对象存储服务&#xff0c;提供了对象的…

【SecureCRT常用指令】

SecureCRT常用指令 一、ls 只列出文件名 &#xff08;相当于dir&#xff0c;dir也可以使用&#xff09; -A:列出所有文件&#xff0c;包含隐藏文件。 -l&#xff1a;列表形式&#xff0c;包含文件的绝大部分属性。 -R&#xff1a;递归显示。 --help&#xff1a;此命令的帮助。…

安卓逆向经典案例——XX牛

安卓逆向经典案例——XX牛 按钮绑定方式 1.抓包 2.查看界面元素&#xff0c;找到控件id 通过抓包&#xff0c;发现点击登录后&#xff0c;才会出现Encrpt加密信息&#xff0c;所以我们通过控件找到对应id&#xff1a;btn_login 按钮绑定方法——第四种 public class LoginA…

c++【基础】求花坛的面积

限制 时间限制 : 1 秒 内存限制 : 128 MB 题目 A校区有一个圆形花坛&#xff0c;量得花坛周围的篱笆长是x米&#xff0c;请问该花坛的面积是多少平方米&#xff1f;&#xff08;假设π3.14&#xff09; 输入 一个小数x 输出 花坛的面积&#xff08;结果保留2位小数&…

开机自启动脚本配置

#!/bin/bash# 定义要检查的IP地址 IP_ADDRESSES("127.0.0.1")# 检查是否存在任意一个IP地址 check_ips() {HOST_IPS$(hostname -I)for IP in "${IP_ADDRESSES[]}"; doif [[ $HOST_IPS ~ $IP ]]; thenreturn 0fidonereturn 1 }# 检查IP地址并在必要时重新启…

python tushare股票量化数据处理:学习中

1、安装python和tushare及相关库 matplotlib pyplot pandas pandas_datareader >>> import matplotlib.pyplot as plt >>> import pandas as pd >>> import datetime as dt >>> import pandas_datareader.data as web 失败的尝试yf…

什么是Socket?

什么是Socket&#xff1f; Socket&#xff08;套接字&#xff09;是网络通信的基本单位&#xff0c;它允许在不同计算机之间进行数据交换。Socket在网络编程中起着至关重要的作用&#xff0c;它为应用程序提供了一个机制&#xff0c;通过网络发送和接收数据。简单地说&#xf…

使用NetAssist网络调试助手在单台计算机上配置TCP服务器和客户端

要使用NetAssist网络调试助手在同一台计算机上配置一个实例作为服务器&#xff08;server&#xff09;和另一个实例作为客户端&#xff08;client&#xff09;&#xff0c;可以按照以下步骤进行操作&#xff1a; 前提条件 确保已经安装NetAssist网络调试助手&#xff0c;并了…

mysql 小例子

mysql 小例子 show databases ; create database company; use company;DROP TABLE IF EXISTS employee;create table employee ( id INT AUTO_INCREMENT, name VARCHAR(50) NOT NULL, PRIMARY KEY(id)) ENGINEInnoDB; DESCRIBE employee ;111 CREATE TABLE example (id INT …

如何制定工程战略

本文介绍了领导者如何有效制定工程战略&#xff0c;包括理解战略核心、如何收集信息并制定可行的策略&#xff0c;以及如何利用行业最佳实践和技术债务管理来提升团队效能和产品质量。原文: How to Build Engineering Strategy 如果你了解过目标框架&#xff08;如 OKR&#xf…

数仓建模中的一些问题

​​​在数仓建设的过程中&#xff0c;由于未能完全按照规范操作&#xff0c; 从而导致数据仓库建设比较混乱&#xff0c;常见有以下问题&#xff1a; 数仓常见问题 ● 数仓分层不清晰&#xff1a;数仓的分层没有明确的逻辑&#xff0c;难以管理和维护。 ● 数据域划分不明确…