TCP和UDP 传输层协议的区别

TCP协议

当一台计算机想要与另一台计算机通讯时,两台计算机之间的通信需要畅通且可靠,这样才能保证正确收发数据。例如,当你想查看网页或查看电子邮件时,希望完整且按顺序查看网页,而不丢失任何内容。当你下载文件时,希望获得的是完整的文件,而不仅仅是文件的一部分,因为如果数据丢失或乱序,都不是你希望得到的结果,这就用到了TCP协议。

TCP协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP协议的“三次握手”过程

1、TCP连接过程

TCP协议的三次握手机制涉及以下步骤:

第一次握手(SYN):客户端(Client)向服务器(Server)发送一个带有SYN标志位的TCP数据包,该数据包中包含一个同步序列编号Seq。这个序列号用于标识客户端的下一个数据包。

第二次握手(SYN-ACK):服务器接收到客户端的SYN数据包后,会发送一个SYN和ACK标志位的TCP数据包作为回应。服务器也会选择一个初始序列号,并将其放入ACK数据包中。服务器在ACK数据包中将客户端的SYN序列号加1,表示服务器已经收到了客户端的请求,并准备好建立连接。

第三次握手(ACK):客户端接收到服务器的SYN-ACK数据包后,会向服务器发送一个带有ACK标志位的TCP数据包作为确认。客户端在ACK数据包中将服务器的SYN序列号加1,并确认服务器的ACK序列号,表示客户端确认服务器的回应,并同意建立连接。

通过这三次握手,客户端和服务器彼此确认了对方的能力和准备就绪状态,从而建立了双向的通信连接。需要注意的是,三次握手仅在建立连接时进行,数据传输完毕后,双方会进行四次挥手来关闭连接。这种机制确保了TCP连接的可靠性和安全性。

注意:为什么 TCP 建立连接需要三次握手,而不是两次?这是为了防止出现失效的连接请求报文段被服务端接收的情况,从而产生错误。

2、TCP断开链接

TCP 是全双工的,在断开连接时两端都需要发送 FIN(文件结束) 和 ACK。

3、TCP协议的特点

1)面向连接

面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。

2)仅支持单播传输

每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。

3)面向字节流

TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。

4)可靠传输

对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

5)提供拥塞控制

当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞。

6)TCP提供全双工通信

TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段。

UDP协议

UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

1、UDP协议的特点:

1)面向无连接

 UDP 在发送数据前不需要进行建立连接的。它只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。

2)有单播,多播,广播的功能

UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。

3)面向报文

发送方的UDP对应用程序传的报文,在添加首部后就向下交付IP层。UDP对应用层传下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文。

4)不可靠性

首先不可靠性体现在无连接上。

其次传递的数据不会进行备份,发送数据也不会关心对方是否已经正确接收到数据了。

再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。

5)头部开销小,传输数据报文时很高效。

TCP 和 UDP 的区别:

TCP(传输控制协议)和UDP(用户数据报协议)是两种不同的传输层协议,它们在数据传输的方式、特点和应用场景上有一些重要的区别:

1、连接性:

  • TCP: 提供面向连接的服务。在数据传输前,建立了一个可靠的连接,数据传输完成后再断开连接。

  • UDP: 无连接协议。每个数据包都是独立的,发送端和接收端之间没有建立持久的连接。

2、可靠性:

  • TCP: 提供可靠的数据传输。通过序号、确认和重传机制,确保数据按顺序、完整地传输到目的地。

  • UDP: 不提供可靠性保证。数据包可能会丢失或乱序,应用层需要自行处理。

3、流量控制和拥塞控制:

  • TCP: 支持流量控制和拥塞控制,以防止网络拥塞和数据丢失。

  • UDP: 不提供流量控制和拥塞控制,数据包可能会因为网络状况而丢失。

4、数据包大小:

  • TCP: 没有固定的数据包大小限制。数据被分割成TCP段,根据网络状况动态调整段的大小。

  • UDP: 有一个最大传输单元(MTU),超过这个大小的数据包将被分片。

5、通信开销:

  • TCP: 由于连接的建立和维护,以及可靠性保证的机制,通信开销较大。

  • UDP: 由于无连接和较少的机制,通信开销较小,适用于实时性要求较高的应用。

6、应用场景:

  • TCP: 适用于要求可靠数据传输、顺序传输的应用,如文件传输、网页访问等。

  • UDP: 适用于对实时性要求较高、可以容忍少量数据丢失的应用,如音频/视频流、在线游戏等。

总体而言,选择TCP还是UDP取决于应用的具体需求。TCP适用于需要可靠性和有序性的场景,而UDP适用于对实时性要求较高、可以容忍少量数据丢失的场景。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker学习笔记 - 基本概念

一. 什么是“容器”(container)和“镜像”(Image) 所谓“容器”可以理解为一个模拟操作系统的虚拟层,大部分是基于Linux的,应用程序及其配置信息,依赖库可以打包成一个Image独立运行在这个虚拟…

nvidia显卡如何安装cuda驱动

目录 查看显卡对应的cuda版本下载与你显卡匹配的CUDA Toolkit 查看显卡对应的cuda版本 按 微软 R 键,输入cmd 然后输入 nvidia-smi ,回车显示下面信息: 看到 CUDA Version 为 12.2 下载与你显卡匹配的CUDA Toolkit 打开网页&#xff1a…

【竞技宝】DOTA2:梦幻联赛预spirit惨遭淹死 LGD不敌KEV

北京时间2024年3月23日,近期各大赛区的一线战队参加的比赛暂时告一段落,目前关注度最高的比赛是正在进行的梦幻联赛S23预选赛,本以为各大战队能够在实力差距明显的预选赛中轻松突围,没想到本次预选赛目前为止却是冷门频出。 近日,梦幻联赛S23的东欧区预选赛已经全部结束,最终NA…

