tcp 2

70 阅读2分钟

TCP/IP / 如何保证数据包传输的有序可靠?

对字节流分段并进行编号然后通过 ACK 回复和超时重发这两个机制来保证。

(1)为了保证数据包的可靠传递,发送方必须把已发送的数据包保留在缓冲区; 并为每个已发送的数据包启动一个超时定时器; 如在定时器超时之前收到了对方发来的应答信息(可能是对本包的应答,也可以是对本包后续包的应答),则释放该数据包占用的缓冲区; 否则,重传该数据包,直到收到应答或重传次数超过规定的最大次数为止。 接收方收到数据包后,先进行CRC校验,如果正确则把数据交给上层协议,然后给发送方发送一个累计应答包,表明该数据已收到,如果接收方正好也有数据要发给发送方,应答包也可方在数据包中捎带过去。 TCP和UDP的区别

TCP是面向链接的,而UDP是面向无连接的。 TCP仅支持单播传输,UDP 提供了单播,多播,广播的功能。 TCP的三次握手保证了连接的可靠性; UDP是无连接的、不可靠的一种数据传输协议,首先不可靠性体现在无连接上,通信都不需要建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收。 UDP的头部开销比TCP的更小,数据传输速率更高,实时性更好。 粘包问题分析与对策

CP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

粘包出现原因

简单得说,在流传输中出现,UDP不会出现粘包,因为它有消息边界

粘包情况有两种,一种是粘在一起的包都是完整的数据包,另一种情况是粘在一起的包有不完整的包。