일반 라우팅 캡슐화

hardware = **일반 라우팅 캡슐화**(Generic routing encapsulation, **GRE**)는 시스코 시스템즈가 개발한 터널링 프로토콜로, 인터넷 프로토콜 네트워크를 통해 가상 점대점 링크 또는 점대다점 링크 내에서 다양한 네트워크 계층 프로토콜을 캡슐화할 수 있다.url=https://patents.google.com/patent/US7801021B1/en
# 사용 예시
* PPTP와 함께 VPN을 생성하는 데 사용된다. * 연결된 네트워크 간에 라우팅 정보를 전달할 수 있도록 IPsec VPN과 함께 사용된다. * 이동성 관리 프로토콜에서 사용된다. * A8/A10 인터페이스에서 IP 데이터를 Packet Control Function (PCF)으로/부터 캡슐화하는 데 사용된다. * 리눅스 및 BSD는 시스코 장비와 상호 운용되는 GRE 터널을 통해 임시 IP를 설정할 수 있다. * 분산 서비스 거부 (DDoS) 보호 어플라이언스에서 보호되지 않는 엔드포인트로 연결한다.
## 프로토콜 스택 예시
{|class="wikitable" !OSI 모형 계층 !프로토콜 예시 |- |7. 응용 |HTTP |- |4. 전송 |TCP |- |3. 네트워크 (GRE-캡슐화됨) |IPv4 |- |캡슐화 |**GRE** |- |3. 네트워크 |IPv6 |- |2. 데이터 링크 |이더넷 |- |1. 물리 |이더넷 물리 계층 |} OSI의 프로토콜 계층화 원리에 기반하여, GRE가 아닌 프로토콜 캡슐화는 계층화 순서를 깨뜨린다. 이는 두 개의 다른 프로토콜 스택 사이에 분리자로 간주될 수 있으며, 하나는 다른 하나를 위한 캐리어 역할을 한다.
# 전달 프로토콜
IP 내에 직접 캡슐화된 GRE 패킷은 IPv4 헤더의 프로토콜 필드에서 IP 프로토콜 유형 471702 또는 IPv6 헤더의 다음 헤더 필드를 사용한다.7676 성능상의 이유로 GRE는 UDP 패킷으로도 캡슐화될 수 있다.8086 ECMP를 사용하면 더 나은 처리량을 달성할 수 있다.
# 패킷 헤더

