1. 首页
  2. 生活常识
  3. tcp和udp概念和区别(TCP和UDP的不同之处)

tcp和udp概念和区别(TCP和UDP的不同之处)

简介:关于tcp和udp概念和区别(TCP和UDP的不同之处)的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于生活常识技术大全及相关资讯,可以多多关注茶馆百科网。

在写了这么多关于TCP和UDP的文章之后,我们还没有很好地讨论这两种协议之间的差异,所以本文将把它公之于众。

对于TCP和UDP,你们都见过这样的图。

有一个小女孩从瓶口慢慢地喝水,下面写着可靠的传输,女孩的衣服没有被弄湿,这张照片叫TCP。

然后有一个小女孩拿着一个水瓶,以非常快的速度往下倒水。女孩的头发乱糟糟的,满脸通红,衣服都被水浸透了。这张图片被称为UDP。

这两张图我想一个程序员大概可以概括出两种传输协议的区别(毕竟图上写得很清楚),甚至很多同学对UDP都有恶念,你说作者画个图不行,不是要挂个红脸,湿衣服……

好吧,让我们进入正题,TCP和UDP之间的区别一直是采访的焦点,它们是经常用于各种比较的两个协议。

建立TCP连接需要三次握手,断开TCP连接需要四次握手。这表明TCP是一个面向连接的协议。这种连接不是使用网线或管道将通信双方连接在一起,而是使用虚拟的通信管道。

TCP的三次握手过程(客户端向服务器端发送请求建立连接):

服务器进程准备通过调用bind、listen和socket来接收来自外部的TCP连接。这种开放方式被称为被动开放。然后,服务器进程处于LISTEN状态,等待客户端连接。客户端通过connect向服务器发起一个活动的打开请求。SYN=1是请求中的报头同步位,并选择一个初始序列号(简称seq=x)。SYN报文段不能承载数据,只消耗一个序列号。客户端进入SYN-SEND状态。服务器收到客户端的连接后,需要确认客户端的报文段。在确认报文段中,SYN和ACK都为1。确认号为ack=x + 1,初始序列号seq=y也是为自己选择的。注意,这个段也不能携带数据,但也消耗一个序列号。此时,TCP服务器进入SYN-RECEIVED状态。客户端收到服务器的响应后,需要确认连接。设置ACK=1, seq=x + 1, ACK=y + 1。根据TCP协议,该报文段可以承载数据,也可以不承载数据。如果不携带数据,则下一数据段的序号仍为seq=x + 1。此时,客户端进入ESTABLISHED状态。服务器收到客户端的确认后,也进入ESTABLISHED状态。另一方面,UDP是面向数据报的协议,所以UDP根本没有连接的概念,所以没有三次握手来建立连接。

数据传输完成后,通信双方可以解除连接。数据传输完成后,客户端主机和服务器主机都处于ESTABLISHED状态,然后开始释放连接的过程。

(客户端主动关闭连接)

TCP连接断开的过程如下

客户端应用程序发送释放连接的报文段,停止发送数据,主动关闭TCP连接。客户端主机发送报文段,释放连接。报文段头FIN位置为1,不包含任何数据,序号为seq=u,此时客户端主机进入FIN- WAIT -1(终止等待1)阶段。服务器主机收到客户端发送的报文段后,发送确认应答消息,确认应答消息中ACK=1,生成自己的序列号seq=v, ACK=u + 1,进入CLOSE-WAIT状态。此时,客户端主机和服务器主机之间的连接被释放。客户端主机没有数据要发送。此时,服务器主机处于半连接状态,但服务器主机仍然可以发送数据。客户端收到服务器的确认后,进入FIN-WAIT-2状态。等待客户端发送连接释放报文段。当没有数据从服务器主机发送时,应用程序进程通知TCP释放连接。在这种情况下,服务器主机将发送一个带有ACK=1和序列号seq=w的断开消息段,seq可能不等于v + 1,因为在这两者之间可能已经发送了一些数据。Ack=u + 1。服务器主机发送断连请求报文后进入LAST-ACK阶段。客户端收到服务器的断开请求后,需要发送一个断开消息段作为响应。在消息段中,ACK=1,序列号seq=u + 1,由于客户端从连接断开后没有发送任何数据,ACK=w + 1,则进入时间等待状态。请注意,此时TCP连接还没有被释放。只有设置了等待时间(2MSL)后,客户端才会进入CLOSED状态。MSL时间称为最大段生存时间。服务器从客户端收到断开连接的确认后进入CLOSED状态。由于服务器端比客户端更早终止TCP连接,而整个断开连接的过程需要4个报文段,所以释放连接的过程也称为4波。UDP没有这个连接,所以它不需要四个波。

