文章目录
〇、网络五层模型
从上往下 | 协议 |
---|---|
应用层 | 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是介于应用层和传输层的一个接口。