본문 바로가기

카테고리 없음

CN (ch.4) 8-2

네트워크 계층은 크게 데이터 평면과 제어 평면으로 나뉜다.

데이터 평면(Data Plain): 라우터의 인풋 포트에서 들어온 데이터그램을 아웃풋 포트로 전달하는 라우터벌 로컬 액션을 수행함 (= 포워딩)

제어 평면(Control Plain): 네트워크 전체 경로를 결정하는 로직을 수행함 (= 라우팅)

 

네트워크 계층에는 아래 기능들이 존재한다.

 

IP 프로토콜: 데이터그램 형식, 주소 지정, 패킷 처리 규칙 정의

ICMP(Internet Control Message Protocol): 오류 보고 및 라우터 신호에 사용됨 - 데이터를 보내는 것 외에, '저기로 보냈는데 여기에 문제가 생겼다'와 같은 오류 보고 & '네트워크 상태를 알리는 신호' 역할을 수행함

포워딩 테이블: 라우터가 패킷을 전달할 때 참조하는 테이블

경로 선택 알고리즘: 라우팅 프로토콜(OSPF, BGP) 또는 SDN 컨트롤러 구현됨

 

IP 데이터그램을 통해 알 수 있는 정보

+

오버헤드: TCP 세그먼트 전송 시, 일반적으로 TCP 20바이트 + IP 20바이트 = 최소 40바이트의 오버헤드 발생함

최대 길이: 64K바이트(이론적), 일반적으로 1500바이트 이하

 

IP 데이터그램 헤더에서 정보를 알 수 있다.

ex. ver: IPv4 / IPv6 형식 구분 가능

TTL: 수명 지정, 라우터를 하나 지날 때마다 수명이 1씩 감소 - 0이 되면 버려짐 (무한 루프 방지)

상위 계층: 페이로드(내용물)을 TCP가 보낸 것인지 UDP가 보낸 것인지 정보를 알려 줌. 라우터는 해당 필드를 보고 이 데이터그램을 다음 계층인 전송 계층에 어떤 프로토콜(TCP or UDP)에 전달해야 할지 알게 됨.

단편화 관련 필드: 데이터그램이 너무 커서 작은 조각(단편)으로 나뉘었을 때, 원래대로 합치기 위해 필요한 정보들


IP 주소: 각 호스트 또는 라우터 인터페이스에 연결된 32비트 식별자

인터페이스: 호스트/라우터와 물리적 링크(유선 이더넷, 무선 802.11 등) 간의 연결점

- 라우터는 일반적으로 여러 개의 인터페이스를 가짐

- 호스트는 일반적으로 1-2개의 인터페이스를 가짐

점-십진 표기법: 32비트 주소를 8비트씩 네 부분으로 나누어 십진수로 표현함 (ex. 233.1.1.1)

 

서브넷: 중간 라우터를 거치지 않고 물리적으로 서로 통신할 수 있는 장치 인터페이스들의 집합

IP 주소 구조: IP 주소는 서브넷 부분과 호스트 부분으로 나뉨 - 동일한 서브넷에 있는 장치들은 IP 주소의 상위 비트인 서브넷 부분을 공유함

 

서브넷을 정의할 때는 각 인터페이스를 호스트나 라우터에서 분리하여 격리된 네트워크 섬을 만듦 - 그리고 이렇게 격리된 네트워크를 서브넷이라고 함

서브넷 마스크: /x으로 표기, 주소의 상위 x 비트가 서브넷 부분을 나타냄 - ex. 233.1.1.0/24일 시 상위 24비트가 서브넷 부분임을 의미

 

CIDR(Classless Inter Domain Routing): 서브넷 부분이 임의의 길이를 가질 수 있도록 함 - 과거에 클래스 기반으로 주소를 지정하여 고정되어 있었던 서브넷의 길이 제한을 제거한 방식

주소 형식은 서브넷 마스크에 표기된 것과 같음 - 상위 24비트가 서브넷 부분, 나머지 하위 비트는 호스트 부분

