TCP和UDP

tcp和udp是传输的两种协议他们各有不同,大部分情况下使用的是tcp协议,还有一部分使用的是udp协议

1.TCP和UDP的区别

  • TCP
  1. TCP面向连接,通过三次握手连接和四次握手断开连接;
  2. TCP是可靠的通信方式,通过超时重传、数据校验等方式来确保信息无差错,不丢失,不重复。并且按序到达;
  3. TCP把数据当成字节流,当网络出现波动时,连接可能出现响应延迟的问题;
  4. TCP只支持点对点通信;
  5. TCP报文首部比较大有20字节;
  • UDP
  1. 无连接,发送前不握手,收后不断开;
  2. 不保证可靠,无重传,无确认,无序;
  3. 面向报文,一次发一个完整报文,不合并,不拆分;
  4. 支持1->1、1->N、N->N;
  5. 首部仅8字节,开销小;
  6. 无流量控制和拥塞控制,应用层自己限速;

2.TCP保证自身可靠性的方式

  • 分片重组与序号管理:发送端按 MSS 分片、接收端按序号重组,天然解决失序/重复问题。
  • 到达确认:接收端接收到分片数据时,根据分片的序号对端回复一个确认包(ACK);
  • 超时重发:发送方在发送分片后开始计时,若超时却没有收到对端的确认包(ACK),将会重发分片,可选SACK只重传丢失的块;
  • 滑动窗口:TCP中采用滑动窗口来进行传输控制,发送方可以通过滑动窗口大小来确定应该发送多少字节的数据。当窗口为0时,发送方不会再发送数据;
  • 重复处理:如果传输的分片出现重复,TCP的接收端会抛弃重复的数据;
  • 数据校验:首部与数据反码和校验,出错即丢。
  • 拥塞控制:慢启动,拥塞避免,快重传,快恢复,动态调节发送频率;
  • 保活计时器:长时间无数据则发探活包,防止‘’死连接‘’占用资源

3.UDP不可靠的原因

  • 无连接状态,不跟踪报文是否到达;
  • 无序号与确认,无法判断丢包或乱序;
  • 无超时重传,发送后不管;
  • 无流量/拥塞控制,网络拥塞时仍按原速率发送,加剧丢包;
  • 仅可选校验和,出错直接丢弃,不通知发送方。

4.TCP和UDP的使用场景

  • TCP使用场景:

TCP实现了数据传输过程中的各种控制,适合对可靠性有要求的场景

如:文件传输、远程登录、邮件、数据库、web等

  • UDP使用场景:

可以容忍数据丢失的场景

如:DNS查询、DHCP广播、实时游戏同步