一、Tcp协议
TCP协议(控制传输协议)是为应用层提供可靠的、面向连接的和基于流式的服务。
可靠:TCP协议使用超时重传、数据确认等方式来确保数据包被正确地发送至目的端。
面向连接:使用TCP协议协议的双方必须要建立tcp连接,并在内核中为该链接维持创造一些必要的数据结构,比如连接的状态、读写缓冲区以及诸多定时器等,当双方通信结束时,双方必须关闭链接以释放这些内核数据。
流式的:基于流式的服务,数据长度没有边界,它可以源源不断地从一端写另一端读。
这就产生了粘包问题。
粘包问题:
简单得说,在流传输中出现,UDP不会出现粘包,因为它有消息边界
1发送端需要等缓冲区满才发送出去,造成粘包
2接收方不及时接收缓冲区的包,造成多个包接收。
问题解决:
1、约定好发送,在利用tcp进行通信时,一端进行发送,一端进行接收,接收完成后断开链接。
2、加数据长度,在发送数据时加上数据长度,读的时候根据长度读。
二、udp协议
UDP协议(用户数据报协议)提供不可靠的、无链接和基于数据报的服务。
不可靠体现在UDP协议无法保证数据正确的从客户端发送到服务端,如果数据在中途丢失,或者目的端通过数据监测发现数据错误而将其丢弃,UDP协议只是简单的通知客户端发送失败,因此使用UDP协议的应用程序通常要自己处理数据校验和超时重传等机制。
基于数据报的服务,相对于流式而言的。每个数据报都有一个长度,接收端必须根据该长度将内容一次性读出,否则数据将被截断。