传输层概述

之前课程所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信;但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程。

如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。

运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道。

根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP,这两种协议就是本章要讨论的主要内容。

通信、端口、IP复用/分用

也许你知道IP首部中有一个协议字段,用来标识网络层(IP)的上一层所采用的是哪一种传输层协议。根据这个字段的协议号,就可以识别IP传输的数据部分究竟是 TCP的内容,还是UDP的内容。同样,传输层的 TCP和 UDP,为了识别自己所传输的数据部分究竟应该发给哪个应用,也设定了这样一个编号,即端口。

一台计算机上同时可以运行多个程序。例如接受WWW 服务的Web 浏览器、电邮客户端、远程登录用的 ssh 客户端等程序都可同时运行。传输层协议正是利用这些端口号识别本机中正在进行通信的应用程序,并准确地将数据传输。

然而仅凭目标端口识别某一个通信是远远不够的,TCP/IP或UDP/IP通信中通常采用5个信息来识别一个通信。它们是“源 IP地址”、“目标 IP 地址”、“协议号”、“源端口号”、“目标端口号”。只要其中某一项不同,则被认为是其他通信。

端口号由其使用的传输层协议决定。因此,不同的传输协议可以使用相同的端口号。例如,TCP与UDP使用同一个端口号,但使用目的各不相同。这是因为端口号上的处理是根据每个传输协议的不同而进行的。

那么在计算机网络中,数据如何从一个应用程序传递到另一个应用程序呢?这就涉及到传输层的关键机制:复用和分用

  • 复用(Multiplexing):发送方将来自多个应用程序的数据通过同一个网络接口发送;
  • 分用(Demultiplexing):接收方将收到的数据包分发给不同的应用程序。

其中发送方代表复用过程:应用层的各个应用程序生成数据,数据通过端口向下传递到TCP或UDP;TCP/UDP添加各自的首部信息(包含源端口和目的端口);数据再向下传递到IP层,IP层添加IP首部,最后将数据包发送到网络。

接收方代表分用过程:IP层接收数据包,根据IP首部中的协议字段将数据向上交给相应的传输层协议,TCP/UDP根据首部中的端口号将数据交给相应的应用程序。

TCP与UDP概述

UDP是User Datagram Protocol 的缩写。UDP 不提供复杂的控制机制,利用IP 提供面向「无连接」的通信服务。实际上UDP协议的头部格式也非常简单,头部只有8个字节(64位):

其中包括:

  • 目标和源端口:主要是告诉 UDP 协议应该把报文发给哪个进程。
  • 包长度:该字段保存了 UDP 首部的长度跟数据的长度之和。
  • 校验和:校验和是为了提供可靠的 UDP 首部和数据而设计,防止收到在网络传输中受损的 UDP 包。

UDP 不提供复杂的控制机制,利用IP提供面向无连接的通信服务。它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为。此外,传输途中即使出现丢包,UDP也不负责重发,甚至当出现包的到达顺序乱掉时也没有纠正的功能。

如果需要这些细节控制,那么不得不交由采用UDP的应用程序去处理。UDP有点类似于用户说什么听什么的机制,但是需要用户充分考虑好上层协议类型并制作相应的应用程序。

由于 UDP 面向无连接,它可以随时发送数据。再加上UDP本身的处理既简单又高效,因此经常用于以下几个方面:

  • 包总量较少的通信(如DNS等)
  • 视频、音频等多媒体通信(即时通信)
  • 限定于 LAN 等特定网络中的应用
  • 通信广播通信(广播、多播)
  • ……

与UDP不同,TCP(Transmission Control Protocol)则“人如其名”,可以说是对“传输、发送、通信”进行“控制”的“协议”。让我们来看看图解网络中对TCP的定义:

单对单、可靠、有序、安全是tcp的代名词。它充分地实现了数据传输时各种控制功能,包括拥塞和流量控制;可以进行丢包时的重发控制;还可以对次序乱掉的分包进行顺序控制。而这些在 UDP中都没有。此外,TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。

所以如果拿一张梗图总结二者的区别的话:

你学废了嘛?(大雾