7.3.3 端口控制流程

更新于 2026年10月10日 版权声明
7.3.3 端口控制流程

1.随机生成反向代理端口

在电脑网络中,反向代理是代理服务器的一种。服务器根据客户端的请求,从其关心的一组或多组后端服务器(如Web服务器)上获取所需要的资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器簇的存在[25]。反向代理拥有的一个很重要的能力就是为在私有网络下(如局域网)的服务器簇提供NAT穿透及外网发布服务,此项目就是使用了反向代理的这个功能。那么这个系统中为什么需要反向代理呢? 最主要的原因是树莓派即客户端没有公网IP,当用户手机想给树莓派发送命令的时候他们不知道该发到哪儿,但是建立了反向代理之后只要用户发给服务器就可以,因为之前树莓派向服务器建立了一直在运行的SSH,服务器再通过此SSH,把用户的命令发送给树莓派即可。

为了最大限度地避免占用系统端口,我将SSH 反向代理端口限制在了区间[63535,65535]上,在每次端口申请成功之后都要写入数据库进行记录,如果有多个客户端同时请求建立SSH 反向代理的时候,就需要在数据库里面去查找该生成的端口有没有被占用,如果有被占用的话就重新随机生成那个区间里面的数字再去数据库查找,直到生成之前没有被占用的端口才返回给客户端。客户端使用请求得到的端口号构造SSH 反向代理命令并向服务器建立反向代理。图7.7为端口控制程序流程图。

图示

图7.7 端口控制程序流程图

实现上述功能的主要步骤如下:

1)服务器一开机就监听4444端口,等待客户端发起端口申请请求。

2)当客户端发起端口请求的时候(客户端以伪装浏览器的形式发起请求,以GET方式将设备ID作为参数发送给服务器),服务器获取HTTP请求参数,主要是设备ID。接下来服务器会随机产生一个在区间[63535,65535]内的数字,去数据库验证是否已经被其他客户端使用,若已经使用则再次随机生成,若没有使用则将此端口写入在数据库中此设备ID对应的记录。(https://www.daowen.com)

3)给客户端发送可用的端口。

4)树莓派使用此端口拼接SSH 反向代理命令,向服务器发起SSH 反向代理[26]。

5)服务器接受反向代理。

2.数据转发

反向代理建立完成之后,可以认为服务器和树莓派之间建立了双向通信。当然,树莓派到服务器的通信很容易理解和实现,只要在通信的时候向服务器的IP发送数据就可以实现;在成功搭建了反向代理的情况下,服务器到树莓派的通信也不是很麻烦,不过需要自己写一个端口转发协议,之前请求的反向代理端口就在这儿产生了作用,服务器只需要将所需要发送给树莓派的东西发送给它的反向代理端口就行,接下来的工作是SSH 客户端和SSHD服务器负责维护的,一般来说是不需要我们干涉的。

分解项目需求之后,发现服务器向树莓派传送数据无非就是用户在使用按摩功能的时候产生的需求,比如停止按摩、低速按摩、中速按摩和快速按摩等,为了跟执行按摩操作的马达更好地建立起联系,我分别使用了数字10、20、40、60来表示上面四个命令,这个联系就在于当命令是低速按摩、中速按摩和快速按摩的时候只需要在它们三个对应的命令上乘以一个系数就可以作为马达的PWM 输出值直接作用在马达上。

网页端/APP点击相应的按摩按钮之后,服务器接到请求之后就将对应的命令操作码转发给此设备对应的反向代理端口,接下来的问题将由SSH 帮助我们完成。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)