TCP vs UDP:揭秘可靠性与效率之争

可靠性,效率,TCP · 浏览次数 : 97

小编点评

**什么是 TCP?** TCP是一种面向连接的传输层协议,它允许应用程序在不建立连接的情况下直接发送封装的IP数据包。TCP协议使用端口来实现进程间的通信,为运行在不同主机上的应用进程提供直接的通信服务。TCP连接是全双工的,可以同时进行双向数据传输。 **什么是 UDP?** UDP是一种面向无连接的通信协议,它允许应用程序在不建立连接的情况下直接发送封装的IP数据包。UDP协议使用端口来实现进程间的通信,可以同时进行多对一的通信。 **TCP 和 UDP 的区别** | 特征 | TCP | UDP | |---|---|---| | 连接方式 |面向连接 | 无连接 | | 服务对象 |一对一 |一对多、多对多 | |可靠性 |可靠 | 不可靠 | |拥塞控制 |拥塞控制 | 不拥塞控制 | |流量控制 |流量控制 | 无流量控制 | | 首部开销 |较长 |较短 | |应用场景 |可靠数据传输、FTP、HTTP、视频、音频等 |实时性、包总量较小的通信 | |连接方式 |全双工 |多对一 |

正文

概述

今天我们开始主要讲解TCP的相关知识点。在之前讲解分层章节的时候,我们提到过一个重要观点。在网络层及以下几层,更多的是让主机与主机建立连接,也就是说你的电脑需要知道另一台电脑在哪里才能连接上它。然而,在网络中的通信往往是进程间的通信,而不是机器间的通信。因此,TCP协议引入了端口的概念。一个端口只能被一个进程占用,这样就可以为运行在不同主机上的应用进程提供直接的通信服务。

运输层的任务是如何为运行在不同主机上的应用进程提供直接的通信服务,因此也被称为端到端的协议。运输层屏蔽了网络核心的细节,使应用进程看到的就像是在两个运输层实体之间有一条端到端的逻辑通信信道。

TCP的全称是Transmission Control Protocol,它被称为一种面向连接的协议。这意味着在一个应用程序开始向另一个应用程序发送数据之前,这两个进程必须先进行握手。握手是一个逻辑连接的过程,它确保了数据的可靠传输和有序接收。在握手过程中,源主机和目标主机之间通过交换一系列的控制报文来建立连接,并约定一些参数和规则,以确保数据的成功传输。

TCP 基本认识

什么是 TCP ?

TCP(Transmission Control Protocol)是一种面向连接、可靠的、基于字节流的传输层通信协议。

image

  • 面向连接:面向连接意味着TCP通信是一对一的,即点对点端到端的通信,不像UDP可以同时向多个主机发送消息,因此无法实现一对多的通信。
  • 可靠的:TCP的可靠性保证了无论网络链路中发生何种变化,TCP都能确保报文的可靠传输到达接收端,这也使得TCP的协议报文格式相比UDP更为复杂。
  • 基于字节流:基于字节流的特性使得TCP可以传输任意大小的消息,而且保证了消息的有序性,即使前一个消息未被完全接收,即使后面的字节已经接收,TCP也不会将其交付给应用层处理,同时对于重复的报文会自动丢弃。

一旦主机 A 和主机 B 建立了连接,应用程序只需使用该虚拟通信线路进行数据的发送和接收,由此确保数据的传输。TCP 协议负责控制连接的建立、断开和保持等任务。需要注意的是,此处我们说的虚拟线路只是说明了建立连接,TCP协议的建立连接只是表明双方可以开始进行数据传输了,并且确保了数据的可靠性。具体的路由和传输节点由网络设备进行处理,TCP协议本身并不关心这些细节。

TCP连接是一种全双工服务(full-duplex service) 的,全双工指的是在TCP连接中,主机A和主机B可以同时进行双向数据传输。也就是说,数据可以在主机A和主机B之间以双向流动的方式传输。

TCP会将数据临时存储到连接的发送缓存(send buffer)中。这个send buffer是在三次握手期间设置的缓存之一。随后,TCP会在适当的时间将发送缓存中的数据发送到目标主机的接收缓存中。实际上,每一端都会拥有发送缓存和接收缓存,具体如下所示:
image

发送缓存(send buffer)是在发送端的TCP实现中维护的一块内存区域,它用于临时存储要发送的数据。在进行三次握手建立连接时,发送缓存就开始被设置并用于存储数据。发送缓存会按照网络的拥塞情况和接收端的反馈信息来动态调整。

接收缓存(receive buffer)是在接收端的TCP实现中维护的一块内存区域,它用于临时存储接收到的数据。TCP会将接收到的数据存储到接收缓存中,等待上层应用程序读取。

需要注意的是,发送缓存和接收缓存的大小是有限的,当缓存已满时,TCP可能会采取一些策略,如拥塞控制、流量控制等来保证数据的可靠传输和网络的稳定性。

在计算机网络中,主机之间的数据传输是通过报文段(segment)进行的。那么什么是报文段呢?

