HTTP、TCP/IP、WebSocket、Socket

〇、网络五层模型

从上往下 协议
应用层 HTTP、WebSocket
传输层 TCP、UDP
网络层 IP
数据链路层
物理层

一、HTTP协议

什么是HTTP协议

HTTP 协议即超文本传送协议 (Hypertext Transfer Protocol),是 Web 联网的基础。

设计 HTTP 最初的目的是为了提供一种发布和接收 HTML超文本标记语言,Hyper Text Markup Language) 页面的方法。

HTTP 连接

HTTP 连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为 “一次连接”。

1)在 HTTP 1.0 中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
2)在 HTTP 1.1 中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

由于 HTTP 在每次请求结束后都会主动释放连接,因此 HTTP 连接是一种 “短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。

保持连接通常的做法是即使不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次 “保持连接” 的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。

若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

HTTP和TCP/IP的关系

首先我们要知道,上层协议都是要基于下层协议的。

比如说TCP 连接依靠于底层的 IP 协议,IP 协议的连接则依赖于链路层等更低层次。

所以,HTTP协议是基于TCP/IP协议的

二、WebSocket协议

WebSocket的由来

我们知道HTTP是为了规范HTML页面的发布、接收而提出的。

而现在,HTML衍生出了HTML5。

所以,相应地,为了规范HTML5,WebSocket协议提出了。

比起HTTP,WebSocket好在哪里

基于HTTP协议,进行交互的浏览器和服务器,实际上是一种半双工(两个对象 A 和 B,A 能发信息给 B,B 也能发消息给 A,但这两个动作不可以同时进行)

这样有什么弊端呢?

比如说,如果用户不刷新,浏览器的页面就永远不会刷新。这样用户的交互体验是极差的,比如说在邮件列表页面,你如果不主动刷新,就不会知道自己收到了一封新邮件。

由此,诞生了Ajax和Comet技术。

先来说下Ajax技术,它是将服务端的事件排列在待处理的队列中,处理完后,通过轮询的方式把结果返回给客户端(浏览器)。

可以看出,Ajax只是模拟服务器主动发送请求给浏览器,并不是真正的双工通信。

我们再来说下Comet技术。

我们知道HTTP是一种短连接,Comet技术就是在Ajax的基础上,让服务器保持客户端的HTTP连接,即实现HTTP的长连接。

Comet 是一种高级的 Ajax 技术,实现了服务器向页面实时推送数据的技术,应用场景有体育比赛比分和股票报价等。1

实现 Comet 有两种方式:长轮询与 Stream 流

长轮询是短轮询的翻版,短轮询的方式是:页面定时向服务器发送请求,看有没有更新的数据。

而长轮询的方式是,页面向服务器发起一个请求,服务器一直保持 TCP连接打开,知道有数据可发送。发送完数据后,页面关闭该连接,随即又发起一个新的服务器请求,在这一过程中循环。

短轮询和长轮询的区别是:短轮询中服务器对请求立即响应,而长轮询中服务器等待新的数据到来才响应,因此实现了服务器向页面推送实时,并减少了页面的请求次数。

Stream流不同于上述两种轮询,因为它在页面整个生命周期内只使用一个 HTTP 连接,具体使用方法即页面向浏览器发送一个请求,而服务器保持TCP 连接打开,然后不断向浏览器发送数据。

Comet技术开销很高。

此外,我们还可以使用Flash等浏览器实现双工通信,但这需要额外的学习成本,且插件形式的运行效率本身也不高。

所以,随着时代的发展,我们需要在原生网页上就能实现双工通信。

WebSocket协议实现了这一需求,且开销远比Comet等技术低。

WebSocket和HTTP的关系

相同点

1)都是一样基于 TCP 的,都是可靠性传输协议。
2)都是应用层协议。

不同点

1)WebSocket 是双向通信协议,模拟 Socket 协议,可以双向发送或接受信息。HTTP 是单向的。
2)WebSocket 是需要握手进行建立连接的(需要借助HTTP)。

联系

WebSocket 在建立握手时,数据是通过 HTTP 传输的。但是建立之后,在真正传输时候是不需要 HTTP 协议的。

三、Socket

什么是Socket

什么是套接字

Socket和TCP/IP的关系

Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口,提供一套调用 TCP/IP 或UDP协议的 API。
在这里插入图片描述
在设计模式中,Socket 其实就是一个门面模式,它把复杂的 TCP/IP 协议族隐藏在 Socket 接口后面,对用户来说,一组简单的接口就是全部,让 Socket 去组织数据,以符合指定的协议。2

WebSocket 与 Socket 的关系

WebSocket是一个应用层的协议,而Socket是介于应用层和传输层的一个接口。

参考资料


  1. https://blog.csdn.net/weixin_39181833/article/details/79723745 ↩︎

  2. https://blog.csdn.net/SL_ideas/article/details/73648378 ↩︎

猜你喜欢

转载自blog.csdn.net/weixin_37641832/article/details/83540009
今日推荐