C语言----动态内存

学到这里了,大家应该对C语言的了解跟深一层了吧。我们C语言写代码不能只局限于直接写代码。我们要了解C语言的内存分布,我们都知道C语言的内存是有堆区,栈区,静态区的。然后栈区是我们平常创建临时变量存储的地方,静态…

3.23项目:聊天室

1、 基于UDP的网络聊天室 项目需求: 如果有用户登录,其他用户可以收到这个人的登录信息如果有人发送信息,其他用户可以收到这个人的群聊信息如果有人下线,其他用户可以收到这个人的下线信息服务器可以发送系统信息 服务器 #inc…

四年蓄势,TikTok决定硬刚

在X平台(原推特)上线的一则视频里,周受资看起来又焦急,又强硬。他的眉毛扭到了一起,完全不像去年那个在美国国会听证会上,接受了5小时高压问询,仍风度翩翩的跨国公司CEO。 “过去几年来&#x…

js数据流详细讲解

文章目录 单向数据流单向数据流示例: 双向数据流双向数据流示例: 延伸和扩展状态管理Redux 示例: 异步数据流异步操作示例(使用 async/await): 数据转换和处理数据处理示例(使用 lodash): 实时数…

解决大型多模态模型的幻觉问题,新方法AITuning助力AI更可靠

引言:多模态对话幻觉的挑战 在人工智能领域,开发能够通过视觉和语言等多种渠道与人类互动的通用助手是一个重要问题。受到大型语言模型(LLMs)如ChatGPT的显著成功的启发,研究社区对开发能够支持视觉-语言指令的多模态助…

力扣热门算法题 75. 颜色分类,76. 最小覆盖子串,77. 组合

75. 颜色分类,76. 最小覆盖子串,77. 组合,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.21 可通过leetcode所有测试用例。 目录 75. 颜色分类 解题思路 完整代码 Python Java 76. 最小覆盖子串 解…

六.排序nb三人组(快速排序)

目录 17-快速排序原理介绍 思路: 18-快速排序代码实现 19-快速排序代码实现2 缺点: 递归的限度: 17-快速排序原理介绍 思路: --先找一个变量把 5(第一个数) 存起来, (两个箭头分别是left , right) --左边有一个空位, 发现左边的位置是给比5小的值准备的. --找比5小的值…

校招应聘流程讲解

在整个应聘流程中,记得保持积极的态度、认真准备面试,同时也要对自己的能力和经验有清晰的认识,这样才能在竞争激烈的校园招聘中脱颖而出,成功获得心仪的工作机会. 1. 校招资源获取 想要参加校招,首先需要获取校招资…

ROS2从入门到精通0-3:VSCode 搭建 ROS2 工程环境

目录 0 专栏介绍1 Ubuntu下安装VSCode1.1 基本安装1.2 将VSCode添加到侧边栏 2 VSCode集成相关插件3 VSCode运行ROS2环境步骤3.1 安装编译依赖项3.2 创建工作空间和源码空间3.3 启动VSCode与配置 4 测试工程环境4.1 C版本4.2 Python版本 0 专栏介绍 本专栏旨在通过对ROS2的系统…

每日一题 --- 977. 有序数组的平方[力扣][Go]

今天这一题和昨天的知识点是一样的,就是双指针法。 题目: 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,1…

Java中调用由C/C++实现的本地库(JNI本地程序调用)

文章目录 背景介绍什么是JNI?什么是本地库?开发Java使用JNI本地库步骤 编写Java类实现JNI本地调用windows系统下编译动态链接库创建Java项目(demo)第一步:编写带有native的Java类第二步:javac生成NativeDem…

深度学习_微调_7

目标 微调的原理利用微调模型来完成图像的分类任务 微调的原理 微调(Fine-tuning)是一种在深度学习中广泛应用的技术,特别是在预训练模型(Pretrained-Models)的基础上进行定制化训练的过程。微调的基本原理和步骤如下…

CRM软件推荐2024:五款顶级产品解析,助您找到最佳选项!

一天之计在于晨,一年之计在于春。 2024年,民营经济发展继续壮大,这对于各行各业而言都是一种机遇挑战。企业想要规范化客户管理,实现销售增长,CRM软件仍然是一个不错的选择。在数字化时代,企业数字化转型已…

预防颈椎病,从职场健康做起

随着现代社会工作方式的转变,职场人士长时间伏案工作,颈椎病的发病率逐渐上升。本文将介绍一些实用的预防颈椎病的方法,帮助职场人士保持健康,提高工作效率。 一、了解颈椎病 颈椎病是指颈椎间盘退行性变及其继发性椎间关节病理性…

基于Python实现高德地图找房系统-爬虫分析

概要 针对大学毕业生对于工作地周边交通出行情况不了解、租房困难等问题,本文主要研究了厦门市的租房信息及地铁公交出行路线,利用Python爬虫爬取58同城上厦门市的租房信息,并进行处理分析,再通过高德地图API将房源信息展示在地图上,实现了基于高德地图API的租房地图。 关键词&…

基于Spring Boot技术的幼儿园管理系统

摘 要 随着信息时代的来临,过去的传统管理方式缺点逐渐暴露,对过去的传统管理方式的缺点进行分析,采取计算机方式构建幼儿园管理系统。本文通过课题背景、课题目的及意义相关技术,提出了一种活动信息、课程信息、菜谱信息、通知公…

Angular入门问题小本本

1、console.log打印object对象显示[object object] 解决方案:使用JSON.stringify console.log(JSON.stringify($rootScope.MaintainDeviceInfo));2、 State ‘goDiskManagement’’ is already defined 解决方案:同一个项目中,不能定义相同…