博主未授權任何人或組織機構轉載博主任何原創文章,感謝各位對原創的支持!
博主鏈接
本人就職于國際知名終端廠商,負責modem芯片研發。
在5G早期負責終端數據業務層、核心網相關的開發工作,目前牽頭6G算力網絡技術標準研究。
博客內容主要圍繞:
???????5G/6G協議講解
???????算力網絡講解(云計算,邊緣計算,端計算)
???????高級C語言講解
???????Rust語言講解
文章目錄
- GTP-U協議介紹
- 一、GTP-U協議棧介紹
- 1.1 數據傳輸協議棧
- 1.2 信令傳輸協議棧
- 二、GTP-U Header介紹
- 2.1 固定部分
- 2.2 擴展字段
- 三、擴展頭介紹
- 3.1 NR相關的擴展頭介紹
- 四、控制相關的信令
- 4.1 路徑管理消息
- 4.2 隧道管理消息
- 參考
GTP-U協議介紹
一、GTP-U協議棧介紹
1.1 數據傳輸協議棧
T-PDU(Transport PDU):用戶數據包,如IP數據報,是指終端與外部包數據網絡中的網絡實體之間發送的用戶數據包。
G-PUD(GTP encapsulated user Plane Data Unit):用戶數據包(T-PDU)加上GTP-U報頭,在GTP網絡節點之間發送的數據包。
用戶數據包(T-PDU)封裝上GTP-U包頭之后,通過UDP/IP發送出去。
1.2 信令傳輸協議棧
IE:Information Element
使用傳輸GTP-U路徑和隧道管理相關的消息,不同的消息類型具有不同的數據結構,將這些不同的數據結構統稱為IE。
NOTE
:在實現的時候,需要注意GTP-U具有熟知目標端口號2152。
二、GTP-U Header介紹
GTP-U的頭由兩部分組成,第一部分是固定部分,長度為8 bytes;第二部分是擴展部分,根據第一部分相關flag的值,確實是否存在或者有效。下面先介紹固定部分的參數含義。
2.1 固定部分
固定部分的長度為8 bytes,如下圖所示部分:
其中,
-
Version field:指示GTP-U協議版本,目前固定是1;
-
Protocol Type(PT):用于區分GTP和GTP’ 協議,對于GTP協議來說設置為1,GTP’ 協議設置為0;
-
Extension Header flag(E):指示Next Extension Header Type字段是否有效;
-
Sequence number flag(S):指示Sequence Number字段是否有效;
-
N-PDU Number flag(PN):指示N-PDU Number字段是否有效;
-
Message Type:指示GTP-U消息的類型,支持的消息類型如下;
-
Length:指示GTP-U消息的長度,單位是byte,長度不包括固定字段(即前8 bytes)。如果存在擴展字段,則應該計算到Length中;
-
Tunnel Endpoint Identifier(TEID):唯一標識一個GTP隧道的端點。此值由接收端分配,通過控制平面消息傳輸給發送端。發送端在發送消息時攜帶接收端的TEID,標識此消息是發送給那個接收端。通常情況下不應該為0,但是為了后向兼容,如果接收端通知TEID為0,發送端也要視為正常情況處理。對于Echo Request/Response、Supported Extension Headers notification、Error Indication消息,需要將TEID設置為0;
2.2 擴展字段
GTP-U有3個擴展字段,
其含義如下:
- Sequence Number:因為UDP不支持按序傳輸,為了支持按序傳輸,需要通過該字段為每個G-PDU消息增加序號;
- N-PDU Number:該字段用于SGSN間路由區域更新過程和一些系統間切換過程(例如,2G和3G無線接入網絡之間)。該字段用于協調MS和SGSN之間的公認通信模式的數據傳輸。該字段的確切含義取決于具體場景(例如,對于GSM/GPRS到GSM/GPRS,SNDCP N-PDU號在這個字段中);
- Next Extension Header Type:指示此字段后面的擴展頭類型,支持的擴展類型值如下所示;
NOTE
:如果E、S、PN中的任意一個字段有效(置為1),則上述擴展字段都會出現,但只有有效字段對應的擴展字段的值才有意義。例如E=1,S=0,PN=0,則Sequence Number、N-PDU Number和Next Extension Header Type都存在,但是只有Next Extension Header Type的值有意義。
三、擴展頭介紹
擴展頭的消息結構如下:
- Extension Header Length:指示特定擴展頭的長度,其長度是4的倍數,即以4字節為單位;
- Extension Header Content:由具體的擴展頭類型確定;
- Next Extension Header Type:指示此字段后面的擴展頭類型,如果沒有此值應該為0;
3.1 NR相關的擴展頭介紹
擴展頭 | 含義 |
---|---|
UDP Port | 在Error Indication消息中指示發送此錯誤消息的端口號 |
PDCP PDU Number | 在NR中用于基于Xn和N3切換中的數據轉發 |
Long PDCP PDU Number | 在NR中用于基于Xn和N3切換中的數據轉發,對應于PDCP SN長度為18bit |
NR RAN Container | 這個擴展頭可以在G-PDU中通過NG-RAN中的X2-U、Xn-U和F1-U用戶平面接口傳輸,對于EN-DC來說,可以在E-UTRAN中傳輸。帶有這個擴展頭的G-PDU消息可以在沒有T-PDU的情況下發送 |
PDU Session Container | 這個擴展頭可以在N3和N9用戶平面接口,即NG-RAN和UPF之間或兩個UPF之間傳輸 |
四、控制相關的信令
GTP-U隧道用于在給定的一對GTP-U隧道端點之間攜帶封裝的T-PDU和信令消息。GTP頭中的TEID指示一個特定的T-PDU屬于哪個隧道。通過這種方式,可以在一對隧道端點之間通過GTP-U復用和解復用數據包。TEID的值會在GTP-C創建PDP上下文和RAB分配過程中進行協商。
GTP-U信令消息分為路徑管理消息和隧道管理消息。
4.1 路徑管理消息
- Echo Request/Echo Response:GTP-U端可能會在路徑上向另一端發送一個Echo請求,以確定另一端是否還活著(參見“路徑失敗”一節)。可以為使用中的每個路徑發送Echo請求消息。如果至少有一個PDP上下文、EPS Bearer上下文、PDU Session上下文、MBMS UE上下文或MBMS Bearer上下文使用了到另一端GTP-U的路徑,則認為該路徑已被使用。發送Echo請求消息的時間和頻率取決于具體的實現,但在每個路徑上發送Echo請求的頻率不應超過60秒;
- Supported Extension Headers Notification:此消息表示指定IP地址上的GTP實體可以支持的擴展頭列表。只有在GTP實體需要強制支持某個擴展頭,但GTP實體尚未升級以支持該擴展頭的情況下,才會發送此消息。發送此消息的GTP端點被標記為不支持某些擴展頭。對端GTP實體可能會重試使用該節點的所有擴展標頭,以嘗試驗證它已經升級;
4.2 隧道管理消息
- Error Indication:當接收端發生錯誤的時候,向發送端發送錯誤原因,并指示哪個接收端發送的錯誤;
- End Marker:表示給定隧道的有效載荷流結束,即在該隧道的End Marker消息之后到達的G-PDU可能會被靜默丟棄。如果接收到帶有TEID且沒有上下文的End Marker消息,則接收方將忽略此消息;
- Tunnel Status:隧道狀態信息是可選的。一個GTP-U實體如果支持該消息,可以向對端GTP-U實體發送一條或多條隧道狀態消息,提供發送方GTP-U實體中與對應GTP-U隧道相關的狀態信息;
參考
- TS 29.281