请教重定向传输的原理
问一下:重定向传输工具(如rinetd)的工作原理是怎么样的?
拿rinetd来说吧,一个请求从客户端发送到rinetd,再从rinetd发送到真正的服务器,那么应答从真正的服务器发送到rinetd的时候,rinetd又怎么知道它是哪个客户端的请求呢?
[解决办法]
简单来说,这个过程涉及到四个端口
第一,服务器S1开放端口A侦听,接收到从客户端X发过来的连接请求,然后判断符合规则要求,进行端口转发步骤;
第二;服务器S1占用一个端口B,主动向服务器S2的规则制定端口C发起连接。连接失败关闭A和X的连接,成功后进入下一步。
第三,X发向A的所有数据在内部缓存后,立刻通过B转发到C;C发向B的所有数据在内部缓存后,立刻通过A发向X……于是,一条虚拟的链路就连接起来,在使用者看来好像是X直连着C,而这对外是透明的。
综上所述:X-A-B-C四个端口的一个组合,可以在rinetd的内部记录着,作为一次会话的标示符。
[解决办法]
rinetd是简单的proxy,没有什么特殊性,接受请求,建议到backend的连接并转发数据,接受backend发来的数据并发给client。
不要将思维拘泥于细节,先做好一套得心应手的网络事件库,这种程序轻而易举。