运输层协议的理解
前面我们介绍了应用层协议(HTTP、SMTP等等),应用层的主要作用是定义了运行在不同端系统上的应用程序进程之间如何相互传递报文(主要是定义了应用进程的数据报文类型、语义等等,但是没有定义报文在不同端系统之间如何运输,运输的问题要依靠下层协议来完成)。
接下来我们看一下运输层的基本原理 为了准确的了解运输层,我们将运输层和网络层对比起来看
- 运输层:为运行在不同主机上的应用进程之间提供了逻辑通信功能(运输层在端系统中实现,而不在路由器中)
- 网络层:网络层提供了主机之间的逻辑通信
- 通过一个例子来看一下运输层和网络层的区别
考虑有两个家庭,一家位于美国东海岸,一家位于美国西海岸,每家有 12 个孩子,这两个家庭的孩子们每个人每星期要互相写一封信,每封信都用单独的信封通过传统的邮政服务传送。因此,每个家庭每星期向另一家发送 144 封信 。每一个家庭有个孩子负责收发邮件,西海岸家庭是Ann负责,而东海岸家庭是Bill负责。每星期Ann去她的所有兄弟姐妹那里收集信件,并将这些信件交到每天到家门口来的邮政服务的邮车上,当信件到达西海岸家庭时,Ann 也负责将信件分发到她的兄弟姐妹手上,在东海岸家庭中的 Bill 也负责类似的工作。 由上面这个例子可以看出,运输层协议只在端系统中工作,在发送主机中,运输层协议将来自应用程序的报文移动到网络层;在目的主机中,运输层协议将来自网络层的报文段交付给在主机上运行的适当应用程序进程。
多路分解和多路复用
前面我们明确了运输层协议的作用:运输层协议只在端系统中工作,在发送主机中,运输层协议将来自应用程序的报文移动到网络层;在目的主机中,运输层协议将来自网络层的报文段交付给在主机上运行的适当应用程序进程
- 那么运输层协议是如何将来自网络层的报文段交付给适当的套接字呢(不理解套接字可以参考文章HTTP与HTTPS)?
要实现这个目的,首先要做到两点: ①每个套接字都有唯一标识符(也就是常说的端口号) ②每个运输层报文段都要包含目的进程所对应的套接字的端口号字段 只有满足了上面两个条件,运输层报文段才能准确无误地交付到适当的套接字 多路分解: 在接收端,运输层协议检查运输层报文段中的目的端口号字段,进而将报文段定向到目的进程对应的套接字的过程称为多路分解 - 运输层协议是如何将来自应用进程的报文传递给网络层的呢?
多路复用: 运输层协议在源主机从不同套接字中收集来自应用进程的数据块,并为每个数据块封装上首部信息(这将在以后用于分解)从而生成运输层报文段,进而将运输层报文段传递给网络层。这个过程称为多路复用 - 注:端口号是一个 16 bit的数,其大小在 0-65535。0-1023 范围的端口号称为周知端口号,是受限制的,这是指它们保留给诸如 HTTP (它使用端口号 80) 之类的周知应用层协议来使用
具体的运输层协议对应的多路分解和多路复用的区别
- UDP协议对应的多路分解与多路复用(无连接的)
一个UDP套接字是由一个二元组全面标识的(目的IP地址+目的端口号) 也就是说,如果两个 UDP 报文段有不同的源地址和/或源端口号,但具有相同的目的地址和目的端口号,那么这两个报文段将通过相同的目的套接字被定向到相同的目的进程 - TCP协议对应的多路分解与多路复用(有连接的)
一个TCP套接字是由一个四元组全面标识的(目的IP地址+目的端口号+源IP地址+源端口号) 因此即便源端口号相同,但是源IP地址不同,也会建立不同的TCP连接
|