这更像是一个理论问题,需要更多的理解。
为了进行端口转发,我们更新sshd_config
并提供我们需要执行转发的本地端口(a)和远程端口(b)的信息。完成此转发配置后,将使用ssh tunnel在a <-> b
之间转发数据包。
但在内部,这是如何工作的?当我执行https://localhost:a
时,数据包如何从端口a
移动到ssh隧道端口22,另一端从端口22移动到端口b
?
答案 0 :(得分:0)
如果您对内部感兴趣,openssh是最受欢迎的SSH协议实现,它是开放源代码,GitHub提供代码。
要回答一下你的问题,它可以像其他网络通信一样工作。如果您不熟悉它,请检查network socket的工作原理。端口转发仅在端点之间进行代理,并在加密通道内发送数据,而不是像直接套接字那样在外部发送数据。
无论如何,google更容易一些。 Ubuntu在documentation中有一个很好的解释:
为了充分利用端口转发功能,了解一下互联网如何运作会很有帮助。
互联网为计算机分配虚拟“端口”,有点像计算机背面的USB端口:
要让数码相机与PC共享照片,请将相机上的USB端口连接到PC上的任何USB端口。然后,计算机会与相机谈论您的照片,并向您显示结果。
要让Web服务器与PC共享页面,请将服务器上的Web服务器端口连接到PC上的任何Internet端口。然后,计算机与服务器讨论您的页面,并向您显示结果。
与USB端口不同,Internet端口没有物理组件。计算机背面没有实际的电线或实际的孔。这些只是通过互联网发送的消息。与其他“虚拟”计算机概念一样,Internet端口只是一个类比,可以帮助解释您的计算机正在做什么。有时,这种类比会破裂:
有两种类型的Internet端口:普通的“TCP”端口和奇怪的“UDP”端口(这里不会介绍)。
与USB端口不同,每台计算机都有65,535个编号的TCP端口,其中一些具有特殊用途。例如,端口号80是您的Web服务器端口,因此您的Web浏览器知道它应该连接到端口号80以便下载网页。
Internet端口之间的连接可以拼接在一起,因此从计算机A到计算机B在端口12,345上的连接可以修补到计算机C上的端口号80.这称为端口转发。