SIP协议之NACK(Negative Acknowledgement)
在SIP/VoIP应用中,NACK(Negative Acknowledgement,否定确认)是弱网环境中的一种丢包重传机制。
一、实现原理
接收端检测到RTP媒体包丢失时,通过RTCP消息主动向发送端发送NACK请求,要求重传缺失序列号的RTP数据包。
相比传统TCP的重传机制(依赖ACK超时),NACK响应更快,更适合实时性要求高的场景
二、NACK的优化实践
2.1 重传机制
如果首轮发送NACK请求后,未收到响应时,接收端在更短间隔内发送第二轮请求,提升重传成功率,也称为两轮重传机制。
2.2 带宽考虑
NACK触发重传可能导致瞬时带宽压力,在丢包严重时,需结合动态码率或分辨率调整避免拥塞。
三、关键说明
- 在弱网环境下(如高丢包率),NACK通过选择性重传减少卡顿,避免媒体流中断
- 可与FEC(前向纠错)互补使用,FEC预防性修复小规模丢包,NACK修复关键大包
- FEC一般使用私有协议,不同厂家之间不通用。而NACK相对通用,只要双方都支持就可以使用
- NACK适用少量丢包,重传增加延迟,超重度弱网下效果有限,如果丢包严重,NACK反而会增加丢包压力
- 需接收端主动发起,单向广播场景不适用