TCP和UDP协议

既然能查到这篇文件那说明你还是一个网路小白,本片文章会对TCP和UDP做基本介绍、优缺点对比、以及适用的场景相信读完这篇你会对TCP和UDP有充分的了解。

TCP和UDP简介

如果把网络模型简单划分成四层,应用层首先把数据交给传输层,传输层的传输则是基于网线或者其他介质完成的,传输层实际提供的是一种逻辑通信。

TCP和UDP就是属于传输层!

TCP和UDP协议的传输就可以理解为应用层的数据以不同的方式到达目的地。TCP和UDP就是这两种不同的方式。

TCP和UDP的区别

数据传输方面:

TCP传输数据不会立马发送 而是会先进行三次握手,握手成功后才会进行数据的发送。(这里不说具体是咋握手了)

握手的目的就是为了进行一对一的服务。这样数据就可以认为是在可靠的逻辑通信下进行传输。

UDP不会进行握手,而是直接发送数据*,也就是无连接发送数据,这样方式相对于TCP来说会更加灵活他不仅可以一对一,还可以一对多进行通信。*

上述的描述可能有同学会有疑问

那就是为什么UDP都不用不进行握手就能发送数据了为什么还要留着UDP呢,直接跳到传输层不行吗?

原因:UDP和TCP都提供端口,没有端口应用要同时进行通信就会出现问题。所以不能直接摒弃UDP跳到网络层!

数据首部内容方面:

UDP和TCP的首部都存在端口,但是两者的首部千差万别。当然也可以从下面的图片得出UDP的传输更轻量也更快。TCP的开销则相对较大。

  • TCP
    从上面的图片也可以看出TCP有UCP不具备的"序列号"和"确定答应号"。应用层把数据交给TCP之后如果数据比较大TCP会拆成多个数据段,并为每个数据段用序列号进行标注。
    但是!只有"序列号"是没有意义的,还需要确认数据是否到达目的地了,因此还需要"确认答应号"。如果接收方收到这份数据段,就可以用序列号+数据长度的和作为确认号进行返回。
    对于发送方就简单了,在指定时间内没有收到确认号就说明这个数据可能丢包了。

-UDP

但是UDP首部可没有这两个东西,不具备的"序列号"和"确定答应号"

UDP没有没有"序列号"的最直接感受就是没有顺序,一切都是乱的。

UDP能做的就是把应用层下来的每个报文都视为独立的消息,这样UDP就不进行分片了,在传输层封装成数据段直接交给网络层,这样数据段之间会有明显的边界。

因此就有逐条发送的说法了。当然这种方式很可能会乱序(当然也可以让应用层给乱序的UDP进行整理)

UDP没有"确认答应号"这样最直观的感受就是对发送的结果没有底(数据到没到、是不是发送的过程中丢失了)。
但是没关系!可以重新发送,这种传输方式即使第三次才传达成功也比TCP的开销和速度要好!

为保证数据传输可靠性和网络高效性方面:

-TCP

TCP为了确保网络中的传输速率能够适应网络的状况,避免数据的丢失和过载,推出了流量控制和拥塞控制。

流量控制:是针对发送双方的。即:让发送方放慢脚步,不要一下发送太多数据,因为接收方此时没有办法处理好这么多数据。

拥塞控制:是针对发送双方中间的网络,TCP可以更有效的利用网络的带宽,毕竟整个互联网是大家一起使用的,不能再原本网络就很拥堵的前提下还拼命发送数据。

-UDP
UDP没有拥塞控制和流量控制 ,因此接收方接收不了这么多数据或网络已经很拥挤的情况对UDP来说也是照发不误。

所以运营商会在不同层面进行管控.比如运营商会对UDP流量进行一定限制。

性能开销方面:

-TCP

TCP头部至少包含 20 字节的信息,加上额外的选项和填充。另外TCP是一种面向连接的协议,在数据传输之前需要建立一个连接(三次握手),数据传输完成后还需要释放这个连接(四次挥手)所以由于TCP需要建立连接和保证数据完整性,TCP开销会大于UDP。

-UDP

虽然UDP无连接,也不保证数据的可靠性,但是无连接和首部开销低对于某些协议来书也是优点

如:DNS核心只在查询不需要太大的数据量,要的就是结果和效率,而UDP在数据量小的时候就能做到简单高效

如:实时的语音和视频也很适合UDP,如果进行实时的视频因为丢包可能画面会有缺失,但总体不影响使用还是可以的。

帮助更好的理解TCP和UDP而做的假设

为了帮助理解这里做个假设:

1、假设如果实时的数据使用TCP的话,TCP就可能因为丢包而进行重传,已经抵达的需要等待没抵达的,这样就产生了时间差现在的数据可能就会变成过去的数据。

2、假设用UDP来发送一份文件呢,如果正常发送成功还好但是中途有丢包就会有数据缺失,这样就会造成内容的歧义,因此都是考虑用TCP来发送(TCP会建立连接来保证数据的可靠性)

适用场景

TCP适合网页、传输文件、电子邮件发送等需要保持长时间连接的情况。

UDP适合实时音视频传输、在线游戏等,这些应用场景对数据的实时性要求极高,而轻微的数据丢失相对于传输延迟来说是可以接受的。

总结:UDP不能保证数据交付的可靠性,但有时会比TCP更加适合针对性的场景。

1、连接方式:TCP 是面向连接的协议,UDP 是无连接的协议。

2、可靠性:TCP 提供可靠的传输,保证数据的完整性和顺序性,而 UDP 不保证数据的完整性和顺序性。

3、速度:UDP 比 TCP 更快,因为它不需要建立连接和维护连接状态。

4、传输方式:TCP 是基于字节流+的传输方式,UDP 是基于数据报的传输方式

5、性能开销:TCP开销比UDP大,TCP头部需要20字节,UDP头部只要8个字节

TCP无界有拥塞控制,UDP有界无拥塞控制。