컴퓨터 네트워크

4단원 네트워크 계층: 데이터 평면

YJ_ma 2022. 10. 9. 16:41

4.3.4 네트워크 주소 변환(NAT)


모든 IP활용 장치에는 IP주소가 필요하다. SOHO(small office, home office)가 장치를 연결하기 위해서 LAN을 설치할 때마다 ISP는 모든 SOHO의 IP장치(전화, 테블릿, TV)를 수용할 수 있는 주소 범위를 할당해야한다.

하지만 ISP가 해당 주소 범위에 인접한 부분에 이미 할당이 되었다면? IP주소가 어떻게 관리되는지 알고싶다면?

네트워크 주소변환(NAT)을 통해 주소할당을 한다.

 

사설망, 사설 개인 주소를 갖는 권역(realm)으로 부터 글로벌 인터넷과의 송수신을 처리하기 위해서는 NAT을 이용한다!

"NAT 가능한 라우터" (NAT 라우터)

- 외부 세계로는 라우터처럼 보이지않는다.

- 외부세계로는 하나의 IP주소를 갖는 하나의 장비로 동작한다.

- 외부에서 들어오는 홈 네트워크의 상세한 사항을 숨긴다.

 

NAT라우터로 데이터그램을 전달하는 내부 호스트를 알 수 있는 방법?

NAT라우터에서 NAT변환 테이블(NAT translation table)을 사용하고 그 테이블에 IP주소 포트번호 포함한다.

그림 4.25 네트워크 주소 변환

EX, 사용자 입장에서 호스트 10.0.0.1인 홈 네트워크가 IP주소 128.119.40.186인 웹서버(포트번호 80)에게
웹페이지를 요청

① 호스트 10.0.0.1은 임의의 출발지 포트번호 3345를 할당하고 LAN에게 데이터그램 전달

② NAT라우터는 데이터그램을 받아서 데이터그램에 대한 새로운 출발지 포트번호 5001을 생성하고, 

③ WAN쪽 IP주소 138.76.29.7 출발지 IP주소로 변경하고 포트번호 3325에서 5001로 변경한다.

④ 웹서버에서 NAT라우터의 IP주소인 목적지 주소(138.76.29.7)와 목적지 포트번호 5001로 라우터에게 데이터그램 전달

⑤ NAT라우터는 홈 네트워크 브라우저의 IP주소(10.0.0.1)와 목적지 포트번호(3345)로 NAT변환 테이블 작성

⑥ 홈 네트워크로 내부로 전달한다.

 

- 새로운 출발지 포트번호를 생성할 때, NAT 라우터는 NAT변환 테이블에는 없는 모든 출발지 포트번호를 선택할 수 있다.

- 포트 번호가 호스트 주소 지정이 아닌 프로세스 주소 지정에 사용되어 홈 네트워크 서버의 문제 발생할 수 있다.

NAT 순회(traversal)도구, 범용 플러그 앤 플레이(UPnP)를 사용

 

"철학적 논쟁"

라우터는 3계층(네트워크 계층)을 의미하며 네트워크 계층까지만 패킷을 처리해야 한다.

미들박스 : 기존의 데이터그램 전달을 수행하지 않지만 대신 NAT, 트래픽 흐름 부하분산과 트래픽 방화벽 등의 기능을 수행한다.

 

4.3.5 IPv6 


IPv6 발생 원인 : IPv4의 고갈

IPv6

- 확장된 주소 기능 : IP주소 크기가 32bit → 128bit로 확장, 새로운 주소 형태인 애니케스트 주소 도입되었다.

애니케스트 주소로 명시된 데이터그램은 호스트 그룹의 어떤 이에게도 전달이 가능

- 간소화된 40byte 헤더 : 라우터가 IP 데이터그램을 더 빨리 처리하고 옵션 부호화로 유연한 옵션 처리가 가능하다.

- 흐름 라벨링 : IPv6는 흐름(flow)을 가지고 있다.

RFC 2460은 "비 디폴트 품질 서비스나 실시간 서비스와 같은 특별한 처리를 요청하는 송신자에 대해 특정 흐름에 속하는 패킷 레이블링"을 가능하게 한다.

 

IPv6 데이터그램 포맷

버전(4bit) 트래픽 클래스(8bit) 흐름 라벨(20bit)
페이로드 길이(16bit) 다음헤더 홉제한
출발지주소(128bit)
목적지주소 (128bit)
데이터

- 버전 : IP버전 번호 인식, IPv6는 필드값 : 6

- 트래픽 클래스 : 특정 응용프로그램에 우선순위 부여

