在靠近用户的地方部署容器
本工程教育(EngEd)计划由科支持。
在全球范围内即时部署容器。Section是经济实惠、简单而强大的。
免费开始。
了解TCP/IP传输层(第3层)协议 - TCP和UDP
2021年2月21日
在这篇文章中,我们将谈论应用程序如何使用传输控制协议(TCP)或用户数据报协议(UDP)在两个设备之间传递数据。通过阅读本文,你将了解TCP和UDP的工作原理,它们之间有什么不同,还将看到使用这些协议的各种应用。
作为先决条件,对TCP/IP第一层和第二层的基础知识会帮助任何读者更好地理解这篇文章。
内容列表
传输层简介
传输层是TCP/IP网络模型的一部分,有时也称为网络架构。它包含一套全面的文件,描述了计算机网络运行所需的一切。
传输层负责运行在不同主机上的应用程序之间的逻辑通信,从而为TCP/IP网络模型中更高一层的应用层协议提供服务。
即使存在许多传输层协议,最常用的两个协议是传输控制协议(TCP)和用户数据报协议(UDP)。
这些协议为不同的应用需求提供不同的功能。
其中最重要的几个功能是。
- 跟踪个别对话。
- 有序的数据传输和数据分段。
- 使用端口号复用对话。
个别对话的跟踪
从一个应用程序流向另一个应用程序的数据被称为对话。
一台主机可以有多个应用程序相互通信,无论是在本地网络还是在远程网络。传输层有一种机制,使主机上的每个应用程序有可能与不同主机上的另一个应用程序进行通信,无论是在本地网络内还是在远程网络中。
据思科称,这种机制为每个应用程序分配了一个称为端口号的标识符,这样,需要访问特定网络的每个软件进程都有一个独特的标识符。
有序的数据传输
一个连续的字节流被分解成段,由传输层服务进行传输和交付。
根据这篇文章,大多数网络对单个数据包所能包含的数据量都有限制。正因为如此,发送设备传输层将数据准备成段。
同样,接收设备传输层收到这些片段,并使用头将其重构为完整的数据。
使用端口号复用对话
当使用一个应用程序时,提供的数据或服务通常以连续数据流的形式出现。
但是,作为一个完整的数据流在网络上发送数据(例如,视频)会消耗所有可用的网络带宽。这使其他服务(如电子邮件)无法使用该媒介,并使错误恢复和损坏数据的重传更加困难。
复用机制将TCP和UDP数据分割成小块,使来自不同用户的通信能够在同一网络上交错进行。这种机制依赖于一个被称为套接字的概念**。**
传输控制协议
根据这篇文章,传输控制协议(TCP)可以被定义为一个标准,它定义了如何建立和维护一个网络对话,应用程序可以通过该对话交换数据。
应用程序选择使用的传输层协议的类型取决于应用程序的要求。
TCP类似于发送一个带有跟踪器的包裹,跟踪该包裹从其源头到目的地。

来源。维基大学的TCP头
正如Request For Comment (RFC) 7913所定义的,TCP有以下特点。
- 连接的建立和终止。
- 使用端口进行复用。
- 使用窗口的流量控制。
- 错误恢复。
- 有序的数据传输和数据分段。
连接的建立和终止
在发生任何TCP功能之前,必须首先建立TCP连接,因为TCP是一个面向连接的协议。
面向连接的协议是一种在开始传输数据之前在客户和服务器之间建立永久连接的协议。
在这个连接建立过程中,设备在三方握手期间协商要转发的流量,在数据传输开始之前必须完成。
三方握手是通过两个标志建立的。
- 同步(SYN)标志
- 确认(ACK)标志
SYN标志用于两个主机之间建立连接的第一步。这个标志只出现在服务器和主机的第一个包含同步序列号的数据包中。
ACK标志用于确认被设备成功接收的数据包。
例如,为了在服务器和主机之间建立一个三方握手,主机向服务器发送一个SYN标志,提供所有必要的信息,如其端口号(源端口)和目标端口号(标志着它要访问哪些服务)。
当服务器收到主机的SYN标志时,它就会发回另一个SYN和一个ACK标志。这包含一个源端口号(主机发送的SYN标志上用作目的端口号的端口号)和一个目的端口号(主机用作源端口号的端口号)。主机用ACK标志确认这些标志的接收,然后建立连接,这样就形成了一个三方握手。

