穿越NAT的SDWAN技术实现(中)

电子说

1.3w人已加入

描述

本文章内容过长,上篇请移步主页进行观看。

书接上文,我们继续来说说NAT在SDWAN中的技术实现。

STUN报文结构

STUN基于UDP传输协议报文,协议报文的封装格式如下图所示。

图STUN报文结构

NAT

如下图所示,STUN消息(STUN Message)包括STUN消息头和STUN消息属性两部分。STUN消息头的长度为20字节,后面跟着零个或多个属性。

图STUN消息结构

NAT

STUN消息头包含如下字段:

STUN Message Type:STUN消息类型,长度为14比特。当前仅支持STUN捆绑请求和STUN捆绑响应两种类型的消息。

Message Length:STUN消息长度,长度为16比特(不包括消息头长度)。

Magic Cookie:魔术字,长度为32比特。魔术字包含固定值0x2112A442,用于STUN服务器检测STUN客户端是否可以识别特定属性。此外,当STUN与其他协议使用相同的端口号时,通过魔术字可以将STUN和其他协议区分开。

Transaction ID:事务ID,长度为96比特,用于唯一标识一次STUN探测。事务ID由STUN客户端来选择。在一次STUN探测中,STUN服务器收到STUN客户端发送的STUN捆绑请求消息后,回复的STUN捆绑响应消息的事务ID与STUN捆绑请求消息的事务ID相同。同时,STUN服务器根据事务ID来唯一标识STUN客户端的不同探测请求。

STUN消息属性采用TLV(Type/Length/Value,类型/长度/值)格式,结构如图所示。其中,Type和Length字段的长度均为16比特,Value字段的长度可变。

图STUN消息属性结构

NAT

常见的STUN消息属性包括如下几种:

CHANGE-REQUEST:捆绑请求中携带的消息属性,STUN客户端使用此属性来请求STUN服务器改变发送捆绑响应报文的IP地址、端口号。

MAPPED-ADDRESS:捆绑响应中携带的消息属性,表示经过地址转换后的STUN客户端的IP地址和端口。

XOR-MAPPED-ADDRESS:捆绑响应中携带的消息属性,表示经过地址转换后的STUN客户端的IP地址和端口。与MAPPED-ADDRESS不同的是,XOR-MAPPED-ADDRESS属性中携带的IP地址经过了异或(XOR)处理。

RESPONSE-ORIGIN:捆绑响应中携带的消息属性,表示STUN服务器发送数据的IP地址和端口。

OTHER-ADDRESS:捆绑响应中携带的消息属性,表示STUN服务器的另一个IP地址和端口号。假设STUN服务器的IP地址为Y1,替代IP地址为Y2,端口号为YP1,替代端口号为YP2。Da表示STUN客户端发送捆绑请求的目的IP地址,Dp表示STUN客户端发送捆绑请求的目的端口号。如果Da为Y1,那么OTHER-ADDRESS中的IP地址为Y2;如果Da为Y2,那么OTHER-ADDRESS中的IP地址为Y1。如果Dp为YP1,那么OTHER-ADDRESS中的端口号为YP2;如果Dp为YP2,那么OTHER-ADDRESS中的端口号为YP1。当STUN客户端要求STUN服务器使用不同的IP地址发送捆绑响应时,如果Da为Y1,则捆绑响应报文OTHER-ADDRESS中的IP地址为Y2;如果Da为Y2,则OTHER-ADDRESS中的IP地址为Y1。类似地,当STUN客户端要求STUN服务器使用不同的端口号发送捆绑响应时,如果Dp为YP1,那么OTHER-ADDRESS中的端口号为YP2;如果Dp为YP2,那么OTHER-ADDRESS中的端口号为YP1。

STUN工作机制

STUN客户端通过和STUN服务器交互STUN协议报文,探测网络中NAT设备上的NAT映射的类型和NAT过滤的方式,并根据探测结果判断NAT类型。

1. NAT映射类型探测

假设STUN服务器进行STUN探测使用的IP地址为Y1、Y2,端口号为YP1、YP2。STUN客户端的IP地址和端口号为(X,XP)。STUN进行NAT映射探测的流程如下图所示,具体步骤为:

(1)     STUN客户端以Endpoint(X,XP)为源地址和源端口向STUN服务器的外网Endpoint(Y1,YP1)发送捆绑请求。STUN服务器使用Endpoint(Y1,YP1)给STUN客户端发送捆绑响应,响应内容包括:STUN客户端经过NAT映射后的外网Endpoint(X1,XP1),以及STUN服务器的另一个外网Endpoint(Y2,YP2)。

