我正在阅读这篇文章,它讲述了在OSI模型的传输层复用。 我似乎无法找出在这一层“复用”是什么意思? 由于多路复用是一个信号过程,在传输层,我们不直接关心信号。
任何人都可以提供我在上面提到的文章中使用的多路复用解释吗?
所引用的文章使用“多路复用”来描述同一主机上的多个应用程序如何共享networking接口,而驱动程序/内核将数据包路由到正确的应用程序。 答案是数据包的目的地不仅仅是IP地址,而是端口号。
每个发送的数据包都有一个端口作为其源地址的一部分。 当您的应用程序指定“任何端口”,只是让操作系统分配一个不使用。 当远程主机发送一个应答时,它不仅指定地址,而且指定端口,这样你的操作系统就可以确定应该在哪个套接字队列中放入数据包。 即使在一个主机上有两个应用程序向同一个远程主机发送数据包,本地端口号也会不同。
因此,首先要注意的是,他们将端口称为“第4层地址”,并将多个应用程序stream多路复用到单个端口上,并在接收端对多个不同的传输进行解复用。
正如你所期望的,这只适用于一些警告,取决于端口/ L4寻址的唯一性。
因此,一个以非独占模式绑定的UDP套接字可以有多个应用程序,这些应用程序都从相同的L4地址/端口发送。 我不记得在接收端的BSD API中的任何东西来过滤基于源端口的数据报,但我可能是错的—如果没有,你将不得不手动demux它在更高而不是L4的堆栈,这不是文章所谈论的。
使用TCP,服务器(bind())套接字可以与accept()组合,以允许同时连接到同一个L4目的地(端口),但是它们必须具有不同的客户端(源)端口。 我也不知道任何BSD套接字API的实现,这将允许多个TCP客户端套接字绑定到同一个本地端口,因为TCP服务器(接收器)只能由于不同的源端口而将stream解复用。
换句话说,使用UDP或TCP的L4多路复用器/多路分解器仅适用于您的案例的50%,绝不会同时在两个方向