L2TP协商过程中的NS、NR的分析
来源:华佗健康网
L2TP协商过程中的NS、NR的分析
RFC有关L2TP报文协商中NR、NS的介绍是全英文的,没耐心看,百度查了很多资料都没有找到它们详细使用过程,所以抓包和看代码来研究,把我研究的结果记录下来,希望能帮助到初接触L2TP的人。 NS 0 1 2 3 1 1 2 1 1 2 LAC NR 0 NS 0 LNS NR 1 2 3 4 SCCRQ SCCRP SCCCN ZLB ICRQ ICRP ICCN ZLB
现在先解释一下NS、NR:
NS:指明数据消息或控制消息的序列号,从0开始每发送一个消息加1。
NR:表明所要收到的下一个控制消息中‘预定’的序列号,因此NR被设为所接收到的最后一个消息的NS加1。
下面是我个人的理解:
NR、NS初始值都是0。LNS端收到报文后先NR+1,然后组装报文后再NS+1,由
于组装时使用的是没加1之前的NS,所以NS+1只有下一个报文中体现出。
例如:上面表格中LNS收到SCCRQ报文后NR=0+1,组装报文时NS=0,NR=0+1,
组装完后NS=0+1,所以发送报文时SCCRP中NS=0,NR=0+1。
现在特别说一下ZLB报文,这个报文比较特殊,收到或发送ZLB报文,NR和NS
都不做处理,即不对其进行加1操作。而LNS中发送ZLB报文中的NS会比上一个包大1,原因就是我上面解释的由于组装时使用的是没加1之前的NS,所以NS+1只有下一个报文中体现出。
总结:
1:收到报文后NR+1,发送报文后NS+1。
2:收到ZLB报文NR不变,发送ZLB报文NS不变。
因篇幅问题不能全部显示,请点此查看更多更全内容