CIDR의 도입을 통해 필요한 만큼만 주소를 할당할 수 있게 되어 IP 주소 낭비를 줄이고 라우팅 정보를 효율적으로 관리할 수 있게 됨

 

호스트가 IP 주소를 얻는 방법

하드 코딩: 시스템 관리자가 구성 파일에 수동으로 입력

DHCP(Dynamic Host Configuration Protocol): 서버로부터 주소를 동적으로 할당받는 '플러그 앤 플레이' 방식

 

DHCP를 통해 호스트는 네트워크에 참여할 때, 네트워크 서버로부터 IP 주소를 동적으로 얻을 수 있게 됨 (4단계의 프로세스를 거침)

1. Discover, 발견: 호스트가 DHCP discover 메시지를 브로드캐스트하여 DHCP 서버를 찾음 (선택 사항)

2. Offer, 제안: DHCP 서버가 사용 가능한 IP 주소를 포함한 DHCP offer 메시지로 응답함 (선택 사항)

3. Request, 요청: 호스트가 제안받은 IP 주소를 사용하겠다고 DHCP request 메시지를 브로드캐스트 함

4. ACK, 확인: DHCP 서버가 주소 할당을 승인하는 DHCP ack 메시지를 보냄

+) 이전에 할당된 주소를 기억하고 재사용하려는 경우, Discover와 Offer 단계를 건너뛸 수 있음

 

위 과정을 비유하자면 아래와 같음

ex. 새로운 학생이 기숙사에 들어와 방(IP 주소)을 배정받는 상황이라고 가정

Discover: 저 방 필요해요 (모두에게 브로드캐스트)

Offer: 204호 비었습니다 (DHCP 서버가 제안)
Request: 204호 쓸래요 (모두에게 브로드캐스트하여 다른 서버의 제안을 거절)

ACK: ㅇㅋ 너 204호 써라 관리자 전화번호랑 현관 비밀번호 알려 줄게 (IP 주소, 라우터 주소, DNS 서버 주소 등을 확정)

 

DHCP는 IP 주소 외에도 아래 3가지의 정보를 추가적으로 제공함

- 클라이언트의 첫 번째 홈 라우터(Default Gateway) 주소

- DNS 서버의 이름 및 IP 주소

- 네트워크 마스크 (네트워크 부분, 호스트 부분)


네트워크는 아래와 같은 방법으로 서브넷 주소를 얻는다.

ISP 할당: 네트워크는 서비스 제공자 ISP 주소 공간 중 일부를 할당받음

계층적 주소 지정(Hierarchical Addressing): ISP는 할당받은 주소 블록을 다시 여러 조직에 나누어 할당함

ex. ISP 블록: 200.23.16.0/20 (총 4,096개의 주소) -> 조직 0 할당: 200.23.16.0/23 (총 512개 주소)

 

계층적 주소 지정은 라우팅 정보를 효율적으로 광고할 수 있도록 함.

상위 ISP는 하위 네트워크의 모든 주소를 개별적으로 광고하는 대신, 하나의 큰 집계된 주소 블록(/20)만 광고해 라우팅 테이블 크기를 줄임

더 구체적인 경로(More Specific Routes): 만약 조직이 ISP를 변경하면, 새롱누 ISP는 해당 조직의 주소에 대하여 더 구체적인 경로(/23)를 광고할 수 있음. 라우터는 항상 가장 구체적인 경로인 최장 프리픽스 매칭을 선택함.

 

