학교 공부/데이터 통신론

데이터통신론 04 네트워크 계층(Network Layer)

_빌런 2022. 4. 8. 09:35

1. IPv4

    1.1. IPv4의 패킷 포맷

    1.2. IPv4 주소와 서브넷 마스크

    1.3. 다양한 IPv4 주소

2. IPv6

    2.1. IPv6의 패킷 포맷

    2.2. IPv6 주소와 프리픽스

    2.3. 다양한 IPv6 주소

3. IP 라우팅

    3.1. 라우팅이란

    3.2. 라우팅 테이블

    3.3. 라우팅 프로토콜

    3.4. 재전송

    3.5. 라우팅 테이블 규칙

    3.6. VRF

    3..7. 정책 기반 라우팅

4. IP 주소 할당 방법

    4.1. 정적 할당

    4.2. 동적 할당

    4.3. DHCP 릴레이 에이전트

5. NAT

    5.1. 정적 NAT

    5.2. NAPT

    5.3. CGNAT

    5.4. NAT 트래버설(NAT 초월)

6. IPv4와 IPv6의 공용 기술

    6.1. 듀얼 스택

    6.2. DNS64/NAT64

    6.3. 터널링

7. ICMPv4

    7.1. ICMPv4의 패킷 포맷

    7.2. 대표적인 ICMPv4의 동작

8. ICMPv6

    8.1. ICMPv6의 패킷 포맷

    8.2. 대표적인 ICMPv6의 동작

9. IPsec

    9.1. 거점 간 VPN과 원격 액세스 VPN

    9.2. IPsec 프로토콜의 기능


1. IPv4

Internet Protocol version 4의 준말로, 커넥션리스 프로토콜이다.

L2 헤더의 타입 코드에는 '0x0800'으로 정의되어 있다.

 

    1.1. IPv4의 패킷 포맷

IP에 의해 캡슐화되는 패킷을 IP 패킷이라고 부른다.

IP 패킷은 제어 정보를 설정하는 'IP 헤더', 데이터인 'IP 페이로드'로 이루어진다.

 

IPv4 패킷 포맷

 

버전(Version)

IP의 버전을 나타내는 4bit 필드, IPv4에서는 4가 들어간다(이진수로 0100).

 

헤더 길이(Header Length)

헤더의 길이는 나타내는 4bit 필드. 이 정보를 통해 어디까지가 IPv4의 헤더인지 알 수 있다.

헤더의 길이를 4Byte로 환산한 값이 들어가는데, IPv4의 헤더 길이는 보통 20Byte이므로 5가 들어간다.

Internet Header Length를 줄여서 IHL이라고 부르기도 한다.

 

ToS(Type of Service)

IPv4 패킷의 우선도를 나타내는 1Byte 필드

앞의 6bit는 DSCP 필드, 뒤의 2bit는 ECN 필드로 사용한다.

 └ DSCP(Differentiated Services Code Point) : 우선 제어와 대역 제어에서 사용하는 우선순위이다.

 └ ECN(Explicit Congestion Notification) : 필드의 혼잡도를 알린다

 

패킷 길이

IPv4 헤더와 IPv4 페이로드를 합친 패킷 전체 길이를 나타내는 2Byte 필드

이 필드를 통해서 어디까지가 IPv4 패킷인지 파악한다.

// 데이터가 최대(MTU; Maximum Transmission Unit)인 경우 IPv4의 이더넷 기본 패킷 길이는 1500(16진수로 05dc)이다.

 

식별자(Identifier)

패킷을 만들 때 무작위로 할당하는 ID로 2Byte 필드

패킷 교환 방식 통신에서는 데이터를 송신하기 쉽게 나누어서 송신한다. 이것을 IP Fragmentation이라 한다.

식별자, 플래그, 프래그먼트 오프셋에는 IP Fragmentation의 정보가 저장된다.

 

플래그(Flag)