## 확장 GRE 패킷 헤더 (RFC 2890)
확장된 GRE 패킷 헤더2890의 버전은 아래와 같이 표시된다. :{| class="wikitable" |+확장 GRE 헤더 형식 |- !|오프셋 !|옥텟 !colspan="8"|0 !colspan="8"|1 !colspan="8"|2 !colspan="8"|3 |- !|옥텟 !비트 !|0 !|1 !|2 !|3 !|4 !|5 !|6 !|7 !|8 !|9 !|10 !|11 !|12 !|13 !|14 !|15 !|16 !|17 !|18 !|19 !|20 !|21 !|22 !|23 !|24 !|25 !|26 !|27 !|28 !|29 !|30 !|31 |- !0 !0 |C | |K |S |colspan="9"|Reserved 0 |colspan="3"|버전 |colspan="16"|프로토콜 유형 |- !4 !32 |colspan="16"|체크섬 (선택 사항) |colspan="16"|Reserved 1 (선택 사항) |- !8 !64 |colspan="32"|키 (선택 사항) |- !12 !96 |colspan="32"|시퀀스 번호 (선택 사항) |} ; 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 패킷 헤더 구조2784는 아래 다이어그램에 표시된다. :{| class="wikitable" |+표준 GRE 헤더 형식 |- !|오프셋 !|옥텟 !colspan="8"|0 !colspan="8"|1 !colspan="8"|2 !colspan="8"|3 |- !|옥텟 !비트 !|0 !|1 !|2 !|3 !|4 !|5 !|6 !|7 !|8 !|9 !|10 !|11 !|12 !|13 !|14 !|15 !|16 !|17 !|18 !|19 !|20 !|21 !|22 !|23 !|24 !|25 !|26 !|27 !|28 !|29 !|30 !|31 |- !0 !0 |C |colspan="12"|Reserved 0 |colspan="3"|버전 |colspan="16"|프로토콜 유형 |- !4 !32 |colspan="16"|체크섬 (선택 사항) |colspan="16"|Reserved 1 (선택 사항) |} ; C (1 비트): 체크섬 비트. 체크섬이 있으면 1로 설정된다. ; Reserved 0 (12 비트): 예약된 비트. 0으로 설정된다. ; 버전 (3 비트): GRE 버전 번호. 0으로 설정된다. ; 프로토콜 유형 (16 비트): 캡슐화된 페이로드의 이더 프로토콜 유형을 나타낸다. ((IPv4의 경우 십육진법 0x0800; IPv6의 경우 0x86DD이다.7676) ; 체크섬 (16 비트): C 비트가 설정된 경우 존재하며, GRE 헤더 및 페이로드에 대한 체크섬을 포함한다. ; Reserved 1 (16 비트): C 비트가 설정된 경우 존재하며, 내용은 0으로 설정된다.
## 원본 GRE 패킷 헤더 (RFC 1701)
새로운 구조는 원본 구조를 대체했다.1701 :{| class="wikitable" |+원본 GRE 헤더 형식 |- !|오프셋 !|옥텟 !colspan="8"|0 !colspan="8"|1 !colspan="8"|2 !colspan="8"|3 |- !|옥텟 !비트 !|0 !|1 !|2 !|3 !|4 !|5 !|6 !|7 !|8 !|9 !|10 !|11 !|12 !|13 !|14 !|15 !|16 !|17 !|18 !|19 !|20 !|21 !|22 !|23 !|24 !|25 !|26 !|27 !|28 !|29 !|30 !|31 |- !0 !0 |C |R |K |S |s |colspan="3"|Recur |colspan="5"|플래그 |colspan="3"|버전 |colspan="16"|프로토콜 유형 |- !4 !32 |colspan="16"|체크섬 (선택 사항) |colspan="16"|오프셋 (선택 사항) |- !8 !64 |colspan="32"|키 (선택 사항) |- !12 !96 |colspan="32"|시퀀스 번호 (선택 사항) |- !16 !128 |colspan="32"|라우팅 (선택 사항, 가변 길이) |} 원래 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) 2637는 아래에 표시된 변형 GRE 패킷 헤더 구조를 사용한다. PPTP는 PPTP GRE 패킷이 전송되는 GRE 터널을 생성한다. :{| class="wikitable" |+PPTP GRE 헤더 형식 |- !|오프셋 !|옥텟 !colspan="8"|0 !colspan="8"|1 !colspan="8"|2 !colspan="8"|3 |- !|옥텟 !비트 !|0 !|1 !|2 !|3 !|4 !|5 !|6 !|7 !|8 !|9 !|10 !|11 !|12 !|13 !|14 !|15 !|16 !|17 !|18 !|19 !|20 !|21 !|22 !|23 !|24 !|25 !|26 !|27 !|28 !|29 !|30 !|31 |- !0 !0 |C |R |K |S |s |colspan="3"|Recur |colspan="1"|A |colspan="4"|플래그 |colspan="3"|버전 |colspan="16"|프로토콜 유형 |- !4 !32 |colspan="16"|키 페이로드 길이 |colspan="16"|키 통화 ID |- !8 !64 |colspan="32"|시퀀스 번호 (선택 사항) |- !12 !96 |colspan="32"|확인 번호 (선택 사항) |- |} ; 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 페이로드 패킷의 시퀀스 번호를 포함한다.
# 표준
* link=no: Generic Routing Encapsulation (GRE) (정보용) * link=no: Generic Routing Encapsulation over IPv4 networks (정보용) * link=no: Point to Point Tunneling Protocol (정보용) * link=no: Generic Routing Encapsulation (GRE) (제안된 표준, RFC 2890에 의해 업데이트됨) * link=no: Key and Sequence Number Extensions to GRE (제안된 표준) * link=no: GRE-in-UDP Encapsulation (제안된 표준)