ICE中地址对重发探测机制

本文深入解析了ICE协议在网络通信中如何处理non_symmetric_NAT环境下的数据包发送与接收过程。重点阐述了一端A向另一端B发送数据包时,尽管B端未完成打孔,但A端的请求仍能为后续B端的响应包打通路径,形成有效的数据传输通道。文章详细解释了在特定条件下,如检查状态处于IN_PROGRESS时,将触发数据包的立即重传,进而建立valid_pair,实现稳定的数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 if (c->state == PJ_ICE_SESS_CHECK_STATE_WAITING)
 {


     /* See if we shall nominate this check */
     pj_bool_t nominate = (c->nominated || ice->is_nominating); 

     LOG5((ice->obj_name, "Performing triggered check for check %d",i));
     pj_log_push_indent();
     perform_check(ice, &ice->clist, i, nominate);
     pj_log_pop_indent();

 } else if (c->state == PJ_ICE_SESS_CHECK_STATE_IN_PROGRESS) {
     /* Should retransmit immediately
      */
     LOG5((ice->obj_name, "Triggered check for check %d not performed "
    "because it's in progress. Retransmitting", i));
     pj_log_push_indent();
     pj_stun_session_retransmit_req(comp->stun_sess, c->tdata, PJ_FALSE);
     pj_log_pop_indent();

上面程序能够走到这一步,说明双方都应该是处在non_symmertric_NAT之下!

一端A之前发包到另一端B,由于之前另一端B并没有打孔。所以一端A的请求并不能够进入另一端B。但是A的这个发包其实给B后来的发包打了孔!!!

当B向A发包的时候,由于有了孔,因此包可以进行穿越。当A收到B的包时,因为在之前B进行发包被丢弃,但是这个地址对的状态执行perform_check之后变成了IN_PROGRESS状态。因此根据上述的条件会进行立即重发处理!此时也就会形成一个valid_pair!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值