三方握手
现在,让我们来看看三向握手是如何详细进行的。
- 每个标志都必须包含一个源端口号和目的端口号。
- 当一个设备在发送SYN标志时,它的端口号成为源端口号,而发送设备则成为目的端口号。
- 在设备收到SYN标志并想发送确认后,它使用ACK标志,然后将这些端口号反转。
- 该会话使用了一个四路终止序列。一个额外的标志,即完成(FIN)标志,与SYN和ACK标志一起使用。
- 完成(FIN)标志用于在发送方没有更多数据时请求连接终止。这是发送方发送的最后一个数据包。
- 使用上面创建的会话,在主机设备收到来自服务器的最后一个数据包后,它将发送一个确认(ACK)标志,通知服务器它已经收到该数据包。
- 如果主机打算终止会话,它将发送一个FIN标志和ACK标志,通知服务器它已经从服务器收到了它所需要的所有信息并打算终止它。
- 服务器回复一个ACK标志,通知客户端它已经收到了FIN标志,并知道主机准备终止会话。
- 服务器用ACK和FIN标志回复,通知主机它愿意终止会话。在主机向服务器发送ACK标志,完成四路握手后,会话立即结束。

会话终止
在上面的例子中,主机发起了会话终止。但在实践中,任何设备都可以终止一个会话。
错误恢复
TCP提供可靠的数据传输,这意味着从源头发送的所有数据包都能无故障地到达其目的地。在沿途发生错误的情况下,TCP使用一种机制来重新发送有问题的段。
它使用TCP头中的确认(ACK)和序列字段,对数据字节进行编号并跟踪它们。通过这样做,它实现了可靠性。
例如,如果一个网络服务器有400字节的数据要发送给一个请求的网络客户。在建立会话时,服务器将数据分解成更小的片段,比方说,每个100字节。
然后,服务器发送数据的前100个字节(0-99),序列号为1。主机在收到这个第一段后,发送一个ACK,通知服务器数据包已经到达目的地,并开始等待下一段,即序列号为2的100-199段的到来。
这种机制一直持续到400字节,主机为每一个收到的段发送一个确认信息。上面的解释并没有恢复任何错误,它将是用于错误恢复的相同的TCP机制。
对于错误恢复,TCP使用序列和ACK标志,这样接收主机就可以注意到丢失的数据,并要求发送设备重新发送该段,并使用ACK标志确认收到了丢失的那一段。
假设在上面的例子中,主机收到了序列号为1的前一百个字节(0-99),而没有收到序列号为2的下一个字节(100-199),而是收到了序列号为3的(200-299)个字节的网段,它将发送一个数据包,要求获得那个丢失的网段,即序列号为2的100-99。
如果接收设备没有确认所有发送的数据,发送设备也可以重新发送一个段。在这种情况下,发送设备是一个服务器。
服务器使用一个称为重传计时器的计时器等待片刻,以确保没有其他的确认到达,之后它决定重新发送它没有收到确认标志的那个特定的段。
使用窗口化的流量控制
由于网络主机的资源有限,如有限的空间和处理能力,TCP实现了一种称为使用窗口概念的流量控制机制。这适用于在任何一个时间点上等待确认的数据量。
接收设备使用窗口概念来通知发送方在任何时候可以接收多少数据。这使得发送方可以通过窗口滑动过程加快或减慢段的发送速度。
用户数据报协议
用户数据报协议(UDP)被认为是一种尽力而为的传输协议,因为它是一种轻量级的传输协议。UDP是一个无连接协议,这意味着它不像TCP那样提供数据段的可靠性或重新排序以及流量控制。正因为如此,UDP在传输数据时比TCP快。
然而,根据思科的说法,UDP提供了一些与TCP类似的好处,如数据分段和使用端口号的复用。UDP被那些能容忍数据丢失但不能容忍延迟的应用所使用。
例如,TCP的要求将使直播视频难以进行,因为所有的数据包都必须被发送和确认,这将消耗许多资源,并可能造成严重的延迟。
但对于UDP,如果缺少一个数据包,流媒体将继续进行而不被注意。只有当许多片段丢失时才会变得明显,这体现在低视频质量和视频与音频之间缺乏同步性。
TCP和UDP之间的显著区别是,TCP为应用提供了广泛的服务,而UDP没有,这并不意味着UDP比TCP差,但由于提供的服务较少,UDP的头中的字节数也较少,这使得UDP在传输数据时速度较快。

