GPRS 터널링 프로토콜

IP스택 **GPRS 터널링 프로토콜**(GPRS Tunnelling Protocol, **GTP**)은 GSM, UMTS 및 LTE 네트워크 내에서 GPRS (General Packet Radio Service)를 전달하는 데 사용되는 IP 기반 통신 프로토콜 그룹이다. 3GPP 아키텍처에서 GTP 및 Proxy Mobile IPv6 기반 인터페이스는 다양한 인터페이스 포인트에서 사용된다. GTP는 별도의 프로토콜 인 GTP-C, GTP-U 및 GTP' 로 분해 될 수 있다. GTP-C는 게이트웨이 GPRS 지원 노드 (GGSN)와 서빙 GPRS 지원 노드 (SGSN) 사이의 시그널링을 위해 GPRS 코어 네트워크 내에서 사용된다. 이를 통해 SGSN은 사용자 대신 세션을 활성화 (PDP 컨텍스트 활성화)하거나, 동일한 세션을 비활성화하거나, 서비스 품질 매개 변수를 조정하거나, 다른 SGSN에서 막 도착한 가입자의 세션을 업데이트 할 수 있다. GTP-U는 GPRS 코어 네트워크 내에서 그리고 무선 액세스 네트워크와 코어 네트워크간에 사용자 데이터를 전달하는 데 사용된다. 전송되는 사용자 데이터는 IPv4, IPv6 또는 PPP 형식의 패킷일 수 있다. GTP' (*GTP prime*)는 GTP-C 및 GTP-U와 동일한 메시지 구조를 사용하지만 독립적인 기능이 있다. GSM 또는 UMTS 네트워크의 과금 데이터 장치 (CDF)에서 과금 게이트웨이 장치(CGF)로 과금 데이터를 전달하는 데 사용할 수 있다. 대부분의 경우 이는 GGSN과 같은 많은 개별 네트워크 요소에서 과금 데이터를 네트워크 운영자의 과금 센터에 보다 편리하게 전달하는 중앙 컴퓨터까지를 의미한다. 3GPP 네트워크 내에서 RNC, SGSN, GGSN 및 CGF에 의해 다양한 GTP 변형이 구현된다. GPRS 이동국 (MS)은 GTP를 인식하지 않고 SGSN에 연결된다. GTP는 UDP 또는 TCP와 함께 사용할 수 있다. 버전 0의 터널링 X.25를 제외하고 UDP는 권장 또는 필수다. GTP 버전 1은 UDP에서만 사용된다.
# 일반적인 기능
모든 GTP 변형에는 공통된 특정 기능이 있다. 메시지 구조는 UDP / TCP 헤더 뒤에 GTP 헤더가있는 것과 동일하다.
## 머리글

