电子说
本文章内容过长,上篇请移步主页进行观看。
书接上文,我们继续来说说NAT在SDWAN中的技术实现。
STUN报文结构
STUN基于UDP传输协议报文,协议报文的封装格式如下图所示。
图STUN报文结构
如下图所示,STUN消息(STUN Message)包括STUN消息头和STUN消息属性两部分。STUN消息头的长度为20字节,后面跟着零个或多个属性。
图STUN消息结构
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消息属性结构
常见的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映射类型探测流程图
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过滤方式探测流程图
STUN客户端重传机制
STUN基于UDP传输协议报文,STUN协议报文有可能在传输过程中被丢弃。通过STUN客户端的重传机制可以提高STUN协议报文传输的可靠性。具体机制如下:
(1) STUN客户端发送捆绑请求报文后,如果在一定时间没有收到捆绑响应报文,STUN客户端会以一定的时间间隔重传捆绑请求报文。
(2) 当STUN客户端收到捆绑响应报文,或者STUN报文的重传次数达到最大,STUN客户端将停止重传。
(3) 如果STUN客户端重传STUN报文的次数达到最大后,还未收到捆绑响应报文,则STUN客户端认为捆绑请求报文传输失败,无法进行STUN探测。
(部分内容素材来源网络,侵权请联系删除)
审核编辑 黄昊宇
全部0条评论
快来发表一下你的评论吧 !