TCP vs UDP ,你会选择哪个?

TCP

TCP,真名是传输控制协议,是一个可靠的,面向连接的,基于字节流的传输层协议。TCP保证数据的到达,并且是按照顺序的。

为什么TCP可靠

  1. 首先是TCP在建立连接时会进行三次握手,断开连接时会进行四次挥手。
  2. 确认应答机制:TCP将每个字节的数据都进行编号,也就是序列号,接收端会进行确认,给发送端返回一个确认序列号,如果有数据丢失,就会进行重发。
  3. 超时重传机制:如果发送端的发送报文或者接收端的确认报文超时没有到达接收端或者发送端,那么发送端就会重新发送数据,如果是因为网络堵塞而导致接收端接收到了许多重复数据,那么TCP会对序列号重复的数据进行丢弃。
  4. 滑动窗口:为了应对大量数据传输而产生的,设置一个窗口,发送端无需等待确认应答就可以继续发送数据,收到一个ACK确认,窗口就向后移动(这是就出现了一个缓冲区,记录着哪些数据没有进行确认,只有经过确认的数据才会从缓冲区内删除)。如果ACK报文丢失,还可以通过后续的ACK报文来确定哪些数据已经收到了。但是如果数据包丢失,发送端就会收到提示报文,提醒发送端重新发送丢失的数据包,如果接收到三次这样的请求,发送端就会重新发送丢失的部分,然后继续之前的工作(也被叫做高速重发控制或者快重传)。
  5. 流量控制:如果接收端处理数据的速度太慢,发送端发送速度太快,就会导致接收端的缓冲区爆满,这样就会导致之后的丢包连锁反应,因此TCP会根据接收端的处理速度来设定发送速度。
  6. 拥塞控制:应对网络堵塞,TCP在不清楚网络环境的情况下,会进行慢启动,先发送少量数据,摸清楚网络状态再决定发送的速度。
  7. 延迟应答:何时应答才能恰到好处,TCP的目标是在保证网络不拥堵的情况下尽量提高传输效率,在应答方面有两个限制,一是数量限制,每个多少个数据包应答一次;二是时间限制,每个多长时间进行一次应答。
  8. 捎带应答:针对一发一收的情况,让ACK确认做一次顺风车,和响应一同发给发送端。

面向字节流

初始化一个socket的时候(创建一个TCP连接),就会创建两个缓冲区(接收缓冲区和发送缓冲区),那么TCP就既可以读数据也可以写数据了,并且都是按照字节来写。

UDP

UDP,也称作用户数据包协议,它是一个无连接的,不可靠的,基于数据包的通信协议,常被用来和TCP进行比较。

比就比,谁怕谁

  1. 虽然说UDP是无连接,不可靠的通信协议,但是UDP有一个最大的优点,就是快,也就是实时性。
  2. TCP的可靠依赖于更多的系统资源,而UDP需要的系统资源更少。
  3. 可靠就意味着复杂,所以UDP的程序结构较为简单。
  4. 流模式和数据包的区别。
  5. 但是可靠就意味着我会不丢包,我会将数据按顺序发送给接收端,你就不行,可能丢包。

仁者见仁,智者见智,针对于不同的环境,使用不同的协议,这才有事半功倍的效果。

发布了56 篇原创文章 · 获赞 3 · 访问量 1183

猜你喜欢

转载自blog.csdn.net/qq_40788718/article/details/103309101
今日推荐