AberSheeran
Aber Sheeran
I know nothing except the fact of my ignorance.

使用WebSocket进行网络穿透(续)

起笔自
所属文集: Hack
共计 694 个字符
落笔于

继上一篇使用WebSocket进行网络穿透,实际使用中,UDP转发并不常用,并且使用WebSocket转发UDP包也会导致较高的延迟(我当时之所以有这个需求是因为学校网络限制)。

所以为了更简单的实现,更短的延迟,在此重新设计一种新的基于WebSocket的TCP转发协议。

代码实现在websocks

协商

当客户端与服务端建立连接时, 需将 Basic 格式的身份认证信息通过 Authorization 头发送到服务器。

服务端响应应按照HTTP标准,如身份验证失败则返回401,身份验证成功但被限制访问则返回403,成功则返回101。

转发

为了复用单条 WebSocket 连接, 约定如下三种状态, 组成一次完整的请求周期如下:

请求连接

websocket使用文本帧传递JSON格式的字符串,请求连接的服务器HOST与PORT。

{
    "HOST": "example.com",
    "PORT": 443
}

服务器成功或失败之后,返回一个状态

{
    "ALLOW": true/false
}

若成功, 则转至转发状态.

若失败, 则直接转至结束连接状态.

转发

在此过程中, 仅使用二进制帧, 进行转发数据。

结束连接

客户端或服务端主动断开连接,双方均需使用文本帧发送或者响应一次

{
    "STATUS": "CLOSED"
}

当结束连接之后,客户端可重新使用此条WebSocket连接进行如上周期。

如果你觉得本文值得,不妨赏杯茶
使用WebSocket进行网络穿透
没有下一篇