Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TCP、UDP的区别,TCP如何实现可靠传输,UDP如何改进实现可靠传输 #88

Open
TieMuZhen opened this issue Feb 28, 2022 · 0 comments

Comments

@TieMuZhen
Copy link
Owner

TieMuZhen commented Feb 28, 2022

UDP与TCP的区别

一、UDP

UDP,用户数据包协议,是一个简单的面向数据报的通信协议,即对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层

也就是说无论应用层交给UDP多长的报文,它统统发送,一次发送一个报文

而对接收方,接到后直接去除首部,交给上面的应用层就完成任务

UDP报头包括4个字段,每个字段占用2个字节(即16个二进制位),标题短,开销小
UDP首部4字节

特点如下:

  • UDP 不提供复杂的控制机制,利用 IP 提供面向无连接的通信服务
  • 传输途中出现丢包,UDP 也不负责重发
  • 当包的到达顺序出现乱序时,UDP没有纠正的功能。
  • 并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况,UDP 也无法进行流量控制等避免网络拥塞行为

二、TCP

TCP,传输控制协议,是一种可靠、面向字节流的通信协议,把上面应用层交下来的数据看成无结构的字节流来发送

可以想象成流水形式的,发送方TCP会将数据放入“蓄水池”(缓存区),等到可以发送的时候就发送,不能发送就等着,TCP会根据当前网络的拥塞状态来确定每个报文段的大小

TCP报文首部有20个字节,额外开销大

特点如下:

  • TCP充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在 UDP 中都没有。
  • 此外,TCP 作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。
  • 根据 TCP 的这些机制,在 IP 这种无连接的网络上也能够实现高可靠性的通信( 主要通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)

三、区别

双工模式分为如下两种:

  • 半双工:接口任意时刻只能接收数据或者发送数据,并存在最大传输距离的限制。
  • 全双工:接口可以同时接收和发送数据,最大吞吐量可达到双倍速率,且消除了半双工的物理距离限制。

两者区别如下表所示:

UDP首部4字节
TCP报文首部有20个字节

TCP如何实现可靠性传输?

  • 确认(ACK)机制

发送方在设定一个定时器,每间隔一段时间,没有收到对方的ACK确认应答报文,就会重发该报文

UDP如何改进实现可靠传输

传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层,在应用层实现确认机制、重传机制、窗口确认机制。

目前有如下开源程序利用UDP实现了可靠的数据传输。分别为RUDPRTPUDT

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant