일반 라우팅 캡슐화

**일반 라우팅 캡슐화**(Generic routing encapsulation, **GRE**)는 시스코 시스템즈가 개발한 터널링 프로토콜로, 인터넷 프로토콜 네트워크를 통해 가상 점대점 링크 또는 점대다점 링크 내에서 다양한 네트워크 계층 프로토콜을 캡슐화할 수 있다.

## 사용 예시
* PPTP와 함께 VPN을 생성하는 데 사용된다.
* 연결된 네트워크 간에 라우팅 정보를 전달할 수 있도록 IPsec VPN과 함께 사용된다.
* 이동성 관리 프로토콜에서 사용된다.
* A8/A10 인터페이스에서 IP 데이터를 Packet Control Function (PCF)으로/부터 캡슐화하는 데 사용된다.
* 리눅스 및 BSD는 시스코 장비와 상호 운용되는 GRE 터널을 통해 임시 IP를 설정할 수 있다.
* 분산 서비스 거부 (DDoS) 보호 어플라이언스에서 보호되지 않는 엔드포인트로 연결한다.

### 프로토콜 스택 예시

OSI의 프로토콜 계층화 원리에 기반하여, GRE가 아닌 프로토콜 캡슐화는 계층화 순서를 깨뜨린다. 이는 두 개의 다른 프로토콜 스택 사이에 분리자로 간주될 수 있으며, 하나는 다른 하나를 위한 캐리어 역할을 한다.

## 전달 프로토콜
IP 내에 직접 캡슐화된 GRE 패킷은 IPv4 헤더의 프로토콜 필드에서 IP 프로토콜 유형 47 또는 IPv6 헤더의 다음 헤더 필드를 사용한다.

성능상의 이유로 GRE는 UDP 패킷으로도 캡슐화될 수 있다. ECMP를 사용하면 더 나은 처리량을 달성할 수 있다.

## 패킷 헤더
### 확장 GRE 패킷 헤더 (RFC 2890)
확장된 GRE 패킷 헤더의 버전은 아래와 같이 표시된다.
:

