Websocket及三次握手/四次挥手

这篇具有很好参考价值的文章主要介绍了Websocket及三次握手/四次挥手。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Websocket-实时通信



前言

之前一直听说Websocket,但也一直没有使用过,今天突然又看到了,还挺感兴趣的,可以一起看看


一、目前可实现实时通信的方式

1、轮询(polling)

原理:浏览器间隔几秒发送一次请求,询问服务器是否有新消息出现,持续
优点:实现简单,大部分浏览器和服务器支持
缺点:频繁的请求和响应会导致不必要的网络开销,降低性能和效率
场景:数据更新频率不高且实时性要求不高的场景

2、长轮询(long polling)

原理:和 ajax 轮询差不多,采取阻塞模式,客户端发起请求,没有没有消息,服务器则不返回,客户端收到响应,立即再次发出请求,形成新的挂起请求,持续
优点:相较于轮询,减少了不必要的网络请求,降低网络开销
缺点:服务器需要维护大量挂起请求,占用资源较多,不适用于高并发场景
场景:数据更新不频繁,但要求实时性相对较高的场景
ajax 和长轮询都是在不断的建立 HTTP 连接,然后等服务端处理(HTTP 特点:被动性)

3、Websocket

原理:WebSocket 是一种全双工通信协议,通过建立持久性的连接,客户端和服务器可以随时发送和接收消息。连接建立后,双方可以直接发送消息,不需要频繁的握手过程
优点:实现实时通信,降低了不必要的网络开销,性能较高,支持跨域通信
缺点:需要服务器和客户端都支持 WebSocket 协议
场景:适用于需要实时通信,如实时聊天,在线游戏,实时数据展示,多人协同编辑

websocket 只需要一次 HTTP 握手,整个过程是建立在一次连接/状态中(避免 HTTP 非状态性)
通过 Websocket 可以构建实时、高效和响应迅速的 web 应用程序

3.1、WebSocket 心跳机制

  1. 确保活跃连接:WebSocket是一种双向通信协议,一旦建立连接,服务器和客户端之间可以实时传输数据。但由于网络等原因,长时间没有数据传输可能导致连接的关闭。心跳机制通过定期发送心跳包,即使没有实际数据交互,也能保持连接的活跃状态,防止连接被中断。
  2. 确认服务器存活状态:通过心跳机制,客户端可以定期向服务器发送心跳包,并等待服务器的响应。如果一段时间内没有收到服务器的响应,客户端可以判断服务器可能出现了故障或断开连接,并根据情况进行相应的处理,如重新连接服务器。
  3. 优化网络资源利用:心跳机制可以定时发送较小的数据包,相较于大量数据传输,心跳包的资源占用较小。这有助于减少网络资源的浪费,并提高数据传输效率。
  4. 错误处理与重连:通过心跳机制,客户端可以及时检测到连接断开的情况,并进行错误处理和重连操作。在网络环境不稳定或服务器故障的情况下,心跳机制可以帮助客户端更快地恢复与服务器的连接。
  5. 连接状态监控:心跳机制可以用于监控 WebSocket 连接的状态,包括连接建立、断开、异常等状态。这有助于客户端了解连接状态,做出相应的操作。

3.2、WebSocket 工作原理

WebSocket 的工作原理可以分为三个阶段:握手、数据传输和断开连接

握手:客户端发起 WebSocket 连接时,通过向服务器发送一个特殊的 HTTP 请求头来建立连接。服务器检查请求头中的特定字段,确认支持 WebSocket 协议后,发送特殊的 HTTP 响应头进行握手确认。握手成功后,双方建立了 WebSocket 连接,可以进行后续的数据传输。

数据传输:一旦建立了 WebSocket 连接,客户端和服务器可以通过该连接进行双向的实时数据传输。双方可以发送和接收消息,消息以帧的形式进行传输。WebSocket 协议定义了不同类型的帧,如文本帧和二进制帧,用于传输不同类型的数据。

断开连接:当连接不再需要时,客户端或服务器可以发起关闭连接的请求。双方会交换特殊的关闭帧,以协商关闭连接,并确保双方都接收到了关闭请求。

