最后更新时间:2022/7/29
1.粘包:TCP会粘包,UDP不会粘包。
因为TCP是基于数据流的协议,而UDP是基于数据报的协议,UDP是面向消息的协议,每个UDP段都是一条消息,应用程序必须以消息为单位提取数据,不能一次提取任意字节的数据。
2.速度:TCP慢,UDP快。
3.顺序:TCP保证顺序,UDP不能保证顺序(可能会出现后发先至的情况)。
4.可靠性:TCP是可靠传输,UDP是不可靠传输。
TCP丢包会自动重传,UDP可能丢包,丢包后不会自动重传。TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
5.对系统资源的要求(TCP较多,UDP少)。TCP需要建立专用的通信通道,还需要校验数据等,因此需求的系统资源较大。
6.每一条TCP连接只能是点到点的。UDP支持一对一,一对多,多对一和多对多的交互通信。UDP支持广播方式。
7.TCP面向连接(如打电话要先拨号建立连接)。UDP是无连接的,即发送数据之前不需要建立连接。
8.TCP首部开销20字节。UDP的首部开销小,只有8个字节。
9.TCP发送时,无连接会返回错误。UDP发送时,不管对方是否收到,不会返回错误。
10.代码方式:
服务器 | 客户端 | |
TCP | 1、创建一个socket,用函数socket()。 2、设置socket属性。 3、绑定本机的IP地址、端口等信息到socket上,用函数bind()。 4、开启监听,用函数listen()。 5、接收客户端上来的连接,用函数accept()。 6、通过accept()返回相应客户端的socket建立专用的通信通道。 7、收发数据,用函数send()和recv(),或者read()和write()。 8、关闭网络连接。 9、关闭监听。 | 1、创建一个socket,用函数socket()。 2、设置socket属性。 3、设置要连接的对方的IP地址和端口等属性。 4、连接服务器,用函数connect()。 5、收发数据,用函数send()和recv(),或者read()和write()。 6、关闭网络连接。 |
UDP | 1、创建一个socket。 2、设置socket属性。 3、绑定IP地址、端口等信息到socket上,用函数bind()。 4、循环接收数据,用函数recvfrom()。 5、关闭网络连接 | 1、创建一个socket。 2、设置socket属性。 3、设置对方的IP地址和端口等属性。 4、发送数据,用函数sendto()。 5、关闭网络连接。 |
11.应该场合:
TCP | UDP |
要准确无误的传递数据 | 可以接受偶尔的数据包丢失 |
对速度要求不高 | 对速度要求很高 |
QQ语音、视频等 |