1.引言
作为通信基础,在面试中经常遇到对TCP与UDP相关问题,我也经常对面试者提出该问题,问题虽然基础,但对于各个层次的人都能考量出其在通信上的理解和编码功底深浅。
谈到二者的差别,许多人张口便能回答,连接和非连接,流式和非流式,可靠与非可靠。但再深入一步,为何TCP是流式,UDP是非流式,其核心差别在什么地方?通信架构设计或关键业务场景中,到底何时该选用TCP,何时该选用UDP,在使用这两种通信方式的情况下,怎样才能发挥最高效能?这些问题,非有深入了解,愿意刨根问底,很难掌握全面。
2.从需求分析OSI模型与TCP/UDP协议
理解一个架构和方案的最佳途径莫过于分析其最原始的背景需求,让我们回归到最原始的需求——通信:
这是一个最简单的通信需求,从A将数据传到B,分析其需求领域,无非可归纳为:发端如何发,总线如何传,收端如何收,从这里我们可以总结出来至少两个大需求:需要一个收发的协定(规范一次收发多少数据,怎么收发),需要定义传输总线的规范(例如,规范网线、光纤、其他总线等的高低电平是否有统一的代指)。这里实际已经产生了传输层和物理层