; C (1 비트): 체크섬 비트. 체크섬이 있으면 1로 설정된다.
; K (1 비트): 키 비트. 키가 있으면 1로 설정된다.
; S (1 비트): 시퀀스 번호 비트. 시퀀스 번호가 있으면 1로 설정된다.
; Reserved 0 (9 비트): 예약된 비트. 0으로 설정된다.
; 버전 (3 비트): GRE 버전 번호. 0으로 설정된다.
; 프로토콜 유형 (16 비트): 캡슐화된 페이로드의 이더 프로토콜 유형을 나타낸다. ((IPv4의 경우 16진수 0800이 된다.)
; 체크섬 (16 비트): C 비트가 설정된 경우 존재하며, GRE 헤더 및 페이로드에 대한 체크섬을 포함한다.
; Reserved 1 (16 비트): C 비트가 설정된 경우 존재하며, 0으로 설정된다.
; 키 (32 비트): K 비트가 설정된 경우 존재하며, 애플리케이션별 키 값을 포함한다.
; 시퀀스 번호 (32 비트): S 비트가 설정된 경우 존재하며, GRE 패킷의 시퀀스 번호를 포함한다.

### 표준 GRE 패킷 헤더 (RFC 2784)
표준 GRE 패킷 헤더 구조는 아래 다이어그램에 표시된다.

:
; C (1 비트): 체크섬 비트. 체크섬이 있으면 1로 설정된다.
; Reserved 0 (12 비트): 예약된 비트. 0으로 설정된다.
; 버전 (3 비트): GRE 버전 번호. 0으로 설정된다.
; 프로토콜 유형 (16 비트): 캡슐화된 페이로드의 이더 프로토콜 유형을 나타낸다. ((IPv4의 경우 십육진법 0x0800; IPv6의 경우 0x86DD이다.)
; 체크섬 (16 비트): C 비트가 설정된 경우 존재하며, GRE 헤더 및 페이로드에 대한 체크섬을 포함한다.
; Reserved 1 (16 비트): C 비트가 설정된 경우 존재하며, 내용은 0으로 설정된다.

### 원본 GRE 패킷 헤더 (RFC 1701)
새로운 구조는 원본 구조를 대체했다.

:
원래 GRE RFC는 현재 표준에서 더 이상 사용되지 않는 패킷 헤더의 추가 필드를 정의했다.
; C (1 비트): 체크섬 비트. 체크섬이 있으면 1로 설정된다.
; R (1 비트): 라우팅 비트. 라우팅 및 오프셋 정보가 있으면 1로 설정된다.
; K (1 비트): 키 비트. 키가 있으면 1로 설정된다.
; S (1 비트): 시퀀스 번호 비트. 시퀀스 번호가 있으면 1로 설정된다.
; s (1 비트): 엄격한 소스 라우트 비트.
; Recur (3 비트): 재귀 제어 비트.
; 플래그 (5 비트): 향후 사용을 위해 예약되었으며, 0으로 설정된다.
; 버전 (3 비트): 0으로 설정된다.
; 프로토콜 유형 (16 비트): 캡슐화된 페이로드의 이더 프로토콜 유형을 나타낸다.
; 체크섬 (16 비트): C 비트가 설정된 경우 존재하며, GRE 헤더 및 페이로드에 대한 체크섬을 포함한다.
; 오프셋 (16 비트): R 비트 또는 C 비트가 설정된 경우 존재하며, R 비트가 설정된 경우에만 유효한 정보를 포함한다. 라우팅 필드 내에서 활성 소스 라우트 항목에 대한 오프셋을 나타내는 오프셋 필드이다.
; 키 (32 비트): K 비트가 설정된 경우 존재하며, 애플리케이션별 키 값을 포함한다.
; 시퀀스 번호 (32 비트): S 비트가 설정된 경우 존재하며, GRE 패킷의 시퀀스 번호를 포함한다.
; 라우팅 (가변): R 비트가 설정된 경우 존재하며, 소스 라우트 항목 목록을 포함하므로 가변 길이다.

### PPTP GRE 패킷 헤더

점대점 터널링 프로토콜 (PPTP) 는 아래에 표시된 변형 GRE 패킷 헤더 구조를 사용한다. PPTP는 PPTP GRE 패킷이 전송되는 GRE 터널을 생성한다.

:
; C (1 비트): 체크섬 비트. PPTP GRE 패킷의 경우, 0으로 설정된다.
; R (1 비트): 라우팅 비트. PPTP GRE 패킷의 경우, 0으로 설정된다.
; K (1 비트): 키 비트. PPTP GRE 패킷의 경우, 1로 설정된다. (모든 PPTP GRE 패킷은 키를 전달한다.)
; S (1 비트): 시퀀스 번호 비트. 시퀀스 번호가 제공되면 1로 설정되며, PPTP GRE 데이터 패킷을 나타낸다.
; s (1 비트): 엄격한 소스 라우트 비트. PPTP GRE 패킷의 경우, 0으로 설정된다.
; Recur (3 비트): 재귀 제어 비트. PPTP GRE 패킷의 경우, 0으로 설정된다.
; A (1 비트): 확인 번호 존재 여부. 확인 번호가 제공되면 1로 설정되며, PPTP GRE 확인 패킷을 나타낸다.
; 플래그 (4 비트): 플래그 비트. PPTP GRE 패킷의 경우, 0으로 설정된다.
; 버전 (3 비트): GRE 버전 번호. PPTP GRE 패킷의 경우, 1로 설정된다.
; 프로토콜 유형 (16 비트): PPTP GRE 패킷의 경우, 16진수 880B로 설정된다.
; 키 페이로드 길이 (16 비트): GRE 헤더를 포함하지 않는 페이로드의 크기를 포함한다.
; 키 통화 ID (16 비트): 패킷이 속한 세션에 대한 피어의 통화 ID를 포함한다.
; 시퀀스 번호 (32 비트): S 비트가 설정된 경우 존재하며, GRE 페이로드 시퀀스 번호를 포함한다.
; 확인 번호 (32 비트): A 비트가 설정된 경우 존재하며, 발신자가 수신한 가장 높은 GRE 페이로드 패킷의 시퀀스 번호를 포함한다.

## 표준
* : Generic Routing Encapsulation (GRE) (정보용)
* : Generic Routing Encapsulation over IPv4 networks (정보용)
* : Point to Point Tunneling Protocol (정보용)
* : Generic Routing Encapsulation (GRE) (제안된 표준, RFC 2890에 의해 업데이트됨)
* : Key and Sequence Number Extensions to GRE (제안된 표준)
* : GRE-in-UDP Encapsulation (제안된 표준)

## 같이 보기
* 일반 라우팅 캡슐화를 사용한 네트워크 가상화 - GRE를 통해 L2 패킷을 전달한다.
* GPRS 터널링 프로토콜 - GTP-U는 GRE와 유사하며 셀룰러 네트워크에서 사용된다.

## 각주

## 외부 링크

* Generic Routing Encapsulation, 시스코의 서브프로토콜 홈페이지
* Generic Routing Encapsulation , 시스코 DocWiki (이전 "Internetworking Technology Handbook")의 항목

분류:시스코 시스템즈
분류:터널링 프로토콜