当前位置: 代码网 > 服务器>服务器>Linux > 【Linux网络】TCP UDP socket HTTP webSocket之间的区别

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

2024年08月01日 Linux 我要评论
本文首先讲述了OSI和TCP/IP模型,重点讲述了TCP UDP socket HTTP webSocket之间的区别,介绍了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 是由服务器主动推送过来,实时性是最高的。
     

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com