来源。维基大学的UDP报头
UDP和TCP之间的区别
| UDP | TCP |
|---|---|
| 因为UDP的开销低,所以它的数据传输速度快。 | 由于TCP的高开销,它的数据传输速度慢。 |
| UDP不确认收到的数据,也不重新发送丢失的数据。因此,它是不可靠的。 | TCP是可靠的,因为它确认收到的数据并重新发送任何丢失的数据。 |
| UDP在数据到达时传送数据,不对数据段进行有序安排。 | 它按顺序传输数据。 |
应用
UDP支持的协议有。
- 动态主机传输协议(DHCP)
- 域名系统(DNS)。
- 小巧的文件传输协议(TFTP)
- 互联网语音协议(VoIP)
TCP支持的协议有
- 文件传输协议(FTP)
- 超文本传输协议(HTTP)
- 安全外壳(SSH)
多个独立对话
建立企业网络或将小型办公室家庭办公(SOHO)网络连接到互联网的全部目的,是为了发生诸如文本信息、电子邮件、视频流、视频和音频对话等应用。
为了管理这些多个同时进行的对话,TCP和UDP使用一个头域,可以唯一地识别这些同时运行的应用程序。这个唯一的标识符被称为端口号。
端口号
在设备上运行的每个服务都使用一个特定的知名端口号。这些端口号可以唯一地识别客户端上运行的每个应用程序或服务。
对于来自客户端的每个连接,段头包含两种类型的端口号。
- 源端口号
- 目的地端口号
源端口号
源端口号是由发送设备传输层动态生成的端口号,它可以识别两个终端设备之间的每次对话。
目的地端口号
在客户端发送的段中,一个目的端口号被放在其中,以告诉目的服务器,客户端所请求的服务。
这种机制是可能的,因为与客户端机器不同,请求可以来自任何本地未使用的端口,服务器提供的服务有一个众所周知的专用端口分配给它们。因此,目标端口号是由客户端插入的,通知服务器。
例如,Telnet使用TCP传输协议,其目的端口号为23。当服务器收到一个目的端口号为23的网段时,它就知道客户端在请求Telnet服务。
套接字对
放在网段中的源端口号和目的端口号,只能确定客户端的哪个应用程序向服务器请求该服务。但段没有任何机制来指定哪个设备在请求服务。
为了识别哪个设备正在请求一个特定的服务,互联网协议(IP)封装了包含源和目的端口号的段。
这个IP数据包包括源IP地址,以确定请求来自哪个设备,以及目的IP地址,以确定目的设备。因此,创建一个套接字。
一个套接字是目的地IP地址和目的地端口或源IP地址和源端口的组合。
套接字对传输层来说是很方便的,因为它可以跟踪服务和请求这种服务的设备,以正确地将数据转发给思科所说的请求应用程序。
端口号组
互联网号码分配机构(IANA)是一个负责分配各种寻址标准的组织,它将端口号分为三大组,这些组是。
- 众所周知的端口
- 已注册的端口
- 动态或私人端口
众所周知的端口(0-1023)
众所周知的端口是分配给诸如网络浏览器、电子邮件客户端、HTTPS和Telnet等服务的端口号。
RFC6335概述了这些服务和端口号的注册程序。
下表向我们展示了一些著名的端口号、它们所支持的传输层协议以及它们的应用。这些端口号是按照RFC6335中的规定分配的。
| 端口号 | 协议 | 应用 |
|---|---|---|
| 20 | TCP | FTP数据 |
| 21 | TCP | FTP控制 |
| 22 | TCP | SSH |
| 23 | TCP | SMTP |
| 53 | UDP | 帐户 |
| 67 | UDP | DHCP服务器 |
资源。IANA
注册的端口号(102-49151)
思科等组织的一些知名服务的端口号是由IANA分配的。
IANA将这些端口号分配给请求实体,以便与特定的进程或应用一起使用。
动态(49152-65535)
动态端口号通常由客户操作系统(OS)在建立服务器连接时动态分配。
结论
传输层协议在应用程序之间如何交换数据方面起着至关重要的作用。这两个传输层协议中的一个,即传输层协议(TCP)和用户数据协议(UDP),可以被应用程序用来交换数据。容错但不能容忍延迟的应用程序使用UDP,而那些可以延迟但不能容错的应用程序则使用TCP。
来总结一下。
- 读者了解了什么是TCP和UDP。
- 读者了解了TCP和UDP的工作原理,以及它们之间的比较。
- 读者了解了TCP如何建立连接,如何终止连接,以及如何在数据传输中恢复错误。
- 读者了解了使用TCP和UDP的应用程序。
- 读者了解了端口号。
进一步阅读
同行评审的贡献者。Srishilesh P S