Socket与WebSocket
Socket是什么?
套接字(socket)是一个抽象层,建立在传输层和应用层之间。应用程序可通过它发送或接收数据,对其进行像对文件一样的打开、读写和关闭等操作(来自Unix/Linux“一切皆文件”的思想)。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。
- 网络套接字是IP地址与端口的组合。套接字Socket=(IP地址:端口号)
- 完成两个应用程序之间的数据传输。
- 独立于协议的网络编程接口。
在网络应用程序设计时,由于TCP/IP的核心内容被封装在操作系统中,如果应用程序要使用TCP/IP,可以通过系统提供的TCP/IP的编程接口来实现。在Windows环境下,网络应用程序编程接口称作Windows Socket。为了支持用户开发面向应用的通信程序,大部分系统都提供了一组基于TCP或者UDP的应用程序编程接口(API),该接口通常以一组函数的形式出现,也称为套接字(Socket)。
[ 中间插入补充 ] TCP/IP协议簇中的TCP UDP IP
- TCP/IP模型:它将软件通信过程抽象化为四个抽象层,采取协议堆栈的方式,分别实现出不同通信协议。因为其中两个出名的协议这样命名,其实改协议簇中包含很多协议,在网络体系结构可以看到。
- 网络层(IP):ip地址可以唯一标识网络周中的主机
- 传输层(TCP,UDP):协议+端口可以唯一标识主机中的应用程序(进程)
- TCP(传输控制协议)面向可靠连接,三次握手建立连接,四次握手关闭连接。点对点的连接。
- UDP(用户数据报协议)面向无连接。一对一,一对多,多对一,
套接字分类
- 流式套接字(SOCK-STREAM):提供一种可靠的、面向连接的双向数据传输服务。实现了数据无差错、无重复的发送。使用TCP协议。
- 数据报套接字(SOCK-DGRAM):提供一种不可靠、无连接的双向数据传输服务。数据在传输过程中可能会丢失或重复,并且不能保证在接收端按发送顺序接收数据,通信效率高。使用UDP协议。
- 原始套接字(SOCK-RAW)
套接字调用流程
WebSocket
- WebSocket protocol 是HTML5一种新的协议。双向通信协议,它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。
- HTTP协议及缺陷:单向的网络协议,在建立连接后只允许浏览器像服务端发送requst请求,服务端给出回应。当需要即时通讯时,通过轮询在特定的时间间隔(如1秒),由浏览器向服务器发送Request请求,然后将最新的数据返回给浏览器。
- WebSocket和Http一样属于应用层协议,建立在TCP之上。
思考一下:WebSocket和Socket是不同的,socket是一个抽象的套接字概念,用于连接应用层和传输层,websocket是和http类似的。
套接字
一、Socket技术详解
C++与C++ socket通讯实现
TCP、UDP、HTTP、SOCKET、WebSocket之间的区别
WebSocket介绍和Socket的区别
阮一峰的网络日志–WebSocket教程