经典面试题 TCP和UDP有什么区别?

2023-11-16

经典面试题 TCP和UDP有什么区别?

解决面试题,斩获心仪的 Offer


一、TCP和UDP是什么?

TCP:
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。

UDP:
Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。RFC 768 描述了 UDP。

二、TCP和UDP有什么区别?

1.TCP和UDP区别总结

TCP与UDP区别总结:

  1. TCP面向连接,通过三次握手建立连接,四次挥手接除连接;UDP是无连接的,即发送数据之前不需要建立连接,这种方式为UDP带来了高效的传输效率,但也导致无法确保数据的发送成功。
  2. TCP是可靠的通信方式。通过TCP连接传送的数据,TCP通过超时重传、 数据校验等方式来确保数据无差错,不丢失,不重复,且按序到达;而UDP由于无需连接的原因,将会以最大速度进行传输,但不保证可靠交付,也就是会出现丢失、重复等等问题。
  3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流,由于连接的问题,当网络出现波动时,连接可能出现响应问题;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。
  4. 每一条TCP连接只能是点到点的;而UDP不建立连接,所以可以支持一对一,一对多,多对一和多对多的交互通信,也就是可以同时接受多个人的包。
  5. TCP需要建立连接,首部开销20字节相比8个字节的UDP显得比较大。
  6. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。

2.TCP三次握手和四次挥手

2.TCP三次握手

三次握手是TCP用来确保连接可靠建立的方式:

  • 第一次握手: A给B发短信说:“B,你现在有空吗?”
  • 第二次握手: B此时收到了A的信息,然后对A说: “ 我有空,你呢?有空吗? ”
  • 第三次握手: A此时收到了B的确认信息,然后说:“我也有空,那我跟你说个事。”

在三次握手之后,A和B都能确定这么一件事: 双方的通信可以流畅的进行。 这样,双方就可以开始进行正常的对话了。

2.TCP四次挥手

四次挥手是TCP用来确保连接可靠关闭的方式:

  • 第一次挥手: A给B发短信说:“B,我要准备吃饭了?”

  • 第二次挥手: B此时收到了A的信息,然后先对A说: “ 我知道了。”

  • 第三次挥手: B对A说到: “ 我也要准备吃饭了。”然后放下了手机,

  • 第四次挥手: A此时收到了B的确认信息,然后想B发一个包说:“好的,我知道了。”这时才放下手机去吃饭,

在四次挥手之后,A和B都能确定这么一件事: 双方的通信可以正常关闭。 这样,双方就可以确定对方已经完全知晓自己确认要关闭连接。

3.TCP维护可靠的通信方式

  1. 数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组;
  2. 到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认包;
  3. 超时重发:发送方在发送分片后计时,若超时却没有收到相应的确认包,将会重发对应的分片;
  4. 滑动窗口:TCP连接双方的接收缓冲空间大小都固定,接收端只能接受缓冲区能接纳的数据。
  5. 失序处理:TCP的接收端需要重新排序接收到的数据。
  6. 重复处理:如果传输的TCP分片出现重复,TCP的接收端需要丢弃重复的数据。
  7. 数据校验:TCP通过保持它首部和数据的检验和来检测数据在传输过程中的任何变化。

4.TCP和UDP使用场景

1.UDP 使用场景:

因此UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务,随时都可以发送数据,处理简单且高效。
所以主要使用在以下场景:

  • 包总量较小的通信(DNS、SNMP)
  • 视频、音频等多媒体通信(即时通信)
    QQ就是使用的UDP协议。
  • 广播通信

主要是一切追求速度的场景上

2.TCP 使用场景:

TCP 使用场景:相对于 UDP,TCP 实现了数据传输过程中的各种控制,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。在对可靠性要求较高的情况下,可以使用 TCP,即不考虑 UDP 的时候,都可以选择 TCP。

特别是需要可靠连接,比如付费、加密数据等等方向都需要依靠TCP


总结

面向连接的TCP与无连接的UDP将是网络协议中不可或缺的重要知识点,TCP 和 UDP是TCP/IP 中有两个具有代表性的传输层协议,也是常年常考题型。

