如果您正在研究计算机网络,或者深入研究一些应用程序的网络设置,您可能会看到这些术语:TCP和UDP
TCP(传输控制协议)和UDP(用户数据报协议)是互联网协议套件的一部分。但TCP和UDP是在因特网上发送信息的两种不同方法。但即使知道它们代表什么,也很难知道应该使用哪种协议,或者为什么要使用其中一种协议而不是另一种协议。在本文中,我们将介绍计算机网络的基础知识、TCP和UDP之间的区别、它们的何时使用以及谁使用的更广等等。
计算机网络基础
在深入研究TCP和UDP是如何工作的之前,了解一下互联网是如何工作的基本知识是有帮助的。
一般来说,互联网是一个连接设备的网络。每个设备,无论是你的智能手机还是服务器,都通过互联网协议套件进行通信。互联网协议套件是设备相互通信的不同协议或方法的集合。TCP和UDP都是互联网协议套件中的主要协议(存在于传输层当中):
每个连接到互联网的设备都有一个唯一的IP地址。当两台设备通过互联网进行通信时,它们很可能使用TCP或UDP来实现。以下是两者之间的简单比较:
想要更深入地了解互联网是如何运作的,请看这段五分钟的油管视频(已搬运):
how
什么是TCP?
TCP(传输控制协议)是最常见的在线网络协议。TCP是非常可靠的,它被用于从浏览网页(HTTP),发送电子邮件(SMTP)和传输文件(FTP)的所有事情。
TCP用于这样的情况:一个设备发送的所有数据都必须被另一个设备完整地接收。
例如,当您访问一个网站时,TCP用于确保呈现页面所需的文本、图像和代码的所有内容都到达。如果没有TCP,图像或文本可能会丢失,或以错误的顺序到达,从而破坏页面。TCP是一种面向连接的协议,这意味着它在传输数据之前在两台设备之间建立连接,并在整个传输过程中保持该连接。为了在两台设备之间建立连接,TCP使用一种叫做三次握手的方法:
例如,要在您的设备上阅读本文,您的设备首先向CSDN服务器发送一个称为SYN(同步序列号)的消息。然后CSDN服务器发回一个称为SYN-ACK的确认消息。当您的设备收到来自服务器的SYN-ACK,它发送回一个ACK确认消息,建立连接。一旦两台设备之间建立了TCP连接,该协议就保证了所有数据的传输。回到该示例,一旦完成三次握手,新闻服务器就可以开始发送设备的web浏览器渲染本文所需的所有数据。所有的设备都将数据分解成小数据包,然后通过互联网发送。然后,这些数据包需要在另一端重新组装。因此,当CSDN服务器为本文发送HTML、CSS、图像和其他代码时,它在将所有内容发送到您的设备之前,将它们分解为小的数据包。然后,您的设备将这些包重新组装到渲染本文所需的文件和图像中。TCP确保这些数据包都到达您的设备。如果途中有任何数据包丢失,TCP可以让您的设备很容易地让服务器知道它丢失了数据,并让服务器重新发送这些数据包。一旦您的设备接收到呈现文章所需的所有数据,TCP将使用类似于三次握手的方法自动终止两个设备之间的连接,这次使用FIN和ACK包。
TCP的流量控制与拥塞控制
超时重传:TCP服务必须能够重传超时时间内未收到确认报文段的TCP报文段。TCP为每个TCP模块都维护了一个重传定时器,定时器在第一次发送TCP报文段时启动,如果超时时间内未收到接收方的确认号报文段,TCP模块将重传TCP报文段并重置定时器。 至于下次重传的超时时间如何选择,以及最多重传几次,这是TCP的重传策略。 与TCP超时重连的策略相似。
滑动窗口:TCP中采用滑动窗口来进行流量控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为0时,发送方一般不能再发送数据报。
滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。
流量控制的处理过程:
TCP连接阶段,双方协商窗口尺寸,同时接收方预留数据缓存区;
发送方根据协商的结果,发送符合窗口尺寸的数据字节流,并等待对方的确认;
发送方根据确认信息,改变窗口的尺寸,增加或者减少发送未得到确认的字节流中的字节数。调整过程包括:如果出现发送拥塞,发送窗口缩小为原来的一半,同时将超时重传的时间间隔扩大一倍。
UDP没有流量控制和拥塞控制,所以在网络拥塞时不会是源主机发送速率降低(对实时通信很有用,比如QQ电话,视频会议等)
什么是UDP?
UDP,或称用户数据报协议,是组成互联网协议套件的另一个主要协议。UDP的可靠性不如TCP但简单得多。
UDP用于一些数据丢失是可以接受的情况,如实时视频/音频,或速度是一个关键因素,如在线游戏。
虽然UDP类似于TCP,用于在线发送和接收数据,但有几个关键的区别。
首先,UDP是一种无连接协议,这意味着它不像TCP那样通过三次握手事先建立连接。
其次,UDP不能保证所有数据都成功传输。使用UDP,数据被发送到任何恰好在监听的设备,但它并不关心在此过程中是否丢失了一些数据。这就是为什么UDP也被称为“触发即忘记”协议的原因之一。
考虑这些差异的一个好方法是,TCP就像两个人之间的对话。甲请乙说话。B说没问题,B再询问A有没有问题。A同意了,两人开始交谈。
UDP更像是一个拿着扩音器的抗议者。每个关注抗议者的人都应该听到他们所说的大部分内容。但并不能保证该地区的每个人都能听到抗议者说的话,或者他们是否在听。
UDP的缺点
不可靠,不稳定因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。基于上面的优缺点,那么: 什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输 ………… 什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP ……
TCP和UDP哪个更快?
一般来说,UDP是更快的协议。
UDP要简单得多,在发送数据之前不需要在设备之间建立连接,也不需要验证所有数据是否到达。它只是向任何请求它的设备发送数据,并一直这样做,直到另一个设备断开连接或没有更多的数据可以发送。
想想用软管喝水,而不是用瓶子喝水。两种方法都能解渴,但用前一种方法很可能会让你的衬衫变湿。
但是更快并不意味着UDP是更好的协议。它只是意味着在某些情况下它会更好。如前所述,在所有数据包按顺序发送和所有数据包到达都非常重要的情况下,TCP是必要的。没有TCP,网络就不能正常运行。虽然TCP由于建立连接的方式较慢,而且由于对丢失数据包的检查,它仍然可以非常快。因为他们在网上使用HTTP,像YouTube或Netflix这样的网站都使用TCP向你的设备发送数据。
TCP还允许缓冲,因此您的浏览器可以在观看时请求和加载更多的数据,允许流畅的播放,并允许您跳转到视频的其他部分。UDP对于实时视频和音频或在线游戏来说是更好的选择,因为速度比潜在的数据丢失更重要。当您通过谷歌Meet或Zoom拨打电话时,您的视频和音频正在通过UDP传输。如果一些包在途中丢失,它只会显示为一点延迟或剪辑的视频/音频。如果你玩视频游戏,你可能会认为TCP确保所有数据包到达另一个设备的方式将使它成为理想的选择。但实际上,TCP所做的所有检查和重发数据只会增加延迟。游戏开发者已经找到了其他聪明的方法来确保玩家的输入和状态尽可能准确。