Fragmentation(이하 분할)의 정보를 저장하는 3bit 필드

 └ 첫 번째 비트는 사용하지 않는다.

 └ 두 번째 비트는 DF(Don't Fragment) 비트로, IP 패킷을 분할해도 좋은지를 의미한다.

 └ 0이면 허가이고 1이면 허가하지 않음을 뜻한다.

 └ 세 번째 비트는 MF(More Fragment) 비트로, 분할된 패킷이 계속 되는지를 의미한다.

 └ 0이면 뒤에 분할된 패킷이 없다는 뜻이고, 1이면 뒤에 분할된 패킷이 더 있다는 뜻이다.

 

프래그먼트 오프셋(Fragment Offset)

분할한 뒤 이 패킷이 오리지널 패킷으로부터 어느 위치에 있는지를 나타내는 13bit 필드

분할된 처음 패킷은 0이 들어간다. 패킷을 받은 단말은 이 값을 보고 순서를 정렬한다.

 

TTL(Time To Live)

패킷의 수명을 나타내는 1Byte 필드, IP 패킷의 수명은 '경유하는 라우터(홉(Hop))의 수'를 의미한다.

네트워크를 경유할 때마다 1씩 감소하고 0이 되면 패킷을 파기한다.

// 시작값은 최대 255이고 권장값은 64이다. 명령 프롬프트에서 tracert 명령어를 통해 TTL을 확인할 수 있다.

 

프로토콜 번호

프로토콜 번호(Protocol Number)​

IPv4 페이로드가 어떤 프로토콜로 구성되어 있는지를 나타내는 1Byte 필드

 

헤더 체크섬(Header Checksum)

IPv4 헤더의 정합성(손상 여부, 무결성)을 체크하기 위해 사용하는 2Byte 필드, 1의 보수 연산을 사용한다.

 

송/수신지 IPv4 주소

IPv4 네트워크에 연결된 단말을 나타내는 4Byte 필드

IP 주소라고 생각하면 편하다, 단말 한 개마다 1개의 IP만 가지고 있는 것은 아니다.

 

옵션(Option)

IPv4 패킷 송신에 대한 확장 기능을 저장하는 가변 길이 필드이다. 잘 안 쓰인다.

 

패딩(Padding)

IPv4 헤더 비트 수를 정랼하기 위해 사용하는 가변 길이 필드

IPv4 헤더는 4Byte 단위여야 해서, 4Byte의 정수 배가 되도록 0을 추가한다.

 

    1.2. IPv4 주소와 서브넷 마스크

IPv4 주소 표기 예시

IPv4 주소는 IPv4 네트워크에 접속된 단말을 식별하는 IP로 4Byte로 구성된다.

1Byte(8bit)씩 점(.)으로 구분해 10진수로 표기하는데, 이를 '점으로 구분한 10진 표기법'이라고 한다.

점으로 구분한 각각의 1Byte를 옥텟(Octet)이라고 한다.

 

서브넷 마스크 주소 표기 예시

IPv4 주소는 '서브넷 마스크(Subnet Mask)'라는 32bit 값과 함께 사용한다.

IPv4 주소는 네트워크 부분(Network Part)과 호스트 부분(Host Part)으로 나눈다.

 └ 네트워크 부분은 '어떤 IPv4 네트워크에 있는가'를 나타내는 값

 └ 호스트 부분은 '어떤 단말인가'를 나타내는 값

이때 서브넷 마스크에서 1은 네트워크 부분을, 0은 호스트 부분을 표시한다.

 └ 구분을 하기 위한 값으로 0과 1이 번갈아 나오지 않고, 한 번 0이 나오면 그 뒤의 값은 전부 0이다.

 

서브넷 마스크 표기에는 2가지 방법이 있다.

 └ 10진수 표기 : IPv4처럼 32bit를 쪼개서 옥텟으로 구분하여 표기하는 방식(EX. 255.255.255.0)

 └ CIDR 표기 : 10진수 표기에서 있는 1의 수를 IPv4 주소 뒤에 붙이는 방식(Ex. 192.168.100.1/24)

 

    1.3. 다양한 IPv4 주소

IPv4 주소는 0.0.0.0부터 255.255.255.255까지 2^43개가 있다.

모든 주소를 마음대로 사용해도 되는 게 아니라 RFC 규약에 의해 정의되고 있다.

사용 용도와 사용 장소 그리고 예외 주소에 따른 3가지 분류로 나눈다(다른 곳은 다른 기준을 쓸 수 있다).

 

1.3.1. 사용 용도에 따른 분류

사용 용도에 따라서 클래스 A부터 E까지 나눈다. 일반적으로 A, B, C를 많이 사용한다(유니캐스트 통신).

차이점은 네트워크의 규모이다. A가 가장 크고 C가 가장 작다. D와 E는 특수한 용도로만 사용하는 주소이다.

 └ 클래스 D : IPv4 멀티캐스트용 주소

 └ 클래스 E : 미래를 위해 남겨두는(예약해놓은) 주소

 

클래스풀 어드레싱(Classful Addressing)

주소 클래스에 기반해 주소를 할당하는 방식이다.

네트워크 부분이 위의 표와 같이 8bit, 16bit, 24bit 중에 하나가 된다.

 

클래스리스 어드레싱(왼쪽), 주소 서브넷화(오른쪽)

클래스리스 어드레싱(CLassless Addressing)

8bit 단위에 상관없이 주소를 할당하는 방식이다.

서브네팅(Subnetting)이나 CIDR(Classless Inter-Domain Routing)이라고도 한다.

원래 호스트 부분의 8bit 중 일부를 '서브넷 부분' 개념을 도입해 세부적인 주소를 구현한다.

 

1.3.2. 사용 장소에 따른 분류

글로벌 IPv4 주소

전 세계 인터넷에서 유일한 주소 값을 가진다.

ICANN이라는 법인에서 관리하는 주소로 자유롭게 할당할 수 없다. 최근 할당에 제한이 있다.

 

프라이빗 IPv4 주소

조직(기업, 가정 등) 안에서 자유롭게 할당할 수 있는 주소이다.

오로지 특정 조직에서만 유효하다보니 인터넷에 직접 접속이 안 된다. 따라서 글로벌 IPv4로 변환하는 작업이 필요하다.

 └ 이런 변환 작업을 NAT(Network Address Translation)이라고 한다.

 

1.3.3. 예외주소

네트워크 주소(왼쪽), 기본 경로 주소(오른쪽)

네트워크 주소(Network Address)

IPv4 호스트 부분의 주소가 모두 0인 주소로, 네트워크 자체를 의미한다.

IPv4와 서브넷 마스크가 모두 0인 주소는 '기본 경로 주소'로 모든 네트워크를 의미한다.

 

브로드캐스트 주소

브로드캐스트 주소(Broadcast Address)

IPv4 호스트 부분의 비트가 모두 1인 주소로, 같은 네트워크 상에 존재하는 모든 단말을 의미한다.

IPv4와 서브넷 마스크가 모두 1인 주소는, '리미티드 브로드캐스트 주소(Limited Broadcast address)'이다.

 └ 브로드캐스트와 같지만, 자신의 IPv4나 네트워크 주소를 알 수 없을 때(DHCPv4 주소를 얻을 때) 사용한다.

 

루프백 주소

루프백 주소(Loopback Address)
IPv4의 1옥텟이 127(01111111)인 주소로 자기 자신을 의미한다.

1옥텟이 127이라면 어떤 주소도 상관없지만, 보통 127.0.0.1/8을 사용한다.

 

2. IPv6

IPv4 주소는 32bit이다. 2^32(약 43억)개의 주소를 할당할 수 있지만, 현재에 와서 턱없이 부족해 IPv6가 나왔다.

IPv6 주소는 128bit로 약 340간 개의 주소를 할당할 수 있다.

 

    2.1. IPv6의 패킷 포맷

IPv6 패킷 포맷

버전(Version)
IP 버전을 나타내는 4bit 필드, IPv6에서는 0110이 들어간다.

 

트래픽 클래스(Traffic Class)

IPv6 패킷의 우선도를 나타내는 1Byte 필드, IPv4에서 ToS에 해당한다.

 

흐름 라벨(Flow Label)

통신 흐름을 식별하는 20bit 필드, IPv4에는 없다.

 

페이로드 길이(Payload Length)

IPv6 페이로드의 길이를 나타내는 2Byte 필드

IPv4에서 '패킷 길이'를 헤더와 페이로드의 합으로 표현하지만, IPv6는 헤더가 40Byte로 고정이라 포함하지 않는다.

 

넥스트 헤더(Next Header)

IPv6 헤더 바로 뒤에 있는 1Byte의 헤더를 나타내는 필드

확장 헤더가 있다면 확장 헤더를 나타내는 값이 있고, 없다면 IPv4의 프로토콜 번호와 같은 역할을 한다.

 

홉 리미트(Hop LImit)

홉의 상한값을 나타내는 1Byte 필드, IPv4의 TTL에 해당한다.

 

    2.2. IPv6 주소와 프리픽스

IPv6 주소 표기

IPv6 주소는 128bit를 16bit로 쪼개 8개로 구분해서 사용한다. 각각을 필드라고 부르며 필드는 :(콜론)으로 구분한다.

필드는 보기 쉽게 4bit씩 쪼개어 16진수로 묶어서 표기한다.

 

서브넷 프리픽스와 인터페이스 ID

IPv6는 네트워크를 식별하는 '서브넷 프리픽스(Subnet Prefix)'와 단말을 식별하는 '인터페이스 ID(IID)'로 구성된다.

IPv4의 CIDR 표기를 사용한다면, '2001:db8:0:0:0:0:0:1/64'는 단말 ID가 '0:0:0:1'임을 알 수 있다.

 

IPv6 주소 표기 규칙

ㆍ 각 필드 맨 앞에 연속한 '0'은 생략할 수 있다.

ㆍ 여러 필드에 걸쳐 '0'이 이어질 때는 '::'으로 생략할 수 있다.

ㆍ 생략은 1번만 할 수 있다.

ㆍ 하나의 필드만 모두 '0'일 때는 생략할 수 없다.

ㆍ 가능한 짧게 만든다.

ㆍ 가장 많이 생략할 수 있는 부분을 생략한다.

ㆍ 생략할 수 있는 여러 위치의 길이가 같다면, 가장 첫 위치에서 생략한다.

ㆍ 소문자로 표기한다.

 

    2.3. 다양한 IPv6 주소

IPv6 주소 분류

이더넷 네트워크에서의 통신은 유니캐스트, 브로드캐스트, 멀티캐스트 방식이 있었다.

IPv6의 통신에서는 브로드캐스트와 멀티캐스트의 방식을 묶는다. 유니캐스트, 멀티캐스트, 애니캐스트 방식으로 나눈다.

 

글로벌 유니캐스트 주소

유니캐스트 - 글로벌 유니캐스트 주소(Global Unicast Address)

인터넷 상에서 고유한 IPv6 주소로 글로벌 IPv4처럼 ICANNN에서 관리하고 자유롭게 할당할 수 없다.

앞의 3bit가 001인 IPv6 주소로 16진수로 표기하면 2000::/3이다.

서브넷 프리픽스는 조직에 할당한 부분과 조직 내부에서 할당하는 두 부분으로 구성한다.

인터페이스 ID는 기본적으로 64bit가 할당되지만, 필요에 따라 48bit나 32bit를 할당하기도 한다.

 

유니크 로컬 주소

유니캐스트 - 유니크 로컬 주소(Unique Local Address)

IPv4의 프라이빗 IPv4 주소에 해당하는 것으로 조직 내 유일한 IPv6 주소이다.

외부 인터넷과 교환하지 않고 내부에서만 통신하는 네트워크로 사용한다.

 

앞의 7bit가 1111110인 IPv6 주소로 16진수로 표기하면 fc00::/7이다.

8bit 자리는 로컬에서 관리되는지 여부를 나타내는 비트로, 0은 미정의 1은 로컬을 나타낸다.

글로벌 ID는 사이트를 식별하는 고유의 값으로 무작위로 생성하여 정해진다.

 

링크 로컬 주소

유니캐스트 - 링크 로컬 주소(Link Local Address)

같은 IPv6 네트워크에서만 통신할 수 있는 주소이다.

앞의 10bit가 1111111010인 IPv6 주소로 16진수로 표기하면 fe80::/10이다.

11bit 자리부터 54bit는 0이고, 나머지 64bit의 인터페이스 ID가 들어간다.

 

멀티캐스트 주소

멀티캐스트 주소(Multicast Address)

IPv4에서 클래스 D에 대응하는 IPv6 주소로, 특정 그룹에 대한 통신에서 사용한다.

IPv4에 있던 브로드캐스트도 IPv6에서는 멀티캐스트의 일부로 같이 취급한다.

앞의 8bit가 모두 1인 주소로 16진수로 표기하면 ff00::/8이다.

그 뒤의 각각의 4bit 4bit는 영구적으로 할당된 주소인지(플래그), 어느 범위까지 도달하는지(스코프)를 나타낸다.

 

애니캐스트 주소

애니캐스트 주소(Anycast Address)

여러 단말에 의해 공유되는 글로벌 유니캐스트 주소인데, 이 주소를 여러 단말에 할당하면 애니캐스트이다.

애니캐스트 주소는 글로벌 유니캐스트와 겉보기로 구분할 수 없지만, 각 단말에 '애니캐스트'임을 명시해야 한다.

 

쉬운 예시를 들자면, employee@emart.com으로 메일을 보내면 emart의 모든 직원에게 메일이 가는 거다.

또 다른 예시로, 클라이언트와 서버(애니캐스트)가 통신을 할 때 여러 서버 중 가장 가까운 서버에 패킷을 통신한다.

 └ 여러 서버 중 가장 가까운 서버와 통신하기에 응답 속도가 향상한다.

 └ 같은 IP를 여러 단말에 할당하기 때문에(부하를 분산하기 때문에) DDos 공격을 국소화한다.

 

3. IP 라우팅

    3.1. 라우팅이란

라우팅(Routing) : 라우터나 L3 스위치가 여러 정보를 관리해 IP 패킷의 전송 대상지를 바꾸는 것이다.

 └ 여러 정보 : 수신지 IP, 수신지 네트워크, 네트워크 홉(전송할 근접 기기의 IP 주소)

 └ 라우팅 테이블(Routing Table) : 수신지 네트워크와 네트워크 홉을 관리하는 테이블

 

라우터가 IP 패킷을 라우팅하는 과정(간단하게)

 

 

라우터가 IP 패킷을 라우팅하는 과정(자세히)

 

 

    3.2. 라우팅 테이블

라우팅의 종류

정적 라우팅(Static Routing)

수동으로 라우팅 테이블을 만드는 방법이다.

이해하기 쉽고 운용 관리(유지 보수)도 쉽기 때문에 소규모 네트워크 환경 라우팅에 적합하다.

 

동적 라우팅(Dynamic Routing)

근접한 라우터끼리 자신이 가진 정보를 교환해 자동으로 라우팅 테이블을 만드는 방법이다.

경로 정보를 교환하기 위한 프로토콜을 '라우팅 프로토콜(Routing Protocol)'이라고 부른다.

대규모 네트워크 환경이나 구성이 자주 변하는 환경에 적합하다.

 

    3.3. 라우팅 프로토콜

라우팅 프로토콜의 종류

AS(Autonomous System) : 하나의 정책에 따라 관리하는 네트워크 집합, 자율 시스템

IGP(Interior Gateway Protocol) : 내부 게이트웨이 프로토콜, AS 내부를 제어하는 라우팅 프로토콜

EGP(Exterior Gateway Protocol) : 외부 게이트웨이 프로토콜, AS와 AS 사이를 제어하는 라우팅 프로토콜

 

IGP의 핵심 : 라우팅 알고리즘, 메트릭

 └ 라우팅 알고리즘 : 라우팅 테이블을 만드는 규칙, 알고리즘 종류 : 디스턴스 벡터 타입, 링크 스테이트 타입

     └ Distance Vector : 논리적인 거리(Distance: 홉의 수)와 방향(Vector)에 기반해 경로를 계산하는 프로토콜

     └ Link State : 링크 상태(Interface State), 대역 폭, IP 주소 등의 다양한 정보에 기반해 경로를 계산하는 프로토콜

 └ 메트릭 : 수신지 네트워크까지의 논리적인 거리

 

IGP의 종류 : RIP, OSPF, EIRGP

EGP의 종류 : BGP

RIP(Routing Information Protocol)

디스턴스 벡터 타입의 라우팅 프로토콜, 메트릭으로는 홉의 수를 사용한다.

라우팅 테이블 자체를 정기적으로 교환함으로써 라우팅 테이블 만든다.

메트릭을 홉의 수로만 판단하다보니, 경로 중 대역폭이 작아도 홉 수가 적으면 최적 경로로 판단해버린다.

 

IPv4에서는 RFC2453에서 RIP Version 2로 표준화한 RIPv2를 사용하고,

IPv6에서는 RFC2080에서 RIPng for IPv6으로 표준화한 RIPng를 사용한다.

 

OSPF(Open Shrotest Path Fast)

링크 스테이트 타입의 라우팅 프로토콜, 메트릭으로는 비용(100/대역폭(Mbps))을 사용한다.

각 라우터가 다양한 정보를 교환하면 LSDB(Link State DataBase)를 만든다.

정기적이 아니라 변경 사항이 있을 때만 업데이트를 한다. 평소에는 Hello Packet을 보내 정상 동작 유뮤만 확인한다.

LSDB가 너무 커지지 않게 네트워크를 에이리어(Area)로 나누어 같은 Area끼리만 LSDB를 공유한다.

 

비용을 정수로 계산해 라우터를 넘을 때마다 출력 인터페이스에 더한다. 이을 ECMP(Equal Cost Multi Path)라고 한다.

ECMP는 장애 내구성 향상과 대역 확장을 동시에 할 수 있어 많은 네트워크 환경에서 사용한다.

 

IPv4에서는 RFC2328에서 OSPF Version 2로 표준화한 OSPFv2를 사용하고,

IPv6에서는 RFC5340에서 OSPF for IPv6로 표준화한 OSPFv3을 사용한다.

 

EIGRP(Enhanced Interior Gateway Routing Protocol)

디스턴스 벡터 타입의 확장 버전 라우팅 프로토콜이다. 메트릭으로는 대역폭과 지연을 사용한다.

 └ 대역폭 = {(10000 / 네트워크 경로 中 가장 작은 대역폭) + (네트워크 경로의 모든 지연 합 / 10)} * 256

라우터는 처음 자신이 가진 정보를 교환해 각각의 토폴로지 테이블을 만들고, 이를 기반으로 최적의 라우팅 테이블을 만든다.

그 후 변경이 있을 때만 라우팅 테이블을 업데이트하고, 평소에 Hello Packet을 보내 상대가 정상 동작하는지 확인한다.

IPv4에서는 EIGRP를 사용하고, IPv6에서는 EIGRP for IPv6을 사용한다.

 

BGP(Border Gateway Protocol)

디스턴스 벡터 타입의 라우팅 프로토콜이다. 경로는 수신지까지 경유하는 AS고, 방향은 BGP Peer다.

BGP Peer는 경로 정보를 교환하는 상대이다. 1:1로 경로 정보를 교환해 BGP 테이블을 만든다.

변경이 있을 때만 라우팅 테이블을 업데이트하며, KEEPALIVE를 보내 상대가 정상 동작하는지 확인한다.

 

BGP의 핵심은 AS 번호, 라우팅 알고리즘, 최선 경로 선택 알고리즘이다.

BGP가 동작하는 라우터로 연결하여 성립한다.

라우터가 BGP를 교환하는 것으로 만든 전 세계의 경로 정보,

전체 경로(Full Route)를 사용해 수신지 IP 주소로 전송한다.

 

글로벌 AS 번호는 글로벌 IP 주소처럼 ICANN이 관리한다.

따라서 조직에 할당하여 마음대로 사용할 수 없다.

프라이빗 AS 번호는 해당 조직에서 자유롭게 사용가능하다.

 

최선 경로 선택 알고리즘은 말그대로 어떤 경로가 Best Path인가 판별하는 규칙이다.

위에서부터 우선순위가 높으며 한 번 우선이 결정되면 밑의 우열은 결정하지 않는다.

선택한 최선 경로를 라우팅 테이블에 추가하고, 동시에 BGP Peer에 전파한다.

 

    3.4. 재전송

재전송의 예시

위에 언급한 4개의 라우팅 프로토콜은 전부 달라 호환하지 않는다.

이를 호환하게 동작하도록 변환하는 것을 재전송(Redistribution)이라고 한다.

 

    3.5. 라우팅 테이블 규칙

Longest Match

수신지 IP 주소의 조건에 맞는 경로가 다수거나 없을 때, 서브넷 마스크가 가장 긴 경로를 사용하는 라우팅 테이블 규칙

 

경로 집약(Route Aggregation)

넥스트 홉이 같은 네트워크 주소의 비트들을 공통된 비트까지 정리하는 규칙이다.

경로 집약을 극한까지 실행하면 모든 경로를 하나로 집약한 기본 경로(Default Route)가 된다.

 └ 이 기본 경로는 0.0.0.0/0다. 수신지 IP 주소에 일치하는 경로가 없으면 기본 경로로 패킷을 전송한다.

 

AD값 적용 예시(왼쪽), AD 우선순위(오른쪽)

AD(Administrative Distance) 값

라우팅 프로토콜별로 정해진 우선도다. 값이 작을수록 우선도가 높다.

 

    3.6. VRF

VRF(Virtual Routing and Forwarding)는 1대의 라우터에 여러 라우팅 테이블을 갖도록하는 가상화 기술이다.

VLAN은 ID값을 이용해서 1대의 스위치를 가상으로 분할했다면, VRF는 RD값을 이용해 라우터를 가상으로 분할한다.

 └ RD(Route Distinguisher), 라우터 기기 자체에서 지원을 해줘야 사용할 수 있는 기능

 

VRF로 만든 라우팅 테이블은 완전히 독립하여, 같은 IP 서브넷을 사용해도 문제가 없다.

또한, RD 별로 다른 라우팅 프로토콜을 동작하게 할 수도 있다.

 

    3..7. 정책 기반 라우팅

PBR(Policy Based Routing; 정책 기반 라우팅)은 말그대로 정책에 기반해 라우팅하는 기술이다.

수신지 네트워크에 기반해 전송 대상지를 전환하는 게 아니라, 다양한 조건에 기반해 전송 대상지를 전환한다.

라우팅 테이블에 의존하지 않고 처리하지만, 지연이 발생하기 쉽고 부하가 쉽게 걸린다.

그래서 일반적인 라우팅으로는 도저히 처리할 수 없는 조건이 있을 때만 예외적으로 사용하는 형태이다.

 

4. IP 주소 할당 방법

 

    4.1. 정적 할당(Static Allocation)

각 단말별로 수동으로 IP 주소를 설정하는 방법

시스템 관리자에게 할당할 수 있는 남은 IP 주소를 받아서 설정한다. 소ㆍ중규모 네트워크에서 사용한다.

언제, 어느 단말에, 어떤 IP 주소가 설정되었는지 알기 쉽다.

 

    4.2. 동적 할당(Dynamic Allocation)

각 단말에 대해 자동으로 IP 주소를 설정하는 방법

DHCP 서버와 클라이언트를 사용하여 자동으로 IP 주소를 할당한다. 대규모 네트워크에서 사용한다.

 └ DHCP : Dynamic Host Configuration Protocol

언제, 어느 단말에, 어떤 IP 주소가 설정되었는지 알기 어렵다.

 

4.2.1. IPv4 동적 할당

IPv4에서는 DHCPv4를 사용하여 동적 할당을 한다.

DHCPv4 서버는 네트워크에 연결하기 위해 필요한 설정(IPv4 주소, DNS 서버 주소 등)을 배포하는 프로토콜이다.

DHCPv4는 유니캐스트와 브로드캐스트를 사용하면서 UDP로 데이터를 교환한다.

 

4.2.2. IPv6 동적 할당

IPv6에서는 SLAAC과 DHCPv6 방법을 사용하여 동적 할당을 한다.

 

SLAAC(StateLess Address Auto Configuration)

라우터에서 배포하는 네트워크 정보를 기반으로 IPv6 주소를 자동 설정하는 기능이다.

Client는 RS(Route Solicitation)라는 멀티캐스트 패킷을 사용해 같은 네트워크의 모든 라우터에 질문한다.

Server는 RA(Route Advertisement)라는 유니캐스트 패킷을 사용해 응답한다.

패킷은 ICMPv6 패킷으로 교환하며, 유니캐스트 패킷은 모두 링크 로컬 주소를 사용한다.

 

DHCPv6

DHCP만이 아니라 RS/RA와 같이 연계해서 동작한다.

Client는 라우터와 RS/RA를 교환하고, 멀티캐스트 패킷을 사용해 Server를 찾는다.

DHCPv6 Server는 정보를 반환하는데 멀티캐스트 이외에 패킷은 모두 링크 로컬 주소를 사용한다.

스테이트풀 모드(Stateful Mode) : DHCPv6 서버가 DNS IP 주소와 IPv6 주소를 함께 배포한다.

스테이트리스 모드(Stateless Mode) : DHCPv6 서버가 옵션 설정만 배포하고 IPv6 주소는 SLAAC에서 자동 생성한다.

 

    4.3. DHCP 릴레이 에이전트

DHCP는 v4나 v6에 상관없이 모두 Client와 Server가 같은 네트워크에 있는 것을 전제로 한다.

DHCP Relay Agent 기능은 DHCP 패킷을 유니캐스트로 변환하는 기능이다.

이때 DHCP Client로부터 첫 번째 홉에 있는 라우터에서만 유효한 기능이다.

유니캐스트이기에 다른 네트워크에 DHCP 서버가 있어도 IP 주소를 배포하지 못한다.

많은 네트워크가 있어도 1대의 DHCP 서버로 관리할 수 있다.

 

5. NAT

좁은 의미의 NAT부터 넓은 의미의 NAT까지

NAT(Network Address Translation)이란, Private IP 주소를 Global IP 주소로 변환하는 기술이다.

NAT를 사용하면 부족한 글로벌 IP 주소를 절약하고, 같은 네트워크 주소를 가진 시스템 간 통신할 수 있게 한다.

MAC 주소 테이블, 라우팅 테이블, ARP 테이블처럼 NAT 테이블이라는 메모리상의 테이블로 관리한다.

 

    5.1. 정적 NAT

정적 NAT(1:1 NAT)

내부와 외부 IP 주소를 1:1로 묶어서 변환하는 Static NAT(정적 NAT)이다.

NAT 테이블에는 내부 IP와 외부 IP를 묶는 NAT Entry를 가지고 있다.

서버를 인터넷에 공개하거나 특정 단말이 특정 IP 주소로 인터넷과 데이터를 교환할 때 사용한다. 

 

    5.2. NAPT

NAPT(N:1 NAT)

내부와 외부의 IP 주소를 N:1로 연결해서 변환하는 NAPT(Network Address Port Translation)이다.

 └ IPMASQ(IP Masquerade 또는 MASQ)라고도 부른다.

​NAT 테이블에는 (내부 IP 주소 + 포트 번호)와 (외부 IP 주소 + 포트)를 묶는 NAT Entry를 동적으로 추가, 삭제한다.

 

    5.3. CGNAT

CGNAT

CGNAT(Carrier Grade NAT)은 NAPT를 통신 사업자나 ISP(Internet Service Provider)에서 사용할 수 있게 확장한 것이다.

CGNAT에는 포트 할당 기능, EIM/EIF 기능, 헤어핀 NAT, 커넥션 리미트의 4가지 기능이 있다.

 

포트 할당 기능

NAPT의 테이블(내부를 여러 개 외부는 단일)과는 다르게 CGNAT는 '포트 할당 기능'을 사용해 테이블을 구성한다.

한 IP 주소당 할당가능한 포트 번호(64512 = 65535 - 1024 - 1)도 제한적이라 많은 기기가 필요한 경우 사용한다.

이 경우에 테이블에는 여러 개의 내부 IP 주소와 포트, 여러 개의 외부 IP 주소와 포트가 적혀있다.

 └ 이 포트 할당 기능은 포트 번호를 어떻게 할당하는 가에 따라 정적 할당, PBA, 동적 할당으로 나눈다.

 └ 얼마만큼의 사용자를 연결할 것인가(집약 효율), 어떤 사용자를 특정할 것인가(로그 출력량)

 

포트 할당 기능 3가지 비교

정적 할당

사용자에게 미리 정한 포트 번호를 정적으로 할당하는 방법

사용자에 상관없이 '여기부터 여기까지는 어떤 사용자'라는 형태로 포트 번호를 할당한다.

PBA와 동적 할당에 비해 집약 효율은 낮지만, 로그를 얻을 필요가 없다.

 

PBA(Port Block Allocation)

정적 할당과 동적 할당 중간 위치에 있는 포트 할당 방법

사용자에게 지정한 포트 블록(포트 번호의 범위)을 동적으로 할당한다.

정적 할당보다 집약 효율이 높고 로그를 얻을 필요가 있고, 동적 할당보다 집약 효율이 낮고 로그 출력량을 억제할 수 있다.

 

동적 할당

사용자에게 포트 번호를 동적으로 할당하는 방법

모든 포트 번호를 어떤 사용자에게든 유효하게 할당한다.

집약 효율은 높지만, 언제 누가 어느 번호를 사용하는지 확인하는 로그를 전부 기록해야 한다.

 

EIM/EIF 기능(Full Cone NAT)

EIM(Endpoint Independent Mapping)은 수신지가 달라도 같은 송신지 IP 주소와 송신지 포트 번호를 가진 통신에는 일정 시간 동안 같은 전체 주소와 포트 번호를 계속 할당할 수 있는 기능이다.

EIF(Endpoint Independent Filter) 기능는 EIM에 따라 할당된 전체 주소와 포트 번호에 대해 Inbound Connection을 일정 시간 동안 받을 수 있는 기능이다.

 └ Inbound Connection : 인터넷으로부터의 통신

EIM과 EIF 기능을 모두 활성화한 NAT를 Full Cone NAT라고 부른다. (Ex. P2P 통신)

 

Hairpin NAT

Hairpin NAT는 같은 CGNAT 장치 내에 있는 사용자 단말 간에 글로벌 IPv4 주소를 통한 반환 통신을 한다.

Full Cone NAT가 외부 단말과의 통신이었다면, Hairpin NAT는 내부 단말 사이의 통신이다.

 

Connection Limit

Connection Limit(커넥션 리미트)

1대의 단말이 사용할 수 있는 포트의 수를 제한하는 기능이다.

1대의 사용자 단말이 사용 가능한 포트 수를 제한해 모든 사용자가 공평하게 포트를 사용할 수 있게 한다.

 

    5.4. NAT 트래버설(NAT 초월)

NAT 내의 단말은 Private IP 주소만 있어 인터넷을 경유하여 직접 통신할 수 없다.

밑의 4가지 기술들은 NAT Traversal로 단말끼리 직접 통신할 수 있는 방법들이다.

 

Port Forwarding

Port Forwarding(포트 포워딩)

특정 IP 주소와 특정 포트 번호에 대한 통신을, 미리 설정한 내부 단말로 전송하는 기능

내부(LAN)에 있는 서버를 외부(인터넷)에 공개할 때 주로 사용한다.

 

UPnP

UPnP(Universal Plug n Play)

단말 요청에 따라 자동으로 포트 포워딩하는 기능

단말은 네트워크에 접속하면 라우터를 검색하고 포트 포워딩을 요청, 이에 대해 동적으로 포트 포워딩을 한다.

 

STUN

STUN(Session Traversal Utilities for NATs)

UDP(User Datagram Protocol)를 사용해 외부(인터넷)로부터 외부(LAN)에 대한 통신을 허가하는 기능

 └ UDP Hole Punching(UDP 홀 펀칭)이라고도 부른다.

 

TURN

TURN(Traversal Using Relay around NAT)

TURN 서버를 통한 통신 기능. 각 단말은 서버에 접속해 서버를 통해 데이터를 교환한다.

직접 통신이 아니라 지연이 발생하지만 STUN보다는 가볍다는 것이 장점이다.

 

6. IPv4와 IPv6의 공용 기술

IPv4와 IPv6는 같은 IP이지만 버전과 규격이 다르기 때문에 직접적인 호환이 안 된다.

IPv4와 IPv6가 상호 통신하기 위한 기술이 있다.

 

    6.1. 듀얼 스택

Dual Stack

하나의 단말에 IPv4 주소와 IPv6 주소를 모두 할당하는 기술이다.

IPv4 단말과 통신할 때는 IPv4를, IPv6 단말과 통신할 때는 IPv6을 사용한다.

기존에 IPv4 주소만을 가지고 있고 IPv6에 대응해야 할 때, 기존 IPv4에는 영향이 크게 없다는 장점이 있다.

하지만, IPv4와 IPv6를 모두 관리해야 하기에 부하가 많이 걸린다는 단점이 있다.

 

    6.2. DNS64/NAT64

DNS64 / NAT64

DNS 서버를 이용해 IPv6 단말이 IPv4 단말과 통신할 수 있게 하는 기술이다.

 └ DNS(Domain Name System) : www.google.com 같은 도메인을 173.194.126.240 같은 IP 주소와 묶어 변환하는 기술

자신의 네트워크가 IPv6라고 해도 상대 네트워크가 IPv6이라고 확신할 수 없다. 그래서 DNS와 NAT를 동시에 사용한다.

 

    6.3. 터널링

Tunneling

Tunneling(터널링)은 IPv6(IPv4) 네트워크를 경유해 IPv4(IPv6) 패킷을 전달하는 기술이다.

IPv6 네트워크를 경유해 IPv4 패킷을 전달하는 경우는 IPv4 over IPv6라고 하고,

IPv4 네트워크를 경유해 IPv6 패킷을 전달하는 경우는 IPv6 over IPv4라고 한다.

단말 간 같은 버전이지만 다른 네트워크에 연결해있고, 경로에 다른 버전의 네트워크가 있을 때 사용한다.

 

7. ICMPv4

ICMP(Internet Control Message Protocol)은 IP 레벨의 통신을 확인하거나 에러를 알리는 역할이다.

IPv4 포맷으로 구성한 ICMPv4와 IPv6 포맷으로 구성한 ICMPv6가 있다.

어떤 네트워크 단말이 어떤 경우라도 IP와 ICMP는 반드시 함께 구현해야 한다.

 

    7.1. ICMPv4의 패킷 포맷

ICMPv4 패킷 포맷

RFC791에서 'Internet Protocol'로 정의한 IP를 확장한 프로토콜이다.

RFC792에서 'Internet Control Message Protocol'로 표준화하였다.

ICMPv4는 IPv4에 ICMP 메시지를 직접 입력한, 프로토콜 번호 1의 IPv4 패킷이다.

 

ICMPv4 타입과 코드

ICMPv4를 구성하는 필드 중 중요한 '타입'과 '코드'를 정리해놓은 표이다.

이러한 것들이 있구나하고 확인하고 넘어가자.

 

    7.2. 대표적인 ICMPv4의 동작

Echo Request / Echo Reply

Echo Request / Echo Reply는 IP 레벨의 통신 상태를 확인할 때 사용하는 패킷이다.

네트워크 계층의 소통을 확인하고, Echo Reply가 돌아오면 상위 계층의 소통을 확인한다.

Echo Reply가 돌아오지 않으면 하위 계층 방향으로 소통을 확인한다.

 

명령 프롬프트에서 ping 명령어를 실행하면 타입이 8, 코드가 0인 Echo Request를 송신한다.

Echo Request를 받은 단말은 타입이 0, 코드가 0인 Echo Reply를 반환한다.

 

Destination Unreachable

Destination Unreachable(수신지 도달 불가)는 IPv4 패킷을 수신 단말까지 라우팅하지 못 하면 에러를 알리는 패킷이다.

라우팅에 실패한 라우터는 IP 패킷을 파기함과 동시에 타입이 3인 패킷을 반환한다. 이때 코드는 파기 사유마다 다르다.

 

라우팅 루프가 발생한 경우(왼쪽), TTL이 1이 될 때까지 루프하는 경우(오른쪽)

Time To Live Exceeded(TTL Exceeded)는 IPv4 패킷의 TTL이 0이 되어 파기했을 때 송신지 단말에게 알리는 패킷이다.

라우팅 루프 방지와 통신 경로 확인의 2가지 역할을 수행한다.

 

라우팅 루프 방지

라우팅 루프(Routing Loop)는 라우팅 설정 실수에 의해 IP 패킷이 여러 라우터를 돌기만 하는 현상이다.

이를 방지하기 위해 TTL이 0 된 시점에서 TTL Exceeded를 반환한다.

 

통신 경로 확인

TTL을 1씩 증가시키면서 패킷을 보내 수신지 IP 주소까지 경로를 확인하는 방법이다.

처음에는 TTL 1, 다음에는 TTL 2 ... 이런 식으로 수신지 IP 주소에 닿을 때까지 반복한다.

명령 프롬프트에서는 traceroute(Linux의 경우), tracert(Windows의 경우)로 확인할 수 있다.

 

8. ICMPv6

    8.1. ICMPv6의 패킷 포맷

ICMPv6 패킷 포맷

RFC4443에서 'Internet Control Message Protocol for thr Internet Protocol Version 6 Specification'으로 표준화했다.

ICMPv6는 IPv6에 ICMP 메시지를 직접 입력한, 프로토콜 번호 58의 IPv6 패킷이다. 

 

ICMPv6 타입과 코드

 

    8.2. 대표적인 ICMPv6의 동작

ICMPv6에서는 ICMPv4에 있는 동작들(Echo, Destination Unreachable) 외에 NDP 기능을 제공한다.

 └ NDP(Neighbor Discovery Protocol) : 근접 탐색 프로토콜

 

IPv6 DAD

IPv6 DAD

IPv4에서는 IP 주소 중복 확인을 위해 GARP를 사용한다. IPv6에서는 ICMPv6를 사용한다.

IPv6 단말은 SLAAC과 DHCPv6 서버를 통해 IP 주소를 설정하는데, ICMPv6에서 DAD 코드를 처리한다.

 └ DAD(Duplicate Address Detection) : 중복 주소 감지

 

SLAAC에서 IP 주소를 사용해도 괜찮은지 주고 받는 코드가 RS(Route Solicitation) RA(Route Advertisement)이다.

여기서는 NS(Neighbor Solication) 패킷을 송신하고, NA(Neighbor Advertisement) 패킷이 돌아오면 중복 주소로 판단한다.

 

MAC 주소 학습 예시

수신지 IPv6 주소에서 수신지 MAC 주소 구하기

IPv4에서는 ARP를 사용해서 MAC 주소를 구한다. IPv6에서는 ICMPv6의 NS와 NA 패킷을 사용한다.

동작 순서는 ARP와 크게 다르지 않으면 NS 패킷으로 질문하고 NA 패킷으로 응답받는 형식이다.

 

RS와 RA 패킷 송수신 예시

네트워크 정보 제공

SLAAC과 DHCPv6 Stateless Mode는 라우터로부터 네트워크 정보를 받아 IPv6 주소를 생성한다.

RS와 RA 패킷을 주고 받는 위의 과정에서도 ICMPv6를 사용한다.

 └ IPv6 링크 로컬 주소가 설정되면 타입이 133인 RS 패킷을 송신해 네트워크 정보를 문의한다.

 └ 라우터는 MAC 주소, MTU 크기, 프리픽스 등의 정보를 타입이 134인 RA 패킷에 넣어 반환한다.

 └ 라우터는 'ff02::1(모든 단말)'에 대해 정기적으로 RA 패킷을 송신한다.

 

9. IPsec

IPsec(Security Architecture for Internet Protocol)은 가상화 기술이다.

 └ 네트워크 계층에서 IP 패킷의 캡슐화, 인증, 암호화, 가상 터널을 만드는 등 여러 방면에 사용한다.

 

    9.1. 거점 간 VPN과 원격 액세스 VPN

거점 간 IPsec VPN

IPsec Site-to-Site VPN

세계 각지의 거점(본사, 지사, 클라우드 환경 등)을 전용선으로 모두 연결하기에는 막대한 비용이 든다.

IPsec을 활용해 가상으로 인터넷 터널을 만들고 거점 네트워크를 연결한다. 그 후 전용선을 연결한 것과 같이 사용한다.

 

원격 접근 IPsec VPN

Remote Access IPsec VPN

VPN 전용의 가상 NIC을 만들고, VPN 장치(라우터나 방화벽)에 IPsec 터널을 만들어 사용한다.

모바일 사용자(개인)나 원격 근무지(가정)에서도 사용할 수 있는 IPsec 방식이다.

 

    9.2. IPsec 프로토콜의 기능

IKE, ESP, AH의 3개의 프로토콜을 조합해 VPN을 만드는데 필요한 기능을 제공한다.

ESP와 AH 양자택일 같은 사항이라 보통 같이 이야기한다.

 

IKE(Internet Key Exchange)

안전한 통신을 위해 IPsec 터널을 만들기 전에 준비를 한다. 이때 사용하는 프로토콜이 IKE이다.

IKE는 송신지와 수신지 포트 번호가 모두 500인 UDP 패킷으로 IKEv1, IKEv2 2가지가 있다.

IPv4, IPv6처럼 상호 호환하지 않아 각각 설명한다.

 

Phase 1과 Phase 2의 설정 사항
Phase 1과 Phase 2 모드의 흐름

IKEv1

Phase 1(단계 1)과 Phase 2(단계 2)로 나눈다.

 

Phase 1에서는 터널을 제어하는 ISAKMP SA를 만든다.

 └ ISAKMP SA(Internet Secutiry Association and Key Management Protocol)

ISAKMP SA를 만들기 위해 위의 설정 표에 따른 설정과, 암호키 공유 방식, 접속 상대 인증을 진행한다.

데이터 교환 순서에는 'Main Mode(메인 모드)'와 'Aggresive Mode(어그레시브 모드)'가 있다.

Main Mode에서는 설정 합의 > 암호키 공유 > 연결 상대 인증의 3단계를 거친다.

 └ 연결까지 시간이 다소 걸리지만, 보안 수준이 높다.

Aggresive Mode에서는 Main Mode 3단계를 간략화하여 한 번에 수행한다.

 └ 단계를 축약해 소요 시간은 짧지만, 보안 수준이 낮다.

 

Phase 2에서는 데이터를 교환하는 IPsec SA를 만든다.

IPsec SA를 만들기 위해 위의 설정 표에 따른 설정과, 암호키를 공유하고 IPsec을 2개를 만든다.

 └ 상향 통신용과 하향 통신용으로 2개를 만든다. Full Duplex 통신을 위해서 2개를 만든다.

ISAKMP SA는 계속 남아 암호키 교환을 관리한다.

 

IKEv2

IKEv2

시간이 지나 다양한 확장 기능과 기기, 제조사 등이 추가됨에 따라 발생하는 호환성 문제를 해결하기 위해 고안했다.

IKE_SA_INIT과 IKE_AUTH 2단계로 나눈다.

 

IKE_SA_INIT은 터널을 제어하는 Connection인 IKE SA를 만든다. IKEv1의 Phase 1 같은 역할이다.

IKE_AUTH은 실제 데이터를 교환하는 터널인 Child SA를 만든다. IKEv1의 Phase 2 같은 역할이다.

 

IKEv1과 IKEv2 비교

 

ESP

ESP(Encapsulating Security Payload) / AH(Authentication Header)

IKE를 통해 사전 준비가 완료되면, IPsec/Child SA에서 데이터 전송을 시작한다.

ESP 또는 AH의 프로토콜을 사용하는데 ESP는 암호화 기능이 있고, AH는 암호화 기능이 없다.

IPsec/Child SA에는 터널 모드와 트랜스포트 모드가 있다.

 

터널 모드는 오리지널 IP 패킷을 새로운 IP 헤더로 캡슐화하는 모드이다.

 └ IPsec Site-to-Site VPN이나 Remote Access IPsec VPN에서 사용한다.

트랜스포트 모드는 오리지널 IP 패킷에 터널용 헤더를 삽입한 모드이다.

 └ L2TP over IPsec에서 사용한다.

 

NAT Traversal

NAT Traversal

IKE 프로토콜을 통해 상호 간에 NAT 트래버설에 대응하는지, NAPT 기기가 존재하는지 확인한다.

그 후 송수신지 포트 번호를 500에서 4500번으로 바꾼 UDP 통신을 수행한다.