综上所述,TCP是面向连接的。数据传输前需要保持一个虚拟连接,数据传输需要在这个虚拟连接上进行,数据传输完成后需要断开这个连接。但是UDP传输不是面向连接的,因为UDP发送数据时不建立连接,也不关心接收端的状态。

TCP和UDP的主要区别在于可靠性。TCP是可靠的传输层协议,而UDP是不可靠的传输层协议。TCP的这种可靠性主要通过以下几个特点来保证:

可靠性通过序列号和应答号来实现

在计算机网络中,应答称为ACK。TCP通过ACK协议实现数据的可靠传输。也就是说,发送请求后,发送方将等待目标主机的响应。因此,即使在传输过程中出现丢包,TCP仍然可以通过重传实现可靠性。

上述情况属于发送方请求丢失,另一种情况属于响应丢失。也就是说,请求发送到目标主机后,目标主机将向请求者返回一个ACK,这个ACK也可能丢失。如果链路中丢失了ACK,请求者在一段时间后没有收到目标主机的ACK。它仍然选择重传没有收到ACK的请求。

除了消息丢失之外,还有延迟到达的现象。延迟到达是指发送方发送一个报文段后,由于网络抖动、拥塞等原因,报文段没有到达目的主机,或者目的主机的响应ACK没有到达发送方的现象。一旦超过重传时间,发送方将重传该报文段。第一个包段可以在重传的包段到达后不久到达。这会导致一个问题:目标主机接收到两个相同的数据包段。您必须选择要丢弃的段,但是应该选择哪个段呢?

这可以通过序列号(seq)来实现,这是一个按顺序为发送的数据的每个字节分配一个数字的数字。接收端查询TCP头中的序列号和数据长度,并返回下一个应该接收到的序列号作为确认应答。TCP通过序列号和确认应答号来识别是否已经接收到数据,确定是否需要接收数据,从而实现可靠传输。

如上图所示,如果请求是按顺序发送的,则为seq=1。此请求将从第一个字节到第n个字节的数据一起发送,等待目标主机对每个字节进行确认,然后发送请求seq=n + 1,确认后再发送请求seq=m + 1。这确保了序列号不会重复。

UDP没有序列号或确认号,所以数据不会被确认,如果数据丢失也不会重传,所以UDP是一个不可靠的协议。

如果你用TCP和UDP来比较开发人员:TCP是那种必须把一切都设计好,没有设计就不会开发的工程师,需要在开始之前把一切都考虑进去!所以这是很合理的;而UDP是那种直接干干的,接到项目需要马上开工,不管设计,不管技术选择,都是干干的,这种开发人员是很不可靠的,但是适合快速迭代开发,因为可以马上开工!

如上所述,TCP将单独发送请求,每个请求所携带的数据将由目标主机确认。在每个请求依次被目标主机确认后,请求中的数据将被重新组织。由于请求是通过seq发出的,所以TCP在重新组织数据时也会按顺序重新组织数据。UDP没有这样的有序性保证。

TCP和UDP都属于传输层。传输层传输的数据称为分组段。TCP和UDP报文段的区别如下:

UDP报文段结构

