00:00
网络编程入门如此简单系列文章的第5篇UDP真TCP相比到底差了什么?本文将通俗易懂的为你类比解释UDP与TCP的核心差异,包括如何基于UDP实现TCP的可靠传输,通过模拟三次握手添加序列号与确认机制解决顺序和丢包问题,利用滑动窗口控制流量并引入拥色控制算法来动态调整发送速率的。本片内容是我在面试中技术总监问我的一道真题,当时答的不太好,所以把他揪出来总结了下。其实面试官主要是想让我说出UDP和TCP的原理上的区别,怎么给UDP加一些功能实现TCP,看好去很容易就能说出一两个TCP和UDP的区别,但如果能用女朋友都能听懂的方式该怎么说呢?下面我会以大白话的方式来解答上面的问题。阿让我想起了刚毕业参加工作那会,一名毕业菜鸟,一沟通简单,领导安排的任务直接干就完了。阿也是相信网络世界永远是美好的,我发送的包是很容易送到的,接收方也是很容易组装的。2、清醒他人,测试人员报的bug我也不会和他争论什么,永远相信测试人员是对的,测试人员说啥就是啥,我感就是阿比也是不会建立连接,有个端口号,谁都可以监听这个端口号,往上面发数据。3、不会讨价还价。产品经理昨天说手机壳需要根据心情变色,测试人员说这个bug要把关联的两个bug一起修掉,那就按照他们说的做吧。阿比也是不懂坚持和退让。
01:40
3UDP协议的使用场景EUDP需要资源少,网络情况比较好的内网,或者对于丢包不敏感的应用。2、UDP不需要一对一沟通来建立连接,可以广播的应用。3、UDP可以猛着发包,主要应用在需要处理速度快、食盐第一,可以容忍少数丢包的情况,即使网络情况不佳,发包就是针对上面的三大特点。UDP常用在实时竞技游戏、IOT、物联网、移动通信领域。
02:12
四、TCP协议的主要特点,一、面向连接就是为了在客户端和服务端维护连接而建立一定的数据结构来维护双方交互的状态,用这样的数据来保证所谓的面向连接的特性。TCP提供可靠交付,通过TCP连接传输的数据可以无差错、不丢失、不重复,并且按序到达。而UDP继承了IP包的特性,不保证不丢失,不保证按顺序到达。二、面向字节流,PCP是面向字节流,所谓字节流就是发的是一个流,没头没尾,TCP自己维护流状态,APP不基于IP数据报一个一个的发,一个一个的收。三、拥塞控制,TCP拥有拥塞控制,如果包丢弃了或者网络环境不好了,就会根据网络情况自行控制自己的行为,看一下是发快点还是发慢点,艾不则没有这么智能了,你让我发我就发呗,反正是你让我发的,其他的一概不管。四、有状态服务。
03:12
TCP是一个有状态的服务,有状态可以理解为我记录了哪些,发送了,哪些没有发送,哪些接收到了,哪些没接收到,应该接收哪个了,一点差错都不行,TCP干的事情可真多。而UDP则不是有状态的服务,我只管发,其他的就交给接收端吧,有点任性是吧?我如何让UDP追上TCP的能力建立连接?上面已经讲到了3次握手和4次握手阿,也可以模拟去做。那下面还有几个问题,顺序问题、丢包问题、流量控制、拥测控制。顺序问题和丢包问题可以利用确认与重发的机制,流量控制就是根据网络情况调整发包的速率,拥测控制主要用来避免包丢失和超时重传,如果出现了这两种现象,就说明发的速率太快了。至此,我用大白话的方式讲解了UDP和TCP的区别,以及UDP缺什么功能。需要怎么去弥补才。
04:12
能实现TCP的功能,相信这样回答的思路可以让面试官觉得还是有点东西的。
我来说两句