TCP是一个复杂的协议 而UDP比较简单
1.连接 TCP是一个面向连接的协议 而UDP是一个无连接协议 即TCP需要连接建立之后才能传输数据 而UDP在未建立连接时就能够传输数据
2.交付 TCP是一个可靠交付的协议 而UDP只能尽最大努力交付 可靠交付指的是数据按序到达 不丢失 不重复
3.数量 TCP是一个点对点的全双工协议 而UDP支持一对一 一对多 多对多
4.首部长度 TCP的首部长度更长 20-60字节 而UDP的首部固定为8个字节
5.面向 TCP面向的是字节流 即上层应用层交付下来的数据报 在TCP的眼中是一串字节流 而UDP是面向数据报的
6.是否具有拥塞控制 TCP是有拥塞控制的 在网络拥塞时源点主机的发送速率会降低 而UDP不具有拥塞控制 一些追求传输效率的应用通常使用UDP协议
所谓面向字节流 指的是TCP发送端发送几次数据和接收端接受几次数据时没有必然联系的
比如发送端调用一次write写了一百个字节 但是接受端可以分10次接受 也可以写10次100字节 接收端一次接收完
原因:
TCP面向连接 一个Socket收到的数据由同一台数据发出 并且有序到达 所以每次读取多少数据都可以 因为我知道前面的数据都是对的 某些时候为了节省资源 程序可能会选择"攒一会"再读
而UDP协议不知道前面的数据是否是错的 所以每次发送就对应着一次接收 如果错了就再发
应用区别:
UDP:追求高速度的应用一般用的是UDP(KCP),比如视频、音频、实时游戏、广播,而且通常这些应用对于数据的可靠性要求不是很高,视频丢点数据(丢几帧 后面再补上),你也看不出来,但是速度慢就不能接受了,玩英雄联盟慢一秒别人就把你头打爆了
TCP:可靠传输,HTTP用的就是TCP(后面用为了追求性能用UDP去了,我们之后详说),任何确保数据可靠的应用都应该使用TCP
|