【Linux网络】TCP UDP socket HTTP webSocket之间的区别

目录

一、OSI & TCP/IP模型

二、几者之间的关系

三、HTTP

四、Socket

五、WebSocket

5.1、WebSocket 优点


一、OSI & TCP/IP模型

首先我们要了解OSI七层模型,和预支对应的TCP/IP 四层的模型。

    用下面的图可以看出,TCP  UDP 工作在传输层,而 HTTP  WebSocket 工作在应用层,但socket不属于七层模型中的任何一层,可以理解为socket工作在传输层与应用层中间的隐含层中。

  socket 本身不是一种协议,而是对传输层中的 TCP/ UDP 协议进行了封装,对用户隐藏了内部TCP/ UDP 是如何传输的,只提供一套接口(API)给程序员调用(套接字),从而完成 socket 编程。通过 socket 接口,我们才能使用 TCP/UDP 协议。

二、几者之间的关系

  HTTP WebSocket 等应用层协议通过 socket 接口从而调用 TCP/ UDP 等传输层协议,从而达到网络通信。

  TCP/ UDP => Socket => HTTP WebSocket

  综上所述,我们编程不会直接去调用TCP/ UDP ,而是通过他们封装好的接口 Socket 去通信。可以说,现在几乎网络上所有的通信,底层都是通过 Socket 完成的,一切皆 Socket 。

三、HTTP

  HTTP 是基于 TCP 协议的应用的超文本传输协议,属于应用层的协议。请求时需建立 TCP 连接,请求结束后断开连接,完成一次请求/响应操作。

  HTTP 协议永远都是客户端发起请求,服务器回送响应,这样就限制了使用 HTTP 协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

  HTTP 协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

四、Socket

  Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)

  Socket连接需要一对套接字,一个运行于客户端,另一个运行于服务端!之间的连接分为三个步骤:服务器监听客户端请求连接确认

(1)服务器监听:服务端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

(2)客户端请求:由客户端的套接字提出连接请求,要连接的目标是服务端的套接字。所以客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

(3)连接确认:指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

五、WebSocket

  WebSocket 也是一种协议,并且也是基于 TCP 协议的。可以理解为 WebSocket 是 HTTP 的优化,但 WebSocket 不仅仅在Web应用程序上得到支持。WebSocket 虽然是 Html5 的产物,但也不仅仅局限于浏览器的应用程序,许多语言都提供了 WebSocket 的支持,比如C,C++,Python等。   

  为了建立⼀个 WebSocket 连接,客户端浏览器首先要向服务器发起⼀个 HTTP 请求,这个请求和通常的 HTTP 请求不同,包含了⼀些附加头信息,通过这个附加头信息完成握⼿过程并升级协议的过程。如下图所示:

5.1、WebSocket 优点

  1. 节约带宽。不停地轮询服务端数据这种方式,使用的是 http 协议,head 信息很大,有效数据占比低, 而使用 WebSocket 方式,头信息很小,有效数据占比高。
  2. 无浪费。 轮询方式有可能轮询10次,才碰到服务端数据更新,那么前9次都白轮询了,因为没有拿到变化的数据。 而 WebSocket 是由服务器主动回发,来的都是新数据。
  3. 实时性,考虑到服务器压力,使用轮询方式不可能很短的时间间隔,否则服务器压力太多,所以轮询时间间隔都比较长,好几秒,设置十几秒。 而 WebSocket 是由服务器主动推送过来,实时性是最高的。
     

本文要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/53110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Word导出创建Adobe PDF其中emf图片公式马赛克化及文字缺失

软件版本 Word 2021 Visio 2019 Adobe Acrobat Pro 2020 问题描述 公式马赛克化,是指在Word中使用MathType编辑的公式,然后在Visio中使用图片(增强型图元文件)形式得到的粘贴对象,效果如下 文字缺失,是指Word导出→创建Adobe P…

一文学会lua脚本

文章目录 0.前言背景应用 1. 学习大纲1. 学习基本语法:2. 理解函数和模块:3. 深入数据结构:4. 高级特性和技巧:5. 实践项目: 2. Lua脚本2.1 学习基本语法2.2 理解函数和模块2.3 深入数据结构2.4 高级特性和技巧 3. 高级…

Hbase分布式安装

一、环境准备 启动zookeeper 启动hdfs 二、安装 上传安装包 1、解压 tar -zxf hbase-2.2.2-bin.tar.gz -C /opt/installs/2、更名 mv hbase-2.2.2/ hbase3、配置环境变量 [roothadoop11 conf]# vim /etc/profile export HBASE_HOME/opt/installs/hbase export PATH$PATH:$…

vr内容编辑软件降低了虚拟现实项目开发门槛

VR虚拟场景编辑器是一种专门用于创建、修改和设计虚拟场景的工具。它利用vr虚拟现实技术,让用户可以在三维空间中直接对场景进行操作和编辑。这种编辑器的出现,使得用户可以更加直观、自由地进行场景设计和制作,为诸多领域带来了新的可能性。…

Kafka生产者原理 kafka生产者发送流程 kafka消息发送到集群步骤 kafka如何发送消息 kafka详解

