复用和解复用
- 将端到端的网络层协议扩展到进程到进程的传输层协议称为复用和解复用。复用和解复用是所有计算机网络都需要的
- 在目的端主机上,传输层将段中的数据传送给相应的进程中。一个进程可以有一个或多个socket,在接收主机中,传输层并不是直接将数据传送给一个进程,而是传送给一个中间socket,因为在每个时刻都有多个socket在接收端主机中,每个socket都有一个唯一的识别码。
- 每个传输层段中都有一组信息,接收端主机传输层检查这些信息,将这些段直接传送给相应的socket,这个过程称为解复用 。在源端主机中,从不同的socket中将数据片收集起来,加上头部信息封装成段,并且将段传送给网络层称为复用
- 复用需要两个条件:
- socket有唯一识别码
- 每个段都有一个特殊的域用来表明这个段被传送给哪个socket
这两个特殊的域别成为源端口号和目的端口号。每个端口号都是16位整数,从0-65535,其中0-1023是知名端口号,被一些熟知的应用占用
无连接的复用和解复用
一般,客户端应用让传输层自动分配端口号,而服务器端应用需要分配一个指定的端口号。UDP socket需要两元组(目的主机IP地址和目的端口号)
假定一个进程在主机A中,使用UDP端口号1234,箱发送数据到主机B上的进程上,该进程的UDP端口号为5678。那么主机A的传输层创建一个传输层段,包好应用数据,源端口号和目的端口号,然后将这个段传送给网络层,网络层将这些段封装成IP数据报提供尽最大努力传输,如果这个段到达主机B,传输层将检查段中的目的端口号,并将它送往端口号为5678的socket中。
- 段中源端口号的作用是,当主机B需要向主机A返回信息时,这个源端口号就作为返回地址
面向连接的复用和解复用
TCP socket需要四元组(源IP地址,源端口号,目的IP地址,目的端口号),两个源IP地址不同的TCP段到达目的主机,将被送往不同的socket中
TCP连接中,传输层段在目的主机中,根据这四个值进行解复用
TCP通信过程:
- 服务器端有一个欢迎socket,等待从客户端来的连接建立请求
- TCP客户端建立一个socket,并将这个socket与服务器相连
- 一个连接建立请求就是第一个TCP段,包含目的端口号和特殊的连接建立位(头部),也包含源端口号
- 当服务器收到连接建立请求,就创建一个专门的通信socket负责这两个进程的通信
- 接下来两个进程就可以相互通信了