본문 바로가기

프로그래밍/Computer Network

8. DHCP & NAT

1. DHCP(Dynamic Host Configuration Protocol) 

Network에서 host를 관리하는 것은, 시간을 소모하고 어려운일이다. 우리는 IP address, subnet mask, gateway, name server 총 4개를 필수적으로 설정해야 한다. IP address를 제외한 나머지 3개는 모든 host마다 설정이 서로 같을 수 있다.
하지만, IP address는 host마다 다르게 설정되어야 한다.  

DHCP란, network에서 host의 network configuration process를 자동화할 수 있는 application layer protocol이다. Network에 연결된 device는 단지 DHCP server에 query함으로서 한번에 host의 network설정을 마칠 수 있고, 이것은 관리의 overhead를 줄일 뿐만아니라 network에 연결된 여러 device간의 IP 할당 및 관리 문제를 해결해준다. 

DHCP의 동작방식에는 몇가지 표준이 있다.
Dynamic allocation은 요청에 의해 할당되는, client device를 위한 IP address 범위를 설정하는 방식이다. Client가 요청하면 그중에 하나로 IP address를 할당한다.
Automatic allocation은 자동할당의 목적을 위한 IP address를 설정하는 방식이다. 이것은 client들에 할당 후, 할당된 IP address를 추적하여, 매 특정 시간마다 IP를 가능하면 기존의 IP로 유지시킨다. 
Fixed allocation은 MAC address와 그에 대응하는 IP address의 list를 수동으로 작성하는 방식이다. DHCP가 IP할당 요청을 받으면, client의 MAC address를 확인하고 만약 있다면 list에 있는 IP address를 할당하고, 만약 없다면 automatic/dynamimc allocation의 IP address를 할당할 수도 있고, IP할당을 거부할 수도 있다. 이러한 방식은 보안이 중요한 상황에서 사용될 수 있다.
때때로, DHCP는 NTP server(Network Time Protocol server)의 설정을 위해서 사용될 수도 있다. 이것은 network상의 모든 컴퓨터의 시간을 synchronize하기 위한 server이다. 

 

2. DHCP discovery

DHCP가 설정된 client가 network configuration information을 얻는 process를 DHCP discovery라고 하고, 총 4단계로 이루어져있다.

1) Server discovery : DHCP server는 DHCP discovery를 위해 UDP 67번 port의 socket을 LISTEN상태로 열어두는데, client는 DHCP의 IP address를 모르므로 항상 0.0.0.0:68 을 출발지로,  255.255.255.255:67을 목적지로 설정하여 broadcasting message(FF:FF:FF:FF:FF:FF)를 보낸다. Local network에 DHCP server가 하나도 없다면 응답이 오지 않는다.

2) DHCP offer : DHCP server는 서버의 dynamic/automatic/static allocation설정 따라 어떤 IP가 할당가능한지를 확인하여 DHCP offer message를 구성한다. DHCP server의 IP가 128.43.55.12라고 가정했을 때 128.43.55.12:67을 출발지로, 255.255.255.255:68로 목적지 설정하여 DHCP offer message를 broadcasting message(FF:FF:FF:FF:FF:FF)로 보낸다. Local network의 모든 node에 전달되고, client는 DHCP의 IP를 얻을 수 있다. Client는 DHCP message field의 MAC address 정보를 확인함으로서 자신의 것임을 확인할 수 있다.

3) DHCP request : client는 DHCP request message를 출발지/목적지 IP를 이전과 동일하게 설정하여 broadcasting message(FF:FF:FF:FF:FF:FF)를 보낸다. 이것은 DHCP로 IP를 받겠다는 의미이다. 

4) DHCP ACK : DHCP server는 출발지/목적지 IP를 이전과 동일하게 설정하여 client의 IP주소를 포함한 DHCP ACK message를 broadcasting message(FF:FF:FF:FF:FF:FF)로 보낸다. 

 

