首页 > 其他分享 >[转]Websocket 底层是 TCP 还是 UDP?白话版解析 TCP 和 UDP 传输过程

[转]Websocket 底层是 TCP 还是 UDP?白话版解析 TCP 和 UDP 传输过程

时间:2023-09-24 17:47:21浏览次数:47  
标签:UDP Websocket TCP 传输 过程 连接

原文地址:Websocket 底层是 TCP 还是 UDP?白话版解析 TCP 和 UDP 传输过程 - 掘金

写在前面

在前面陆陆续续写了好几篇数字孪生相关的文章,而其中所涉及的一个其他项目比较不常使用的技术,网络通讯协议 Websocket,这个协议主要用于服务器定时向客户端推送数据,相比 HTTP 更加适合数字孪生应用场景,在项目的使用中我们能够体会到他所带来的优越性,而如果我们想要探究一下底层原理,你还能说清楚吗?

Websocket 是什么?

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

如果对于Websocket 这种通信协议还不是很了解的话,可以看看我之前的文章 面试官:除了 HTTP,你还用过什么通信协议?(Websocket 在数字孪生中的应用), 本篇主要复习 TCP 与 UDP 两个协议的异同点以及 Websocket 使用的哪个底层协议。

TCP

什么是 TCP?

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

TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。

TCP三次握手与四次挥手

初略了解过 TCP 连接过程的朋友可能都听过 TCP 的三次握手和四次挥手,但是看了好多的关于三次握手四次挥手的解释,都显得非常专业,每个过程的 SYN/ACK 等标识符让初学者或者非网络出身的人看了一头雾水,不仅没有促进我们理解连接过程,反而徒增了更大的盲区。今天我就用更加简洁的方式,通过画图,来给大家呈现一个更加解析的连接过程,让大家能够抛开细节,从更加宏观的角度理解建立连接的原理。

TCP 三次握手

过程如下图,可以看到 A 主机想要与B 主机建立连接,需要通过 3 个 来回,最后形成“默契”,才能够建立连接。这过程是不是像极了我们周末约朋友打麻将的场景,首先第一步,你需要打探一下对方是否方便(确定是否空闲),第二步是=对方抛出连接信号,表明愿意连接(推进事件发展),第三步则是最后一步,与对方约定具体方安排,让对方在家等着(双方确认周末安排)

当完成了这三步后,双方的连接才算完整建立,接下去才是真正的数据传输过程。在建立连接的过程中,其实涉及很多的连接确认机制,更加详细的连接过程看下图2的详细说明,这里主要让大家理解过程,不深究细节!

批注 2022-06-27 210406.png

批注 2022-06-27 214227.png

TCP 四次挥手

四次挥手和三次握手过程其实差不多,如图所示,A 主机和B 主机想要断开连接,想要通过4个来回,最后“达成共识”,才算完成断开操作。具体过程如下

还是以A 主机做客的例子来讲解,首先 A 告诉 B,我要走了,这个时候,B 为了表达自己非常热情好客,所以 B 没有直接让 A 走,而是告诉 A ,先暂留一会,等我把给你准备的礼物奉上后,再离开,这个时候,B 赶忙回到房间,翻箱倒柜掏出了自己珍藏多年的好酒,给 A 带去,然后才送 A 离开,最后 A 向 B 挥挥手,告别 B 而去,整个断开过程结束!!在下面图二依然附上详细的细节图解,有兴趣的可以自行了解了解。

批注 2022-06-27 220111.png

批注 2022-06-27 220331.png

TCP 握手和挥手次数为什么不一样?

分析了三次握手和四次挥手后,可能大家会有一个疑问,为什么建立连接只需要3个数据包做确认,而断开却需要4个数据包呢?这也是一个面试经常会被问到的题目,我们来稍微解析一下。

我们仔细回忆一下我们平时进行网络请求的过程,通常,我们进行数据请求的时候,发送完请求,我们需要等待一段时间,才能收到对端的回复,这个时间也就是响应时间,当我们请求的数据非常大的时候,那么响应的时间就会非常长,而在这个时候,当我们发起断开连接的指令时,对端并没有完成请求内容的传输,因此,对端需要发送一个数据报文,表明目前依然有任务需要传输,然后继续将剩下的数据传输完毕后,再次发送数据报文告知我们,数据传输完成,我们才能成功断开连接。

可以看到,四次挥手比三次握手多,主要是体现在数据传输这一步,只要我们理解了整个传输过程,这个问题,可以说是完全没有难度的。

UDP

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。由于 UDP 是无连接的,因此这里就不分析 UDP 的传输过程了,接下来主要了解 UDP 与 TCP 的异同点。

TCP 与 UDP 的区别

这里主要列举几个比较常见的异同点

TCP 面向连接,通过三次握手和四次挥手建立和断开连接,因此需要牺牲部分性能,用于处理连接与断开的相关操作,由于 TCP 是面向连接的,具有非常多的传输相关的控制方案,因此,TCP 传输过程更加可靠,

