E隧道建立過程中經過了NAT,那么HG 10接收到的GRE隧道建立響應報文中的目的IP地址就與HG 1的WAN的IP地址不一樣,S卩X在E。可見,如果HG10接收到的GRE隧道建立響應報文中的目的IP地址和HG 10的WAN的IP地址不同,則HAAP 10確定HG 1和HAAP 20之間經過了 NAT。
[0137]作為另一種情況,如果在GRE隧道建立過程中沒有經過NAT,那么HG10接收到的GRE隧道建立響應報文中的目的IP地址與HG 10的WAN的IP地址是一樣的,S卩X = E。可見,如果HG 10接收到的GRE隧道建立響應報文中的目的IP地址和HG 10的WAN的IP地址相同,則HAAP 1確定HG 1和HAAP 20之間沒有經過NAT。
[0138]如圖5所示,當HAAP 20向HG 10發送GRE隧道建立響應報文后,如果HAAP 20和HG10之間經過了NAT,那么在HAPP 20向HG 10發送的GRE建立響應報文中:DIP = NAT_IP,SIP =T3,SP = 50000,DP = XXXX。這里由于經過了網絡地址轉換,HG 10向HAAP 20發送的GRE隧道請求報文中的GRE隧道的源IP地址經過網絡地址轉換后變為ΝΑΤ-1P。其中,NAT-1P表示經過網絡地址轉換后的GRE隧道的源IP地址。相應地,HAAP 20發送的GRE隧道建立響應報文中的目的IP地址也就為NAT-1P13HG 10接收到的該GRE建立響應報文中:DIP = E,SIP = T3,SP =50000,DP = 50000。由于該GRE隧道建立接收報文中還攜帶了GRE隧道建立請求報文中的經過NAT后的源IP地址(即NAT-1P),這時HG 10就可以通過比較NAT-1P和WAN口的地址(E),來確定HG 10和HAAP 20之間是否經過了NAT。
[0139]也就是說,如果在GRE隧道建立過程中經過了NAT,那么HG 10向HAAP 20發送的GRE隧道請求報文中的GRE隧道的源IP地址就會發生變化。HAAP 20向HG 10發送的GRE建立響應報文中的目的IP地址,就與HG 10接收到的GRE建立響應報文中的GRE隧道的目的IP地址不相同了。
[0140]如果在GRE隧道建立過程中沒有經過NAT,那么GRE建立響應報文中的目的IP地址就為HAAP 20接收到的GRE隧道請求報文中的GRE隧道的源IP地址。HAAP 20向HG 10發送的GRE建立響應報文中的目的IP地址,就與HG 10接收到的GRE建立響應報文中的GRE隧道的目的IP地址相同了。
[0141]因此,HAAP20通過在向HG 10發送的控制消息報文的擴展字段添加IP地址信息,使得HG 10可以利用控制報文進行IP地址比對來探測建立GRE隧道過程中是否經過了 NAT,可以避免強制認為經過NAT而在后續向HAAP 20發送的所有數據報文中都添加UDP報文頭所帶來的不必要的網絡開銷。
[0142]應理解,HAAP 20下掛的HG中,可能部分經過NAT,部分未經過NAT。也可能都不經過NAT或者都經過NAT。另外,HG 10可能在DSL隧道的建立過程中經過NAT,或者在LTE隧道的建立過程中經過NAT。也可能在DSL隧道和LTE隧道中都經過NAT或者都不經過NAT。
[0143]305,GRE隧道建立完成。
[0144]HG 10接收HAAP 20發送的GRE隧道建立接收報文后,根據該GRE隧道建立接收報文,HG 10和HAAP 20之間完成GRE隧道的建立。
[0145]應理解,HG 10和HAAP 20可以先確定在HG 10和HAAP 20之間的GRE隧道的建立過程中是否進行了NAT,之后HG 10根據GRE隧道建立響應報文建立HG 10和HAAP 20之間的該GRE隧道,S卩HAAP 20先執行302后執行303,HG 10先執行304后執行305。這時,如果確定了HG10和HAAP 20之間在建立GRE隧道的過程中進行了NAT,那么就表示HG 10和HAAP 20之間的該GRE隧道是經過NAT的。如果確定了HG 10和HAAP 20之間在建立GRE隧道的過程中沒有進行NAT,那么也就表示HG 10和HAAP 20之間的該GRE隧道是不經過NAT的。
[0146]此外,HG 10還可以先根據GRE隧道建立響應報文建立HG 10和HAAP 20之間的該GRE隧道,之后HG 1和HAAP 20確定HG 1和HAAP 20之間的該GRE隧道是否經過了 NAT,即HAAP 20先執行303后執行302,HG 10先執行305后執行304。
[0147]可選地,如圖3所示,在GRE隧道建立完成之后,HG 10和HAPP 20之間可以相互發送數據報文,即執行306或307。
[0148]306,HG 10向HAAP 20發送數據報文。
[0149]具體地,如果HG 10確定HG 10和HAAP 20之間經過了該NAT,則當HG 10在建立好的GRE隧道上向HAAP 20發送數據報文時,該數據報文中需要包括用戶數據協議UDP頭。該UDP頭可以包括GRE隧道的端口號(port)和GRE隧道的IP地址,GRE隧道的端口號和IP地址可以被HAAP 20用來識別該數據報文所屬的HG。因為不同的HG,對于HAAP 20來說,GRE隧道的源IP可能相同。其中,該IP地址包括源IP地址和目的IP地址。GRE隧道的源IP地址為該GRE隧道在HG 10上的隧道端口的IP地址。GRE隧道的目的IP地址為該GRE隧道在HAAP 20上的隧道端口的IP地址
[0150]307,HAAP 20向HG 10發送數據報文。
[0151]具體地,如果HAAP 20確定HG 10和HAAP 20之間經過了該NAT JljiHAAP 20在建立好的GRE隧道上向HG 10發送數據報文時,該數據報文中同樣需要添加UDP頭,該UDP頭可以包括該GRE隧道的端口號和GRE隧道的IP地址。其中,該IP地址包括源IP地址和目的IP地址。GRE隧道的源IP地址為該GRE隧道在HAAP 20上的隧道端口的IP地址。GRE隧道的目的IP地址為301中HAAP 20接收到的GRE隧道建立請求報文中的源IP地址。
[0152]圖6是本發明實施例的GRE數據報文格式的示意圖。如果NAT探測的結果為沒有經過NAT,則后續GRE數據報文可以不添加UDP頭。如果NAT探測的結果是經過NAT,在封裝數據報文時,可以增加UDP頭,該UDP頭的封裝方式可以和控制報文一致。例如,該數據報文可以包括:
[0153]源端口號(Source Port,簡稱“SP”):默認50000,支持通過配置修改。
[0154]目的端口號(DestPort,簡稱“DP”):默認50000,支持通過配置修改。
[0155]負載(payload)字段:承載源IP地址和目的IP地址。
[0156]校驗和(checksum):這里設置為O,表示不進行校驗。
[0157]此外,UDP報文頭中的其他字段和圖4中的GRE隧道建立請求報文格式中的相關字段相同,具體可以參照對圖4的描述。為了簡潔,這里不再贅述。
[0158]現在結合圖7具體描述HG 10和HAAP 20之間GRE數據報文傳輸的示意圖。圖7是本發明實施例的經過NAT時GRE數據報文格式的示意圖。如圖7所示,以在DSL隧道上進行數據報文傳輸為例進行說明。當PC 30需要向Internet 80發送數據報文時,在PC 30中數據報文的 Payload 字段包括 DIP 和 SIP,其中,DIP = Internet,SIP = PC。
[0159]如果GRE隧道建立過程中經過了網絡地址轉換,當HG 10向HAAP 20發送數據報文時,數據報文中除了Payload部分外,還需要為數據報文添加UDP頭。此時,HG 10中,數據報文的Payload字段包括SIP = Tl,DIP = Internet;數據報文的UDP頭部分包括GRE隧道的端口號和GRE隧道的IP地址。HAAP 20可以根據該端口號和該IP地址確定該數據報文所屬的HG。
[0160]例如,在HG10向HAAP 20發送的數據報文中:DIP = T3,SIP = D,SP = 50000,DP =50000。其中,D為WAN 口的IP地址,T3為建立GRE隧道使用的目的地址。由于經過了NAT,在HAAP 20接收到的HG 10發送的包括UDP頭的該數據報文中:DIP = T3,SIP = NAT-1P,SP =XXXX,DP = 50000。可以看出,該GRE控制報文中的SIP由SIP = E變為SIP = NAT-1P。其中,NAT-1P表示經過網絡地址轉換后的源IP地址。Internet 80接收到的數據報文中:DIP =Internet,SIP = Tl ο
[0161]當Internet80需要向PC 30發送數據報文時,數據報文的Payload字段中包括DIP= Internet, SIP = T1。如果HG 10和HAAP 20之間經過了網絡地址轉換,那么HAAP 20向HG10發送數據報文時,該數據報文中除了Payload部分外,也需要添加UDP頭。此時,HAAP 20向HG 10發送的數據報文中Payload字段包括DIP = T1,SIP = Internet;數據報文中的該UDP頭包括GRE隧道的端口號和GRE隧道的IP地址。其中,該GRE隧道的IP地址包括目的IP地址和源IP地址。該GRE隧道的目的IP地址等于HAAP 20接收到的GRE隧道建立請求報文中的源IP地址。該GRE隧道的源IP地址為該GRE隧道在HAAP 20上的隧道端口的IP地址。
[0162]例如,在HAAP20向HG 10發送的數據報文中:DIP = NAT_IP,SIP = T3,SP = 50000,DP = XXXX。由于經過了NAT,在HG 10接收到的HAAP 20發送的包括UDP頭的該數據報文中:DIP = D,SIP = T3,SP = 50000,DP = 50000。可以看出,該GRE控制報文中的DIP由DIP = NAT-1P變為SIP = D JC 30接收到的數據報中文DIP = Tl,SIP = Internet。
[0163]因此,本發明實施例所述的建立GRE隧道的方法,通過增加控制消息報文來探測建立GRE隧道過程中是否經過了 NAT,并且只針對經過NAT時在數據報文轉發過程中對數據報文進行處理,從而降低了鏈路帶寬和損耗。
[0164]由于在GRE隧道建立過程中只在確定HG 10和HAPP 20之間經過NAT時才對數據報文添加UDP頭,避免了對所有數據報文都添加UDP頭帶來的不必要的網絡開銷。
[0165]應理解,本發明實施例中的HG 10和HAAP 20同時也可以支持強制NAT,即不經過探測而強制認為網絡中存在NAT,在無論網絡中是否經過NAT時都對數據報文添加UDP頭,本發明對此不做限定。
[0166]還應理解,上述各過程的序號的大小并不意味著執行順序的先后,各過程的執行順序應以其功能和內在邏輯確定,而不應對本發明實施例的實施過程構成任何限定。
[0167]上文中結合圖3至圖7,詳細描述了根據本發明實施例的建立GRE隧道的方法,下面將結合圖8和圖9,詳細描述根據本發明實施例的家庭網關10和混合鏈路聚合節點服務器
20 ο
[0168]圖8是本發明一個實施例的家庭網關10的結構框圖。圖8所示的HG10能夠用于執行前述圖3的方法實施例中由HG 10所實現的各個過程。如圖8所示,該家庭網關10包括發送模塊801、接收模塊802和確定模塊803。
[0169]發送模塊801,用于向混合鏈路聚合節點HAAP20發送通用路由封裝GRE隧道建立請求報文,所述GRE隧道建立請求報文包括第一 IP地址,所述第一 IP地址為HG 10的廣域網WAN的互聯網協議IP地址;
[0170]接收模塊802,用于接收HAAP20發送的GRE隧道建立響應報文,所述GRE隧道建立響應報文包括第二IP地址,所述第二IP地址為HAAP 20接收到的所述GRE隧道建立請求報文中的源IP地址;
[0171 ]確定模塊803,用于根據接收模塊802接收的所述GRE建立響應報文,建立所述HG和所述HAAP之間的所述GRE隧道,并根據所述第一IP地址和所述第二IP地址,確定HG 10和HAAP 20之間的所述GRE隧道是否進行了網絡地址轉換NAT。
[0172]因此,本發明實施例所述的家庭網關10,通過接收混合鏈路聚合節點20發送的擴展字段攜帶IP地址信息的探測報文,從而利用控制報文進行IP地址比對來實現