聊聊TCU&UDP

分析对比传输层协议TCP与UDP的区别

Posted by odin on March 22, 2020

什么是TCP和UDP

都是传输层的传输协议。由IP:port组成。

TCP和DUP在在TCP/IP体系中的位置

TCP和UDP处于传输层,不同主机之间进行数据通信,数据通过数据层经由主机的网卡发送,通过网络层传输到达目标主机。数据经过TCP/UDP协议才能确定是主机上的哪个应用。 机上的不同应用端口号不一样,通过不同的端口号区分数据包是传输给哪个应用。 不同的应用层协议需要使用不同的传输层协议,最常见的有HTTP协议和SMTP协议,在传输层使用的是TCP协议,而DNS协议和RTP协议在传输层使用的是UDP协议。

TCP和DUP的区别

  连接 可靠性 流量控制 模式 系统资源 首部
UDP 不可靠:1,数据丢包;2,数据错乱不会纠正 不使用 数据报 简单,开销少
TCP 可靠:1,丢包会重新发送;2,数据错乱会纠正 使用 复制,开销较大

简单描述以上区别:

  • 连接:

    如上所示,UDP无需建立连接,可随时发送数据。而TCP每次进行数据传输需要三次握手建立连接,数据传输完成后需要四次挥手断开连接。

    • UDP只需要有目标地址即可进行数据传输。
    • TCP在与目标地址进行数据传输前需要与目标地址进行连接建立,用于确认一些信息。

    由于UDP不需要建立连接,UDP可以实现一对一,一对多,多对一,多对多的交互通信。而TCP需要建立连接,所以TCP只能实现一对一的交互通信。

  • 可靠性:
    • UDP在传输过程中数据包顺序产生错乱不会进行顺序纠正,数据包出现丢失也不会重新发送。
    • TCP会主动进行数据纠正和丢包重新发送。
  • 流量控制:
    • UDP不会进行流量控制,TCP会。
  • 系统资源消耗:
    • UDP不需要建立连接确认一系列的信息,系统资源消耗少。
    • TCP需要建立连接确认一些列的信息,系统消耗资源多。
TCP和UDP对应用层报文的处理

如上所示(简单省事TCP只画了一个方向的数据流,实际上TCP建立连接后可以双向通信 ):

  • UDP使用的是报文进行传输,在数据头部添加UDP的头进行传输。UDP对应用层传递来的报文既不合并也不拆分。
  • TCP使用的是字节流进行传输,TCP能进行可靠传输,流量控制,拥塞控制的基础是因为TCP是面向字节流的。
    发送方:TCP将应用层传递来的数据当作一连串无结构的字节流,并不知道他们传递的含义。将他们存储在自身的发送缓存中。TCP根据发送策略从发送缓存中提取一定字节的构建TCP报文段并发送。
    接收方:TCP将接收到的报文存储到本地接收缓存中,另一方面将接收到的报文发送给应用层。TCP不保证接收方应用进程接收到的数据块和发送方应用进程发送的数据块具有对应大小的关系。

TCP和UDP可靠性对比

DUP传输:
UDP提供的是无连接不可靠服务,在数据传输过程中产生了误码时,接收方可以通过码段识别到误码,但是接收方不会进行处理,直接丢弃。
网络层向上提供的也是无连接不可靠服务。那么在数据传输过程中可能会出现数据丢包,由于DUP向上提供的是无连接不可靠服务,发送方也不会对数据丢包进行任何处理。
综上:UDP向上提供无连接不可靠服务,报文是否丢包或者是是否被接收方正确接收的结果并不关心。

TCP传输:
TCP向上提供面向连接的可靠服务。
TCP传输过程中接收方正确收到数据后会向发送方返回一个确认消息,发送方一段时间内没有收到接收方返回的确认消息,会触发超时重发。基于这个机制能保证TCP传输的可靠性。
接收方收到报文段后根据首部的校验字段值检查该报文段是否产生了误码。

  • 如果校验结果没有产生误码,接收方收下该报文段,并向接收方发送确认报文段。
  • 如果校验结果产生了误码,接收方丢弃该报文段而不给发送方发送确认报文段,将导致发送方触发超时重发机制,将报文重新发送。
    TCP传输过程中报文被路由器丢弃即出现丢包情况,也会导致发送方超时重发。
    综上:由于网络层的不可靠服务,但是只要使用TCP协议,就能保证数据传输的可靠性。

TCP和UDP的首部对比

TCP和UDP均由:首部、数据载荷两部分组成。 由于UDP的不可靠性,UDP只是在IP协议的 上层增加了应用端口信息,总共8个字节的开销。 而TCP需要建立连接,首部会有较多字段。包含20个固定字节首部和最多40字节的扩展首部,总共60字节的开销。