多路复用
我们知道,一个主机有多个进程,而一个主机的进程于另外一个主机的进程进行通信主要靠的就是套接字,进程将数据封装起来,发送到套接字中,(到了套接字后面的工作就是网络层的事情了),而一个主机将所有从套接字收到的数据块封装上首部信息,从而封装成报文段交给网络层来传输,这个过程就是多路复用
我们大概知道多路复用的作用了,就是给进程发送到套接字的数据块进行封装,从而让另外一个主机的进程能够识别这个报文段,然后交给与其通信的进程
多路分解
对应于多路复用,多路分解的作用就是从网络层接收数据报,然后将其发送到对应的进程的套接字
无连接的多路复用和多路分解
UDP是无连接服务,在多路复用中,UDP套接字是由一个 二元组(目的ip地址,目的端口号) 来标识的
UDP中还会封装源ip地址和源端口号
这两个值的作用主要是作为接收主机的目的端口号(如果目的端口号对应的进程需要回发一个报文段时)
面向连接的多路复用和多路分解
TCP连接服务,TCP套接字是由一个四元组 (源ip地址,源端口号,目的ip地址,目的端口号) 来标识
无连接与面向连接的区别
无连接服务多路分解的过程:
- 从网络层收到数据报
- 提取首部信息得到目的端口号和目的ip地址
- 根据目的端口号分配到对应的套接字
我们可以看到,无连接的一个特点,当有不同的源ip地址或源端口号但具有相同的目的端口号的报文段会被直接发送到目的端口号的套接字中
面向连接多路分解过程:
- 从网络层收到数据报
- 从数据报中提取出目的端口号和目的ip地址
- 在主机中找到目的端口号正在等待连接,因此服务器建立一个套接字对应于该端口号,然后该套接字由数据包中提取出来的四元组(源ip地址,源端口号,目的ip地址,目的端口号)唯一标识
可以看到,当有多个不同主机具有相同的目的ip地址和目的端口号时,面向连接的多路分解能够将其分解到该进程对应的套接字中(一个进程可以有多个套接字)
参考:
《计算机网络自定向下方法》