二者的区别主要有以下四点:
1.TCP面向连接,发送数据前要先建立连接;UDP是无连接的,发送数据前不需要建立连接;
2.TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,不保证可靠交付;
3.UDP有较好的实时性,效率比TCP高,适用于对高速传输和实时性较高的通信或广播通信;
4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信;
下面来详细讲解一下这四句话:
1,TCP在发送数据前,客户端和服务器端已经建立了连接;而UDP在发送数据前服务器端和客户端没有建立连接,服务器端的地址和端口号记录在数据包里面。
如图,客户端中socket在数据发送前,里面存有服务器端的地址和端口号,此时已建立连接;
而在UDP中,使用的datagramSocket中没有写入地址和端口号,把数据放到了数据包里,地址和端口号都在数据包里。
其实可以将这个数据包比作快递物件,这个快递往哪寄,寄给谁,都在物件上面写着,只有发送物件的时候,才与要接受快递的对象建立连接。
2,TCP中的数据会进行多次校验,而UDP则没有校验,只能自己进行校验。而且一般图片,视频等通过UDP发送时,丢失一两个像素,也基本看不出什么,不需要校验太准确也没问题。
3,这一点主要是和校验有关,TCP校验次数多,固然实时性和效率就低点。
4,由于TCP在数据发送前就建立连接,这相当于已经规定死,数据要发送给谁,所以只能是一对一。
UDP的话,客户端中可以有一个数据包,也可以有多个地址和端口不同的数据包,这样可以发送给多个服务器端,而服务器端也可以向不同的客户端发送数据包。所以UDP支持一对一,多对一,一对多,多对多。