源端口:该字段占据UDP报头的前16位,通常包含发送数据报的应用程序使用的UDP端口。接收应用程序使用该字段的值作为发送响应的目的地址。该字段是可选的,有时不设置源端口号。无源端口号默认为0,这通常用于不需要返回消息的通信。“目的端口”:接收端口号。16位字段。长度:16位,表示UDP数据报长度,包括UDP报文头和UDP数据长度。由于UDP报头长度为8字节,因此最小长度为8,最大长度为2 ^ 16=65,535字节。校验和:UDP使用校验和来保证数据的安全性。UDP校验和还提供错误检测功能。错误检测功能用于验证报文从源主机发送到目的主机时,报文段是否发生数据完整性改变。TCP包段结构

TCP报文段结构比UDP报文段结构包含更多的内容。但是前两个32位字段是相同的。这些是源端口号和目标端口号。此外,与UDP一样,TCP也包含校验和字段。此外,TCP报文段头还包含以下内容

32位序列号字段和32位确认号字段。TCP发送方和接收方使用这些字段来实现可靠的数据传输。header length字段,表示TCP头的长度,为32位。TCP报头的长度是可变的,但通常情况下,option字段为空,因此TCP报头字段的长度为20字节。16位接收窗口字段,用于流量控制。它用于指示接收方可以/愿意接受的可变字节数。当发送方和接收方协商最大报文长度时使用该字段,即使用MSS时使用6位标志字段。ACK标志用于表示确认字段中的值是有效的。此包段包含对成功接收的包段的确认。RST、SYN和FIN标志位用于建立和关闭连接。CWR和ECE用于拥塞控制;PSH标志用于指示数据立即移交给上层进行处理。URG标志表示数据中存在需要上层处理的紧急数据。紧急数据的最后一个字节由16位紧急数据指针字段表示。一般不使用PSH和URG。因此,通过比较报文段结构可以看出,TCP比UDP具有更多的flag、序列号和确认号,这些都属于TCP的连接控制。然后是接收窗口,它是拥塞控制和流量控制。TCP报头的开销比UDP高,因为TCP报头固定为20字节,UDP报头固定为8字节。TCP和UDP都提供数据校验功能。

建立连接的差异

TCP报文段以“问答”形式发送。在发送下一个数据包之前,每个请求都要经过目标主机的确认,速度很慢。为了解决这个问题,TCP引入了窗口的概念。它还可以控制网络性能的下降。

我们过去以包段的形式发送每个请求。引入窗口后,每个请求可以发送多个报文段,即一个窗口可以发送多个报文段。窗口大小是在不等待确认的情况下可以发送的数据包的最大数量。

在这个窗口机制中,缓冲区被大量使用,能够同时确认对多个段的响应。

如下图所示,发送消息段的高亮部分是我们提到的窗口。在该窗口中,即使没有收到确认,也可以发送请求。但是,如果在整个窗口的确认到达之前丢失了部分包段,发送方仍将重新传输。要做到这一点,发送方需要建立一个缓存来保存这些需要重传的段,直到它们收到确认。

滑动窗口外的部分是尚未发送的段和已接收的段。如果已被确认,则不能重发。在这种情况下,可以从缓冲区中清除段。

如果收到确认,窗口将滑动到确认响应中的确认号位置,如上图所示。这样可以同时按顺序发送多个报文段,提高通信性能。

UDP发送的报文段不需要确认,所以没有Windows的概念。因此,UDP的传输效率很高。

TCP和UDP在效率、报文段、流量控制、连接管理等方面存在差异。这些差异导致了不同的应用场景。TCP需要对每个报文进行确认,因此不适合数据传输场景。这些类型的操作(如Ping和DNS Lookup)需要一个简单的请求/返回,而不需要建立连接。UDP就足够了。例如,HTTP协议需要考虑请求和响应的可靠性,在这种情况下应该使用TCP协议。但是像HTTP 3.0这样的应用层协议,从功能的角度来看,目前还没有找到很多的优化点,但是为了将网络优化到极致,将使用UDP作为底层技术。然后在UDP之上处理可靠性。

本文主要介绍了关于tcp和udp概念和区别(TCP和UDP的不同之处)的相关养殖或种植技术,生活常识栏目还介绍了该行业生产经营方式及经营管理,关注生活常识发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解生活常识技术怎么管理的要点,是您生活常识致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://23.234.50.4:8411/article/1485177.html