ICANN((nternet Corporation for Assigned Names and Numbers): IP 주소를 할당하고 DNS 루트 존을 관리함 - 5개의 레지스트리(RRs)를 통해 IP 주소를 할당함

IPv4 주소 공간 고갈 문제 때문에 NET과 IPv6가 도입되었음


NAT(Network Address Translation): 로컬 네트워크(ex. 홈 네트워크)의 모든 장치가 외부 세계에 대해 단 하나의 공인 IPv4 주소를 공유하돌고 하는 기술

로컬 네트워크 내의 장치는 사설 IP 주소 공간(10.0.0/8, 192.168/16)의 주소를 사용함

 

NAT 라우터는 아래 작업을 투명하게 수행함

- 발신 데이터그램: 소스 IP 주소, 포트 번호를 NAT IP 주소, 새로운 포트 번호로 대체함

- NAT 변환 테이블(Translation Table) 기록: 원래의 소스 IP 주소, 포트 번호와 변환된 쌍을 저장함

- 수신 데이터그램: 도착한 데이터그램의 목적지 필드 NAT IP 주소, 새로운 포트 번호를 NAT 테이블에서 찾아 원래의 소스 IP 주소, 포트 번호로 대체함

하나의 공인 IP 주소를 여러 내부 장치가 공유할 수 있는 핵심은 포트 번호를 사용하여 내부 장치를 구분하기 때문임

 

문제점

- 계층 위반: 라우터는 원래 3계층(네트워크 계층)까지만 처리해야 하지만, NAT은 4계층 정보(포트 번호)를 조작하기 때문에 End-to-End 원칙을 위반함

- 주소 고갈 해결책이 아님: IP 주소 부족은 IPv6로 해결해야 할 문제였음

- NAT Traversal 문제: NAT 뒤에 있는 서버에 외부 클라이언트가 먼저 연결하기 어려움

 

IPv6 도입 동기

- 주소 공간 고갈: 32비트의 IPv4 주소 공간의 완전 고갈이 예상되어 있었음

- 처리/전달 속도 향상: 40바이트 고정 길이 헤더를 사용해 처리 속도를 높임

- 흐름(Flow)별 처리: 서로 다른 네트워크 계층 처리가 가능하도록 함

 

IPv6 데이터그램 형식

주소 길이: 128비트

헤더 길이: 40바이트 고정

IPv4에서 아래 3가지 항목이 제거됨

- 체크섬(Checksum): 라우터에서 처리 속도를 높이기 위해 제거 - 신뢰성은 링크 계층과 전송 계층에서 처리함

- 단편화/재조립: 라우터가 아닌 송신 호스트에서만 수행됨

- 옵션: 상위 계층, 또는 next-header 프로토콜로 대체되어 라우터에서 처리되지 않음

 

모든 라우터를 동시에 업그레이드할 수 없으므로, IPv4와 IPv6이 혼합된 네트워크에서 동작해야 함

터널링: IPv6 데이터그램을 IPv4 데이터그램의 페이로드로 캡슐화하여 IPv4 라우터 네트워크를 통과하도록 하는 방식 - 패킷 속의 패킷

IPv4 헤더→[IPv6 헤더+IPv6 페이로드 (UDP/TCP 페이로드)]


SDN, 일반화된 포워딩

전통적인 라우터의 포워딩은 목적지 IP 주소를 기반으로 다음 홉을 결정하는 방식이었음.

일반화된 포워딩: 도착하는 패킷의 비트를 매칭(Match)하고, 그에 따라 액션을 취하는 게 추상화된 개념

특징

- 다양한 헤더 필드(네트워크, 링크, 전송 계층)를 기반으로 액션을 결정할 수 있음

- 다양한 액션 가능 ex. 드롭, 포워딩, 수정, 로깅, 컨트롤러로 전송 등

- 흐름 테이블(Flow Table): 라우터의 매치 + 액션 규칙 정의

 

Flow Table 추상화

Flow: 링크, 네트워크, 전송 계층 헤더 필드 값으로 정의

 

OpenFlow: 매치+액션을 실제로 구현하는 프로토콜

매치: IP, TCP/UDP 포트 등 다양한 계층의 헤더 필드 매치 가능

액션: 특정 포트로 패킷 전달, 패킷 드롭, 헤더 필드 수정, 캡슐화하여 컨트롤러로 전달 등