美文网首页
3.2 Multiplexing and Demultiplex

3.2 Multiplexing and Demultiplex

作者: 找不到工作 | 来源:发表于2020-05-17 10:13 被阅读0次

    本节介绍传输层协议的 multiplexing 和 demultiplexing。即,将网络层提供的 host-to-host 服务扩展为 process-to-process 服务。

    一个 process 可以有多个 socket,每个socket 有一个独立的 id。网络上的数据通过这些 socket 发送给 process,process 也可以将数据通过 socket 发送到网络。也就是说,传输层并不是将数据传输给一个 process,而是给一个 socket。

    每个传输层的数据包包头都包含接收 socket 信息,可以将数据引导到对应 socket。将数据从传输层数据包分发到不同 socket 的过程称为 demultiplexing。而从不同 socket 搜集数据并创建数据包然后发送给网络层的过程称为 multiplexing。如图 3.2 所示,必须将 P_1P_2 的数据进行 multiplexing 和 demultiplexing。

    Transport-layer multiplexing and demultiplexing

    由于需要 multiplexing 和 demultiplexing,传输层要求:

    1. socket 有唯一 id
    2. 数据包指明 socket id

    socket id 是一个 16bit 的数字(从 0 到 65535)。其中,0 到 1023 时被系统保留的,默认用于 HTTP,FTP 之类的常用应用。

    Connectionless Multiplexing and Demultiplexing

    对于 UDP 协议的 multiplexing 和 demultiplexing,我们可以考虑如下例子:

    假设主机 A 上的一个进程 a 使用 19157 socket,希望与主机 B 上使用 46428 socket 的进程 b 通信。

    • 进程 a 会创建一个传输层数据包,其中包括源 socket id 19157 和目标 socket id 46428。
    • 数据包进一步封装为网络层 IP 数据包,并传输给主机 B。
    • 主机 B 的传输层检查到目标 socket id 是 46428,将其发送给对应该 id 的 socket,b 进程收到消息。
    • (optional) 若 b 进程还想回复 a 进程,则可以利用数据包中的源 IP 地址和源 socket id 回复。

    UDP socket 可以由目标地址(目标 IP,目标 port)唯一确定。也就是说,即使 两个数据包从不同的源地址(源 IP,源 port)发出,只要(目标 IP,目标 port)一致,就会被导向同一个目标进程。

    Connection-Oriented Multiplexing and Demultiplexing

    TCP socket 和 UDP socket 的一个重要区别是,TCP socket 是由 4 个元素确定的(源 IP,源 port,目标 IP,目标 port)。这说明,如果两个具有不同源地址,即使他们有相同的目标地址,最后也会被导向不同的 socket。

    我们可以回忆在 2.7 Socket Programming: Creating Network Applications 中的代码。client 端都是连接同一个目标地址。而对于每一个 client,server 都会通过 AcceptTCP() 方法新建一个 socket。这就表明了 client 源地址不同,在 server 端的 socket 也不同。

    TCP client-server connection

    相关文章

      网友评论

          本文标题:3.2 Multiplexing and Demultiplex

          本文链接:https://www.haomeiwen.com/subject/shtanhtx.html