kafka尚硅谷视频: 10_尚硅谷_Kafka_生产者_原理_哔哩哔哩_bilibili ​ 1. producer初始化:加载默认配置,以及配置的参数,开启网络线程 2. 拦截器拦截 3. 序列化器进行消息key, value序列化 4. 进行分区 5. kafka broker集群 获取…

Linux常用命令——dhclient命令

在线Linux命令查询工具 dhclient 动态获取或释放IP地址 补充说明 dhclient命令使用动态主机配置协议动态的配置网络接口的网络参数。 语法 dhclient(选项)(参数)选项 0:指定dhcp客户端监听的端口号; -d:总是以前台方式运行程序&#x…

SpringBoot案例-文件上传

目录 简介 文件上传前端页面三要素 服务端接收文件 小结 本地储存 实现 代码优化 小结 阿里云OSS 阿里云 阿里云OSS 使用第三方服务--通用思路 准备工作 参照官方SDK代码,编写入门程序 集成使用 阿里云OSS-使用步骤 阿里云OSS使用步骤 参照SDK编写入…

深层次分析字符数组和字符串的区别是什么?

前言 (1)休闲时刻刷B站,看到一个卖课的,发视频问,char arr1[]{‘H’,‘E’,‘L’,‘L’,‘O’};和char arr2[]“HELLO”;区别是什么。 (2)看那个卖课博主一顿分析,最后成功得出&…

IT运维:使用数据分析平台监控DELL服务器

概述 在企业日常运维中,我们有着大量的服务器设备,设备故障一般可以通过常用的监控软件实现自动告警,但如果在管理运维中我们要做的不仅仅是发现故障,处理硬件故障,我们还需要进一步的了解,今年一共出现了多…

nodejs+vue+elementui农业产品信息网上商城管理系统_9927h

语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 前端nodejsvueelementui,系统使用权限分别包括管理员、种植户和用户,其中管理员拥有着最大的权限,同时管理员的…

MySQL数据库 索引、事务、储存引擎

索引 索引的概念 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。 使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找…

【智算中心】GPU是如何改变世界的

现在有市场消息表示,NVIDIA正计划减少A800 GPU的产量,以促进其更高端的H800 GPU 的销售。很显然NVIDIA是希望从H800 GPU上获得更多销售量,从中国市场获得更多利益。而且最近一段时间有传闻美国要彻底封杀AI芯片的出口,让国内甚至连…

【java】LinkedList 和 ArrayList的简介与对比

Java LinkedList和 ArrayList 在使用上,几乎是一样的。由于LinkedList是基于双向链表的,会多出list.getFirst();获取头部元素等方法 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按…

掌握指针和数组:经典笔试题攻略(万字详解)

🍁博客主页:江池俊的博客 💫收录专栏:C语言刷题专栏 💡代码仓库:江池俊的代码仓库 🎪我的社区:GeekHub 🎉欢迎大家点赞👍评论📝收藏⭐ 文章目录 前…

电脑显示“Operating System not found”该怎么办?

“Operating System not found”是一种常见的电脑错误提示,这类错误会导致你无法成功启动Windows。那么电脑显示“Operating System not found”该怎么办呢? 方法1. 检查硬盘 首先,您可以测试硬盘是否存在问题。为此,您可以采取以…

基于JSP+Servlet+Mysql停车场管理系统(含实训报告)

TOC 一、系统介绍 项目类型:Java web项目 项目名称:基于JSPServlet的停车场管理系统 项目架构:B/S架构 开发语言:Java语言 前端技术:HTML、CSS、JS、JQuery等技术 后端技术:JSP、Servlet、JDBC等技术…

Python案例|Matplotlib库实现的数据分析

数据展示是数据分析和挖掘中的重要环节,通过图形的形式可以直观、清晰地呈现数据内在的规律。 本文所用数据采用上一篇案例实现后的数据表,数据存储在newbj_lianJia.csv文件中,具体代码如下。 import pandas as pd #导入库 import matplot…

自定义拖拽功能,上下拖拽改变盒子高度

核心在于监听鼠标的move来改变div的高度&#xff0c;抽成了组件 <template><div ref"container" class"drag"><z-tooltip v-if"isShowIcon" effect"dark" content"格式化" placement"top-start"&…

视频分割合并工具说明

使用说明书&#xff1a;视频分割合并工具 欢迎使用视频生成工具&#xff01;本工具旨在帮助您将视频文件按照指定的规则分割并合并&#xff0c;以生成您所需的视频。 本程序还自带提高分辨率1920:1080&#xff0c;以及增加10db声音的功能 软件下载地址 https://github.com/c…

树模型与集成学习:LightGBM

目录 树模型与集成学习 LightGBM 的贡献 LightGBM 的贡献&#xff1a;单边梯度抽样算法 LightGBM 的贡献&#xff1a;直方图算法 LightGBM 的贡献&#xff1a;互斥特征捆绑算法 LightGBM 的贡献&#xff1a;深度限制的 Leaf-wise 算法 树模型与集成学习 树模型是非常好的…