TCP与UDP的区别(详解)

TCP与UDP的区别(详解)


说区别之前先了解了解这两个协议工作机制以及工作原理

UDP:

UDP是一种面向无连接的传输层协议,无法提供可靠的传输服务
请添加图片描述
通过以上报文格式可以看出UDP报文可以分为UDP头部和UDP数据两个部分。头部是由源端口、目的端口、报文长度以及校验和组成。
Source port(源端口):源主机应用程序所使用的端口号
Destination port(目的端口):目的主机使用的端口号
Length(报文长度):UDP头部和UDP数据的字节长度。由于UDP头部长度为8字节,所以该字段的最小值为8
Checksum(校验和):检验整个UDP报文段,包括UDP头部和UDP数据。该值由发送端计算和记录并由接收端进行验证。

基于以上UDP报文特性,在实际应用场景中,假设主机A向主机B发送数据包,较大的数据包会被分成若干个小的数据包,每个数据包独立的在网络中被发送,所以不同的数据包会通过不同的路径送达主机B。这种情况下,先发送的数据包不一定先送到主机B,因为UDP数据包没有序号,所以主机B无法通过UDP协议将数据包按照原来的顺序进行重新组合,此时就需要应用程序提供报文的送达确定、排序和流量控制等能。

通常情况下UDP采用实时传输机制和时间戳来传输语音和视频数据

解释: 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的、可验证的电子凭证。时间戳(Digital Time Stamp) 可以为任何电子文件提供准确的时间证明, 并且可以检验出文件或交易的内容自加上时间戳后是否曾被人修改过。

总结:UDP不提供重传机制,占用资源小,处理效率高,一些时延敏感的流量,如语音、视频等通常使用UDP作为传输层协议。


TCP:

TCP是一种面向连接的传输层协议,可提供可靠的传输服务

请添加图片描述
TCP是由TCP头部和TCP数据两个部分组成。头部是由上图标识的一些字段组成,对上图字段的分析如下:

Source port(源端口):源主机应用程序所使用的端口号
Destination port(目的端口):目的主机使用的端口号
Sequence Number(序列号):用于标识从发送端发出的不同的TCP数据段的序号。数据段在传输过程中他们的顺序会发生变化,因此接收端需要根据序列号来对数据进行重组。
Acknowledge Number(确认序列号):用于标识接收端确认收到的数据段。确认序列号为成功收到的数据序列号+1。
Header length(头部长度):标识头部占32bit字的数目,他能表达的TCP头部最大长度为60字节。
Window(窗口大小):表示接收端期望通过单次确认而收到的数据大小。该机制通常用于流量的控制。
Checksum(校验和):校验整个TCP字段,包括TCP头部和TCP数据。该值由发送端计算和记录并由接收端进行验证。

TCP建立连接过程

请添加图片描述

通过以上TCP建立过程图可知TCP连接的建立是一个三次握手的过程,主机A发送了一个SYN的数据段,表示期望与服务器A建立连接,此数据段的序列号为a。服务器A恢复了表示SYN+ACK这两个数据段,此时该数据段的序列号为b,确认序列号为主机A的序列号+1即为a+1,以此报文作为对主机A的SYN报文的确认。然后主机A发送了一个表示ACK的数据段,该数据段的序列号为a+1,确认序列号为服务器A的序列号+1即为b+1,以此报文作为对服务器A的SYN报文的确认。

在上图中TCP建立过程中SYN主要用于同步数据报文,ACK主要用于对接收报文的一个确认回复

TCP流量控制请添加图片描述

TCP对流量的控制使用的是TCP滑动窗口技术,通过动态改变窗口大小来实现对端到端设备的数据传输控制,从而进行流量控制。
如上图所示,主机A和服务器A之间通过滑动窗口来实现对流量进行控制。在上图的情况下只考虑主机A发送数据给服务器A时,服务器A通过滑动窗口对流量进行控制。
主机A向服务器A发送4个长度为1024字节的数据段,其中主机的窗口大小为4096个字节。服务器A收到第3个数据段后,缓存区满,第4个数据段被丢弃。服务器以ACK 3073响应,窗口大小调整为3072,表明服务器的缓冲区只能处理3072个字节的数据段。于是主机A改变其发送速率,发送窗口大小为3072的数据段。

TCP关闭连接

请添加图片描述

TCP支持全双工模式(也就是在发送数据的同时也可以接收数据)传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。
TCP连接的建立是一个三次握手的过程,而TCP连接的终止则要经过四次握手。
如上图所示:
1、主机A想终止连接,于是发送一个标识了FIN,ACK的数据段,序列号为a,确认序列号为b。
2、服务器A回应一个标识了ACK的数据段,序列号为b,确认序号为a+1,作为对主机A的FIN报文的确认。
3、服务器A想终止连接,于是向主机A发送一个标识了FIN,ACK的数据段,序列号为b,确认序列号为a+1。
4、主机A回应一个标识了ACK的数据段,序列号为a+1,确认序号为b+1,作为对服务器A的FIN报文的确认。
以上四次交互便完成了两个方向连接的关闭。


TCP与UDP的区别:

通过以上对TCP和UDP协议的详解,接下来来看TCP与UDP的区别:

TCP UDP
面向连接(即需要建立连接) 面向无连接
面向字节流(发送数据时会将数据分解为多个小的数据报文进行发送) 基于数据报(发送数据时会直接打上UDP头部将整个报文发送出去)
有三次握手可以保证数据传输的可靠性 传输数据可能存在丢包
保证数据顺序 无法保证数据顺序
只支持点对点通讯 支持一对一、一对多、多对多通讯
有拥塞机制 无拥塞机制
头部20-60个字节 头部8个字节
要求实时性低,准确度高 要求实时性高,准确度低

猜你喜欢

转载自blog.csdn.net/qq_45714440/article/details/127879323