Week5 #5多路复用和多路分解(运输层)

多路复用和多路分解

学习书目:《计算机网络 自顶向下方法》
本篇博客用于知识点整理,坚持记录学习第五周!

首先来讲一下网络层和运输层的区别。

网络层提供主机之间的逻辑通信,而运输层提供的是不同主机上进程之间的逻辑通信

假设有两户住在同一小区的家庭点外卖(外卖可以当做是数据),外卖员提供的送餐服务(负责将外卖送到小区)就相当于网络层服务,外卖员到达小区后,有一个善良的保安,主动将这两份外卖送到他们各自的家里去,这个保安就充当了运输层服务的角色,即将数据分发给不同的进程,而家庭则充当了进程的角色。
保安虽然会帮忙把外卖送到每户人家,但是他只把外卖送到楼下,每个家庭都要派出一个人下楼来拿外卖,而这个人就好比套接字,负责将数据从运输层接过来,然后再交付给进程。

套接字网络向进程(应用层)传递数据和从进程向网络传递数据的门户。

在接收方的运输层中,主机并不是直接将数据交付给进程,而是先把数据交付给中间的套接字,再由套接字交付给进程。同理,在发送方的应用层中,进程并不是直接把要发送的数据交给运输层,而是先给套接字,再由套接字交付给运输层。一个主机可以同时进行多个进程,而每个进程都可以有一个自己的套接字,套接字就好比一个识别不同进程的标志。

Week5 #5多路复用和多路分解(运输层)

多路分解(Demultiplexing):将运输层报文段的数据交付到正确套接字的工作。
多路复用 (Multiplexing):在源主机从不同的套接字中收集数据块,并为每个数据块装上首部信息,从而生成报文段,然后将报文段传输到网络层的所有工作。

端口让发送方识别接收方套接字的标识

UDP协议
UDP的套接字是由一个二元组标识的,这个二元组包含一个目的IP和目的端口号。运输层检查报文段中的目的IP和目的端口,然后定向到相应的套接字。如果两个报文段具有不同的源IP地址,但是目的端口都相同,那么这两个报文段都会被定向到相同的套接字,然后进入相同的进程。如果这两个报文段的源IP相同,但源端口不同,也会进入被定向到同一套接字(如下图)。
数据报一般都会在头部写入发送方的源IP地址和源端口号,在返回信息时,接收方会把发送方的源端口号和源IP地址作为目的端口号和目的IP地址,并填入数据包头部。
Week5 #5多路复用和多路分解(运输层)

TCP协议
TCP套接字是由一个四元组来标识的,该四元组包括源IP地址,源端口号,目的IP地址和目的端口号。当一个报文段到达一台主机后,主机通过这个四元组来将数据定向到对应的套接字。TCP服务器有一个欢迎套接字,这个套接字有一个固定的端口,专门等待客户端的连接,当与客户端建立起连接后,会为客户端提供一个连接套接字,提供与客户端的一对一的单独服务。如果两个报文段来自于同一主机,但是源端口号不同,也会提供不同的连接套接字(如下图)。如果两个报文段的源IP地址不同,那么也会被定向到两个不同的套接字。下次数据到达时,会根据四元组来定向到这个专门提供一对一服务的连接套接字。
Week5 #5多路复用和多路分解(运输层)