前言
网络数据的传输具体体现在每一个网络节点上一种规定的数据格式,不管是TCP还是UDP都是在传输层传输数据的一种规定的格式,也就是在传输过程中每一层的协议。UDP协议的报头构造简单,TCP 协议的构造复杂,在不同的场景下,两者各有各的特点
一、UDP
1.UDP协议格式
- 由图可以看出:UDP的构造很简单,只有源端口和目的端口。
- 因为它的长度是16位,所以传输的数据大小和它的长度相关。
2.UDP的特点
(1)先来一张动图了解一下UDP传输数据的过程:
由上边的动图我们能总结出UDP以下几个特点:
无连接,不可靠:
在传输层用UDP协议格式传递数据时,不需要建立连接,收到就发
。要是不建立连接,源主机在收到应用层的数据之后就直接发送,不管目的主机是否能接收到。这样的操作一定是不可靠的。面向数据报:
它在传输数据的时候是面向数据报的,意思就是应用层发多少数据,源端口就一股脑的发送所有的数据给目的端口,不会进行拆分。
无发送缓冲区:
UDP 协议有接收缓冲区没有发送缓冲区
,它只管发送数据,不关心对方是否收到数据。就算有接收缓冲区也不能保证接收的的数据和发送的数据顺序一致,要是发送端发的过快,接收端的缓冲区满了之后就会直接将数据丢弃
。这也是不可靠的一种体现。传输数据大小受限:
上边说了,UDP的长度是16位,所以它能传输的最大数据是 2 ^16,要是大于这个数据的话,就要想办法在应用层进行数据的切分。传输效率高:
它的协议里边头部开销很小
,所以传输效率更高。
支持一对多传输:
能够进行一对一、一对多传输数据。
3.应用场景:
- 总的来说,它
应用于对实时性要求高的场景
,例如:直播,视频、通话。宁愿丢包,也不愿卡顿。
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、TCP
1.TCP协议格式
1)设计原则:
不管是TCP还是UDP,它们都是在传输层规定的一种传输数据的格式。TCP设计理念是:在保证传输的数据安全、可靠的前提下尽可能的提升传输效率。
但是安全和效率是负相关的。
2)协议格式:
(1)先给出TCP协议的格式(相比于UDP就有了好多新的参数的引入,都是为了保证安全和提高传输效率引入的
):
(2)内部重要参数解释:
-
十六位源端口和目的端口:
端口是用来绑定进程的,表示的意思就是看数据从那个进程来,到哪个进程去。 -
32位序号和确认序号:
在后边的安全机制中会用到。 -
四位首部长度:
表示TCP的头部有多少个32比特位,TCP头部最大长度是60. -
六位标志位:
(1)URG:看紧急指针是否有效。
(2)ACK
(重点):确认应答标志位,用来确认是否有效,后边的连接管理机制有用到。
(3)PSH:提示接收端应用程序立刻把数据从TCP缓冲区读走。
(4)RST:双方要求重新建立连接,将携带的RST的标识叫复位报文段。
(5)SYN
(重点):请求建立连接,将携带SYN标识的叫同步报文段,后边的连接管理机制里边要用到。
(6)FIN
(重点):通知对方,本端要关闭了,将携带FIN标识的叫结束报文段,后边的连接管理机制里边要用到。
2.TCP内部机制
根据TCP协议的设计原则,TCP 中的机制大体分为两类:保证安全性、可靠性机制和提升效率的机制
1)安全、可靠机制(包含以下五种)
(1)确认应答机制:
(提高可靠性)
TCP是面向字节流传输数据的
并且会给每个字节的数据进行编号。源主机发送数据给目的主机,目的主机在收到源主机发送的数据之后,回应一下,回应就是一种安全机制,表示发送的数据目的主机确实收到了
。在回应的时候,回应的是ACK + 32为确认序号,就是目的主机会把将他接收到数据的末端的下一个编号返回给源主机。例如:源主机发送了100
个数据给目的主机,目的主机收到之后,回应源主机下一次要发送的数据的起点为101
。在下一次发送的时候,源主机一看,目的主机回应的字节的起点是101,说明收到我刚发的数据了,并且让我下一个数据从101字节开始。这样保证了安全性,保证数据不会丢失。下边给出一张图方便理解:
(2)超时重传机制:
(提高可靠性)
- 背景:源主机在给目的主机发送数据时,可能
由于网络拥塞、抖动等原因导致目的主机没有收到这个数据。
- 基于安全性考虑,为了保证刚没有发送过去的数据发送过去。要是
在一定时间内,目的主机没有回应,则目的主机会继续发送刚那条数据。
这里的一定时间指的就是超时重发的时间,超时重发的时间是2MSL。
- 要是目的主机在超时重发时间内还没有收到数据,则会进行持续的发送,一直等到数据能发过去为止。
每一次的超时重发时间是上一次的2倍
- 方便理解还是换一张图:
(3)连接管理机制(三次握手、四次挥手。)
(提高可靠性)
连接管理机制牵扯的流程很复杂,具体就是三次握手和四次挥手的全过程,这里我以单独的博客给出链接(形象版,表白和分手的全过程
):
(https://blog.csdn.net/weixin_47252176/article/details/118971667?spm=1001.2014.3001.5501)
(4)流量控制机制
(提高可靠性)
- 背景:实际传输数据过程中,由于服务端处理数据的能力是有限的。此时可能存在这样的问题:要是客户端发送数据的速度大于服务端处理的能力,就会导致数据堆积,
堆积的数据堆满缓冲区后,此时就可能出现丢包问题。
为了解决这个问题,引入流量控制机制。 - 做的事情:字面意思理解,就是控制流量的,这里
控制流量的一方是服务端
,由它在每一次返回客户端响应的时候告诉客户端现在传输数据的速度应该咋保持。流量就是数据发送的速度。
- 操作过程:客户端每发送一次数据,服务端会返回ACK响应,同时告诉客户端这边的处理能力,时刻控制着数据发送的速度。称之为流量控制机制,下边还是画一张图帮助理解:
(5)拥塞控制机制
(提高可靠性)
在讲这个机制时,里边牵扯到滑动窗口
,由于滑动窗口是TCP中提高效率的机制,大家在我下边写的提高效率机制中先学习。,
- 背景:由于TCP中的滑动窗口能同时发送多条数据,看似效率提高了,但是在可靠性却存在问题。在
网络拥塞的情况下,滑动窗口机制只会适得其反。
因此引入拥塞控制来解决这个问题。 - 拥塞窗口:用来标识发送端网络拥堵状态,在刚开始的时候拥塞窗口的大小是1,在确认网络状态之后会以指数级别增长。
- 拥塞控制做的事情:为了防止网络拥塞,在一开始的时候先少发一点数据,开始时发一个数据,看看网络状态,要是网络好的话再以2的指数级别的增长方式进行数据发送。这样就能防止刚开始因为网络原因导致大量数据包的丢失情况。
- 为了方便理解还是画一张图:
2)提高效率机制(包含以下三种)
(1)滑动窗口机制
(提高效率)
- 背景:为了提高效率,能不能在发送数据的时候,将一段数据进行整合,一并发送过去?相当于是并行,让多条路一块执行能提高效率。
- 窗口大小:无需等待确认应答而能继续发送数据的最大值。
滑动窗口大小 = Min(流量控制窗口,拥塞窗口)。
- 滑动:指的是根据接收到的ACK确认序号的最大值,能够计算出有多少数据被接受到了。在下一次传输的时候,就向下滑动多少。
- 关于丢包:要是返回的部分ACK发生丢包问题,不要紧,因为后边一旦收到了比当前值大的ACK响应后,就默认之前的数据包已经补上了。
- 还是用一张图来帮助理解:
(2)捎带应答机制
(提高效率)
- 含义:将能能合并的数据合并在一块在发送,提到效率。
- 举例:三次握手中,将服务端返回的ACK应答和服务端发送给客户端的SYN请求合并在一起了
(3)延时应答
(提高效率)
- 作用:服务端稍等一段时间再进行应答,这样程序就能
消耗掉接收缓冲区中的数据
。进而让接收缓冲区的剩余空间更大,以便接收更多的数据
,提高效率。
3.TCP的特点
- 有连接:对应连接管理机制(三次握手,四次挥手)。
- 面向字节流:将数据进行了字节编码,能进行拆分,合并。
- 安全性,可靠性高:基于它的上边几个机制。
- 首部开销大。
4.应用场景
用于对数据可靠性要求高的场景:例如:文件的发送,短信的发送等
三、TCP、UDP区别表
四、总结
好了,总结一下:
今天我们主要给大家介绍了TCP和UDP的区别,特点,TCP中的7种机制,希望今天的分享对大家有所帮助。