首页 > 代码库 > tcp与udp的区别
tcp与udp的区别
tcp与udp基本区别
1、基于连接和无连接
2、tcp要求系统资源较多,udp较少
3、udp程序结构较简单
4、流模式(tcp)与数据报模式(udp)
5、tcp保证数据正确性,udp可能丢包
6、tcp保证数据顺序,udp不保证
udp应用场景
1、面向数据报方式
2、网络数据大多为短消息
3、拥有大量的client
4、对数据安全无特殊要求
5、网络负担非常重,但对响应速度要求高
具体编程时的区别
1、socket()的参数不同
2、udp server不需要调用listen和accept
3、udp收发数据用sendto/recvfrom函数
4、tcp:地址信息在connect/accept时确定
5、udp:在sendto/recvfrom函数中每次均需指定地址信息
6、udp:shutdown函数无效
编程区别
通常在说到网络编程时默认是指tcp编程,即用socket函数创建一个socket用于tcp通讯,函数参数我们通常填为SOCKET_STREAM。即socket(PF_INET,SOCK_STREAM,0),这表示建立一个socket用于流式网络通讯。
SOCKET_STREAM这种的特点是面向连接的,即每次收发数据之前必须通过connect建立连接,也是双向的,即任何一方都可以收发数据,协议本身提供了一些保障机制保证它是可靠的、有序的,即每个包按照发送的顺序到达接收方。
而SOCKET_DGRAM这种是User Datagram Protoco协议的网络通讯,它是无连接的,不可靠的,因为通讯双方发送数据后不知道对方是否已经收到数据,对否正常收到数据。任何一方建立一个socket以后就可以用sendto发送数据,也可以用recvfrom接受数据,根本不关心对方是否存在,是否发送了数据。它的特点是通讯速度比较快。大家都知道tcp是要经过三次握手的,而udp没有。
基于上述的不同,udp和tcp编程步骤也有些不同,如下:
tcp:
tcp编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定ip地址、端口等信息到socket上,用函数bind();
4、开启监听,用函数listen();
5、接受客户端上来的连接,用函数accept();
6、收发数据,用函数send()和recv()或者read()和write();
7、关闭网络连接;
8、关闭监听;
tcp编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定ip地址、端口等信息到socket上,用函数bind();
4、设置要连接的对方的ip地址和端口等属性;
5、连接服务器,用函数connect();
6、收发数据,用函数send()和recv()或者read()和write();
7、关闭网络连接;
udp:
与之对应的udp编程步骤要简单许多,分别如下:
udp编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定ip地址、端口等信息到socket上,用函数bind();
4、循环接受数据,用函数recvfrom();
5、关闭网络连接;
udp编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定ip地址、端口等信息到socket上,用函数bind();
4、设置对方的ip地址和端口等属性;
5、发送数据用sendto();
6、关闭网络连接;
tcp和udp是OSI模型中的运输层中的协议。tcp提供可靠的通信传输,而udp则常被用于让广播和细节控制交给应用的通信传输。
udp补充:
tcp补充:
tcp与udp区别总结:
1、tcp面向连接;udp是无连接的,即发送数据之前不需要建立连接
2、tcp提供可靠的服务。也就是说,通过tcp连接传送的数据无差错、不丢失、不重复且按序到达;udp尽最大努力交付即不保证可靠交付。
3、tcp面向字节流,实际上是tcp把数据看成一连串无结构的字节流;udp是面向报文的,udp没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如ip电话,实时视频会议等)
4、每一条tcp连接只能是点到点的;udp支持一对一,一对多,多对一和多对多的交互通信
5、tcp首部开销20字节;udp的首部开销小,只有8字节
6、tcp的逻辑通信信道是全双工的可靠信道;udp则是不可靠信道
tcp与udp的区别