TCP与UDP选择对比

TCP与UDP选择对比,第1张

TCP与UDP理解 概述

TCP与UDP同属于TCP/IP协议族中传输层的两个重要协议,不同于网络层实现的跨网络跨节点的点对点(不同宿主间)通信,传输层实现的是端到端之间的通信(运行于不同宿主机上的进程间通信)。这是TCP与UDP协议设计和开发的目标。

TCP

TCP是Transmission Control Protocol的缩写,表示传输控制协议,是一种面向连接的通信协议,一笔TCP的数据被称为一个TCP分节(segment)。TCP提供面向字节流式传输能力,无数据边界,即TCP的header中是没有数据长度(length/size)指示字段的。TCP在网络状态正常或短暂异常的情况下,提供可靠的传输能力,保证TCP分节按序、正确、唯一的被传递到应用层。TCP header大于等于20字节。

  1. TCP主要通过确认(ACK)、超时与重传来实现可靠传输的。
  2. 通过source port与destination port实现端到端(进程到进程)间通信。
  3. 通过seq num与ack num保证每一个TCP分节按序、唯一的传输到目的端。
  4. data offset字段占4bits,数值以4字节(32bits)为单位,表示了TCP header的长度,或者说data段的起始位置。
  5. 控制位:6bits,自左向右分别为URG、ACK、PSH、RST、SYN、FIN,将在TCP详解中说明。
  6. window:窗口大小,16bits,被设置于接收端(receiver)的ACK分节中,用于告知发送方(sender)我方接收能力,还可以接收多少数据。主要用于TCP的拥塞控制,流量控制。
  7. checksum:校验和,用于数据校验,保证数据正确性。
  8. urgent pointer:紧急指针。
  9. options:可选项
  10. Padding:填充位,确保TCP header以32位对齐,长度是32位整数倍,padding在options被设定时使用,始终填充0。

UDP

UDP是User Datagram Protocol的缩写,表示用户数据报协议,提供无连接的传输能力,是一种“尽力而为”的传输方式。UDP不保证数据包一定被传输到目的端,即使数据包被传输到目的端,也不能保证数据包能按序传递给应用层,UDP的分组可能出现丢失、重复、乱序。对数据传输的可靠、按序设计需要由应用层开发来保证。UDP header size为8字节。

  1. source port: 16bits, 源端(即发送端)端口号。
  2. destination port:16bits,目的端(即接收端)端口号。
  3. length:16bits,UDP数据包长度,注意长度包括UDP首部(header)与data的总长,所以length最小为8。
  4. checksum:数据校验和,保证数据正确性。

虽然UDP提供不可靠性传输,但相对TCP而言,UDP仍有自身的优势:

  1. UDP具有更好的传输效率:UDP header更小更简单,通信无需建立连接,维护连接,传输过程中没有ACK、超时和重传机制。
  2. UDP不基于连接,可支持广播与组播通信,并且可以使用单个端口与多个主机进行通信。
  3. 软件工程上可以更快交付,一般性开发更敏捷,更快。

通常UDP应用于音视频和一般性数据传输,这些场景中,丢失部分数据对应用不会造成太多负面影响,但具有更好的通信效率。

网络编程中的选择

在网络系统的开发过程中,如何决策通信协议的技术选型,选择TCP还是UDP,通常需要考虑以下因素:

  1. 性能指标latency(时延);
  2. 数据可靠性、完整性要求;
  3. 主机/终端资源,系统overhead(开销);
  4. 网络容量:支撑多少通信节点;
  5. UDP可支持广播,组播;TCP则不支持。

关于如何基于TCP、UDP开发健壮的网络应用程序,将在TCP/UDP网络编程进阶篇中讲述,talk is cheap,show me the code。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/721897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存