运输层(报文段)
1、运输层概述
运输层为运行在不同主机上的应用进程之间提供逻辑通信功能。应用进程使用运输层提供的逻辑通信功能彼此发送报文,而无需考虑承载这些报文的物理基础。
运输层和网络层的关系:网络层提供了主机之间的逻辑通信,运输层为在不同主机上的进程之间提供了逻辑通信。运输层协议只在主机起作用,运输层能够提供的服务受制于网络层协议的服务模型。
UDP和TCP的责任是将两个端系统间IP的交付服务扩展到进程之间的交付服务。将主机间交付扩展到进程间交付被称为多路复用和多路分解。
网络协议IP协议提供的是不可靠服务,并不能保证数据的完整性等。UDP同样是一种不可靠服务,但可以提供进程间数据传输和差错检查两种服务。TCP在此基础上提供附加服务:(1)可靠数据传输,通过流量控制、序号、确认和定时器,TCP可以将两个端系统间不可靠的IP服务转为进程间的可靠数据传输服务。(2)拥塞控制,防止某一条TCP连接用过多流量来淹没主机间的链路。
2、多路复用和多路分解
一个进程有一个或多个套接字,相当于从网络向进程传递数据和从进程向网络传递数据的门户。运输层实际上是将数据交付给套接字。
每个运输层报文段中有几个字段,接收端运输层会检查这些字段,标识出接收套接字,从而定向到该套接字。将运输层报文段中的数据交付到正确的套接字的工作成为多路分解。源主机从不同的套接字接收数据块,并为每个数据块封装上首部信息形成报文段,并将报文段传到网络的过程叫做多路复用。
多路复用要求:(1)套接字有唯一标识符(2)每个报文段有特殊字段来指示该报文段要交付到的套接字。特殊字段是指端口号。端口号是一个16比特数,0-1023为固定端口号,如HTTP(80端口)、FTP(21端口)。
无连接的多路复用和多路分解:
clientSocket = socket(socket.AF_INET,socket.SOCK_DGRAM)生成一个UDP套接字,运输层自动为其分配一个端口号。也可以通过bind()函数为其关联一个特定的端口号。
UDP套接字由一个目的IP地址和一个目的端口号,如有两个UDP报文段有不同的源IP地址和源端口,但有相同的目的IP地址和目的端口,这两个报文段将通过相同的套接字被定向到相同的目的进程中。
面向连接的多路复用和多路分解:
与UDP不同,TCP套接字由一个四元组来标识,包括源IP,源端口,目的IP,目的端口。TCP需要建立连接,建立的方法如下:
TCP服务器在12000端口listen,TCP客户创建一个套接字并发送一个连接建立请求报文段,当服务器接收到该请求时,服务器会定位12000端口等待的进程并为其创建一个套接字,用[源IP,源端口,目的IP,目的端口]来标识,则可以建立与源端口的连接。服务器主机可以支持很多并行的TCP套接字,每个套接字与一个进程连接,从而提供并行的服务。当今高性能的服务器通常只有一个进程,而是为每个新客户连接创建一个具有新套接字的线程。
3、UDP协议(无连接运输)(8字节首部)
UDP协议只对IP协议增加了多路复用和分解功能以及少量的差错检测。
DNS(域名系统)是运用UDP的一个例子。UDP的优势:(1)实时性较强,TCP由于其拥塞控制实时性较弱(2)无需建立连接,没有建立连接的时延,因此DNS运行在UDP上,HTTP运行在TCP上(3)无连接状态,TCP需要在端系统中维护连接状态,包括接收和发送的缓存、拥塞控制参数以及序号与确认号的参数(4)分组首部开销小。
常见应用及其运输协议:
应用 | 应用层协议 | 运输 |