Socket通讯的TCP和UDP

141 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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不保证