TCP会将要传输的数据流分为多个块(chunk),然后为每个块添加TCP标头,从而形成了一个TCP段,也就是报文段。每个报文段能够传输的长度是有限的,不能超过最大数据长度(Maximum Segment Size,简称MSS)。在报文段向下传输的过程中,会经过链路层。链路层有一个最大传输单元(Maximum Transmission Unit,简称MTU),即数据链路层上所能通过的最大数据包大小。最大传输单元通常与通信接口有关。

那么MSS和MTU有什么区别呢?

在计算机网络中,分层架构是非常重要的,因为它考虑到了不同层次之间的差异。每个层次都有不同的名称,在传输层,数据被称为报文段(segment),而在网络层,数据被称为IP数据包(IP packet)。因此,MTU(Maximum Transmission Unit)可以被认为是网络层所能传输的最大IP数据包的大小,而MSS(Maximum Segment Size)则是传输层的概念,指的是TCP数据包每次可以传输的最大数据量。

注意下,当MSS(Maximum Segment Size)大于MTU(Maximum Transmission Unit)时,在网络层会进行IP分片,并不是TCP会将较大的数据分割成适合MTU大小的报文段进行传输,关于IP层我们会有网络层章节专门讲解。

TCP报文段结构

让我们来探讨一下TCP头的格式和内容。

image

序列号:在建立连接时由计算机生成的随机数作为其初始值在建立TCP连接时,并将该序列号通过SYN包发送给接收端。在数据传输过程中,发送端会根据发送的数据量递增序列号。接收端根据接收到的序列号来判断数据的顺序,如果发现有乱序的数据到达,接收端会重新排序,确保数据的有序性。

确认应答号:是TCP协议中用来确认接收到数据的序列号。它指示了发送端期望接收到的下一个数据的序列号。在TCP连接中,接收端会根据接收到的数据报文段的序列号,确定已经成功接收到的数据。当接收端成功接收到数据后,会向发送端发送一个ACK包,其中包含了确认应答号。发送端在收到ACK包后,可以确认在确认应答号之前的数据已经被接收成功。

TCP报文段的控制位包括以下几种:

  • ACK位:当该位为1时,表示确认应答字段有效。TCP规定除了最初建立连接时的SYN包之外,该位必须设置为1。
  • RST位:当该位为1时,表示TCP连接中出现异常,必须强制断开连接。
  • SYN位:当该位为1时,表示希望建立连接,并在序列号字段进行序列号初始值的设定。
  • FIN位:当该位为1时,表示今后不会再有数据发送,希望断开连接。

TCP的各种功能和特点都是通过TCP报文段的结构来体现的。

什么是UDP?

UDP(User Datagram Protocol)是一种面向无连接的通信协议,相比于TCP,UDP不提供复杂的控制机制。UDP协议允许应用程序在不建立连接的情况下直接发送封装的IP数据包。开发人员选择使用UDP而不是TCP时,应用程序与IP直接进行通信。

UDP协议的完整名称是用户数据报协议(User Datagram Protocol),其头部只有8个字节(64位),非常简洁。UDP头部的格式如下:

image

  • 目标和源端口:主要作用是指示UDP将报文发送给哪个进程。
  • 包长度:包长度字段保存了UDP首部的长度加上数据的长度之和
  • 校验和:设计目的是为了保证UDP首部和数据的可靠传输。校验和的作用是检测在UDP数据包传输过程中是否发生了错误或损坏,以确保数据的完整性。

TCP 和 UDP 区别

TCP和UDP的区别主要体现在以下几个方面:

连接方式:TCP是一种面向连接的传输层协议,传输数据之前需要先建立连接。而UDP则不需要连接,可以即刻传输数据。

服务对象:TCP是一对一的两点服务,即一条连接只有两个端点之间进行通信。而UDP支持一对一、一对多、多对多的交互通信,可以同时与多个主机进行通信。

可靠性:TCP提供可靠交付数据的服务,保证数据无差错、不丢失、不重复、按需到达。而UDP则是尽最大努力交付数据,不保证可靠交付。UDP在传输过程中可能会出现数据丢失等情况。

拥塞控制、流量控制:TCP具有拥塞控制和流量控制机制,可以根据网络情况调整数据传输速率,以保证数据传输的安全性和稳定性。而UDP没有拥塞控制和流量控制机制,即使网络非常拥堵,也不会对UDP的发送速率做出调整。

首部开销:TCP的首部长度较长,通常为20个字节,当使用了选项字段时,首部长度会变长。而UDP的首部只有8个字节,并且是固定不变的,因此UDP的首部开销较小。

TCP 和 UDP 应用场景:

TCP 和 UDP 是两种不同的传输层协议,它们在应用场景上有着一些区别。

由于 TCP 是是面向连接的协议,主要用于需要可靠数据传输的场景,一些常见的应用场景包括:

  • FTP 文件传输:TCP 可以确保文件在传输过程中不丢失和损坏。
  • HTTP / HTTPS:TCP 可以确保网页内容的完整性和正确性。