UDP 无连接传输,只关心发包,不关心对方是否收到,因此可能出现丢包情况,而由于不需要进行相关的包确认,因此 UDP 相比 TCP,性能表现上更加优异,在对于数据完整性要求不是很高的情况下,可以使用 UDP 替换 TCP,获取更高的性能

Websocket 底层是 TCP 还是 UDP

分析完 TCP 和 UDP,那回到题目抛出的问题,“Websocket 底层是 TCP 还是 UDP”,答案是 TCP,Websocket 的诞生可以说是特定场景下 Http 的优化方案,也就是说 Websocket 也是像 HTTP 一样的“可靠的传输方式”,因此 Websocket 采用的依然是与 HTTP 相同的 TCP 作为底层协议来支撑起进行可靠的传输过程!

总结

通过对 TCP 以及 UDP 相关传输过程的分析和比较,从原理上理解了整个传输过程后,对于相关的问题,我们也就能够以更加准确的方式来判断,而不是盲目地做选择题,这也印证了我一直坚信的观念,从原理出发,才能看到事情的本质,看透了本质,任何的变幻,都不过是幌子罢了,驴依然是驴,骡依然是骡!!!


作者:YimWu
链接:https://juejin.cn/post/7113928853281587231
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:UDP,Websocket,TCP,传输,过程,连接
From: https://www.cnblogs.com/dirgo/p/17726291.html

相关文章

  • TCP协议的秘密武器:流量控制与拥塞控制
    TCP可靠性传输相信大家都熟知TCP协议作为一种可靠传输协议,但它是如何确保传输的可靠性呢?要实现可靠性传输,需要考虑许多因素,比如数据的损坏、丢失、重复以及分片顺序混乱等问题。如果不能解决这些问题,就无法实现可靠传输。因此,TCP采用了序列号、确认应答、重发控制、连接管理和......
  • 解密TCP连接断开:四次挥手的奥秘和数据传输的安全
    TCP连接断开在当今数字化时代,互联网已经成为了人们生活中不可或缺的一部分。而在互联网的基础之上,TCP协议扮演着关键的角色,它负责着数据在网络中的可靠传输。在TCP连接的建立过程中,我们已经了解了三次握手的过程和原理。然而,连接的建立只是TCP协议的一部分,同样重要的是连接的断......
  • TCP的可靠性如何保证
    TCP的可靠性之道:确认重传和流量控制(qq.com)面试被问TCP的可靠性是如何保证的?(qq.com)TCP全称为TransmissionControlProtocol(传输控制协议),是一种面向连接的、「可靠的」、基于字节流的传输层通信协议,其中「可靠性」是相对于其他传输协议的优势点。TCP为了确保数据传输的......
  • nginx代理websocket请求原理 理解记录
    最近遇见一个问题,在OpenEuler操作系统上,如果不主动开放端口白名单的话,就无法访问该端口。然后我部署了一个服务,端口是5200。在这台机器上部署了一个nginx,通过nginx80端口反向代理5200端口。然后再OpenEuler上开放80端口。此时本地访问80端口,登录后正常的http请求都没问题。......
  • ETHERCAT转MODBUS TCP/IP协议网关
     ETHERCAT转MODBUSTCP/IP协议网关   产品介绍JM-ECT-TCPIP是自主研发的一款EtherCAT从站功能的通讯网关。该产品主要功能是将EtherCAT网络和TCP/IP网络连接起来。本网关连接到EtherCAT总线中做为从站使用,连接到TCP/IP网络中做为服务器或客户端使用。......
  • TCP连接的关键之谜:揭秘三次握手的必要性
    TCP连接建立当我们浏览网页、发送电子邮件或者进行在线游戏时,我们常常不会想到背后复杂的网络连接过程。然而,正是这些看似不起眼的步骤,确保了我们与服务器之间的稳定通信。其中最重要的步骤之一就是TCP连接的建立,而其中的核心环节就是三次握手。本文将详细探讨三次握手的原理、......
  • 使用TCP 创建服务器 多个客户端连接
    源码#include<stdio.h>#include<string.h>#include<unistd.h>#include<unistd.h>//close#include<sys/socket.h>//socket#include<arpa/inet.h>//inet_pton#include<netinet/in.h>//sockaddr_inintmain(){//1、......
  • tcpdump后台不间断抓包
    版本1的抓包命令这两天排查一个小问题,需要在服务器上使用tcpdump24小时不间断抓包,这里简单记录下。先看下tcpdump的语法:tcpdump[-AbdDefhHIJKlLnNOpqStuUvxX#][-Bbuffer_size][-ccount][-Cfile_size][-Grotate_seconds][-F......
  • HTTP之下的TCP做了什么?抓包解释!
    理清HTTP之下的TCP流程,让你的HTTP水平更上一层(qq.com)首先,我们准备这样一段服务端代码:constexpress=require('express')constapp=express()app.get('/',function(req,res){res.setHeader('Connection','close')res.end('hell......
  • ETHERCAT主站转MODBUS TCP协议网关
     ETHERCAT主站转MODBUSTCP协议网关                                  JM-ECTM-TCP产品介绍JM-ECTM-TCP是自主研发的一款ETHERCAT主站功能的通讯网关。该产品主要功能是将ETHERCAT......