传输层(协议概述、UDP)

165 阅读5分钟

传输层协议概述

传输层协议为运行在不同主机上的进程之间提供逻辑通信服务,它将从发送应用程序进程收到的报文转换为传输层报文分组,称为报文段,并传递给网络层。

传输层协议主要包含UDPTCP,除传输层协议的基本功能外,两者还提供通过其报文段首部中包括的差错检查字段提供完整性检查

与网络层协议的区别

与网络层协议在路由器中实现不同,传输层协议只工作在端系统中;网络层提供主机之间的逻辑通信,而传输层为不同主机上的进程之间提供逻辑通信,从主机间交付扩展到进程间交付的过程被称为传输层的多路复用多路分解

多路复用与多路分解

运行在主机上的一个进程有一个或多个套接字,传输层实际上是将数据交给了一个中间的套接字而不是直接交付给进程,每一个套接字都有一个唯一的标识符,称为端口号

将传输层报文段中的数据交付到正确的套接字的工作称为多路分解;而在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息生成报文段,然后传递到网络层,这些工作称为多路复用。传输层报文段已被会携带源端口号字段和目的端口号字段,传输层通过检查报文段中的目的端口号将其定向到相应嵌套字,从而实现多路复用与多路分解。

一个UDP套接字是由一个二元组标识的,包含目的IP地址目的端口号,如果两个UDP报文段有不同的源IP地址或源端口号,但具有相同的目的IP地址和目的端口号,那么这两个报文将通过相同的目的套接字将被定向到相同的目的进程。

一个TCP套接字是由一个四元组标识的,包含源IP地址源端口号目的IP地址目的端口号,两个具有不同源IP地址或源端口号的TCP报文将被定向到两个不同的套接字,除非TCP报文段携带了初始创建连接的请求。例如:

  1. TCP服务器应用程序创建欢迎套接字,在12000端口等待TCP连接请求;
  2. TCP客户机创建套接字并发送一个包含由客户机选择的源端口号的报文段;
  3. 服务器操作系统接收到具有目的端口12000的连接请求报文段,于是定位服务器进程,该进程正在端口12000等待接受连接,该服务器便创建一个新的套接字;
  4. 服务器传输层检查该报文段的源IP地址、源端口号、目的IP地址、目的端口号,所有后续到达的报文段,如果它们所携带的这4个值都与之匹配,则被分解到这个套接字。

——————————————————————————————————

UDP

UDP是面向无连接的、提供不可靠数据传输服务的传输层协议,除了复用/分解功能及少量的差错检测功能外,它几乎没有对IP增加额外的东西。

UDP从应用进程得到数据,附加上用于多路复用/分解的源和目的端口号字段以及其他两个小字段,然后将形成的报文段交给网络层。网络层将该报文段封装到一个IP数据报中,然后尽力尝试将报文段交付给接收主机,主机接收后,UDP使用目的端口号将报文段中的数据交付给正确的应用进程。发送报文之前,发送方和接收方没有握手建立连接,因此UDP协议是无连接的。

相比于TCP,一些应用更适合使用UDP的原因主要包括:

  • 应用层对于发送什么数据、何时发送需要更精细的控制,不希望TCP的建立连接、拥塞控制等过度延迟报文段的传送;
  • 无需建立连接;
  • 无需维护连接状态;
  • 分组首部开销小,TCP报文首部有20字节,UDP首部仅8字节。

实际上UDP可通过应用程序自身中建立可靠性机制实现可靠数据传输。

UDP报文段结构

UDP报文首部包含4个字段:源端口号、目的端口号、长度、检验和

检验和用于确定用于确定UDP报文段从源到达目的地时,其中的比特是否发生了改变。

端到端原则

在既无法确保链路的可靠性,又无法确保内存中的差错检测的情况下,如果端到端数据传输服务要提供差错检测,UDP就必须在端到端基础上在传输层提供差错检测,称为端到端原则

UDP差错检测

UDP提供的差错检测只是丢弃受损的报文段,或是将受损的报文段交给应用程序并发出警告,并不具备差错恢复的能力。