- 흐름 라벨 : 데이터그램의 흐름을 인식

- 페이로드 길이 : IPv6 데이터그램에서 고정 길이 40byte 패킷 헤더 뒤에 오는 바이트 길이, 부호없는 정수이다.

- 다음 헤더 : 데이터그램의 내용(데이터 필드)이 전달될 프로토콜(TCP or UDP)구분

- 홉 제한 : 라우터가 데이터그램을 전달할 때마다 -1, 0보다 작아지면 데이터그램 버린다.

- 출발지와 목적지 주소 : IPv6 128비트 주소의 다양한 형태

- 데이터 : IPv6 데이터그램의 페이로드 부분

 

IPv4 → IPv6 변화

① 단편화 / 재결합

IPv6에서는 단편화와 재결합을 출발지와 목적지(종단시스템)만이 수행한다.

라우터가 받은 IPv6 데이터그램이 너무 커서 출력 링크로 전달할 수 없으면 라우터는 데이터그램을 폐기하고 패킷이 크다는 ICMP오류를 송신자에게 보낸다.

② 헤더 체크섬

IPv4 헤더 체크섬은 모든 라우터마다 수행했다면 트랜스포트 계층 프로토콜(TCP나 UDP)과 링크 프로토콜에서 체크섬 수행하므로 기능 생략

③ 옵션

IPv6 헤더에서 "다음 헤더"중 하나가 될 수 있으므로 옵션 필드 제거하여 표준 고정길이 40byte IP헤더를 갖는다.

 

IPv4 → IPv6로의 전환 방법

이미 IPv4로 구축된 시스템은 IPv6 데이터그램을 처리할 수 없는 문제 발생!!

1. 플레그 데이(flag day) : 모든 인터넷 장비를 끄고 IPv4 IPv6로 업그레이드 하는 시간과 날짜를 결정 (불가능)

2. 터널링

그림 4.27 터널링

EX, 두 IPv6노드 (B, E)가 IPv6 데이터그램을 사용하여 작동한다. 이들은 IPv4라우터를 통해 연결되어 있다.

두 IPv6 (B, E) 사이에 있는 IPv4 라우터들(C, D)은 터널이라고 한다.

터널의 송신측에 있는 IPv6노드(B)는 IPv6데이터그램을 받고 IPv4 데이터그램의 데이터 필드에 넣는다.

 IPv4 데이터그램의 목적지 주소를 터널 수신측 IPv6 노드(E)로 적어서 터널의 첫번째 노드(C)에 보낸다.

터널 내부에 있는 IPv4 라우터는 IPv4 데이터그램에 IPv6 데이터그램을 가진 것을 모른채 전달한다.

터널 수신측에 있는 IPv6노드(E)는 IPv4데이터그램을 받고 실제 IPv6 데이터그램이라는 것을 결정하고 IPv6 데이터그램으로 만든다.

 IPv6 데이터그램을 IPv6노드(F)에 보낸다.

 

4.4 일반적인 포워딩 및 소프트웨어 기반 네트워크(SDN)


목적지 기반 포워딩 일반적인 포워딩
목적지 IP 주소("매칭")를 검색 후 패킷을 스위칭 구조로 지정된 출력포트("액션")로 포워딩하는 두 단계를 가진다. 각각의 패킷 스위치는 원격 컨트롤러에 의해 계산 및 분포된 검색 추가 작업 테이블을 포함하고 있다.

OpenFlow의 플로우 테이블(포워딩 테이블) 

- 들어오는 패킷에 대한 헤더 값들의 세트가 매칭될 것이다.

- 패킷들에 의해 업데이트 되는 카운터 세트는 플로우 테이블 요소들과 일치된다.

- 패킷이 플로우 테이블 항목과 일치될 때 여러가지 동작들이 가능해진다.(패킷 전달, 삭제 ,복사본)

 

4.4.1 매치(Match)


그림4.29 패킷매칭필드, OpenFlow 1.0 플로우 테이블

그림4.29는 OpenFlow 1.0검색 추가 작업 규칙에서 일치(match)할 수 있는 11개의 패킷 헤더 필드와 수신 포트 ID를 보여준다.

- OpenFlow의 일치 개념이 프로토콜 헤더의 세 계층에서 선택된 필드에 일치하도록 허용한다.

- 플로우 테이블 항목에는 와일드 카드도 있을 수 있다, 각 플로우 테이블 항목에는 관련 우선순위가 있다.

- IP헤더의 모든 필드가 일치 할 수 있는 것은 아니다.

