多路复用多路分解是将网络层提供的主机到主机交付服务延伸到为运行在主机上的应用程序提供进程到进程的交付服务。

在目的主机,运输层负责从网络层接受报文段,然后将报文段中的数据交付给对应的进程。而每个进程都会有一个或者多个套接字,这些套接字可以理解为网络层和运输层传输数据的门户(一个更形象的比喻,可以把套接字理解为插座的插口。传输数据需要先连接套接字,而充电也要先找到插口)。其实数据并不是直接由网络层传输给数据层,而是网络层传送给套接字,而套接字又传送给运输层。如下图:

image-20230417220052440

多路分解

将运输层报文段中的数据交付到正确的套接字的工作称为多路分解。

因为接受端不会只有一个套接字,所以需要找到正确的套接字。而每个套接字都会有唯一的标识符。

运输层为了找到正确的套接字,运输层的每个报文段都会有几个特殊字段,这几个字段,用于找到正确的套接字。

多路复用

在源主机中,从不同套接字收集数据块,然后将数据块封装生成报文段,并将报文段传送到网络层,这些工作统称为多路复用。

而在目的主机中,运输层从网络层接受到的报文段分解后交给对应的进程,这个过程是通过将报文段定向到对应套接字来完成的。

多路复用要求

1、套接字有唯一标识符

2、每个报文段有特殊字段来指示该报文段所要交付到的套接字。

报文段中会包含源端口号和目的端口号,如下图所示:

image-20230418095136342

运输层分解:

主机上的每一个套接字都会有对应的端口号,当报文段到达主机后,运输层会查看报文段中的端口号,并将其定向到相应的套接字。然后报文段中的数据就通过套接字进入套接字对应的进程。

注意

只有运输层与进程之间有套接字,也就是说进程发送给运输层数据,需要指定端口号和对应套接字,然后运输层会将报文封装,添加源主机端口号和目的主机端口号,用于目的主机对数据进行分解,找到对应进程。

而运输层与网络层之间,没有套接字的概念。

参考

《计算机网络:自顶向下方法》