最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • TCP/IP、Http、Socket、WebSocket的理解

    正文概述 掘金(清风晴雨)   2021-03-30   763

    OSI 模型

    • 应用层:各种应用层协议,Http、WebSocket、FTP、SMTP等
    • 表示层:信息的语法语义以及他们的关联,如加密解密、转换翻译、压缩解压缩
    • 会话层:不同机器上的用户之间建立及管理会话
    • 传输层:接受上一层的数据,在必要的时候把数据进行分割,并将这些数据提交给网络层,且保证这些数据段有效到达对端。TCP、UDP协议。
    • 网络层:控制子网的运行,如逻辑编址、分组传输、路由选择。IP 协议。
    • 数据链路层:物理寻址,同时将原始比特流转变为逻辑传输线路。
    • 物理层:机械、电子、定时接口通信信道上的原始比特流传输。

    基本介绍

    TPC/IP协议栈,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。

    IP想像两个站点TCP和UDP是高速公路,HTTP 、FTP 就是货车,而 Socket 就是两个站点的检票口。货车(http)在一端站点(ip)先通过检票口(socket),检票后行驶在高速公路(tcp)上,到达另一站点(ip)卸载货物(http)。

    HTTP,WebSocket,TCP,UDP,IP都是协议,而 TCP/IP 是不同协议的组合,通常称之为 协议栈,是为了完成对应功能而制定的统一规则。

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

    1. Http协议

    Http协议,超文本传输协议,web上一问一答的两台计算机之间遵循的通信规则。

    • 请求组成:请求行、请求头、请求空行、请求主体
    • 响应组成:响应状态行、响应头、响应空行、响应正文

    Http是无状态的,客户端每次发送的请求都是一个新的请求,所以一般网站登录后的身份信息,放置到请求头 cookie 上。

    Http是无连接的,HTTP是基于TCP协议的应用,请求时需建立TCP连接,HTTP协议本身无需连接,其只处理数据的封装。

    • 每次 http 请求时需建立TCP连接,请求结束后断开连接,完成一次请求/响应操作,所以为短连接

    • HTTP/1.1 中的 keep-alive 所保持的长连接则是为了优化每次 HTTP 请求中 TCP连接三次握手的麻烦和资源开销,只建立一次TCP连接,多次的在这个通道上完成请求/响应操作。但这些请求是串行的,当某一个请求阻塞时就会导致同一条连接的后续请求被阻塞。

    • Http/2 :多路复用技术出现;能够让多个请求和响应的传输完全混杂在一起进行;通过 streamID 来互相区别,更多了解 服务端推动方案 最后有介绍。

    2. Socket协议

    Socket是为了方便开发者直接使用 **更底层协议(一般是TCP或UDP)**而存在的一个抽象层。

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

    Socket的出现只是使得程序员更方便地使用 TCP/IP协议栈 而已,是对 TCP/IP协议栈 的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write。

    主机A 的应用程序要能和 主机B 的应用程序通信,必须通过Socket建立连接,而建立Socket连接必须需要底层TCP/IP协议 来建立 TCP连接。建立 TCP连接 需要底层IP协议来寻找网络中的主机。我们知道网络层使用IP协议可以帮助我们根据IP地址来找到目标主机,但是一台主机上可能运行着多个应用程序,如何才能与指定的应用程序通信就要通过TCP或UDP的地址也就是端口号来指定。这样就可以通过一个Socket实例唯一代表一个主机上的一个应用程序的通信链路了。

    3. WebSocket协议

    基于Http协议的扩展,支持长连接,用于建立客户端和服务器的双向通道。

    而传统的轮询方式(即采用http协议不断发送请求)的缺点:浪费流量(http请求头比较大)、浪费资源(没有更新也要请求)、消耗服务器CPU占用(没有信息也要接收请求)。

    实现过程:

    在Javascript中创建了WebSockets之后,会有一个 Http 的 Upgrade 请求发送到服务器,在取得服务器响应后,建立的连接会从 Http升级,从 Http协议转换为WebSocket协议。

    So:

    1、客户端发送 Http GET请求, upgrade 2、服务器响应给客户端 switching protocol。【Http => WebSocket】 3、可以进行 WebSocket 通信。

    HTTP(协议)和WebSocket(协议)都位于OSI模型的应用层,因此依赖于第4层的TCP。

    TCP/IP、Http、Socket、WebSocket的理解

    4. TCP协议和UDP协议

    TCP是面向连接的一种传输控制协议。TCP连接之后,客户端和服务器可以互相发送和接收消息,在客户端或者服务器没有主动断开之前,连接一直存在,故称为长连接。特点:连接有耗时,传输数据无大小限制,准确可靠,先发先至。

    UDP是无连接的用户数据报协议,所谓的无连接就是在传输数据之前不需要交换信息,没有握手建立连接的过程,只需要直接将对应的数据发送到指定的地址和端口就行。故UDP的特点是不稳定,速度快,可广播,一般数据包限定64KB之内,先发未必先至。

    代理(Proxy)

    http代理

    Bill 希望从 Jane 的Web服务器下载一个网页。Bill 不能直接连接到 Jane 的服务器,因为在他的网络上设置了防火墙。为了与该服务器通信,Bill 连接到其网络的 HTTP代理。他的网页浏览器与代理通信的方式与他直接连接 Jane的服务器的方式相同;也就是说,网页浏览器会发送一个标准的 HTTP请求头。HTTP代理连接到 Jane 的服务器,然后将 Jane 的服务器返回的任何数据传回 Bill。

    现在一般的 web服务器 都作为代理服务器(例:nginx),同时解决了浏览器的跨域问题,这样前后端项目就可以不用部署到一台服务器,实现了前后端的分离。

    Socks代理

    Bill 希望通过互联网与 Jane 沟通,但他们的网络之间存在一个防火墙,Bill 不能直接与 Jane 沟通。所以,Bill 连接到他的网络上的 SOCKS代理,告知它他想要与 Jane 创建连接;SOCKS代理打开一个能穿过防火墙的连接,并促进 Bill 和 Jane 之间的通信。

    Socks属于会话层一个代理协议,比Http更低的层次,所以如果Socks代理了网络请求,那么像 Http、webSocket 等应用层协议都会走Socks的代理路线。

    Socks代理只是简单的传递数据包,而不必关心是何种协议,所以socks代理比其他应用层代理要快的多。

    我们平时提到的ss(shadowsocks)/ssr(shadowsocks-R),其实就是Socks5代理。

    Socks代理与HTTP代理的对比

    SOCKS工作在比HTTP代理更低的层次:SOCKS使用握手协议来通知代理软件其客户端试图进行的连接SOCKS,然后尽可能透明地进行操作,而常规代理可能会解释和重写报头(例如,使用另一种底层协议,例如FTP;然而,HTTP代理 只是将HTTP请求转发到所需的HTTP服务器)。虽然HTTP代理有不同的使用模式,CONNECT方法允许转发TCP连接;然而,SOCKS代理还可以转发UDP流量和反向代理,而HTTP代理不能。HTTP代理通常更了解HTTP协议,执行更高层次的过滤(虽然通常只用于GET和POST方法,而不用于CONNECT方法)。

    容易混淆的关系

    • Http和WebSocket:两种不同的应用层协议,都是基于 TCP连接。
    • Socket和WebSocket:完全无关,前者套接字,后者协议。
    • Socket和Tcp:前者是为了可以直接调用后者的API,可以方便程序员直接使用**更底层协议(一般是TCP或UDP)**而存在的一个抽象层。
    • Socket和Socks:完全无关,前者是套接字,后者是代理协议。

    参考

    1. SOCKS by wikipedia
    2. Http代理服务器 by wikipedia
    3. 网络协议——Http、Socket、WebSocket
    4. 1小时教你理解HTTP,TCP,UDP,Socket,WebSocket
    5. Socket套接字、Socks协议和Socks代理
    6. Vpn与ss/ssr的区别
    7. TCP/IP、Http、Socket的关系理解
    8. WebSocket 的连接建立过程
    9. 怎么理解HTTP协议是无状态的无连接的的协议?

    起源地下载网 » TCP/IP、Http、Socket、WebSocket的理解

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元