ex, OpenFlow는 TTL 필드 또는 데이터그램 길이 필드에 기반한 일치를 허용하지 않는다.

 

4.4.2 액션(Action)


각 플로우 테이블 엔트리는 플로우 테이블 엔트리와 일치하는 패킷처리를 결정하는 0개 이상의 액션 목록을 가진다.

여러 액션을 가진 경우 목록에 지정된 순서대로 수행한다. 중요한 액션은 다음과 같다.

① 포워딩(forwarding) 

- 들어오는 패킷은 특정 출력포트로 전달 or 모든 포트를 통해 브로드캐스트 or 선택된 포트 세트를 통해 멀티캐스트

- 패킷은 캡슐화되어 원격 컨트롤러로 전송되면 컨트롤러는 새 플로우 테이블 항목을 설치하고 해당 패킷에 대해 조치를 취하거나 업데이트된 규칙에 따라 포워딩하여 패킷을 장치로 return할 수 있다.

② 드롭핑(dropping)

- 아무 동작이 없는 플로우 테이블 항목은 일치된 패킷을 삭제해야한다.

③ 수정필드(Modify-field)

- 패킷이 선택된 출력 포트로 전달되기 전에 10개의 패킷헤더 필드의 값을 다시 쓸 수 있다.

4.4.3 매칭-플러스-액션 작업의 OpenFlow 예


 

그림4,30 OpenFlow 컨트롤러, 6개의 호스트, 3개의 패킷스위치가 있는 OpenFlow 검색 추가 방법

예시,  네트워크
6개의 호스트 : h1, h2, h3, h4, h5, h6
3개의 패킷 스위치 : s1, s2, s3
4개의 인터페이스 : 1, 2, 3, 4번호 지정 

첫 번째 : 간단한 포워딩

h3 or h4로 예정된 h5 or h6의 패킷이 s3에서 s1로 전달 된 다음, s1에서 s2로 전달된다고 가정한다.

s1의 플로우 테이블(예 1)
매칭 액션
Ingress Port = 1; IP src = 10.3.*.*, IP Dst = 10.2.*.*
s3에서 s1로 인터페이스 1을 통해 왔으므로 Ingress Port = 1
Forward(4) 
s1은 인터페이스 4를 통해 s2로 가야한다.
s3의 플로우 테이블(예 1)
매칭 액션
IP src = 10.3.*.*, IP Dst = 10.2.*.* Forward(3) 
s3은 인터페이스 3를 통해 s1로 가야한다.
s2의 플로우 테이블(예 1)
매칭 액션
Ingress Port = 2; IP Dst = 10.2.0.3
Ingress Port = 2; IP Dst = 10.2.0.4
Forward(3)
Forward(4)

두 번째 : 부하 균등화(Load Balancing) - 목적지기반 포워딩x

h3에서 10.1.*.*로 향하는 데이터그램이 s2와 s1사이의 링크를 통해 전달된다.

h4에서 10.1.*.*로 향하는 데이터그램이 s2와 s3사이의 링크를 통해 전달된다.

s2의 플로우 테이블(예 2)
매칭 액션
Ingress Port = 3; IP Dst = 10.1.*.*
인터페이스 3으로 들어오면 h3에서 데이터그램이 들어온것이므로 인터페이스 2로 이동하여 s3으로 이동한다.
Ingress Port = 4; IP Dst = 10.1.*.*
인터페이스 4로 들어오면 h4에서 데이터그램이 들어온 것이므로 인터페이스 1로 이동하여 s1으로 이동한다.
Forward(2)
Forward(1)

두 번째 : 방화벽

s2가 s3에 연결된 호스트에서 보낸 트래픽만 수신한다.

s2의 플로우 테이블(예 3)
매칭 액션
IP Src = 10.3.*.* IP Dst = 10.2.0.3
목적지가 h3이면 인터페이스 3으로 이동한다.
IP Src = 10.3.*.* IP Dst = 10.2.0.4
목적지가 h4이면 인터페이스 4로 이동한다.
Forward(3)
Forward(4)

4.5 요약


네트워크 계층의 데이터 평면 기능을 다루었다. 이 기능은 라우터의 입력 링크 중 하나에 도착하는 패킷이 라우터의 출력 링크 중 하나로 전달되는 방식을 결정하는 퍼 라우터(per-router)기능이다. 

전통적인 IP 포워딩 : 데이터그램의 목적지 주소를 기반으로 함

일반적인 포워딩 : 포워딩과 다른 기능들이 데이터그램의 헤더에 여러가지 다른 필드 값을 사용하여 실행됨