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주소와 포트번호를 포함한다.

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. 터널링

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검색 추가 작업 규칙에서 일치(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 예

예시, 네트워크 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 포워딩 : 데이터그램의 목적지 주소를 기반으로 함
일반적인 포워딩 : 포워딩과 다른 기능들이 데이터그램의 헤더에 여러가지 다른 필드 값을 사용하여 실행됨
'컴퓨터 네트워크' 카테고리의 다른 글
5단원 네트워크 계층: 제어평면-3 (0) | 2022.10.10 |
---|---|
5단원 네트워크 계층: 제어평면 -2 (0) | 2022.10.10 |
5단원 네트워크 계층: 제어평면 -1 (0) | 2022.10.09 |