我们知道,传输层位于端系统之间,在应用程序与网络接口之间要进行多路复用的功能,让应用层传下来的数据在传输层之间要进行多路复用,到了另一端之后,网络层的数据传到了传输层之后要进行多路分解,将分解后的数据传入应用层。如下图所示:
那么到底是如何进行多路复用与多路分解的呢?
在接收主机多路分解:将接收到的数据段传递到正确的套接字。
在发送主机多路复用:从多个套接字收集数据,用首部封装数据,然后将报文段传递到网络层。
过程如图所示:
多路分解如何工作呢?
(1)主机收到IP数据报:每个数据报有源IP地址、目的IP地址,每个数据报搬运一个数据段,每个数据段有源端口号和目的端口号。
(2)主机用IP地址的端口号指明数据段属于哪个合适的套接字。
TCP/UDP报文段格式如下图所示:
一、无连接多路分解
分解的过程中有无连接的多路分解。
(1)用端口号创建套接字:
DatagramSocket ServerSocket1=new DatagramSocket (9911);
DatagramSocket ServerSocket2=new DatagramSocket (9922)
UDP套接字由目的IP地址和目的端口号指定
(2)当主机收到UDP数据段时检查数据段中的目的端口号,用端口号指示UDP数据段属于哪个套接字。
(3)具有不同的源IP地址且/或源端口号,但具有相同目的的IP地址和目的端口号的IP数据报指向同样的套接字。
详细过程如图所示:
二、面向连接的多路分解
面向连接的多路分解中TCP套接字由4部分指定,分别为源IP地址、源端口号、目的IP地址和目的端口号。
接收主机使用所有的4个值将数据段定位到合适的套接字。
服务器主机支持很多同时使用的TCP套接字,每个套接字都用4部分来表示。Web服务器对每个连接的客户都有不同的套接字;非持久HTTP将对每个请求有一个不同的套接字。
面向连接多路分解过程图如下: