本文已参与「新人创作礼」活动,一起开启掘金创作之路。
UDP协议和TCP协议都是传输层协议。
TCP
TCP(Transmission Control Protocol,传输控制协议)提供的是面向连接的、可靠的字节流服务,即客户和服务器交换数据前,必须先在双方之间建立一个TCP连接,才能传输数据,并提供超时重发、丢弃重复数据、检验数据、流量控制等功能,保证数据能从一端传到另一端。(对失序数据包能重新排序、应答机制) 一个TCP连接必须要经过三次对话才能建立起来。
UDP
UDP(User Data Protocol,用户数据报协议)是一个面向数据报的传输层协议。他不提供可靠性,只是把应用程序传给IP层的数据包发送出去,但是不能保证他们能否到达目的地,由于UDP在传输数据前不用再跟客户建立一个连接,且没有超时重发机制,所以传输很快,多播服务。
基于UDP协议是无连接模式通讯的,占用资源少,响应速度快,延时低。
由于传输数据不需要建立连接,因此也就不需要维护连接状态,包括手法状态等,因此一台服务机可同时向多个客户机传输相同的信息。
UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输宽带、源端和终端主机性能的限制。
UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表。
UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
我们经常使用“ping”命令来测试两台主机之间TCP/IP通信时候正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包到达的消息及时反馈回来,那么网络就是通的。
ping命令是用来检测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping命令是使用ip和网络控制信息协议(ICMP),因而没有涉及到任何传输协议(UDP/TCP)和应用程序。他发送ICMP回送消息给源主机。如果源主机在一定时间内收到应答,则认为主机可到达。
TCP和UDP的区别
- 基于连接和无连接
- 对系统资源的要求(TCP多,UDP少)
- UDP程序结构简单
- 流模式与数据报模式
- TCP保证数据正确性,UDP可能丢包
- TCP保证数据顺序,UDP不保证