Pages

Tuesday, 17 April 2018

Socket、SOCKS和WebSocket

一、socket

socket是一个网络概念,它起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作,而socket就是这个模式在网络编程中的实现,它通常称为套接字插口
当应用进程需要进行网络通信时,必须首先发出socket系统调用,然后操作系统会把进行网络通信的系统资源如:CPU时间、带宽等分配给这个应用进程;通信结束时,应用进程再调用关闭socket的方法,通知操作系统回收之前分配的资源。

二、socks5

socks5是一种代理上网的协议,注意不要与socket搞混了哦。现在最好用的翻墙工具ShadowSocks其实就是基于socks5协议实现的。
这里简单介绍一下建立代理链接的流程:
1.验证:
客户端告诉代理服务器自已支持的验证方式
代理服务器收到上面的报文,选择自已所能支持的验证方式,然后客户端发送相应验证(如用户名密码),最后服务端返回验证状态。
2.建立代理连接:
客户端发送要建立的的代理连接的地址及端口
代理服务器收到客户端的请求后创建到目标机器的连接或创建监听目标机器的socket
3.数据包转发
TCP直接转发,UDP需要客户端先发起UDP ASSOCIATE请求,得到UDP中继地址和端口后,再在报文上加上请求头才能发送。

三、WebSocket

WebSocket一种在单个 TCP 连接上进行全双工通讯的协议。
意思就是浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并允许数据进行双向传送。
在之前要实现这种效果需要AJAX轮询或者HTTP持久连接(长链接),但是这种方法都会消耗很多服务器资源和带宽,所以HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。
最常见的例子,就是用WebSocket实现在线聊天和视频直播中的弹幕。我们可以使用Socket.IO框架,他会自动选择合适双向通信协议,对于不支持WebSocket,会回退到其他方法。
参考资料:
1.WebSocket

No comments:

Post a Comment