希望这个博客能对你有所益处。我是轻王,我为自己代言。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

经典面试题 TCP和UDP有什么区别? 的相关文章

  • 简单的udp代理解决方案

    我正在寻找可以代理我的 udp 数据包的解决方案 我有一个客户端向服务器发送 udp 数据包 它们之间的连接非常糟糕 导致大量数据包丢失 一种解决方案是使用一个新的代理服务器 它将所有数据包从客户端重定向到目标服务器 新的代理服务器与这两个
  • 为什么我的 UDP 广播失败?

    我正在尝试发送 UDP 广播 但wireshark 没有报告任何流量 这是执行发送的代码片段 void SendBroadcast String ip 255 255 255 255 int port 30718 String messag
  • 我应该使用哪个高级 API 来管理 iOS 上的 UDP 套接字? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在章节 使用套接字和流 https developer apple com library mac d
  • 具有多个接口的 Python UDP 套接字

    我正在 Windows XP 机器上用 python2 7 编写脚本 本机使用不同的网卡连接到多个网络 我遇到了一个问题 我已将 UDP 套接字绑定到特定接口 我知道您可以通过仅提供网卡现有的 IP 地址来在 Windows 中完成此操作
  • C++ 反序列化通过 UDP 从 C# 应用程序发送的对象

    我有一个申请c 它连接到另一个应用程序 编写为c 通过UDP 我更喜欢高性能的解决方案 因为我希望测量事件客户端 某些处理服务器端和客户端处理完成的响应之间的时间 本质上是 往返延迟 我有一个 C 对象 例如 public class Pa
  • NodeJS UDP 多播如何

    我正在尝试将 UDP 多播数据包发送到 230 185 192 108 以便每个订阅的人都会收到 有点卡住了 我相信它的广播正确 但似乎无法从任何客户端获取任何信息 Server var news Borussia Dortmund win
  • 搜索所有网络上的设备

    我想实现一个代码 通过它我可以列出网络上连接的 upnp 兼容媒体渲染器设备 我用谷歌搜索了这个并找到了以下代码扭曲的网站 https twistedmatrix com documents current core howto udp h
  • iOS 14 在进行本地网络广播时给出“操作系统错误:错误的文件描述符,errno = 9”

    做一点Jeopardy 风格问答 https stackoverflow blog 2011 07 01 its ok to ask and answer your own questions here 我正在 Flutter 中开发一个应
  • netty 4.x.x 中的 UDP 广播

    我们需要使用 Netty 4 0 0 二进制文件通过 UDP 通道广播对象 Pojo 在 Netty 4 0 0 中 它允许我们仅使用 DatagramPacket 类来发送 UDP 数据包 此类仅接受 ByteBuf 作为参数 还有其他方
  • 互联网上的 UDP 多播?

    我不确定如何最好地解决我的问题 我有一个在远程计算机上运行的服务 用于接收和处理 UDP 数据包 我希望该服务能够将这些数据包重新发送给任何需要它们的人 可能是任何人 通常是一台机器 但也可能更多 我认为 UDP 多播将是理想的 该服务可以
  • 对等网络应用程序的网络发现

    我希望有两个类 一个服务器类和一个客户端类 服务器类应该接收每个新客户端的 IP 地址和端口号并将它们存储在列表中 它应该为每个客户端提供已连接客户端及其 IP 地址的列表 然后 客户端可以使用 TCP 连接相互通信 问题是客户端不知道服务
  • 您可以bind()和connect() UDP连接的两端吗

    我正在编写一个点对点消息队列系统 它必须能够通过 UDP 运行 我可以任意选择一侧或另一侧作为 服务器 但这似乎不太正确 因为两端都从另一端发送和接收相同类型的数据 是否可以绑定 和连接 两端 以便它们只能彼此发送 接收 这似乎是一种非常对
  • 提高UDP可靠性

    我正在构建一个基于 UDP 的小型服务器 服务器基于 Net并使用它自己的Socket类 我通过 ReceiveMessageFromAsync 和异步发送使用完成端口 我的问题是我失去了大约 5 10 的流量 现在我明白这是正常的 但是有
  • Rails 是否支持侦听 UDP 套接字的简洁方式?

    在 Rails 中 集成更新模型某些元素的 UDP 侦听过程的最佳方式是什么 特别是向其中一个表添加行 简单的答案似乎是在同一进程中使用 UDP 套接字对象启动一个线程 但不清楚我应该在哪里执行适合 Rails 方式的操作 有没有一种巧妙的
  • 我应该害怕使用 UDP 进行客户端/服务器广播通话吗?

    我在过去的两天里阅读了每一篇StackOverflow问题和答案 以及googling当然 关于印地TCP and UDP协议 以便决定在我的用户应用程序和 Windows 服务之间的通信方法中应该使用哪一种 从我目前所看到的来看 UDP是
  • 如何读取 UDP 连接直至超时?

    我需要读取 UDP 流量 直到超时 我可以通过在 UDPConn 上调用 SetDeadline 并循环直到出现 I O 超时错误来做到这一点 但这看起来很黑客 基于错误条件的流量控制 下面的代码片段看起来更正确 但并没有终止 在生产中 这
  • 错误号:11,资源暂时不可用

    我正在使用 c 套接字来实现可靠的 UDP 协议 我正在使用以下代码在等待确认的套接字上设置超时 我不确定为什么会收到 errno 11 资源暂时不可用 set timer for recv socket struct timeval tv
  • 使用多个 NIC 广播 UDP 数据包

    我正在 Linux 中为相机控制器构建嵌入式系统 非实时 我在让网络做我想做的事情时遇到问题 该系统有 3 个 NIC 1 个 100base T 和 2 个千兆端口 我将较慢的连接到相机 这就是它支持的全部 而较快的连接是与其他机器的点对
  • 跨 NAT 的 UDP 客户端无法从服务器接收数据

    我正在尝试在服务器 在公共 IP 上 和客户端 跨 NAT 之间使用 UDP 进行双向通信 我的逻辑是 如果服务器将一些数据发送到 IP 和它接收数据包的端口 客户端仍然应该收到它 因为 NAT 将具有最终将数据包发送到客户端的映射 客户端
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL

随机推荐

  • mybatis的环境搭建

    mybatis的环境搭建 1 创建maven工程并导入坐标 创建mybatis需要的依赖有下面几个
  • vue H5页面跳转小程序及其传参小程序并接收

    第一次做H5跳转小程序 记录一下 代码前的配置不多说看文档 目录 微信开放文档 这里我们用到开放标签 跳转小程序 wx open launch weapp 使用之前需要在入口文件pubilc目录下index html文件下引入jssdk h
  • 使用Hexo 配置自己的博客

    安装前提 在Windows下可以到git官网 推荐使用代理 或者对应的镜像网站进行下载 安装git客户端 安装node js 使用git bash 安装 cURL curl https raw github com creationix n
  • Zotero:按GB/T7714 2015引用参考文献

    欢迎关注 ManTou馒头公众号 原创不易 转载请注明出处 点赞收藏再走 主要解决引用英文文献作者超过3个时出现 等 而不是 etal 的问题 Zotero 按GB T7714 2015引用参考文献 导入China National Sta
  • 剖析vue常见问题(一)之v-for与v-if的优先级

    背景 vue中经常使用到v for和v if 那么它们的优先级是怎么样的呢 怎么才能实现性能优化呢 下面来简单分析一下 如何分析 请参考以下测试demo 以及源码中参考src compiler codegen index js demo代码
  • 棋盘覆盖问题-递归分治

    输入 3 3 4 输出 如图 x 3 y 3代表特殊方块的坐标 坐标原点在坐标系左上角 如图也就是一个 size 4 的L型骨牌的棋盘覆盖问题 include
  • maven集成cucumber,mvn test单元测试不运行

    maven集成cucumber mvn test单元测试不运行 项目已集成cucumber jacoco测试覆盖率100 在application项目添加单元测试 覆盖率下降 发现单元测试覆盖的语句覆盖率没有统计到 经试验 发现是appli
  • Java Web工程中的web.xml配置文件

    Java Web工程中的web xml配置文件 前言 1 xml文件 xml文件 Extentsible Markup Language即可扩展标记语言 是用来定义其它语言的一种元语言 其前身是SGML 标准通用标记语言 xml文件是互联网
  • vue axios 跨域,携带cookie

    前端设置 axios 跨域 const axios require axios axios defaults withCredentials true 后端设置 express app use function req res next r
  • 宏函数、普通函数、内联函数的区别

    示例代码 宏函数 define SUM x x x 内联函数 inline int sum int x return x x 普通函数 int sum int x return x x 什么是内联函数 在普通函数定义时加上 inline 关
  • TCP/IP 协议——知识集锦

    精通 TCP IP 熟练使用 Socket 进行网路编程 这句话在招聘要求里经常见 但是平时压根用不到 虽然笔者用Unity3D 如果做联网需要用到Socket通信 奈何我还没做过网络游戏 这里补下相关知识 目录 1 什么是 TCP IP
  • Java——3.字符串的替换和去除空格操作_replace ()和 trim ()方法

    程序开发中 用户输入数据时经常会有一些错误和空格 这时可以使用 String 类的 replace 和 trim 方法 进行字符串的替换和去除空格操作 ExampleAPI04 public class ExampleAPI04 publi
  • tf卡低级格式化_tf卡写保护怎么去掉 磁盘被写保护解决方法

    今天智智教大家如何去除TF卡写的保护 MicroSD 卡是一种极细小的快闪存储器卡 原本这种记忆卡称为T Flash 有时候我们会遇到tf卡写保护的情况 要解除写保护 先确认一下是否真的被写保护 鼠标右键点击移动硬盘 属性 看看你的文件属性
  • R语言中使用dplyr包进行排序与添加序号的实战

    R语言中使用dplyr包进行排序与添加序号的实战 在R语言中 dplyr是一个非常强大的数据处理包 它提供了一套简洁而一致的函数 用于对数据进行筛选 排序 汇总和变形等操作 本文将介绍如何使用dplyr包进行排序 并为数据添加序号 首先 让
  • java的反射机制Class.forName()

    Class forName 方法的作用 就是初始化给定的类 1 Class 类概念 Class 也是一个 Java 类 保存的是与之对应 Java 类的 meta信息 元信息 用来描述这个类的结构 比如描述一个类有哪些成员 有哪些方法等 一
  • 【网易严选】iOS持续集成打包(Jenkins+fastlane+nginx)

    本文来自网易云社区 作者 孙娇 严选iOS客户端的现有打包方式是通过远程连接打包机执行脚本去打包 打完包会输出相应的ipa的二维码 扫一扫二维码可以安装 但是随着测试队伍的壮大 外包同学越来越多 在打包机输入命令的方式可用度越来越低 手动输
  • 170_web服务器_两个需求【1-】获取虚拟机上数据库数据显示到网页 【2-】网页下拉框数据,发送到MQTT服务器上【html实现网页,.js实现内在,.cgi实现内核】

    实例 html 两个功能一起实现在网页 表面
  • 三种方法带你新建一个SpringBoot项目

    SpringBoot 的设计目的是简化Spring的搭建与开发 尤其是没有了好多繁琐的配置 本篇文章主要介绍如何搭建SpringBoot项目 从官网创建 访问Spring的官方网站 https start spring io 如下 只需要简
  • 小学生创客教学

    在这个互联网 的时代 我们的孩子接受到的信息越来越多 创课要彻底改变传统课程存在的过分传授 形式固化 单调无趣的现状 给学生更多自由探索的空间 激发孩子内在的创造潜能 格物斯坦认为 学生不再是被动的学习者 而是可以像科学家一样以研究的方式去
  • 经典面试题 TCP和UDP有什么区别?

    经典面试题 TCP和UDP有什么区别 解决面试题 斩获心仪的 Offer 文章目录 经典面试题 TCP和UDP有什么区别 一 TCP和UDP是什么 二 TCP和UDP有什么区别 1 TCP和UDP区别总结 2 TCP三次握手和四次挥手 2