由于 UDP 是无连接的协议,它不提供可靠性保证,但具有高效性和实时性的特点。UDP 适用于以下场景:

  • 包总量较少的通信,如 DNS (Domain Name System):DNS 查询通常是短小的数据包,UDP 可以更快地完成查询操作。
  • 视频和音频等多媒体通信:对于实时性要求较高的多媒体传输,UDP 可以提供更低的延迟,确保数据能够及时传输。
  • 广播通信:UDP 支持一对多和多对多的通信,可以用于广播消息的传输。

总结

今天我们学习了TCP的相关知识。TCP是一种面向连接、可靠的、基于字节流的传输层通信协议。它通过建立连接、握手和确认应答等机制,保证了数据的可靠传输和有序接收。TCP协议使用端口来实现进程间的通信,为运行在不同主机上的应用进程提供直接的通信服务。TCP连接是全双工的,可以同时进行双向数据传输。相比之下,UDP是一种面向无连接的通信协议,不提供可靠性保证,适用于一些对实时性要求较高的场景。TCP和UDP在连接方式、服务对象、可靠性、拥塞控制、流量控制等方面有所区别,应用场景也不同。

与TCP vs UDP:揭秘可靠性与效率之争相似的内容:

TCP vs UDP:揭秘可靠性与效率之争

在网络通信中,TCP和UDP是两种最常用的传输层协议。本文将深入探讨TCP和UDP之间的区别,包括连接方式、服务对象、拥塞控制、流量控制和首部开销等方面,帮助读者在不同应用需求下选择适合的协议。无论你是技术爱好者还是网络工程师,这篇文章定能帮助你了解并应用TCP和UDP的差异,提升你的网络传输效率和...

[转帖]TCP流量控制_(滑动窗口)

一、TCP vs. UDP TCP可提供可靠的数据传输而UDP无法做到,那我们为什么还用UDP? ·使用UDP传送单条消息的开销要比TCP小 ·响应式通信,UDP的速度要比TCP快。 DNS是应用UDP的绝好例子。 但使用UDP又需要可靠性保证的应用程序必须自行实现可靠性保障功能。 如果需要更高级的

自己理解的TCP三次握手

### TCP 三次握手过程是怎样的? TCP的建立连接是通过三次握手来进行的。三次握手的过程如下图: 说实话这个很好理解,我称之为N字型 首先我们理解到建立连接是一个虚的概念了对吧?那么我们来设计一个可靠的TCP,首先建立连接是必须的吧?相当于我们打电话,总要先说一句喂 wei?(面向连接正是这个

TCP协议

目录传输控制协议(TCP)TCP协议 的特点TCP协议的可靠性TCP的连接机制 传输控制协议(TCP) 传输控制协议(TCP)用于作为包交换计算机通信网络中的主机以及此类网络的互连系统中的高度可靠的主机对主机协议。 TCP协议 的特点 TCP协议是面向连接的,端到端可靠的协议,该协议被设计适应支持多

【Socket】解决TCP粘包问题

TCP粘包是指在使用TCP协议进行数据传输时,发送方连续发送的多个数据包在接收方收到时被黏合成一个大的数据包。这种现象可能会导致接收方无法正确解析数据,从而影响应用程序的正常运行。

[转帖]TCP timestamp 选项那点事

https://switch-router.gitee.io/blog/tcp-timestamp/ TCP 最早在 RFC1323 [] 中引入了 timestamp 选项, 并在后来的 RFC7323 中进行了更新。引入 timestamp 最初有两个目的:1.更精确地估算报文往返时间(roun

[转帖]TCP的半关闭、半连接、半打开

参考:《UNIX 网络编程 · 卷1 : 套接字联网API》 TCP 半关闭 如果将客户端与服务器之间的网络作为全双工管道来考虑,请求是从客户端向服务器发送,应答是从服务器向客户端发送,其如下图所示: 上图假设 RTT 为 8,且服务器没有处理时间且请求大小与应答大小相同。既然从管道发出到管道的另一

[转帖]tcp连接测试工具_六款最佳、免费的网络延迟测试工具

作为网络管理员或网络工程师,时刻关注网络的交付速度至关重要。不仅需要确保自己有良好的响应时间,还需要确保网络的速度足以满足用户通信所需的每一条路径。而手动测试每个路径将占用你所有的时间。所以需要获得一个测试工具,以确保延迟不会影响网络的性能。 什么是延迟 延迟是网络流量的速度指标。可接受的传输时间根

[转帖]tcp_tw_reuse、tcp_tw_recycle和tcp_timestamps

https://www.cnblogs.com/zh-dream/p/12702522.html TCP报文格式 1、TCP报文:由TCP首部和TCP数据组成 2、TCP首部:由 20字节的固定长度 + 变长字段(选项)+ 填充 组成成 3、MSS(Maximum Segment Size):占4字

[转帖]tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项

linux TIME_WAIT 相关参数: net.ipv4.tcp_tw_reuse = 0 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭net.ipv4.tcp_tw_recycle = 0 表示开启TCP连接中TIME-WAIT socket