3.3、Websocket 优点

  1. 实时性:与传统的 HTTP 请求/响应模式不同,WebSocket 允许实时双向通信,使得服务器能够主动向客户端推送数据,而不需要客户端发起请求。
  2. 服务器压力减少:WebSocket 连接保持打开状态,因此服务器不需要为每个请求创建一个新的连接。这可以减轻服务器的负载并提高性能。
  3. 与 HTTP 协议良好的兼容性,默认端口也是 80 和 443,握手阶段采用 HTTP 协议
  4. 可以发送文本,也可以发送二进制数据。
  5. 没有同源限制,客户端可以与任意服务器通信。
  6. 协议标识符是 ws(握手 http),如果加密则为 wss(tcp+TLS),服务器网址是 URL。
  7. 只需要经过一次 HTTP 请求,就可以一直传送消息(也称为回调)。

3.4、HTTP 和 Websocket 关系

Websocket 是一种新的协议,跟 HTTP 协议基本没关系,为了兼容浏览器的握手规范,也可以说是 HTTP 协议上的一种补充。

二、HTTP 协议-TCP 三次握手、四次挥手

1、TCP 和 TCP 连接

TCP:TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。

TCP 连接:用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括 Socket、序列号和窗口大小称为连接。

2、HTTP 和 TCP 关系

HTTP(Hypertext Transfer Protocol) 是一种应用层协议,主要负责数据的传输和格式化。它的主要功能是规范浏览器与服务器之间的通信格式,确保数据按照预定的规则传输。

TCP(Transmission Control Protocol) 则是一种传输层协议,负责数据如何在网络中传输。它定义了数据传输的方式,包括连接的建立、维持以及数据包的发送和接收。TCP 确保数据传输的可靠性,即数据是否能够按预期到达目的地。

HTTP 依赖于 TCP 来进行数据传输,HTTP 用于处理请求和响应的格式,而 TCP 则负责建立连接、保持连接以及数据包的可靠传输。也可以说 HTTP 运行在 TCP 之上。

3、关于 TCP 连接的常用术语

  • SYN:synchronous 建立联机
  • ACK:acknowledgement 确认
  • PSH:push 传送
  • FIN:finish 结束
  • RST:reset 重置
  • URG:urgent 紧急
  • Sequence number:顺序号码
  • Acknowledge number:确认号码

4、三次握手

4.1、什么是三次握手

所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送 3 个包。

4.2、为何需要三次握手

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

4.3、过程

第一次握手:建立连接。客户端发送连接请求报文段,将 SYN 位置为 1,Sequence Number 为 x;然后,客户端进入 SYN_SEND 状态,等待服务器的确认;

第二次握手: 服务器收到 SYN 报文段。服务器收到客户端的 SYN 报文段,需要对这个 SYN 报文段进行确认,设置 Acknowledgment Number 为 x+1(Sequence Number+1);同时,自己自己还要发送 SYN 请求信息,将 SYN 位置为 1,Sequence Number 为 y;服务器端将上述所有信息放到一个报文段(即 SYN+ACK 报文段)中,一并发送给客户端,此时服务器进入 SYN_RECV 状态;

第三次握手:客户端收到服务器的 SYN+ACK 报文段。然后将 Acknowledgment Number 设置为 y+1,向服务器发送 ACK 报文段,这个报文段发送完毕以后,客户端和服务器端都进入 ESTABLISHED 状态,完成 TCP 三次握手。

5、四次挥手

5.1、什么是四次挥手

所谓四次挥手(Four-way Handshake),是指终止一个 TCP 连接,需要总共发送 4 个包来完成这个过程。

5.2、为何需要四次挥手

当数据传输完成,tcp 通过四次挥手断开 tcp 连接,释放系统资源

5.3、过程

第一次挥手:主机 1(可以使客户端,也可以是服务器端),设置 Sequence Number,向主机 2 发送一个 FIN 报文段;此时,主机 1 进入 FIN_WAIT_1 状态;这表示主机 1 没有数据要发送给主机 2 了;

第二次挥手:主机 2 收到了主机 1 发送的 FIN 报文段,向主机 1 回一个 ACK 报文段,Acknowledgment Number 为 Sequence Number 加 1;主机 1 进入 FIN_WAIT_2 状态;主机 2 告诉主机 1,我“同意”你的关闭请求;

第三次挥手:主机 2 向主机 1 发送 FIN 报文段,请求关闭连接,同时主机 2 进入 LAST_ACK 状态;

第四次挥手:主机 1 收到主机 2 发送的 FIN 报文段,向主机 2 发送 ACK 报文段,然后主机 1 进入 TIME_WAIT 状态;主机 2 收到主机 1 的 ACK 报文段以后,就关闭连接;此时,主机 1 等待 2MSL 后依然没有收到回复,则证明 Server 端已正常关闭,那好,主机 1 也可以关闭连接了。

