海树

我心有猛虎 细嗅蔷薇香

Owen Lee's avatar Owen Lee

计算机网络面试(3)运输层概述

前言

上篇文章对计算机网络的体系结构做了简单介绍,这篇文章的主题是介绍五层体系中的运输层。至于更加底层的物理层、数据链路层、网络层,其内容多且复杂,并且在笔试面试中不常考到,所以没有去复习,也就不做笔记了。

运输层作用

上篇文章讲到,运输层的任务是负责向两台主机的进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。通用的是指这种服务并不针对某个特定的网络应用,而是多种应用可以使用同一个运输层服务。

在一台主机中经常有多个进程同时分别和另一台主机的进程进行通信。例如在上网浏览网页的同时还在发送邮件。这表明运输层有一个很重要的功能——复用分用

复用是指在发送方不同的进程都可以使用同一个运输层协议传输数据(需要加上适当的首部)。

分用是指接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的进程。

img1

上图中两个运输层之间有一个双向粗箭头,写明「运输层提供进程间的逻辑通信」。「逻辑通信」是指:从应用层来看,只要把应用层报文交给运输层就可以传输到对方的运输层,好像这种通信就是沿水平方向直接传输数据,但事实上,数据传输是沿着图中的虚线方向(经过多个层次)传送的。

从 IP 层来说,通信的两端是两台主机。但是,真正进行通信的实体是主机中的进程,是这台主机中的一个进程与另一台主机中的一个进程进行数据交换。IP 协议能够将分组从发送方主机送到目标方主机,但是这个分组还停留在主机的网络层而没有交付主机的应用进程。从运输层来说,通信的真正端点不是主机而是主机中的进程。

从此可以看出网络层和运输层有明显的区别。网络层为主机之间提供逻辑通信,而运输层为主机的进程之间提供端到端的逻辑通信。

img2

运输层的两个主要协议

运输层主要有两个协议,TCP 协议和 UDP 协议,都是互联网的正式标准。

用户数据报协议(UDP, User Datagram Protocol)在传送数据之间不需要先建立连接。目的主机的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下却是一种最有效的通信方式。

传输控制协议(TCP,Transmission Control Protocol)则提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP 不提供广播或多播服务,由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销,如确认、流量控制、计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。

下图列出了一些应用层协议使用的运输层协议:

img3

运输层的端口

之前提到运输层的复用和分用功能,这个功能就是利用端口来进行实现的。在 TCP 和 UDP 的首部中,会有源端口和目的端口两个字段,当运输层收到网络层交上来的运输层保温时,就能够根据其首部中的端口号把数据交付应用层的目的应用进程。

运输层用一个 16 位端口号标志一个端口,可以允许有 65535 个不同的端口号。

端口号分为两大类:

  1. 服务器端使用的端口号
    这里又分为两类:
    • 熟知端口号(系统端口号) 0-1023,被指派给了最重要的一些应用程序。
    • 登记段口号 1024-49152,这类端口是为没有熟知端口号的应用程序使用的。使用这类端口号必须在 IANA 登记,防止重复。
  2. 客户端使用的端口号
    仅在客户进程运行时才动态选择,因此又叫短暂端口号,给客户进程选择暂时使用,当服务器收到客户进程的报文时,就知道了客户进程所使用的端口号,因此可以把数据发送给客户进程。通信结束后,刚才使用过的客户端号就不服存在,这个端口号可以给其他客户进程使用。

结语

这篇文章主要对运输层的主要作用进行了更加详细的介绍,并简单提到了该层的两个主要协议。之后的文章中会对这两个协议进行进一步的说明。