(2)     STUN客户端收到STUN服务器发送的捆绑响应报文后,判断NAT映射后的Endpoint(X1,XP1)是否与内网Endpoint(X,XP)相同:

a.     如果Endpoint(X1,XP1)与Endpoint(X,XP)相同,则SUTN客户端认为不存在NAT映射。

b.     如果Endpoint(X1,XP1)与Endpoint(X,XP)不同,则STUN客户端使用第(3)步进行探测。

(3)     STUN客户端以Endpoint(X,XP)向STUN服务器的外网Endpoint(Y2,YP1)发送捆绑请求。STUN服务器使用Endpoint(Y2,YP1)向STUN客户端发送捆绑响应,响应内容包括:STUN客户端经过NAT映射后的外网Endpoint(X2,XP2)。

(4)     STUN客户端收到STUN服务器发送的捆绑响应报文后,判断NAT映射后的Endpoint(X2,XP2)是否与第(1)步中NAT映射后的Endpoint(X1,XP1)相同:

a.     如果Endpoint(X2,XP2)与Endpoint(X1,XP1)相同,则STUN客户认为NAT映射类型为EIM。

b.     如果Endpoint(X2,XP2)与Endpoint(X1,XP1)不同,则STUN客户端使用第(5)步进行探测。

(5)     STUN客户端以Endpoint(X,XP)向STUN服务器的外网Endpoint(Y2,YP2)发送捆绑请求。STUN服务器使用Endpoint(Y2,YP2)向STUN客户端发送捆绑响应,响应内容包括:STUN客户端经过NAT映射后的外网Endpoint(X3,XP3)。

(6)     STUN客户端收到STUN服务器发送的捆绑响应报文后,判断NAT映射后的Endpoint(X3,XP3)是否与第(3)步中NAT映射后的Endpoint(X2,XP2)相同:

a.     如果Endpoint(X3,XP3)与Endpoint(X2,XP2)相同,则STUN客户认为NAT映射类型为ADM。

b.     如果Endpoint(X3,XP3)与Endpoint(X2,XP2)不同,则STUN客户认为NAT映射类型为APDM。

NAT映射类型探测流程图

NAT

2. NAT过滤方式探测

假设STUN服务器的IP地址为Y1,替代IP地址为Y2,端口号为YP1,替代端口号为YP2。STUN客户端的IP地址和端口号为(X,XP)。STUN进行NAT映射探测的流程如下图所示,具体步骤为:

(1)     STUN客户端以Endpoint(X,XP)为源地址和源端口向STUN服务器的外网Endpoint(Y1,YP1)发送捆绑请求,请求报文中携带CHANGE-REQUEST属性,要求STUN服务器改变IP地址和端口号来发送捆绑响应。STUN服务器使用Endpoint(Y2,YP2)向STUN客户端发送捆绑响应。

(2)     STUN客户端根据是否能收到响应报文进行如下判断:

a.     如果STUN客户端收到了捆绑响应报文,则STUN客户端认为NAT过滤类型为EIF。

b.     如果STUN客户端未收到捆绑响应报文,则STUN客户端使用第(3)步进行探测。

(3)     STUN客户端以Endpoint(X,XP)向STUN服务器的外网Endpoint(Y1,YP1)发送捆绑请求,请求报文中携带CHANGE-REQUEST属性,要求STUN服务器改变端口号来发送捆绑响应。STUN服务器使用Endpoint(Y1,YP2)给STUN客户端发送捆绑响应。

(4)     STUN客户端根据是否能收到响应报文进行如下判断:

a.     如果STUN客户端收到了捆绑响应报文,则STUN客户端认为NAT过滤类型为ADF。

b.     如果STUN客户端未收到捆绑响应报文,则STUN客户端认为NAT过滤类型为APDF。

图NAT过滤方式探测流程图

NAT

STUN客户端重传机制

STUN基于UDP传输协议报文,STUN协议报文有可能在传输过程中被丢弃。通过STUN客户端的重传机制可以提高STUN协议报文传输的可靠性。具体机制如下:

(1)     STUN客户端发送捆绑请求报文后,如果在一定时间没有收到捆绑响应报文,STUN客户端会以一定的时间间隔重传捆绑请求报文。

(2)     当STUN客户端收到捆绑响应报文,或者STUN报文的重传次数达到最大,STUN客户端将停止重传。

(3)     如果STUN客户端重传STUN报文的次数达到最大后,还未收到捆绑响应报文,则STUN客户端认为捆绑请求报文传输失败,无法进行STUN探测。

(部分内容素材来源网络,侵权请联系删除)

审核编辑 黄昊宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分