理解websocket连接的原理

news/2024/7/5 3:26:07

背景

Websocket是一个持久化的协议,相对于HTTP这种非持久的无状态协议来说


一、问题

http long poll,或者ajax轮询都可以实现实时信息传递,为什么还需要websocket?

二、理解

ajax轮询:浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。
long poll:客户端发起连接后,如果没消息,就一直不返回Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。
总结:

  1. 两者都是采用轮询的方式,而long poll是阻塞式的
    ajax轮询 需要服务器有很快的处理速度和资源。(速度)
    long poll 需要有很高的并发,也就是说同时接待客户的能力。(场地大小)
  2. 两者都体现了服务器的被动性

websocket的出现:

  1. 解决了服务器的被动性,当服务器完成协议升级后(HTTP->Websocket),服务端就可以主动推送信息给客户端。
    理解:只需要经过一次HTTP请求,就可以做到源源不断的信息传送了。(在程序设计中,这种设计叫做回调,即:你有信息了再来通知我,而不是我每次跑来问你)
  2. 解决了上面同步有延迟,而且还非常消耗资源的情况
    理解:建立websocket连接后,可以直接跟接线员(Nginx服务器)建立持久连接,有信息的时候客服(Handler)想办法通知接线员,然后接线员在统一转交给客户(客户端)。
    而在传统的方式上,要不断的建立,关闭HTTP协议,由于HTTP是非状态性的,每次都要重新传输identity info(鉴别信息),来告诉服务端你是谁。
    Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求,这样就解决了接线员要反复解析HTTP协议,还要查看identity info的信息。

总结

websocket连接,只需要一次HTTP握手,避免HTTP的无状态性,且服务器可以主动通知,不限次数,直到请求关闭。

拓展

TCP三次握手四次挥手

在这里插入图片描述
ACK —— 确认,使得确认号有效。
RST —— 重置连接(经常看到的reset by peer)就是此字段搞的鬼。
SYN —— 用于初如化一个连接的序列号。
FIN —— 该报文段的发送方已经结束向对方发送数据。
SYN和FIN段都是会利用重传进行可靠传输的。

理解:3次握手来建立一个连接,4次挥手来关闭一个连接
一个TCP连接由一个4元组构成,分别是两个IP地址和两个端口号。一个TCP连接通常分为三个阶段:启动、数据传输、退出(关闭)。

三次握手:
在这里插入图片描述

客户端和服务端通信前要进行连接,“3次握手”的作用就是双方都能明确自己和对方的收、发能力是正常的。

第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。

第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。

第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力,服务端的发送、接收能力是正常的。

经历了上面的三次握手过程,客户端和服务端都确认了自己的接收、发送能力是正常的。之后就可以正常通信了。

三次握手的一个重要功能是客户端和服务端交换ISN(Initial Sequence Number), 以便让对方知道接下来接收数据的时候如何按序列号组装数据。

拓展
DoS攻击-syn flood:
恶意的向某个服务器端口发送大量的SYN包,则可以使服务器打开大量的半开连接,分配TCB(Transmission Control Block), 从而消耗大量的服务器资源,同时也使得正常的连接请求无法被相应。
防攻击方法:连接队列

四次挥手:
在这里插入图片描述

TCP连接是双向传输的对等的模式,就是说双方都可以同时向对方发送或接收数据。
当有一方要关闭连接时,会发送指令告知对方,我要关闭连接了。这时对方会回一个ACK,此时一个方向的连接关闭。但是另一个方向仍然可以继续传输数据,等到发送完了所有的数据后,会发送一个FIN段来关闭此方向上的连接。接收方发送ACK确认关闭连接。注意,接收到FIN报文的一方只能回复一个ACK, 它是无法马上返回对方一个FIN报文段的,因为结束数据传输的“指令”是上层应用层给出的,我只是一个“搬运工”,我无法了解“上层的意志”。


http://lihuaxi.xjx100.cn/news/1052849.html

相关文章

Android studio Activity启动模式

1.四种启动模式: 1).standard(标准模式) 特点:1.Activity的默认启动模式 2.每启动一个Activity就会在栈顶创建一个新的实例。例如:闹钟程序 缺点:当Activity已经位于栈顶时…

ASEMI代理ADCMP600BKSZ-REEL7原装ADI车规级ADCMP600BKSZ-REEL7

编辑:ll ASEMI代理ADCMP600BKSZ-REEL7原装ADI车规级ADCMP600BKSZ-REEL7 型号:ADCMP600BKSZ-REEL7 品牌:ADI/亚德诺 封装:SC-70-5 批号:2023 引脚数量:5 工作温度:-40C~125C 安装类型&am…

jsp+sql城乡信息管理(系统)

第4章 总体设计 上章对系统进行了需求分析和可行性分析,证明此系统完全可行,这章就对系统的总体设计通过图文并茂的形式进行介绍。 第4.1节 数据库设计 4.1.1 概述 数据库技术是管理信息系统的一项重要技术其发展大致经历了三个阶段: ①人…

【代码随想录】刷题Day3

1.链表删除 203. 移除链表元素 循环删除 class Solution { public:ListNode* removeElements(ListNode* head, int val) {if(headnullptr)return head;ListNode* prevnullptr;ListNode* curhead;while(cur){if(prevnullptr&&cur->valval){ListNode* tmp cur;curcu…

数学建模第四天:数学建模算法篇之整数规划、指派问题及其求解方法

目录 一、前言 二、整数规划模型 1、整数规划特征 2、分枝定界法 ①分枝定界法的步骤 ②实际解题 三、0-1整数规划 1、隐枚举法 ①隐枚举法的步骤: ②案例 2、匈牙利法 ①指派问题 ②匈牙利法步骤 ③案例 一、前言 我们先来看一个例子&#x…

vue 监听是否切屏和开启小窗

前言 在做自己的项目的时候有用到判断设备是否有切屏,一般用的多的地方就是考试系统,切屏我们都知道,一般可以很容易的进行监控,只不过当开启了小窗的时候,之前一直没有解决办法,而现在则通过监控切屏和小…

Appuploader安装指南

转载:下载和安装appuploader 下载和安装appuploader IOS开发工具官网地址 Appuploader home -- A tool improve ios develop efficiency such as submit ipa to appstore and manage ios certificate 最新版本已经优化了没支付688给apple的账号登录流程&#xff0c…

JavaSE学习进阶day06_01 数据结构(进阶)

第一章 数据结构(温习数据结构的内容) 1.1 树基本结构介绍 树具有的特点: 每一个节点有零个或者多个子节点 没有父节点的节点称之为根节点,一个树最多有一个根节点。 每一个非根节点有且只有一个父节点 名词含义节点指树中的…