实现可靠UDP通信的两种方式

实现可靠UDP通信的两种方式

众所周知UDP通信协议是不可靠的通信协议,其可靠性必须由上层应用实现。一般都会采用消息重传来实现其可靠性,采用消息重传的时候有两种方式,一种是发送者发起,另一种是接收者发起。

对于发送者发起的方式,一般情况下接收者会发送一个消息包的确认。发送者维护一个计时器并重传那些在某个确定的时间段里没有收到确认的消息包。这一类型的协议容易引起发送者溢出,因为要确认每一个发送的消息包。这种溢出现象被称为发送者(或者ACK)内爆。

对于接收者发起的方式,通信双方的接收者负责错误检测。在这个方式里,序列号被用于检测消息包丢失。当检测到消息包丢失,接收者请求发送者重传消息包。采用这种方法,如果消息包没有到达任何一个接收者,发送者容易因NACK溢出。这会引起发送者的负载过高和过多的重传。这种现像被称为NACK内爆。Ramakrishnan et al.在1987年提出可以使用定时器来限制消息包重传,从而避免NACK内爆。在现实应用中这种方式使用得较多。

你可能感兴趣的:(综合)