网络通信的建立必须在通信双方的对等层进行,在整个数据传输过程中,需要对数据进行协议封装,以标识对应层所用的通信协议。TCP/IP协议模型的传输层有两个极具代表性的协议:TCP协议与UDP协议。
TCP的传输速度相对较慢,而UDP的传输速度相对较快,因此许多人认为TCP协议比UDP协议更可靠。事实果真如此吗?让我们通过分析一探究竟。
被误解的TCP
TCP有着严谨的特性,它的传输机制虽然复杂,但是清晰、明确:
(图片来自网络)
第一步,TCP需要建立连接才能传输。一方发送,另一方传输,整个连接通畅才可以进行数据传输。
第二步,TCP会根据对方缓存大小进行数据分段和流量控制。当连接建立完成以后,双方先要进行沟通,了解清楚对方缓存区的大小,然后根据对方缓存区的大小对数据包进行切片,也就是所谓的TCP窗口。TCP的窗口大小在传输过程中会持续协商,必要的时候进行更改。
第三步,TCP会有端到端的校验和,并且存在出错重传机制。当传输过程的协商完成以后,开始正式传输对话内容。在此过程当中,TCP协议会进行端到端的校验和,如果传输过程中,传输的内容发生变化,接收方会发现校验失败,而发送方会触发出错重传机制。
第四步,TCP收到准确数据后发送确认,存在超时重传机制。当接收方准确无误的收到内容以后,接收方会发出确认信息,如果发送方一段时间没有收到确认信息,会触发超时重传机制,并将需要传输的内容进行重传。
正是由于TCP拥有了如此之多的确认机制,才能确保待传输的内容准确无误的在端到端之间传输;也正是因为TCP如此严谨,大家才会产生TCP传输速度较慢的错觉。
不可靠的UDP
UDP协议与TCP协议一样用于处理数据包,但它是一种无连接的协议。它不提供数据包分组、组装,也不能对数据包进行排序,当报文发送之后,无法得知其是否安全完整到达,因此常说UDP是一个不可靠的协议。
(图片来自网络)
UDP的不可靠主要体现在以下两个方面:
第一方面:UDP面向无连接。在发送端,应用层将数据传递给传输层的UDP协议,UDP只会给数据增加一个标识,然后就传递给网络层;在接收端,网络层将数据传递给传输层,UDP只去除IP报文头就传递给应用层,不会进行任何拼接操作。
第二方面:UDP面向报文。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文。
TCP与UDP谁更可靠
我们客观、公正地比较TCP与UDP会发现:
1、TCP会协商发送与接收双方各自缓存的大小,并且将数据分片,以确保传输不会因为对方接受能力不足而丢失数据;而UDP不会估计对方的接收能力,它认为IP层有MTU机制,所以会尽最快速度进行传输。
2、TCP有数据到达确认信息和超时重传机制,以保证数据不会出现丢失;但UDP为了传输速度快,舍弃了确认机制,不再等待确认信息。
3、TCP有校验和机制,以确保数据不会被篡改变化,如果校验失败会重传;UDP的重传机制是可选项,即使发现数据出错,UDP只会悄悄丢掉数据。
因此,TCP协议虽然传输速度慢,但是相对可靠;UDP协议尽管传输速度快,但是并不可靠。
4分钟视频了解TCP与UDP的区别:
扫码即刻前往