首页 > *nix应用编程, *nix技术 > cmux端口多路复用

cmux端口多路复用

2020年5月10日 发表评论 阅读评论 5,224 次浏览

最近若有空就在时不时的翻看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

转载请保留地址:http://www.lenky.info/archives/2020/05/2903http://lenky.info/?p=2903


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
您必须在 登录 后才能发布评论.