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

目录

[一、OSI & TCP/IP模型](#一、OSI & TCP/IP模型)

二、几者之间的关系

三、HTTP

四、Socket

五、WebSocket

[5.1、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 是由服务器主动推送过来,实时性是最高的。

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

相关推荐
muyun28009 分钟前
VyOS起步指南:用Docker快速搭建网络实验环境
网络·docker·vyos
望获linux23 分钟前
【Linux基础知识系列】第五十四篇 - 网络协议基础:TCP/IP
java·linux·服务器·开发语言·架构·操作系统·嵌入式软件
ManThink Technology26 分钟前
通过轮询方式使用LoRa DTU有什么缺点?
运维·服务器·网络
liupenglove27 分钟前
云端【多维度限流】技术方案设计,为服务稳定保驾护航
java·开发语言·网络
之歆33 分钟前
Python-TCP编程-UDP编程-SocketServer-IO各种概念及多路复用-asyncio-学习笔记
python·tcp/ip·udp
失因1 小时前
H3CNE 综合实验二解析与实施指南
运维·开发语言·网络·智能路由器·php
eagle_Annie1 小时前
ROS1/Linux——Launch文件使用
linux·运维·服务器
eagle_Annie2 小时前
ROS1/Linux——WARNING: xxx are installed in ‘xxxxx‘ which is not on PATH
linux·运维·服务器
努力学习的小廉2 小时前
深入了解linux系统—— 信号的捕捉
android·linux·运维
测试界清流2 小时前
Jmeter socket接口测试
运维·服务器·网络