学习了这么久的java技术, 但是这5个 socket/WebSocket/WebService/http/https 概念还不是很清楚, 总是很模糊,或者是弄混.
学习之前, 要对这个网络七层协议有个了解
网络七层协议从低到高: 1、物理层(Physical Layer)、 2、数据链路层(Data Link Layer)、 3、网络层(Network Layer)、 4、传输层(Transport Layer)、 ---------socket(发动机/提供了网络通信的能力。socket是一切通过端口通信的基础(包括http)) 5、会话层(Session Layer)、 6、表示层(Presentation Layer)、 7、应用层(Application Layer) ---------http(轿车/提供了封装或者显示数据的具体形式(超文本传输协议)) /webSocket(是HTML5规范提出的一种协议,基于也是应用层) /FTP协议(File Transfer Protocol,文件传输协议)
最通俗易懂的网络应用层协议详解 :https://blog.csdn.net/qq992817263/article/details/56669228
什么是协议? : 协议是一种约定,我们规定好一种信息的格式,如果发送方按照这种请求格式发送信息,那么接收端就要按照这样的格式解析数据。这就是协议。
一.socket(传输控制层接口)
1.1 socket传输的定义
所谓socket通常也称作"套接字",实现服务器和客户端之间的物理连接,并进行数据传输,主要有udp和tcp两个协议。socket处于网络协议的传输层。Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。
udp协议:广播式数据传输,不进行数据验证
tcp协议:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流。
补充:
“Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,提供一套调用TCP/IP协议的API。 在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。” 当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次.
1.2 socket传输的特点:
优点
1) 传输数据为字节级,传输数据可自定义,数据量小(对于手机应用讲:费用低)
2) 传输数据时间短,性能高
3) 适合于客户端和服务器端之间信息实时交互
4) 可以加密,数据安全性强
缺点:
1) 需对传输的数据进行解析,转化成应用级的数据
2) 对开发人员的开发水平要求高
3) 相对于http协议传输,增加了开发量
1.3 socket传输适用范围
基于socket传输的特点 : socket 传输方式适合于对传输速度,安全性,实时交互,费用等要求高的应用中,如网络游戏,手机应用,银行内部交互等
二. WebSocket(应用层协议)
1.1 WebSocket协议是什么?
WebSocket是HTML5规范提出的一种协议;目前除了IE浏览器,其他浏览器都基本支持。和HTTP协议是并存的两种协议(Websocket和HTTP有关系,但是关系不大, websocket在首次建立连接时要使用下http协议(服务器返回101,则表示c/s由http协议升级websocket协议成功)。但是值得注意的是,这只是他们之间唯一的仅有的相同点。除此之外,他们完全不同。,如图:
)。
WebSocket是HTML5中的协议。HTML5 Web Sockets规范定义了Web Sockets API,支持页面使用Web Socket协议与远程主机进行全双工的通信。它引入了WebSocket接口并且定义了一个全双工的通信通道,通过一个单一的套接字在Web上进行操作。HTML5 Web Sockets以最小的开销高效地提供了Web连接。相较于经常需要使用推送实时数据到客户端甚至通过维护两个HTTP连接来模拟全双工连接的旧的轮询或长轮询(Comet)来说,这就极大的减少了不必要的网络流量与延迟。
1.2 WebSocket协议有什么特点?
♥ Websocket是基于HTTP协议的.但是和http最大的不同是: a. WebSocket是一种双向通信协议。在建立连接后,WebSocket服务器端和客户端都能主动向对方发送或接收数据,就像Socket一样;(而http服务端不能主动联系客户端,只能有客户端发起,太被动啦) b. WebSocket需要像TCP一样,先建立连接,连接成功后才能相互通信 补充: 传统http是 一发一收关闭,每次请求-应答都需要客户端与服务端建立连接的模式(每次都要重新发起连接请求). 而一旦WebSocket连接建立后,在客户端断开WebSocket连接或Server端中断连接前,不需要客户端和服务端重新发起连接请求。 ♥ Websocket是一个持久化的协议. (只要建立一次HTTP请求,就可以连续不断的得到服务器推送的消息,节省带宽和服务器端的压力,也可以用long poll
和ajax 轮询
来 模拟出类似的效果) eg: 客户端:我要建立websocket连接 服务器端:好的,已经切换到websocket协议,websocket连接已经建立 客户端: 有什么消息要及时告诉(推送)我 服务器端:好的 服务器端:xxxxxx 服务器端:yyyyyyy 。。。。。
1.3 WebSocket 协议案例
首先我们来看个典型的 Websocket