哪怕是tcp协议也需要在应用层进行校验(原因见另一篇文章),udp也可以利用应用层确认来保证稳定性。那么我们为什么不直接利用完全UDP协议,放弃使用tcp协议呢。其实这两种协议都能实现功能,无非就是选择方面的问题。
1:代码复杂度层面,用于tcp协议提供给用户一套完整的规范(tcp出现的目的就是为了解决用户重复编写相同的代码,形成了规范方便用户使用),如tcp不会乱序(滑动窗口策略),如果使用udp需要对于乱序情况进行处理。阻塞控制等等如果都由应用层的程序来进行代码难度会非常高。简而言之,虽然能在应用层进行确认来保证udp的稳定性,但在稳定性方面仍不如tcp。不过虽然代码复杂但是能够在满足实时性的情况下极大程度保证了稳定性。如果能做到tcp那种程度需要编写的代码将会是海量的。
2:实时性满足的情况下:比如http协议,虽然会有大量网页资源加载过慢的情况,但是大部分网页都是能很快响应的,这个时候就完全可以使用tcp协议保持稳定,同时减少了代码编写。(tomacat工作原理见另一篇文章)
3:汇编语言与高级语言的差别,tcp写在内核,相同的代码使用高级语言肯定会比汇编语言慢。
其实最主要的原因还是一个,在实时性完全满足的情况,为什么不考虑使用一个稳定的方式、少量的代码来完成程序呢?
弱网环境下
https://www.163.com/dy/article/FK912K2L05318EB9.html