前端面试高频考点—TCP vs UDP

目录

简介:

区别:

应用选择:

tcp为什么需要三次握手?


简介:

  • TCP(传输控制协议)和UDP(用户数据报协议) TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,是专门为了在不可靠的网络中提 供一个可靠的端对端字节流而设计的,面向字节流。
  • UDP(用户数据报协议)是iso参考模型中一种无连接的传输层协议,提供简单不可靠的非连接传 输层服务,面向报文

区别:

  1. TCP是面向连接的,可靠性高;UDP是基于非连接的,可靠性低
  2. 由于TCP是连接的通信,需要有三次握手、重新确认等连接过程,会有延时,实时性差,同时过程 复杂,也使其易于攻击;UDP没有建立连接的过程,因而实时性较强,也稍安全
  3. 在传输相同大小的数据时,TCP首部开销20字节;UDP首部开销8字节,TCP报头比UDP复杂,故 实际包含的用户数据较少。TCP在IP协议的基础上添加了序号机制、确认机制、超时重传机制等, 保证了传输的可靠性,不会出现丢包或乱序,而UDP有丢包,故TCP开销大,UDP开销较小
  4. 每条TCP连接只能时点到点的;UDP支持一对一、一对多、多对一、多对多的交互通信

应用选择:

  • 对实时性要求高和高速传输的场合下使用UDP;在可靠性要求低,追求效率的情况下使用UDP;例如:++在线语言聊天,视频++
  • 需要传输大量数据且对可靠性要求高的情况下使用TCP;例如:++电子邮件传输,FTP等++

tcp为什么需要三次握手?

两个目的:

  1. 确保建立可靠连接
  2. 避免资源浪费

详:

三次握手的目的是"为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误"

这种情况是:

假设client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。

假设不采用"三次握手",那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。

所以,采用"三次握手"的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接

想要了解更多相关TCP三次握手、四次挥手过程及原理请转到:

一文彻底搞懂 TCP三次握手、四次挥手过程及原理 - 知乎 (zhihu.com)

相关推荐
AUTOSAR组织3 小时前
深入解析AUTOSAR框架下的TCP/IP协议栈
网络协议·tcp/ip·汽车·autosar·软件架构·软件·培训
June bug5 小时前
(#数组/链表操作)寻找两个正序数组的中位数
数据结构·python·算法·leetcode·面试·职场和发展·跳槽
程序猿编码5 小时前
高性能HTTP服务压测工具:设计思路与实现原理(C/C++代码实现)
c语言·网络·c++·网络协议·tcp/ip·http
LaoZhangGong1235 小时前
学习TCP/IP的第4步:重点掌握TCP序列号和确认号
网络·学习·tcp/ip·以太网
June bug6 小时前
(#数组/链表操作)最长上升子序列的长度
数据结构·程序人生·leetcode·链表·面试·职场和发展·跳槽
June bug7 小时前
(#数组/链表操作)合并两个有重复元素的无序数组,返回无重复的有序结果
数据结构·python·算法·leetcode·面试·跳槽
cyforkk8 小时前
03、Java 基础硬核复习:流程控制语句的核心逻辑与面试考点
java·开发语言·面试
源代码•宸9 小时前
Leetcode—47. 全排列 II【中等】
经验分享·后端·算法·leetcode·面试·golang·深度优先
a程序小傲9 小时前
京东Java面试被问:基于Gossip协议的最终一致性实现和收敛时间
java·开发语言·前端·数据库·python·面试·状态模式
程序员小白条9 小时前
面试 Java 基础八股文十问十答第二十二期
java·开发语言·数据库·面试·职场和发展·毕设