聚合国内IT技术精华文章,分享IT技术精华,帮助IT从业人士成长

cmux端口多路复用

2020-05-19 01:46 浏览: 3820097 次 我要评论(0 条) 字号:

最近若有空就在时不时的翻看rpcx源码,期间看到一个有趣的工程:

https://github.com/soheilhy/cmux

为什么说它有趣,因为在产品里也有实现过类似的功能,即端口多路复用功能,也就是说可以在同一个端口(比如tcp:8881端口),监听多个不同服务(比如SSH和HTTPS等),这带来的直接好处就是减少了对外开放端口个数,对安全、运维、管理来说都是有益的。

原理也简单,主要是特征匹配和文件描述符传递。首先,启动各个业务服务。然后,启动代理程序proxy并监听指定的端口(比如tcp:8881)。当连接过来后,代理程序proxy会对连接首包进行特征匹配,根据匹配结果将accept到的文件描述符传递到对应的业务服务。至此,后续该连接上的数据发送就直接由业务服务处理,不再经过proxy。可以看到,如果是长连接,在性能上的损耗并不大,因为只有首包要经过proxy。cmux属于这种方案。

还有一种方式是,所有数据都经过proxy,由proxy负责转发,也就是所谓的反向代理,此时可以在proxy里做一些通用的认证,安全检测等功能,但会有性能瓶颈的风险。

Over~

参考:
1,https://github.com/soheilhy/cmux
2,https://www.sohu.com/a/341135783_657921



网友评论已有0条评论, 我也要评论

发表评论

*

* (保密)

Ctrl+Enter 快捷回复