IPv4 주소 체계
IP 주소는 정확하게 말하면 호스트나 라우터의 주소가 아니라 그들의 인터페이스의 주소이다.
호스트와 물리적 링크 사이의 경계를 인터페이스(interface)라고 부른다. 라우터는 2개 이상의 연결된 링크가 필요하다. 라우터와 이런 링크 사이의 경계 또한 인터페이스라 하는데, 각 링크마다 하나의 인터페이스를 갖고 하 나의 라우터는 여러 개의 인터페이스를 갖는다. 호스트 또한 wired Ethernet, wirelss 802.11 와 같이 두 개 이상의 인터페이스를 보유할 수 있다.
서브넷 Subnet
서브넷은 라우터를 거치지 않고 물리적으로 연결된 인테페이스 네트워크로, 라우터와 호스트 사이의 영역이다.
위 그림에서 푸른 색으로 칠해진 부분이 각각 하나의 서브넷이라고 볼 수 있다.
왼쪽 위 서브넷을 살펴보면 모두 223.1.1.x 의 주소를 가진다. 즉 상위 24비트는 서브넷을 위한 주소임을 알 수 있다.
위 그림에서는 서브넷 이름에 24와 같은 수가 붙은 것을 볼 수 있는데, 이것은 subnet mask 서브넷 마스크로, 상위 24비트까지가 서브넷 주소임을 표기한다. 이를 CIDR 표기법이라고 한다.
IP 주소 체계 : CIDR (Classless InterDomain Routing)
인터넷 주소 할당 방식에 CIDR(Classless InterDomain Routing) 라는 것이 있다. CIDR는 서브넷 주소체계로서, 32비트 IP 주소는 두 부분으로 나누고, 이것은 다시 점으로 된 십진 수
a.b.c.d/x
의 형태를 가지며, 여기서 x는 주소 첫 부분의 비트 수다. CIDR 전 클래스 주소체계에 비해 세분화되고 유연한 서브넷의 크기를 지정할 수 있서 훨씬 효율적이다.
동적 호스트 구성 프로토콜 : DHCP
호스트가 주소를 어떻게 얻을까? 네트워크 관리자가 고정된 주소를 부여하는 방법이 존재하고, 동적으로 서브넷 내에서 IP 주소를 할당해주는 방법이 있다. 일반적으로 후자의 경우인 DHCP(Dynamic Host Configuration Protocol)을 더 많이 사용하며 이에 대해 알아보자
DHCP는 호스트가 IP 주소를 자동으로 얻을 수 있게 한다. 네트워크 관리자는 해당 호스트가 네트워크에 접속하고자 할 때 마다 동일한 IP 주소를 받도록 하거나, 다른 임시 IP 주소를 할당하도록 DHCP를 설정한다. 네트워크에서 자동으로 호스트와 연결해주는 DHCP의 능력 때문에 플러그 앤 플레이 프로토콜(plug-and-play protocol)또는 제로 구성 프로토콜 (zero-configuration protocol) 이라고도 한다.
아래에는 DHCP의 동작 방식을 알아보도록 하자.
- DHCP 서버 발견 : 호스트가 연결되는 순간 DHCP 를 찾기위한 발견 패킷을 날린다.
새롭게 도착한 호스트는 DHCP를 발견하는 DHCP 발견 메세지(discover messeage)를 사용하여 UDP 패킷을 보낸다. 이를 IP 데이터그램으로 캡슐화 된다. 클라이언트는 DHCP 서버 주소와 자신의 주소 마저 모르기 때문에 목적지 IP 주소를 브로드캐스트 255.255.255.255로 설정하며 출발지 IP 주소를 0.0.0.0으로 설정하여 보낸다. 이 메세지는 서브넷에 모든 노드에 브로드캐스트된다. - DHCP 서버 제공 : 패킷을 받은 DHCP 서버는 호스트가 사용할 동적 주소를 제안한다.
브로드캐스트된 DHCP 메세지를 받은 DHCP 서버는 DHCP 제공 메세지 (offer message)를 클라이언트에게 전송하여 응답한다. 이때에도 목적지 IP 주소를 255.255.255.255로 설정하여 브로드캐스트한다. 그 이유는 서브넷에 여러 DHCP 서버가 존재하기 떄문에 클라이언트는 여러 서버 중 최적의 서버를 선택하도록 하기 위해서이다. 제공 메세지에는 클라이언트에게 제공될 IP주소, 네트워크 마스크, IP 주소임대기간 (address lease time)을 포함한다. 임대기간은 일반적으로 몇 시간에서 며칠이다. - DHCP 요청 : 클라이언트는 제안받은 주소의 할당 요청한다.
새롭게 도착한 클라이언트는 하나 또는 그 이상의 서버 제송자를 선택하고, 파라미터 설정으로 되돌아오는 DHCP 요청 메세지(request message)로 응답하여 주소 할당을 요청한다. - DHCP ACK : DHCP 서버는 확인 응답(ACK)을 보내며 주소가 할당되게 된다.
서버는 DHCP 요청 메세지에 대해 요청된 파라미터를 확인하는 DHCP ACK 메세지로 응답한다.
DHCP 서버가 여러 개 존재 할 수 있기 때문에 1번과 2번의 과정이 필요하다.
DHCP는 호스트 IP 주소의 할당뿐만 아니라, 서브넷 마스크, 첫 번째 홉라우터 주소나 로컬 DNS 서버 주소같은 추가 정보를 얻게 해준다.
네트워크 주소 변환 : NAT
앞에서 인터넷 주소와 IPv4 데이터그램 포맷을 살펴본 것처럼, 모든 IP 활용 장치에는 IP 주소가 필요하다. 시대가 발전함에 따라 전화, 태블릿, 게임장치, IPTV, 프린터 등을 수용할 수 있는 주소범위를 할당 해야한다. 하지만 ISP가 이미 네트워크의 해당 주소 범위에 인접한 부분을 할당해 버렸다면? 또 특정 홈 네트워크 소유자가 IP 주소가 어떻게 관리되는지 알고자 한다면? 다행히 이런 상황에서는 네트워크 주소변환 NAT(network address translation) 으로 주소를 할당할 수 있다.
주로 비공인(사설, local) 네트워크 주소를 사용하는 망에서 외부의 공인망(public, 예를 들면 인터넷)과의 통신을 위해서 네트워크 주소를 변환한다. 내부 망에서는 사설 IP 주소를 사용하여 통신을 하고, 외부망과의 통신시에는 NAT를 거쳐 공인 IP 주소로 자동 변환된다.
NAT 라우터는 외부 세계로는 라우터처럼 보이지 않는다. 대신 NAT 라우터는 외부 세계로는 하나의 IP 주소를 갖는 하나의 장비로 동작한다. 위 그림에서 홈라우터를 떠나 인터넷으로 가는 트래픽과 홈으로 들어오는 트래픽은 각각 출발지와 목적지 주소를 138.76.29.7로 가져야 한다. 본질적으로 NAT 라우터는 외부에서 들어오는 홈 네트워크의 상세한 사항들을 숨긴다.
WAN에서 같은 목적지 주소를 갖는 데이터그램이 도착하면 내부 호스트에게 패킷을 어떻게 전달할 것인가? NAT 변환 테이블 (NAT translation table)을 사용하고, 그 테이블에 IP 주소와 포트 번호를 포함하여 해결할 수 있다.
위 그림의 예를 생각해보자. 사용자 입장에서 호스트 10.0.0.1인 홈 네트워크가 IP 주소 128.119.40.186:80 인 서버에게 웹페이지를 요청하는 경우이다.
- 호스트 10.0.0.1 은 임의의 출발지 포트 번호 3345를 할당하고 LAN에 데이터그램을 올려 보낸다.
- NAT 라우터는 데이터그램을 받아 새로운 출발지 포트번호 5001을 생성하고, WAN 쪽의 IP로 출발지 주소를 변경한다.
- 라우터는 목적지로 수정한 데이터그램을 전송하고 NAT 변환 테이블에 엔트리를 추가한다.
- 서버의 응답이 NAT 라우터에 도착하면 변환 테이블에 따라 내부 호스트에게 데이터그램을 전달한다.
NAT의 장단점
NAT의 장점은
- 로컬 네트워크 주소를 변경하지 않고 ISP 변경 가능하다.
- 외부에 알리지 않고 로컬 네트워크 호스트의 주소 변경 가능하다.
- 로컬 네트워크 내 모든 devices를 위해 단 하나의 IP address만 할당되어도 무방하다.
- 보안성: 로컬 네트워크 내부 디바이스는 외부에서 visible 하지 않고 addressing 될 수 없다.
하지만 NAT는 몇 가지 논란의 여지가 있다.
- 주소 부족은 NAT가 아닌 IPv6 으로 해결해야 한다.
- 라우터는 3계층의 영역이지만 포트를 다루는 것은 4계층의 영역이다.
- NAT traversal : NAT로 연결된 클라이언트는 NAT를 거쳐야만 외부의 인터넷과 연결할 수 있다. 따라서 NAT로 연결된 호스트는 서버를 운영하기 힘들다
이러한 논란에서 NAT는 바로 여기 지금도 많이 사용되고 있다.
한국에서는 192.168/16 프리픽스를 주로 사용한다.
'Computer Science > Computer Network' 카테고리의 다른 글
📡 [Network] 링크 상태(Link State) 라우팅 알고리즘과 진동 문제 (Ocillations possbile) (0) | 2022.12.12 |
---|---|
📡 [Network] IPv6란? 그 패킷 포멧과 변환 (Tunneling) (0) | 2022.12.10 |
📡 [Network] IP 데이터그램(datagram)이란? 구조와 포멧 (IPv4) (0) | 2022.12.10 |
📡 [Network] Packet Scheduling 패킷 스케줄링 (FCFS, Priority, RR, WFQ) (0) | 2022.12.10 |
📡 [Network] Router 라우터란? 라우터의 내부 구조와 동작방식 (목적지 기반 라우팅, longest prefix mattching, 스위칭 페브릭 등) (0) | 2022.12.10 |