【面试】TCP 与 UDP区别

2024-06-19 17:20
文章标签 tcp udp 面试 区别

本文主要是介绍【面试】TCP 与 UDP区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、TCP 与 UDP 对比

  1. TCP

传输控制协议 TCP(Transmission Control Protocol),是面向连接的【3次握手,4次挥手】,提供可靠交付,具有错误恢复机制(如超时重传、校验和等),有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)

开销:
由于其复杂性,开销较大,需要更多的处理时间和资源。

报文结构:
TCP段,包含序列号、确认号、窗口大小等控制信息。

用途:
常用于需要可靠传输的应用,如网页浏览(HTTP)、文件传输(FTP)、邮件传输(SMTP)等。
适用于数据完整性至关重要的应用,如金融交易、电子邮件等。

  1. UDP

用户数据报协议 UDP(User Datagram Protocol),是无连接的,尽最大可能交付(可能发生数据丢失或乱序),没有错误恢复机制没有拥塞控制面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信

开销:
开销较小,使用较少的处理时间和资源。

报文结构:
UDP数据报,包含源端口、目的端口、数据长度等信息。

用途:
常用于对实时性要求高的应用,如在线游戏、实时视频会议、DNS查询、VoIP等。
适用于可以容忍一定数据丢失的应用,或者实时性要求高,对延迟敏感的应用。

二、TCP的 3次握手,4次挥手

TCP(传输控制协议)的三次握手(Three-way Handshake)过程是建立一个可靠的连接所必需的。

  1. 第一次握手客户端发送一个SYN(同步序列编号)报文到服务器以开始一个连接。这个报文指明了客户端的初始序列号(ISN, Initial Sequence Number)。

  2. 第二次握手服务器接收到这个SYN报文后,需要确认客户端的序列号,因此会发送一个SYN-ACK(同步-确认)报文。这个报文包含了服务器自己的初始序列号,并且对客户端的SYN报文中的序列号进行确认(即ACK, Acknowledgement number)。

  3. 第三次握手客户端接收到服务器的SYN-ACK报文后,会发送一个ACK报文到服务器端进行最后的确认。这个ACK报文对服务器的SYN报文中的序列号进行确认。

这个过程确保了双方都可以接收和发送数据,从而建立了一个全双工的通信连接

至于“四次挥手”,这通常是指TCP连接的终止过程:

  1. 第一次挥手:当通信的一方准备关闭连接时,发送一个FIN(结束)报文,用来关闭主动方到被动方的数据传输。

  2. 第二次挥手接收方接收到FIN报文后,发送一个ACK报文确认,并告知对方可以关闭其到发送方的数据传输。

  3. 第三次挥手接收方发送一个FIN报文给发送方,请求关闭其数据传输。

  4. 第四次挥手发送方接收到这个FIN报文后,发送一个ACK报文进行确认,完成连接的关闭。

四次挥手过程中,双方都可以独立地开始关闭连接的过程,因此可能出现一方已经准备好关闭连接,而另一方还需要一些时间来完成数据传输的情况。这就是为什么需要四次挥手来确保双方都能独立地关闭连接。

这篇关于【面试】TCP 与 UDP区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075658

相关文章

hevc和H.264格式的区别

HEVC(High Efficiency Video Coding)和H.264(也称为Advanced Video Coding,AVC)都是视频压缩标准,但它们之间存在一些显著的区别,主要集中在压缩效率、资源需求和兼容性方面。 压缩效率 HEVC,也被称为H.265,提供了比H.264更高的压缩效率。这意味着在相同的视频质量下,HEVC能够以大约一半的比特率进行编码,从而减少存储空间需求和

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

C++面试八股文:std::deque用过吗?

100编程书屋_孔夫子旧书网 某日二师兄参加XXX科技公司的C++工程师开发岗位第26面: 面试官:deque用过吗? 二师兄:说实话,很少用,基本没用过。 面试官:为什么? 二师兄:因为使用它的场景很少,大部分需要性能、且需要自动扩容的时候使用vector,需要随机插入和删除的时候可以使用list。 面试官:那你知道STL中的stack是如何实现的吗? 二师兄:默认情况下,stack使

Java面试八股之JVM参数-XX:+UseCompressedOops的作用

JVM参数-XX:+UseCompressedOops的作用 JVM参数-XX:+UseCompressedOops的作用是启用对象指针压缩(Ordinary Object Pointers compression)。这一特性主要应用于64位的Java虚拟机中,目的是为了减少内存使用。在传统的64位系统中,对象引用(即指针)通常占用8字节(64位),而大部分应用程序实际上并不需要如此大的地址空间

华为某员工爆料:偷偷跑出去面试,被面试官鄙视了。第一句话就问:华为淘汰的吧,35岁了,这个年龄在华为能混得下去吗?身体没啥毛病吧

“你都35岁了,难不成是被华为淘汰的?在华为混不下去了吧?身体没啥毛病吧,我们这体检可是很严的。” 近日,一位华为员工在朋友圈爆料,自己在面试时遭到了面试官的无理取闹和人身攻击,原因仅仅是因为他35岁了,曾经在华为工作过。 这番话,充满了傲慢与偏见,让人听了义愤填膺。这位面试官的言行,不仅是对求职者的不尊重,更是对职场规则的践踏。 面试本应是双向选择的过程,企业和求职者在相互了解的基

在 Java 中,JDK、JRE、JVM 分别代表什么,有何关系和区别?

在Java开发的世界中,我们会经常听到JDK、JRE和JVM这三个词。它们都与Java的运行环境以及Java程序的编译和运行有关,它们之间也存在一些关联性和区别。 什么是JDK、JRE和JVM 我们来看它们分别是什么。 JDK,全称Java Development Kit,即Java开发工具包。顾名思义,JDK是用于Java开发的一套工具包,里面包含了Java的编译器javac、

QT 中ListView和ListWidget有什么区别

ListView和ListWidget在Qt框架中都是用于显示列表数据的控件,但它们在使用方法和特性上存在一些明显的差异。以下是关于它们用法不一样的地方的详细分析: 数据管理方式: ListView:使用QAbstractItemModel数据模型来管理和显示列表数据。QAbstractItemModel是一个抽象类,允许开发者自定义数据模型以适应特定的数据结构和需求。这使得ListView在处

算法与数据结构面试宝典——回溯算法详解(C#,C++)

文章目录 1. 回溯算法的定义及应用场景2. 回溯算法的基本思想3. 递推关系式与回溯算法的建立4. 状态转移方法5. 边界条件与结束条件6. 算法的具体实现过程7. 回溯算法在C#,C++中的实际应用案例C#示例C++示例 8. 总结回溯算法的主要特点与应用价值 回溯算法是一种通过尝试各种可能的组合来找到所有解的算法。这种算法通常用于解决组合问题,如排列、组合、棋盘游