UDP和TCP

  之前我们对TCP协议进行了一个简单的介绍,TCP(传输控制协议)是面向链接的、可靠的、面向字节流的传输层通信协议。今天我们主要介绍和他在同一层次上的UDP协议,并且对比一下他们两个有什么区别。相比起来TCP,UDP算是恰恰相反的一个协议,他是无连接、不可靠、面向数据报的。

   UDP和TCP、IP一样他也拥有自己的头部,不过他的头部信息十分的简单,

UDP和TCP

UDP的头部包含源端口,目标端口,头部长度,校验和四个部分,但是校验和的主要是用来计算UDP协议在传输过程中是不是出现了问题。

 我们之前说TCP协议是一个可靠的,那他到底可靠在哪里?为什么他是可靠的而我们的UDP就是不可靠的。是因为TCP的应答机制,从三次握手和四次挥手就可以看出来,但是在UDP协议里边是不需要应答的,也就是我发给你消息之后,你可以不回答, 我也不管你收到没收到,所以这四部分里边的源端口,也就是标记这个消息是谁发的这一部分是可以不写的,如果不用就置为0.

  对于UDP的面向数据报,我们在介绍TCP的时候TCP在传输数据的时候会把数据进行分包编号,你给他的数据他不会全部发送,他会一点一点发送。TCP会把应用层给他的数据看成一整块无结构的字节流,当数据太长他会进行切分,当目前收到的数据太短他会等待积累一些数据之后再去发送。但是UDP不同,应用层交给UDP多大的报文,UDP就会直接发送,一次发送一个报文,所以应用程序就要控制报文的大小,所以面向字节流进场会出现粘包问题。但是UDP并不会出现粘包问题。

  在UDP进行校验的时候会临时增加一个伪头部,伪头部也就是说他并不是跟着数据一起发送,而是只有在计算校验和的时候临时增加上去的。

UDP和TCP

伪头部包含源IP,目的IP,0以及IP协议中的首部字段值UDP协议都是17,以及UDP数据的长度。

  我在学习UDP和TCP的时候通常来说把UDP理解成,小时候你妈喊你回家吃饭,该吃饭了,你妈打开窗户喊一声,你妈自然是希望你收到的,但是你是不是能收到他不确定,喊完之后就继续干活,并不是说在说话之前,先喊你大胖大胖能听见我说话吗?也不需要什么工具,喊完也不需要你来回答,你听见乖乖回来就行。而TCP就和现在你在上大学你妈给你打电话一样,首先需要通过手机创建一个连接,你妈拨打你的手机号。然后等你接通之后,你妈会问喂,是大胖吗?能听见我说话吗?你说我是,我能,这时候你妈就开始跟你说话了,这时候你妈说的话,你是一定能收到的,并且你收到没收到他是知道的,他问你有对象没,你要回复他一句还没有,不然他会一直问你。当他问完之后会说你还有事吗,你说没事了,那我挂了啊,你说挂吧,无论是刚接通电话还是说要挂断电话都是双方协商的一个过程。

  那你说这两种方式哪个你妈是爱你的?这自然是没办法回答的,你说TCP和UDP谁更好?只能说你妈在该用哪种方式的时候就选择了哪种方式沟通,TCP和UDP也是都有不同的应用场景。

  UDP的传输速率是比TCP快很多的,他不需要建立链接,不需要经过三次握手,在传输数据的时候没有确认机制,也没有滑动窗口和阻塞控制机制,但是他的传输时不可靠不稳定的,由于没有应答机制,在网络状况不好的很有可能会丢失数据包,但是UDP还有一个TCP没有的优点就是他可以一对一也可以一对多,和喊话一样,你有个哥和你一块玩,你妈一句话都喊回来了,但是打电话必须一个一个打。TCP的报头至少要有20个字节,但是UDP只需要8个字节

  那什么时候使用TCP?

当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输

什么时候用UDP?

当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如 QQ语音 、QQ视频 、TFTP。基于UDP的协议有:域名系统(DNS)、简单网络管理协议(SNMP)、动态主机配置协议(DHCP)、路由信息协议(RIP)、自举协议(BOOTP)、简单文件传输协议(TFTP)