TCP/IP가 제대로 동작하기 위해서는 네트워크에 속한 각 호스트의 IP 어드레스가 중복되지 않아야 합니다. 네트워크의 호스트들에 대해 IP 어드레스를 할당하고 중복되지 않게 관리하는 작업을 사람이 직접 해야 할 경우 상당히 번거로울 수가 있는데, 이것을 자동으로 해 주는 것이 DHCP(Dynamic Host Configuration Protocol)이다. 이 방식을 사용하면 호스트가 네트워크에 연결될 때 IP 어드레스와 서브넷 마스크 등의 정보가 자동으로 설정됩니다.
가정용 초고속 인터넷 라우터는 대부분 DHCP 서버 기능을 가지고 있어서 컴퓨터를 연결하면 바로 프라이빗 IP 어드레스가 할당됩니다. 그 외에도 공공장소의 무료 와이파이 역시 DHCP로 IP 어드레스를 할당하는 방식을 사용하고 있습니다.
통신하기 위해서는 설정이 필요합니다.
TCP/IP를 이용해 통신하기 위해서는 PC/스마트폰, 서버, 각종 네트워크 기기에 TCP/IP 설정이 바르게 되어 있어야만 합니다.
즉, PC와 스위치를 LAN 케이블로 연결한 것만으로는 통신을 할 수 없습니다. 통신을 하기 위해서는 IP 주소를 비롯하여 TCP/IP 설정을 해주어야 합니다.
통신을 위해 필요한 TCP/IP의 설정은 아래와 같습니다.
- IP 주소/서브넷 마스크
- 기본 게이트웨이
- DNS 서버의 IP 주소
IP 주소/ 서브넷 마스크는 통신할 PC나 서버 등의 호스트를 특정하기 위해 이용하는 것입니다. '네트워크에 접속한다'는 표현은 케이블로 물리적 접속을 하는 것뿐만 아니라 , IP 주소/ 서브넷 마스크를 설정한다는 의미도 포함합니다. 그리고 IP 주소는 '네트워크 ID'와 '호스트 ID'로 구성되어 있습니다. 이때 '서브넷 마스크'는 IP 주소의 어디까지가 네트워크 ID인지를 명확하게 구분해 줍니다.
'기본 게이트웨이'는 같은 네트워크상에 존재하는 라우터의 IP 주소를 말합니다. 다른 네트워크로 데이터를 송신할 경우, 먼저 기본 게이트웨이에 데이터를 전송해야 합니다. 이 때문에 PC에 기본 게이트웨이의 IP 주소를 설정해야 합니다.
설정을 자동화하는 DHCP
IT 기술에 익숙한 사용자라도 설정할 때 실수하는 경우는 종종 있습니다. 이런 설정 실수 등을 없애려면 설정을 자동화하는 방법이 효과적입니다. 설정을 자동화하는 프로토콜이 DHCP입니다.
DHCP를 이용하면 PC의 TCP/IP 설정을 자동화할 수 있습니다. 이처럼 설정을 자동화하면 네트워크 기술에 밝지 않은 유저가 잘못된 설정을 하는 일을 없어질 것입니다.
DHCP를 지원하는 환경에서는 PC를 네트워크에 연결만 하면 자동으로 설정이 이루어져서 곧바로 통신할 수 있게 됩니다.
DHCP 시스템
DHCP를 사용하기 위해서는 DHCP 서버가 필요합니다. Windows server나 Linux 등의 서버 OS에서는 DHCP 서버 기능이 표준으로 내장되어 있습니다. 또한 서버 OS뿐만 아니라 브로드밴드 라우터 등에도 DHCP 서버 기능이 있습니다.
DHCP 서버에는 DHCP 클라이언트에게 자동으로 할당할 IP 주소의 범위를 설정해야 합니다. 이때 할당할 주소의 범위를 '주소 풀'이라고 부릅니다. 주소 풀에는 IP 주소뿐만 아니라 서브넷 마스크나 기본 게이트웨이의 IP 주소, DNS 서버의 IP 주소 등도 자동으로 할당하도록 설정할 수 있습니다.
또한 DHCP에서 할당하는 IP 주소는 '일정 기간 임대(리스)'하는 형식을 취하고 있습니다.
주소 풀을 설정할 때에는 주소 임대 기간도 함께 설정합니다. 그리고 임대 기간을 기한 없음으로 설정할 수도 있습니다.
IP 주소를 할당받을 클라이언트는 DHCP 클라이언트 설정을 해야 합니다. 예를 들어 Window10에서는 '인터넷 프로토콜 버전 4(TCP/IPv4) 속성'에서 '자동으로 IP 주소 받기' 옵션을 체크하면 DHCP 클라이언트로써 작동하게 됩니다.
DHCP --> IP 주소 할당 시스템
DHCP를 이용하려면 미리 DHCP 서버를 준비하고, 할당할 IP 주소 등 TCP/IP 설정을 등록해 둡니다. 그리고 PC 등에서 DHCP 클라이언트가 되도록 설정합니다.
DHCP 클라이언트의 호스트가 네트워크에 접속하면, DHCP 서버와 다음 4가지 메시지를 주고받으면서 자동으로 TCP/IP 설정을 합니다.
- DHCP DISCOVER
- DHCP OFFER
- DHCP REQUEST
- DHCP ACK
DHCP의 통신은 브로드캐스트를 이용합니다. 애초에 DHCP 클라이언트는 자신의 IP 주소는 물론이고 DHCP 서버의 IP 주소조차 알 수 없습니다. 주소는 몰라도 일단 뭔가 데이터를 보내고 싶을 때는 브로드캐스트를 이용합니다. 네트워크에 새로운 호스트가 연결된 직후에는 아직 IP 어드레스가 할당되지 않은 상태이고 DHCP 서버의 IP 어드레스조차 모르는 상태이므로 특정 호스트와 통신하는 것은 사실상 불가능합니다. 그래서 신규 호스트는 네트워크의 모든 호스트에게 브로드캐스트 방식으로 DHCP 발견 메시지를 보내고, 이 메시지를 받은 DHCP 서버가 사용 가능한 IP 어드레스를 알려주는 방식으로 자동 할당이 이루어집니다.
단, 이때의 신규 호스트는 아직 IP 어드레스가 할당된 상태가 아니라서 DHCP 서버가 신규 호스트에만 선택적으로 IP 어드레스 정보를 알려주진 못합니다.
그래서 DHCP 서버도 브로드캐스트 방식으로 네트워크 내의 모든 호스트에게 사용 가능한 IP 어드레스를 알려주게 됩니다.
DHCP 동작 방식
<DHCP 패킷의 4 단계 흐름>
- DHCP Discover
- 클라이언트는 DHCP 서버를 찾기 위해 DHCP 메시지를 브로드캐스트 전송
- 이때 브로드캐스트로 전송하는 이유는 클라이언트의 IP가 아직 없기 때문에 브로드캐스트를 사용한다.
- DHCP Offer
- DHCP Discover를 수신한 서버는 클라이언트에 할당할 IP 주소와 서브넷, 게이트웨이, DNS 등의 정보를 포함한 DHCP 메시지를 클라이언트로 전송
- 이때 IP 주소는 DHCP IP Pool 중에서 할당, 별도의 설정이 없다면 임의로 할당하지만 특정 IP, MAC 주소를 사전에 정의해 두면 설정된 IP 할당
- DHCP Request
- DHCP 서버로부터 제안받은 IP 주소와 DHCP 서버 정보를 포함한 DHCP 요청 메시지를 브로드캐스트로 전송
- 이때 유니캐스트로 가능하지만 DHCP 서버 여러 대가 동작하는 환경을 위해 브로드캐스트 사용
- DHCP Acknowledgement
- DHCP 클라이언트로부터 IP 주소를 사용하겠다는 요청을 받으면 DHCP 서버에 해당 IP를 어떤 클라이언트가 언제부터 사용하기 시작했는지 정보를 기록하고 DHCP Request 메시지를 정상적으로 수신했다는 응답을 전송
해당 과정은 패킷을 정상적으로 주고받을 수 없어 TCP가 아닌 UDP를 사용한다.
이렇게 DHCP 서버를 통해 신규 IP를 할당받는 과정을 임대 과정이라고 한다. 즉, 클라이언트는 IP 주소를 DHCP 서버가 가진 자원(IP Pool)에서 잠시 빌려 쓰는 것이다.
이때 잠시 빌려 쓴다는 말은 IP 임대시간이 존재한다는 것이다. 임대시간이 만료되면 클라이언트에 할당된 IP를 다시 IP Pool로 회수한다. 만약 IP 사용 중 만료가 된다면 IP를 수거하고 재할당 받는다.
실제론 매번 할당받은 IP주소를 반환하고 다시 새로운 할당을 요청하는 과정을 반복하지 않는다. 현재 클라이언트가 IP를 사용중일 경우 갱신 과정을 거쳐 IP주소를 IP풀에 다시 반환하지 않고 계속 사용 가능하다.
<DHCP 갱신 흐름>
DHCP에서 IP를 할당받은 후 임대 시간의 50%가 지나면 DHCP 갱신 과정을 수행한다.
갱신 과정은 임대 과정과 달리 DHCP 서버 정보와 이미 사용 중인 IP 정보가 있기 때문에 Discover, Offer 과정을 생략한다.
또한 브로드캐스트가 아닌 유니캐스트로 진행되므로 불필요한 브로드캐스트가 발생하지 않는다.
만약 갱신이 실패하면 임대 시간 50%가 남은 시간의 50%가 지난 시점인 75% 때 다시 시도한다. 이때도 갱신 실패 시 임대 시간이 지난 후 IP를 반납하고 다시 임대 과정을 거쳐 IP를 할당받아야 한다.
임대 시간은 DHCP를 사용하는 환경에 맞추어 알맞게 설정할 수 있다. 클라이언트가 불특정 하면서 자주 바뀌는 경우라면 임대 시간을 짧게 설정해 임대된 IP가 빠르게 반환되도록 해야 한다.
https://rooftoproom-whale.tistory.com/38?category=937820
DHCP 이용 시 주의점
이번에는 DHCP를 이용할 때 주의해야 할 점에 대해 짚어보도록 하겠습니다. DHCP를 이용할 때에는 'DHCP 서버의 배치', '의도치 않게 설치된 여러 대의 DHCP서버'의 두 가지 사항에 주의해야 합니다.
1) DHCP 서버의 배치
DHCP 클라이언트가 DHCP 서버를 찾는 DHCP DISCOVER는 브로드캐스트이므로 라우터를 넘어갈 수 없습니다. 이 때문에 DHCP 서버와 DHCP 클라이언트는 반드시 같은 네트워크에 연결되어 있어야 합니다.
홈 네트워크의 경우에는 브로드밴트 라우터가 DHCP 서버에 해당합니다. 다시 말해, DHCP 클라이언트와 DHCP 서버가 이미 같은 네트워크일 것이므로 딱히 문제가 없습니다.
하지만 기업 네트워크의 경우에는 네트워크가 여러 개 있으므로 DHCP 클라이언트와 DHCP 서버가 반드시 같은 네트워크에 연결되어 있으리라는 보장이 없습니다. 네트워크가 여러 개 존재할 경우, 이론 상 네트워크마다 DHCP 서버를 설치해야 합니다. 그러므로 많은 수의 DHCP 서버가 필요해지고, 서버의 관리 또한 번거로워졌습니다.
그래서 이용되는 것이 'DHCP 릴레이 에이전트'라는 기능입니다. DHCP 릴레이 에이전트는 DHCP 서버 1대가 여러 네트워크상의 DHCP 클라이언트에게 IP 주소 등의 설정 정보를 할당할 수 있도록 해주는 기능입니다. 구체적으로 설명하자면 브로드캐스트 된 DHCP DISCOVER를 유니캐스트로 변환해서 DHCP 서버에 전송하는 기능입니다.
이 경우 DHCP 서버에 미리 DHCP 풀을 여러 개 설정해 두어야 합니다. DHCP 릴레이 에이전트에서 전송된 DHCP DISCOVER에는 DHCP 릴레이 에이전트의 IP 주소가 들어갑니다. DHCP 서버는 DHCP 릴레이 에이전트의 IP 주소로부터 할당해야 할 DHCP 풀을 판단해서 DCHP 클라이언트에 적절한 설정 정보를 보냅니다.
DHCP 릴레이
DHCP IP 할당의 모든 패킷은 브로드캐스트로 전송된다. 브로드캐스트는 동일 네트워크에서만 전송되므로 DHCP를 사용하려면 각 네트워크마다 DHCP 서버가 있어야 한다.
하지만 네트워크 영역이 여러 개인 환경에서 DHCP를 이용한다면 DHCP 서버 배치, 이중화와 관련된 다양한 사항을 고려해야 한다.
<네트워크 영역이 여러 개인 환경>
위 그림 같은 환경에서는 DHCP 브로드캐스트가 전달되지 않으므로 DHCP 릴레이 에이전트(Relay Agent) 기능을 사용하면 DHCP 서버 하나로 여러 네트워크 대역에서 IP 풀을 관리할 수 있다.
<DHCP 릴레이 에이전트를 적용한 환경>
위 그림이 가능한 이유는 브로드캐스트로 전달되는 DHCP 패킷을 동일 네트워크 대역의 DHCP 릴레이 에이전트가 수신하면 DHCP 서버로 갈 수 있도록 이것을 유니캐스트로 변환해 주기 때문이다.
즉, 릴레이 에이전트를 이용하면 DHCP 서버를 네트워크마다 구성하지 않고 중앙 DHCP 서버만으로도 여러 네트워크에서 DHCP 환경을 운영할 수 있다.
<DHCP 릴레이 에이전트>
- DHCP Discover(클라이언트 -> 릴레이 에이전트)
- DHCP 클라이언트는 DHCP 서버를 찾기 위해 브로드캐스트로 패킷을 전송
- DHCP Discover(릴레이 에이전트 -> DHCP 서버)
- 릴레이 에이전트는 수신한 DHCP Discover 메시지를 다른 네트워크에 있는 DHCP 서버로 전달하기 위해 출발지와 목적지를 릴레이 에이전트 IP 주소와 DHCP 서버 IP 주소로 재설정.
- 이때 목적지가 명확해졌기 때문에 유니캐스트로 통신
- 출발지 주소와 DHCP 메시지의 릴레이 에이전트 IP 주소가 다른데 출발지 주소는 DHCP 서버로 가기 위한 방향의 인터페이스 IP 주소이며 릴레이 에이전트 IP 주소는 DHCP 클라이언트가 속한 내부 인터페이스의 IP 주소이다.
- DHCP Offer(DHCP 서버 -> 릴레이 에이전트)
- DHCP Discover를 수신한 DHCP 서버는 클라이언트에 할당할 IP 주소와 서브넷, 게이트웨이, DNS, 임대 시간 등의 정보를 포함한 DHCP 메시지를 릴레이 에이전트로 전송
- 이때 도착지 IP가 명확하기 때문에 유니캐스트로 통신
- DHCP Offer(릴레이 에이전트 -> 클라이언트)
- 릴레이 에이전트는 수신한 Offer 메시지를 다시 클라이언트로 브로드캐스트 전송
- DHCP Request(클라이언트 -> 릴레이 에이전트)
- 클라이언트는 DHCP 서버로부터 제안받은 IP 주소와 DHCP 서버 정보를 포함한 DHCP 요청 메시지를 브로드캐스트로 전송
- DHCP Request(릴레이 에이전트 -> DHCP 서버)
- 수신한 Request 메시지를 유니캐스트로 변환해 DHCP 서버로 전달
- DHCP ACK(DHCP 서버 -> 릴레이 에이전트)
- 요청을 받은 DHCP 서버는 해당 IP 사용 정보를 기록하고 정상적으로 수신했다는 응답을 전송
- 유니캐스트
- DHCP ACK(릴레이 에이전트 -> 클라이언트)
- 전달받은 ack 메시지를 클라이언트에 브로드캐스트로 다시 전달
이처럼 DHCP 릴레이 에이전트는 직접 통신이 불가능한 DHCP 클라이언트와 DHCP 서버 간 통신을 위한 중간자 역할을 위해 대신 수행한다.
이때 DHCP 클라이언트와 DHCP 릴레이 에이전트 간에는 브로드캐스트로 동작하고 다시 DHCP 릴레이 에이전트와 DHCP 서버 간에는 유니캐스트로 동작한다.
이를 위해 릴레이 에이전트는 DHCP 클라이언트와 같은 L2 네트워크 내에 존재해야 하고 DHCP 서버에는 유니캐스트로 전달하기 위해 DHCP 서버의 IP 주소가 등록되어 있어야 한다.
https://rooftoproom-whale.tistory.com/38?category=937820
2) 의도치 않게 설치된 여러 대의 DHCP 서버
DHCP 서버에는 딱히 우선순위 같은 것이 없습니다. 그러므로 복수의 DHCP 서버가 존재하는 경우에도 특정한 DHCP 서버를 우선해서 그 서버로부터 설정을 가져올 수는 없습니다. 그럼 어느 DHCP 설정을 가져오게 될까요? 답은 '선착순'입니다.
다시 말해, DHCP 클라이언트는 자신이 송신한 DHCP DISCOVER에 대해 가장 빨리 돌아온 DHCP OFFER를 우선합니다. 알기 쉽도록 가장 빨리 응답한 DHCP 서버를 우선합니다.
하지만 여기서 문제가 하나 발생합니다. DHCP 서버의 장애에 대비하여 미리 의도적으로 DHCP 서버 여러 대를 설치해 둔 것이라면 괜찮지만, 의도치 않게 DHCP 서버가 여러 대 설치되고 마는 경우가 있습니다. 요즘에는 브로드밴트 라우터뿐만 아니라 다양한 제품이 DHCP 서버 기능을 가지고 있기 때문입니다.
새로운 기기를 네트워크에 연결했을 때, 그 기기에 DHCP 서버 기능이 내장되어 있다면 DHCP 서버로 동작하고 맙니다. 다시 말해, 의도치 않게 DHCP 서버를 여러 대 사용하는 구성이 되는 것입니다. 이러한 경우, 매우 알아차리기 어려운 문제가 발생할 가능성이 있습니다.
의도치 않게 설치하고 만 DHCP 서버의 주소 풀이 그 네트워크에 적절한 설정이라면 통신에는 문제가 없을 것입니다. 하지만 주소 풀이 적절하지 않을 경우, 의도치 않은 DHCP 서버로부터 설정을 받아와 버린 DHCP 클라이언트는 통신할 수 없게 되고 맙니다.
다시 말해, 정규 DHCP 서버로부터 설정을 받아온 PC는 통신을 할 수 있는데 의도치 않은 DHCP 서버로부터 설정을 받아온 PC는 통신을 할 수 없게 되는 문제가 생기는 것입니다.
그러므로 DHCP 서버 기능을 가진 제품을 네트워크에 연결할 때에는 충분한 주의를 기울여야 합니다. 만약 DHCP 서버 기능이 필요하지 않다면 DHCP 서버 기능을 끄고서 네트워크에 연결하는 편이 좋습니다.
이상으로 DHCP에 대해 전반적인 설명을 해봤습니다.
도움이 되시길 바라면서 이만 마치겠습니다.
감사합니다.
참고서적: 고재성, 이상훈.『IT 엔지니어를 위한 네트워크 입문』. 길벗. 2022
참고서적: 김승연. 『뚝딱뚝딱 내 내 컴퓨터 문제해결』. 이지스퍼블리싱, 2022
참고서적: Gene 저 , 김성훈 역. 『그림으로 배우는 네트워크』. 영진닷컴
'Network tech > IP(Internet Protocol)' 카테고리의 다른 글
[TCP/UDP] UDP(User Datagram Protocol)란 무엇인가? (0) | 2023.07.27 |
---|---|
[TCP/UDP] TCP에 대해서 알아보자! (0) | 2023.07.27 |
DNS(Domain Name System)에 대해 알아보자! (0) | 2023.07.26 |
[IP network] NAT(Network Address Translation)은 무엇인가? (0) | 2023.07.25 |
[IP 주소] 공인 IP와 사설IP (0) | 2023.07.22 |