首页 > 其他分享 >全面理解WebSocket与Socket、TCP、HTTP的关系及区别

全面理解WebSocket与Socket、TCP、HTTP的关系及区别

时间:2023-04-04 11:12:39浏览次数:45  
标签:协议 WebSocket Socket IP TCP HTTP

6.WebSocket和Socket

Socket 其实并不是一个协议,而是为了方便使用 TCP 或 UDP 而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。 Socket本身并不是一个协议,它工作在OSI模型会话层,是一个套接字,TCP/IP网络的API,是为了方便大家直接使用。

更底层协议而存在的一个抽象层。Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
而WebSocket则是一个典型的应用层协议。

7.WebSocket  HTTP和TCP/IP

 WebSocket和HTTP一样,都是建立在TCP之上,通过TCP来传输数据。

8.Socket和TCP/IP 

Socket是对TCP/IP协议的封装,像创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

参考: Websocket和TCP的区别_websocket和tcp区别_BasicLab基础架构实验室的博客-CSDN博客

 

3、什么是 WebSocket

3.1 WebSocket 诞生背景

轮询是指由浏览器每隔一段时间向服务器发出 HTTP 请求,然后服务器返回最新的数据给客户端。这种传统的模式消耗很多带宽资源。(即浏览器需要不断的向服务器发出请求,然而 HTTP 请求与响应可能会包含较长的头部,其中真正有效的数据可能只是很小的一部分)

在这种情况下,HTML5 定义了 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

Websocket 使用 ws 或 wss 的统一资源标志符(URI),其中 wss 表示使用了 TLS 的 Websocket。

3.2 WebSocket 简介

WebSocket 是一种网络传输协议,可在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。

WebSocket 与 HTTP 和 HTTPS 使用相同的 TCP 端口,可以绕过大多数防火墙的限制。

3.3WebSocket 优点

普遍认为,WebSocket的优点有如下几点:

  • 1)较少的控制开销:在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小;
  • 2)更强的实时性:由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于 HTTP 请求需要等待客户端发起请求服务端才能响应,延迟明显更少;
  • 3)保持连接状态:与 HTTP 不同的是,WebSocket 需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息;
  • 4)更好的二进制支持:WebSocket 定义了二进制帧,相对 HTTP,可以更轻松地处理二进制内容;
  • 5)可以支持扩展:WebSocket 定义了扩展,用户可以扩展协议、实现部分自定义的子协议。

由于 WebSocket 拥有上述的优点,所以它被广泛地应用在即时通讯/IM、实时音视频、在线教育和游戏等领域。

5.2 握手协议

WebSocket 协议属于应用层协议,它依赖于传输层的 TCP 协议。WebSocket 通过 HTTP/1.1 协议的 101 状态码进行握手。为了创建 WebSocket 连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为 “握手”

6.1 WebSocket 与 HTTP 有什么关系?

既然已经提到了 OSI(Open System Interconnection Model)模型,这里分享一张很生动、很形象描述 OSI 模型的示意图(如下图所示)。

 

 

6.4 Socket 是什么?

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 Socket(套接字),因此建立网络通信连接至少要一对端口号。

Socket 本质:是对 TCP/IP 协议栈的封装,它提供了一个针对 TCP 或者 UDP 编程的接口,并不是另一种协议。通过 Socket,你可以使用 TCP/IP 协议。

关于 Socket,可以总结以下几点:

  • 1)它可以实现底层通信,几乎所有的应用层都是通过 socket 进行通信的;
  • 2)对 TCP/IP 协议进行封装,便于应用层协议调用,属于二者之间的中间抽象层;
  • 3)TCP/IP 协议族中,传输层存在两种通用协议: TCP、UDP,两种协议不同,因为不同参数的 socket 实现过程也不一样。

参考:万字长文,一篇吃透WebSocket:概念、原理、易错常识、动手实践 - 腾讯云开发者社区-腾讯云 (tencent.com)