DHCP를 이용해서 네트워크에서 완전하게 통신하기 위해서는, DHCP lease라고 하는 DHCP configuration이 client에 존재해야 한다. 이것은 expire time을 포함하고, 몇일이나 몇시간이 될 수 있다. Expire time이 도래하면 DHCP로 할당된 IP는 더 이상 사용이 불가능하고, DHCP discovery 4단계를 통해 다시 IP를 할당해야 한다. Network connection이 끊어지는 경우 등에 DHCP lease는 release될 수 있고, 이럴 경우 IP는 DHCP server에 반환된다. 

 

2. NAT(Nerwork Address Translation)

 

1) Basic of NAT

NATgateway(주로 router 또는 firewall)가 outgoing IP datagram의 source IP를 재작성하고, original IP를 유지하는 기술이다. 재작성되는 IP는 gateway의 outbound interface IP로 설정한다. original IP는 패킷이 들어올 때, ingoing IP datagram의 destination IP인 inbound interface IP를 original IP로 재작성하는데 사용된다. 이것은 표준은 아니다. 여러 OS, Hardware에 따라 각자 구현의 방식이 다르다. NAT을 사용하는 이유는 Security measure부터 IPv4의 공간부족까지 다양하다.

NAT을 사용함으로서, 해당 gateway를 통과하는 outbound packet은 이전 network에 있는 컴퓨터들의 IP를 숨기고 보호할 수 있다. 이를, IP masquerading이라고 한다. 현재는 많은 LAN에서 이런 방식을 사용하므로, 실제 통신하는 컴퓨터의 IP를 확인하는 것은 어렵다. 

 

2) NAT and the transport Layer

NAT를 통해 외부로 패킷을 내보낼때는 쉽지만, 내부의 여러 다른 컴퓨터로 가야하는 패킷이 동일한 inbound interface IP로 들어올 수 있으므로, 어떤 컴퓨터의 original IP로 변환해서 전달할지 결정하는 것은 어려운 일이다.

가장 간단한 방법은 Port preservation이다. 

Port preservationoutbound traffic의 source port를 router의 port와 동일하게 설정하는 것이다. Outbound connection에서 source port는 ephemeral ports(OS에 따라 다르지만, 보통 49152~65535사이) 중 random으로 선택된다. 그리고 해당 port는 계속 추적된다.

예를 들어, router가 TCP Layer에서 destination port가 51300인 패킷을 수신했다면, 해당 패킷은 51300 port를 사용하는 컴퓨터의 original IP로 재작성되어 해당 컴퓨터로 forward된다. 네트워크상의 두 컴퓨터가 동일한 source port를 사용할 수도 있는데, 이럴 경우 router는 일반적으로 사용하지 않는 random port를 선택하여 사용한다.

또 다른 방법으로 Port forwarding이 있다. 

Port forwarding특정 destination port가 항상 특정 node로 전달되도록 하는 것이다. 

이 방식은 외부에서 오는 traffic을 처리하는 서비스를 유지하면서 complete IP masquerading이 가능하다. 특정 IP, Port로 오는 패킷은 특정 node로 forward되고, 이는 외부 사용자가 조직 네트워크내의 수많은 서비스와 interaction하는 방식을 단순화시킨다.

예를 들어, 외부에는 하나의 IP만 노출시키고 port로만 서비스를 구분시키면, 실제로는 내부에 IP가 다르게 설정되어 있어도 외부 사용자 입장에서는 하나의 서버로부터 서비스를 받는 것처럼 느낄 수 있다.

'프로그래밍 > Computer Network' 카테고리의 다른 글

10. Connecting to Internet (1)  (0) 2024.04.16
9. VPN & Proxy  (0) 2024.04.15
7. DNS for name resolution  (0) 2024.04.14
6. Application Layer  (0) 2024.04.10
5. Transport Layer  (0) 2024.04.10