计算机网络运输层之多路复用与多路分解

一、什么是多路复用和多路分解

    在网络上主机与主机之间的通信,实质上是主机上运行的应用进程之间的通信。比如我们两个用电脑或手机实现聊天,就是两个QQ程序(进程)之间的通信。

     倘若当你浏览这篇博客的同时,还挂着QQ,还使用ftp下载大文件,这时就有三个网络上的进程与你的主机上的三个进程进行通信,那么系统是怎么样正确地把接收到的数据定位到指定的进程中的呢?也就是说,系统是怎么把从http服务器发送过来的数据(这篇博客的内容)交付到客户端(你打开的这个网页上),而不把这些数据交付到你的QQ上的呢?反过来考虑,系统又是如何精确地把来自各个应用进程的数据发到网络上指定上的服务器上的对应进程的呢?这就是多路分解与多路复用的作用了。
      

      其实当程序要使用网络时,要使用到对应的操作系统内核的操作和网卡设备,所以我们向操作系统申请,然后操作系统会为我们创建一个套接字Socket,并返回这个Socket的ID,以后我们的程序要使用网络资源,只要向这个Socket的编号ID操作即可。而我们的每一个网络通信的进程至少对应着一个Socket。向Socket的ID中写数据,相当于向网络发送数据,向Socket中读数据,相当于从网络中接收数据。而且这些套接字都有唯一标识符——端口号port。
 

     那多路分解和多路复用到底是什么东东呢?

计算机网络运输层之多路复用与多路分解_第1张图片

每个运输层的报文段中设置了几个字段,包括源端口号和目的端口号等。多路分解就是,在接收端,运输层检查这些字段并标识出接收套接字,进而将该报文定向到该套接字。其工作方式就是,主机上的每个套接字有一个端口号,当报文到达主机时,运输层检查报文段中的目的端口号,并将其定向到相应的套接字。( 将运输层报文段中的数据交付到正确的套接字的工作。)

多路复用就是从源主机的不同套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层中去。
多路复用的要求:1、套接字有唯一标识符。2、每个报文段有特殊字段(源端口号字段和目的端口号字段)来指示该报文段所要交付到的套接字。

 

二、无连接运输:UDP

      在使用UDP来传输报文段时,一个UDP套接字是由一个含有目的IP地址和目的端口号的二元组来全面标识的。因此,如果两个UDP报文段有不同的源IP地址和源端口,但具有相同的IP地址和目的端口号,那么这两个报文段将通过相同的目的端口号定向到相同的目的进程。

三、有连接运输:TCP

   TCP套接字是由一个四元组(源IP地址、源端口号,目的IP地址,目的端口号)来标识的。这样,当一个TCP报文段从网络到达一台主机时,主机会使用全部4个值来将报文段定向,即多路分解到相应的套接字。

   与UDP不同的是,由于每一个TCP连接都会产生一个新的套接字,所以具有不同的源IP或源端口号的连接就是一个不同的连接,对应着产生的新的不同的套接字。

你可能感兴趣的:(计网)