计算机网络运输层详解(1)——概述
概述
因特网的协议栈分为五层:物理层、链路层、网络层、传输层和应用层。
由于链路层交换机只实现了第一层和第二层;路由器实现了第一层到第三层。这意味着路由器能实现ip协议,而链路交换机不能。并且运输层协议是在端系统中而不是路由器中实现的。
运输层协议为运行在不同主机上的应用进程提供逻辑通信,网络层协议提供了主机之间的逻辑通信
运输层主要有两种协议,一种是UDP(用户数据报协议),提供不可靠、无连接的服务。另一种是TCP(传输控制协议),它提供可靠的、面向连接的服务。
多路复用与多路分解
运输层的多路复用与多路分解是将由网络层提供的主机到主机交付服务 延伸到 为运行在主机上的应用程序提供进程到进程的交付服务,这个服务是所有计算机网络都需要的。
一个进程有一个或多个套接字,它相当于从网络向进程传递数据和从进程向网络传递数据的门户。当生成一个套接字时,就为它分配一个称为端口号的标识符。
多路复用
在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息(如源端口号、目的端口号)从而生成报文段,然后将报文段传递给网络层,所有这些工作称为多路复用。
多路分解
在接收主机的运输层实际上并没有直接将数据交付给进程,而是通过报文段中的目的端口号将其交给对应的套接字,运输层将报文段中的数据交付到正确的套接字的工作称为多路分解。
无连接的多路复用与多路分解
创建一个UDP套接字的时候,运输层自动地为该套接字分配一个端口号,分配范围是 1042 - 65535,因为端口号的比特数是16位,且0 - 1023范围的端口号是周知端口号,是受限制的。除了自动分配端口号,也可以手动关联一个特定的端口号。通常,应用程序的客户端让运输层自动地(并且是透明地)分配端口号,而服务器端则分配一个固定的端口号。
一个UDP套接字是由一个二元组来全面标识的,该二元组包含一个目的ip地址和一个目的端口号。因此,即使两个UDP报文段有不同的元ip地址或源端口号,但具有相同的目的ip地址和目的端口号,那么这两个报文段将通过相同的目的套接字被定向到相同的目的进程。
面向连接的多路复用与多路分解
TCP套接字和UDP套接字有略微区别,TCP套接字是由一个四元组(源ip地址、源端口号、目的ip地址、目的端口号)来标识的。当一个TCP报文段从网络到达一台主机时,该主机使用全部4个值来将报文段定向(分解)到相应的套接字。因此,两个具有不同源ip地址或源端口号的报文段将被分解到两个不同的套接字。
按照此模型,一台web服务器会为每条连接生成一个新进程。但事实上,当今的高性能web服务器通常只使用一个进程,但是为每个新的客户连接创建一个具有新连接套接字的新线程(例如tomcat,一个请求就是一个线程)。