标签:协议,WebSocket,Socket,IP,TCP,HTTP
From: https://www.cnblogs.com/littleheadache/p/17285739.html

相关文章

  • 解决Mixed Content: The page at https://* was loaded over HTTPS, but requested an
    问题:前端页面调用后端接口加载不出来 原因分析:通过查看浏览器调试console日志,得到报错如下 原文:MixedContent:Thepageathttps://*wasloadedoverHTTPS,butrequestedaninsecureXMLHttpRequestendpointhttp://*.Thisrequesthasbeenblocked;thecont......
  • HttpClient 调用工具
    packageentity;importorg.apache.http.Consts;importorg.apache.http.HttpEntity;importorg.apache.http.NameValuePair;importorg.apache.http.ParseException;importorg.apache.http.client.ClientProtocolException;importorg.apache.http.client.entity.Url......
  • 端口转发、Http Tunnel、内网穿透
    原文链接:https://www.yuque.com/tec-nine/architecture/mgxc71SSH命令帮助命令行选项有:-a禁止转发认证代理的连接.-A允许转发认证代理的连接.可以在配置文件中对每个主机单独设定这个参数.代理转发须谨慎.某些用户能够在远程主机上绕过文件访......
  • nginx hyperf ssl https 环境。hyperf-https-ssl
     usernginxnginx;worker_processes 8;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid       logs/nginx.pid;events{   worker_connections 1024;}http{   include      mime.ty......
  • Windows用内网跑https
    1、windows系统:直接下载解压即可。下载链接:https://pan.baidu.com/s/11js65YwFdKaBifxOi-xA5g?pwd=8855  提取码:88552.安装CA根证书到本地,下载程序进行解压,放到windows相应目录并解压,以管理员身份运行下面指令(mkcert表示mkcert-v1.4.1-windows-amd64.exe的完整路径加+mkc......
  • Sevlet规范:HttpServlet类 和 HttpServletRequest接口 源码解析
    Sevlet规范:HttpServlet类和HttpServletRequest接口源码解析每博一文案命运总是不如人愿,但往往是在无数的痛苦总,在重重的矛盾和艰辛中,才是人成熟起来。你,为这瞬间的辉煌,忍耐了多少暗淡无光的日月,你会死亡,但你也会证明生命有多强大。一次邂逅,一次目光的交融,就是永远的合二为......
  • shell命令调用http接口(curl方式)
    shell命令调用http接口(curl方式) 样例1、curl-H"Content-Length:0"-XGET"http://127.0.0.1:8080"2、curl-H"Content-Type:application/json"-H"connection:Keep-Alive"-s-XPOST-d'{"id":"1"......
  • 搭建redis主从复制集群环境时,当从库执行slaveof命令时报错“Error condition on socke
    问题描述:搭建redis主从复制集群环境时,当从库执行slaveof命令时报错“ErrorconditiononsocketforSYNC:Noroutetohost”,如下所示:操作系统:rhel7.964位数据库:redis6.2.6主机名:主库leo-redis626-a,从库leo-redis626-b.1、异常重现[[email protected]]#p......
  • 启动redis时,告警日志中出现“The TCP backlog setting of 511……”以及“overcommit_
    问题描述:启动redis时,告警日志中出现“TheTCPbacklogsettingof511……”以及“overcommit_memoryissetto0…..”警告,如下所示:系统:rhel7.9数据库:redis6.2.61、异常重现[[email protected]]#redis-serverredis6379.conf[root@leo-redis626-aredis-6.......
  • 怎么在springboot中配置https证书的详细教程
    前言由于小程序需要https,然后之前申请的域名过期了,用了两年由于忘记续费要将域名赎回居然要1200....想了一下之前还有另一个域名,干脆就用这个域名弄个二级域名出来,所以二级域名建立出来后需要在springboot项目上开启https访问废话不多说,开整在阿里云新建二级域名这个......