计算机网络 (12) 运输层-概述

61 阅读4分钟

本文引用图片均来自 高军: 计算机网络

之前文章介绍的物理层、数据链路层、网络层等共同实现了数据在不同网络的流通使得主机与主机之间可以通信。但实际上,在网络中进行通信的真正实体是位于主机上的应用进程

运输层的任务就是为不同主机上的进程提供直接的通信服务,它向上层屏蔽了网络核心的细节(网络拓扑、路由协议等),从应用进程的角度看两个运输层实体之间好像有一条端到端的逻辑信道

image.png

根据应用需求的不同,运输层为应用层提供两种不同的协议——面向连接的TCP(Transmission Control Protocol)和无连接的UDP(User Datagram Protocol)

端口、复用与分用

为了使不同操作系统上的应用进程可以相互通信,必须采用统一方法TCP/IP体系的应用进程进行标识,运输层采用端口号来标识不同的应用进程

端口号用16比特标识,取值范围为0-65535,主要分为以下几类:

  1. 熟知端口号:0-1023,IANA(Internet Assigned Numbers Authority)把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,例如FTP使用21/20HTTP使用80DNS使用53
  2. 登记端口号:1024-49151,为没有熟知端口号的应用程序使用,需要先在IANA登记。例如微软远程桌面使用3389
  3. 短暂端口号:49152-65535,留给客户进程临时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,端口号可供其他客户进程使用

以上端口只具有本地意义,因特网上不同主机间同一个端口并没有关联

在应用进程发送数据时,需要将应用报文发往运输层进行封装,运输层使用不同的端口来区分应用进程。一些应用进程使用UDP协议对应用报文进行封装,这称为UPD复用TCP复用同理。无论是UDP用户数据报还是TCP报文段最后在网络层都需要使用IP协议封装成IP数据报,这称为IP复用。IP数据报首部中协议字段的值分别使用176来表示数据载荷是UDP用户数据报还是TCP报文段

image.png

接收方收到IP数据报后在网络层进行IP分用,网络层根据IP数据报首部协议字段的值决定将数据载荷交给运输层的UDP或TCP。运输层UDP根据端口号将UDP用户数据报中的数据载荷交给相应的应用进程,这称为UDP分用TCP分用同理

image.png

UDP和TCP的对比

在数据传输方面:

  1. 使用UDP协议的双方可以随时发送数据,支持单播、多播和广播
  2. 使用TCP协议的双方必须先通过三次握手建立连接,通信结束后必须通过四次挥手结束连接,仅支持单播
image.png image.png

在应用报文处理方面:

  1. UDP在应用报文中添加UDP首部便将其发送,接收方将UDP用户数据报中的UDP首部去掉便将其中的应用报文交付给应用进程
  2. TCP将应用报文看作是连续的字节流,TCP并不知道字节流的含义,仅将字节流编号放入发送缓存中并按照策略选取一定数量的字节封装进TCP报文段中发送。接收方收到TCP报文段后取出其中的字节数据放入接收缓存中并按照策略选取其中的部分字节交付给应用进程
image.png

在可靠性方面:

  1. UDP提供的是不可靠服务,如果UDP用户数据报在传输过程中出现误码等差错,那么接收方仅仅将报文丢弃其他什么也不做,适用于视频会议等应用
  2. TCP提供的是可靠服务,通过重传、拥塞控制等方法保证不会出现误码、乱序等传输差错,适用于文件传输等应用
image.png

在首部格式方面:

  1. 由于UDP不提供可靠传输,所以UDP数据报首部很简单,只有8个字节
  2. 由于TCP要提供可靠传输、拥塞控制和流量控制等服务,所以TCP报文段首部字段较多,最少20字节,最多60字节
image.png

参考文献