### GTP 버전 1
GTPv1 헤더에는 다음 필드가 포함되어 있다.3GPP TS 29.060 section 6 {| class="wikitable" ! width="4%" | + ! colspan="3" width="9%" | 0-2 ! colspan="1" width="3%" | 삼 ! colspan="1" width="3%" | 4 ! colspan="1" width="3%" | 5 ! colspan="1" width="3%" | 6 ! colspan="1" width="3%" | 7 ! colspan="8" width="24%" | 8-15 ! colspan="8" width="24%" | 16-23 ! colspan="8" width="24%" | 24-31 |- ! 0 | colspan="3" | 버전 | colspan="1" | 프로토콜 유형 | colspan="1" | 리저브드 | colspan="1" | 확장 헤더 플래그 | colspan="1" | 시퀀스 번호 플래그 | colspan="1" | N-PDU 번호 플래그 | colspan="8" | 메시지 유형 | colspan="16" | 메시지 길이 |- ! 32 | colspan="32" | TEID |- ! 64 | colspan="16" bgcolor="#FFDDDD" | 시퀀스 번호 | colspan="8" bgcolor="#FFDDDD" | N-PDU 번호 | colspan="8" bgcolor="#FFDDDD" | 다음 확장 헤더 유형 |} ; 번역 : 3 비트 필드이다. GTPv1의 경우 값은 1이다. ; 프로토콜 유형 (PT) : GTP (값 1)와 GTP' (값 0)를 구별하는 1 비트 값 ; 리저브드 : 1 비트 예약 필드 (0이어야 함) ; 확장 헤더 플래그 (E) : 확장 헤더 선택 필드가 있는지 여부를 나타내는 1 비트 값 ; 시퀀스 번호 플래그 (S) : 시퀀스 번호 옵션 필드가 있는지 여부를 나타내는 1 비트 값 ; N-PDU 번호 플래그 (PN) : N-PDU 번호 옵션 필드가 있는지 여부를 나타내는 1 비트 값 ; 메시지 유형 : GTP 메시지의 유형을 나타내는 8 비트 필드 다양한 유형의 메시지가 3GPP TS 29.060 섹션 7.1에 정의되어 있다. ; 메시지 길이 : 페이로드의 길이를 바이트 단위로 나타내는 16 비트 필드 (필수 8 바이트 GTP 헤더 다음의 패킷 나머지). 선택적 필드를 포함한다. ; TEID (터널 엔드 포인트 식별자) : 동일한 GTP 터널에서 다른 연결을 다중화하는 데 사용되는 32 비트 (4 옥텟) 필드이다. ; 시퀀스 번호 : (선택적) 16 비트 필드. 이 필드는 E, S 또는 PN 비트 중 하나가 켜져있는 경우에 존재한다. S 비트가 켜져있는 경우에만 필드를 해석해야한다. ; N-PDU 번호 : (선택적) 8 비트 필드. 이 필드는 E, S 또는 PN 비트 중 하나가 켜져있는 경우에 존재한다. PN 비트가 켜져있는 경우에만 필드를 해석해야한다. ; 다음 확장 헤더 유형 : (선택적) 8 비트 필드. 이 필드는 E, S 또는 PN 비트 중 하나가 켜져있는 경우에 존재한다. 필드는 E 비트가 켜져있는 경우에만 해석해야 한다. 다음 확장 헤더는 다음과 같다. {| class="wikitable" ! width="4%" | + ! colspan="8" width="24%" | 비트 0-7 ! colspan="16" width="24%" | 8-23 ! colspan="8" width="24%" | 24-31 |- ! 0 | colspan="8" | 확장 길이 | colspan="24" | 내용 |- ! ... | colspan="32" | ... |- ! ... | colspan="24" | 내용 | colspan="8" | 다음 확장 헤더 |} ; 확장 길이 : 8 비트 필드 이 필드에는 길이, 내용 및 다음 확장 헤더 필드를 포함하여 이 확장 헤더의 길이가 4 옥텟 단위로 표시되므로 확장 길이는 항상 4의 배수여야한다. ; 내용 : 확장 헤더 내용. ; 다음 확장 헤더 : 8 비트 필드 다음 확장의 유형을 나타내거나 다음 확장이 없으면 0을 나타낸다. 이를 통해 여러 개의 다음 확장 헤더를 연결할 수 있다.
### GTP 버전 2
또한 evolved-GTP 또는 eGTP라고도한다. GTPv2-C 헤더에는 다음 필드가 포함되어 있다.3GPP TS 29.274 section 5 {| class="wikitable" ! width="4%" | + ! colspan="3" width="9%" | 비트 0-2 ! colspan="1" width="3%" | 삼 ! colspan="1" width="3%" | 4 ! colspan="3" width="9%" | 5-7 ! colspan="8" width="24%" | 8-15 ! colspan="8" width="24%" | 16-23 ! colspan="8" width="24%" | 24-31 |- ! 0 | colspan="3" | 번역 | colspan="1" | 피기 백 플래그 (P) | colspan="1" | TEID 플래그 (T) | colspan="3" | 스패어 | colspan="8" | 메시지 유형 | colspan="16" | 메시지 길이 |- ! 32 | colspan="32" bgcolor="#FFDDDD" | TEID (T = 1 인 경우에만 존재) |- ! 64 (TEID가없는 경우 32) | colspan="24" | 시퀀스 번호 | colspan="8" | 스패어 |} GTPv2-U 프로토콜은 없으며 LTE의 GTP-U는 GTPv1-U도 사용한다. ; 번역 : 3 비트 필드이다. GTPv2의 경우 값은 2이다. ; 피기 백 플래그 : 이 비트가 1로 설정되면, 자신의 헤더를 가진 또 다른 GTP-C 메시지가 현재 메시지의 끝에 존재한다. 최상위 GTP-C 메시지에 따라 피기 백 할 수 있는 메시지 유형에 대한 제한 사항이 있다. ; TEID 플래그 : 이 비트가 1로 설정되면 TEID 필드는 메시지 길이와 시퀀스 번호 사이에 있다. 에코 및 에코 응답을 제외한 모든 메시지에는 TEID가 있어야한다. ; 메시지 길이 : 이 필드는 GTP-C 헤더 (처음 4 옥텟)의 의무 사항을 제외한 메시지 길이를 옥텟으로 표시해야한다. TEID (있는 경우)와 시퀀스 번호는 길이 카운트에 포함된다.
## 연결 메커니즘
공통 메시지 구조 외에도 한 GSN에서 다른 GSN으로의 연결을 확인하기위한 공통 메커니즘도 있다. 이것은 두 가지 메시지를 사용한다. * 에코 요청 * 에코 응답 60 초마다 GSN은 활성화 된 다른 모든 GSN에 에코 요청을 보낼 수 있다. 다른 쪽 끝이 응답하지 않으면 종료 된 것으로 취급 될 수 있으며 활성 연결이 삭제된다. 앞에서 언급 한 두 가지 메시지 외에도 모든 GTP 변형에 공통적 인 다른 메시지는 없다.3GPP TS 29.060 section 7 대부분의 경우 완전히 별개의 3 개의 프로토콜을 효과적으로 형성한다. GTP-C 프로토콜은 GTP 표준의 **제어** 섹션이다. 가입자가 PDP 컨텍스트를 요청하면, SGSN은 가입자의 요청의 세부 사항을 제공하는 *PDP 컨텍스트 생성 요청* GTP-C 메시지를 GGSN에 전송한다. 그런 다음 GGSN은 *PDP 컨텍스트 생성* GTP-C 메시지 *생성으로 응답* 한다.이 메시지는 실제로 활성화 된 PDP 컨텍스트의 세부 정보를 제공하거나 실패를 표시하고 해당 실패의 이유를 제공한다. 포트 2123의 UDP 메시지이다. **eGTP-C** (또는 GTPv2-C) 프로토콜은 여러 Sx 인터페이스에서 터널을 생성, 유지 관리 및 삭제한다. 제어 플레인 경로 관리, 터널 관리 및 이동성 관리에 사용된다. 또한 재배치 메시지 전달을 제어한다. LTE 간 핸드 오버시 SRNS 컨텍스트 및 순방향 터널 생성
# GTP-U-GTP 사용자 데이터 터널링
GTP-U는 사실상 각 엔드 포인트 세트 사이에 많은 터널을 허용하는 비교적 간단한 IP 기반 터널링 프로토콜이다. UMTS에서 사용될 때, 각 가입자는 하나 이상의 터널을 가지게된다. 각 PDP 컨텍스트마다 하나씩, 다른 서비스 품질 요구 사항을 가진 특정 연결을 위한 별도의 터널이 있을 수 있다. 별도의 터널은 GTP-U 메시지에서 TEID (Tunnel Endpoint Identifier)로 식별되며 동적으로 할당 된 난수여야한다. 이 임의의 숫자가 암호화 품질 인 경우 특정 공격에 대한 보안 수단을 제공한다. 그럼에도 불구하고 3GPP 표준의 요구 사항은 사용자 데이터를 포함한 모든 GTP 트래픽이 인터넷에 직접 연결되지 않고 안전한 개인 네트워크 내에서 전송되어야한다는 것이다. 이것은 UDP 포트 2152에서 발생한다. **GTPv1-U** 프로토콜은 Sx 인터페이스에서 GTP 터널을 통해 사용자 데이터를 교환하는 데 사용된다. UE에 대한 IP 패킷은 GTPv1-U 패킷에 캡슐화되고 S1-U 및 S5 / S8 인터페이스를 통한 UE에 대한 전송을 위해 P-GW와 eNodeB 사이에서 터널링된다.
# GTP'-과금 전송
GTP 프로토콜은 과금 데이터를 과금 게이트웨이 기능으로 전송하는 데 사용된다. GTP'는 TCP / UDP 포트 3386을 사용한다.
# GPRS 코어 네트워크 내
GTP는 GPRS 코어 네트워크에서 사용되는 기본 프로토콜이다. 이 프로토콜은 GSM 또는 UMTS 네트워크의 최종 사용자가 GGSN의 한 위치 에서처럼 인터넷에 계속 연결하는 동안 다른 곳으로 이동할 수 있도록 하는 프로토콜이다. 가입자의 현재 SGSN에서 가입자의 세션을 처리하는 GGSN으로 가입자의 데이터를 전달하여 이를 수행한다. GPRS 코어 네트워크는 세 가지 형태의 GTP를 사용한다. * 각 PDP 컨텍스트에 대해 별도의 터널에서 사용자 데이터 전송을 위한 GTP-U * 다음을 포함한 제어 이유에 대한 GTP-C : ** PDP 컨텍스트 설정 및 삭제 ** GSN 도달 가능성 확인 ** 업데이트; 예를 들어, 가입자가 한 SGSN에서 다른 SGSN으로 이동할 때. * 과금 데이터를 GSN에서 과금 기능으로 전송하기위한 GTP'. GGSN 및 SGSN (통칭하여 GSN이라고 함)은 UDP 포트 2123에서 GTP-C 메시지와 포트 2152에서 GTP-U 메시지를 수신한다.이 통신은 단일 네트워크 내에서 발생하거나 국제 로밍의 경우 국제적으로 발생할 수 있다. GPRS 로밍 교환 (GRX) 전체. CGF ( *Charging Gateway Function* )는 TCP / UDP 포트 3386의 GSN에서 전송 된 GTP 메시지를 수신한다. 코어 네트워크는 일반적으로 PDP 컨텍스트 활성화 시간 및 최종 사용자가 전송 한 데이터 양을 포함하여 과금 정보를 CGF에 전송한다. . 그러나 한 네트워크 내에서 발생하는이 통신은 표준화가 덜되어 있으며 공급 업체 및 구성 옵션에 따라 독점 인코딩 또는 독점 시스템을 사용할 수 있다.
# IuPS 인터페이스에서 사용
GPRS 코어 네트워크와 RAN 사이의 IuPS에서는 GTP-U가 사용되지만 GTP-C 프로토콜은 사용되지 않다. 이 경우 RANAP는 제어 프로토콜로 사용되며 SGSN과 무선 네트워크 컨트롤러 (RNC) 사이에 GTP-U 터널을 설정한다.
# 프로토콜 스택
{| border="2" cellpadding="4" cellspacing="0" | 응용 프로토콜 |- align="center" | IP (사용자) |- align="center" | GTP |- align="center" | UDP |- align="center" | IP |- align="center" | 계층 2 (예 : WAN 또는 이더넷) |- |

GTP-U 프로토콜 스택 |} GTP는 UDP 또는 TCP와 함께 사용할 수 있다. GTP 버전 1은 UDP에서만 사용된다. 2018년 기준으로 버전 0, 1 및 2의 세 가지 버전이 정의되어 있다. 버전 0과 버전 1의 구조는 상당히 다르다. 버전 0에서는 시그널링 프로토콜 (PDP 컨텍스트를 활성화하여 터널을 설정하는 프로토콜)이 하나의 포트에서 터널링 프로토콜과 결합된다. 버전 1과 2는 실제로 제어 (GTP-C라고 함)와 사용자 데이터 터널링 (GTP-U라고 함)을 위한 두 개의 프로토콜이다. GTP 버전 2는 GTP-C에서만 버전 1과 다르다. 이것은 베어러 처리를 개선하기 위해 버전 2의 EPS 용 GTP-C에 대한 향상된 기능을 정의한 3GPP 때문이다. GTP-U는 UMTS 네트워크에서 RNC에서 SGSN으로 사용자 데이터를 전송하는 데에도 사용된다. 그러나이 경우 신호는 GTP-C 대신 RANAP을 사용하여 수행된다.
# 과거 GTP 버전
GTP의 원래 버전 (버전 0)은 현재 버전 (버전 1,2)과 상당한 차이가있었다. * 터널 식별은 무작위가 아니었다; * X.25를 운반하기위한 옵션이 제공되었으며; * 고정 포트 번호 3386은 모든 기능에 사용되었다 (GTPv1에서와 같이 과금하는 것이 아님). * TCP는 UDP 대신 전송 옵션으로 허용되었지만이를 지원하는 것은 선택 사항이다. * 서비스 품질과 같은 가입 관련 분야가 더 제한적이었다. 버전 0의 비 랜덤 TEID는 공격자가 로밍 파트너의 네트워크에 액세스하거나 GPRS 백본에 원격으로 패킷을 보내는 다른 방법을 찾을 수있는 경우 보안 문제를 나타낸다. 거의 모든 네트워크에서 버전 0이 사용되지 않고 버전 1로 대체되었다. 그러나 다른 포트 번호를 사용하면 간단한 IP 액세스 목록을 통해 버전 0을 쉽게 차단할 수 있다.
# GTP 표준화
GTP는 원래 ETSI (GSM 표준 09.60) 내에서 표준화되었다. UMTS 표준이 만들어지면서 GTP는 2005 3GPP 표준 29.060으로 유지된 3GPP로 옮겨졌다. GTP'는 동일한 메시지 형식을 사용하지만 전송되는 과금 데이터에 대한 표준화된 형식과 함께 표준 32.295에 특별 용도가 적용된다. 최신 버전의 TS 29.060은 GTPv1/v0 인터 워킹을 더 이상 사용하지 않으므로 GSN이 상위 버전을 지원하지 않는 경우 폴백은 없다. GTPv2 (진화 패킷 서비스 용)는 2008년 초에 초안이되어 그해 12 월에 릴리스되었다. GTPv2는 이전 "Version Not Supported" 메커니즘을 통해 GTPv1로 폴백을 제공하지만 GTPv0으로 폴백을 명시 적으로 지원하지 않는다.