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.youkuaiyun.com/weixin_39181833/article/details/79723745 ↩︎

  2. https://blog.youkuaiyun.com/SL_ideas/article/details/73648378 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值