Websocket及三次握手/四次挥手,网络通信,websocket,网络协议,网络

三次握手

Websocket及三次握手/四次挥手,网络通信,websocket,网络协议,网络文章来源地址https://www.toymoban.com/news/detail-828329.html

四次挥手

到了这里,关于Websocket及三次握手/四次挥手的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络原理】TCP连接管理机制(三次握手四次挥手)

    🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼专栏收录于:计算机网络原理 在使用TCP协议进行网络交互时,TCP会进行三次握手即建立连接,TCP四次挥手即断开连接。三次握手与四次挥手后就完成了网络交互,这样的操作也叫TCP的连接

    2024年02月09日
    浏览(36)
  • 【Linux网络】TCP/IP三次握手、四次挥手流程

    目录 一、三次握手,建立连接 二、四次挥手,断开连接 三、主要字段  1、标志位(Flags)  2、序号(sequence number)  3、确认号(acknowledgement number) 四、三次握手的报文变化 五、四次挥手的报文变化 六、面试题 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手,

    2024年02月08日
    浏览(39)
  • 网络连接管理除了TCP三次握手,还有TCP四次挥手

    网络通信 建立连接 ,TCP会进行三次握手,三次握手主要是两个主机之间建立连接,和其他没有什么关系,那么两个主机之间是如何进行三次握手的呢?他们又会使用什么操作来建立连接呢? 这里我们先了解一下TCP的报文结构: 三次握手主要是理解成客户端与服务器经过三次

    2024年02月07日
    浏览(54)
  • 【计算机网络】TCP 的三次握手和四次挥手

    TCP 是面向连接的,面向连接就是数据通讯的时候需要进行三次握手,断开通讯的时候需要进行四次挥手。 1.seq(sequence number),序列号,随机生成的 2.ack(acknowledgement number),确认号,ack=seq+1 3.ACK(acknowledgement),确定序列号有效 4.SYN(synchronous),发起新连接 5.FIN(FINISH),完成 TCP三次

    2024年02月10日
    浏览(35)
  • 网络编程(11):三次握手和四次挥手部分细节(后续补充)

    关于listen 服务器如果不listen,TCP协议栈就无法从CLOSED状态变成LISTEN状态, 客户端发起连接,TCP协议栈会直接返回RST报文,从而导致客户端连接失败 关于accept accept发送在三次握手完成之后,从全连接队列中取出一个节点分配sock文件句柄 ,如果没有accept还是可以完成三次握手

    2024年02月14日
    浏览(31)
  • 什么是网络编程?Java如何实现?三次握手和四次挥手?

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 网络编程 : 网络编程,就是指在网络通信协议下,不同计算机运行的程序,进行的数据传输,即:计算机与

    2024年02月08日
    浏览(35)
  • 网络扫盲:Tcp协议和hettp、https协议、三次握手四次挥手

    是一种用于传输超文本的协议,是Web应用程序的基础。HTTP协议使用客户端-服务器模型,客户端发出请求,服务器返回响应。HTTP协议是无状态的,即服务器不会记住之前的请求和响应,每个请求和响应都是独立的。HTTP协议使用TCP作为传输协议,通常使用80端口。 HTTP协议的应

    2024年02月04日
    浏览(87)
  • 计算机网络面经之TCP三次握手和四次挥手的详解

    1.详细描述三次握手和四次挥手的过程。 2.三次握手可以变成两次握手吗? 3.简述 TCP 连接和关闭的状态转移。 4.简述TCP 四次挥手的 TIME_WAIT状态,以及为什么需要有这个状态 (1)序号(sequence number):seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据

    2024年02月12日
    浏览(35)
  • 【计算机网络经典面试题】简述 TCP 三次握手和四次挥手的过程

    1)第一次握手:建立连接时,客户端向服务器发送SYN包(seq=x),请求建立连接,等待确认 2)第二次握手:服务端收到客户端的SYN包,回一个ACK包(ACK=x+1)确认收到,同时发送一个SYN包(seq=y)给客户端 3)第三次握手:客户端收到SYN+ACK包,再回一个ACK包(ACK=y+1)告诉服务

    2024年04月08日
    浏览(50)
  • 【网络基础】TCP协议之三次握手&四次挥手--详解与常见问题解答

    目录 TCP 的特性 三次握手与四次挥手 三次握手:  灵魂拷问: 四次挥手: 灵魂拷问: 三次握手: 所谓 三次握手 (Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。 三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列

    2024年01月20日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包