Tony The Lion Asked: 2010-02-22 02:43:00 +0800 CST2010-02-22 02:43:00 +0800 CST 2010-02-22 02:43:00 +0800 CST 在 OSI 第 4 层复用 772 我正在阅读这篇文章,它讨论了 OSI 模型传输层的多路复用。我似乎无法弄清楚该层的“多路复用”是什么意思?由于多路复用是一个信号过程,在传输层,我们并不直接关注信号。 任何人都可以向我提供上述文章中使用的多路复用的解释吗? networking multiplexing 2 个回答 Voted mpez0 2010-02-22T05:20:46+08:002010-02-22T05:20:46+08:00 引用的文章使用“多路复用”来描述同一主机上的多个应用程序如何共享网络接口,而驱动程序/内核将数据包路由到正确的应用程序。答案是数据包目的地不仅由 IP 地址指示,还由端口号指示。 每个发送的数据包都有一个端口作为其源地址的一部分。当您的应用程序指定“任何端口”时,它只会让操作系统分配一个未使用的端口。当远程主机发送回复时,它不仅指定地址,还指定端口,允许您的操作系统确定传入数据包应放置在哪个套接字队列中。即使一台主机上有两个应用程序向同一个远程主机发送数据包,本地端口号也会不同。 James Cape 2010-02-24T21:29:57+08:002010-02-24T21:29:57+08:00 所以首先要注意的是,他们将端口称为“第 4 层地址”,并将多个应用程序流多路复用到单个端口,并在接收端解复用多个不同的传输。 如您所料,这仅适用于一些注意事项,具体取决于端口/L4 寻址的唯一性。 因此,在非独占模式下绑定的 UDP 套接字可以有多个应用程序,它们都从相同的 L4 地址/端口发送。我不记得接收端的 BSD API 中的任何内容来根据源端口过滤数据报,但我可能是错的——如果没有,你将不得不在更高的设备上手动解复用它level 比 stack 比 L4 高,这不是文章要讲的。 使用 TCP,服务器 (bind()) 套接字可以与 accept() 组合以允许多个同时连接到同一个 L4 目标(端口),但它们必须具有不同的客户端(源)端口。我也不知道任何允许多个 TCP 客户端套接字绑定到同一个本地端口的 BSD 套接字 API 实现,因为 TCP 服务器(接收器)由于源端口不同而只能对流进行解复用。 换句话说,使用 UDP 或 TCP 的 L4 多路复用器/解复用器只能在 50% 的情况下工作,而且永远不会同时在两个方向上工作
引用的文章使用“多路复用”来描述同一主机上的多个应用程序如何共享网络接口,而驱动程序/内核将数据包路由到正确的应用程序。答案是数据包目的地不仅由 IP 地址指示,还由端口号指示。
每个发送的数据包都有一个端口作为其源地址的一部分。当您的应用程序指定“任何端口”时,它只会让操作系统分配一个未使用的端口。当远程主机发送回复时,它不仅指定地址,还指定端口,允许您的操作系统确定传入数据包应放置在哪个套接字队列中。即使一台主机上有两个应用程序向同一个远程主机发送数据包,本地端口号也会不同。
所以首先要注意的是,他们将端口称为“第 4 层地址”,并将多个应用程序流多路复用到单个端口,并在接收端解复用多个不同的传输。
如您所料,这仅适用于一些注意事项,具体取决于端口/L4 寻址的唯一性。
因此,在非独占模式下绑定的 UDP 套接字可以有多个应用程序,它们都从相同的 L4 地址/端口发送。我不记得接收端的 BSD API 中的任何内容来根据源端口过滤数据报,但我可能是错的——如果没有,你将不得不在更高的设备上手动解复用它level 比 stack 比 L4 高,这不是文章要讲的。
使用 TCP,服务器 (bind()) 套接字可以与 accept() 组合以允许多个同时连接到同一个 L4 目标(端口),但它们必须具有不同的客户端(源)端口。我也不知道任何允许多个 TCP 客户端套接字绑定到同一个本地端口的 BSD 套接字 API 实现,因为 TCP 服务器(接收器)由于源端口不同而只能对流进行解复用。
换句话说,使用 UDP 或 TCP 的 L4 多路复用器/解复用器只能在 50% 的情况下工作,而且永远不会同时在两个方向上工作