집에서 컴퓨터를 이용해서 인터넷을 이용을 한다면, IP가 필요하다.

컴퓨터에 IP를 할당하는 방식은 기본적으로 2가지가 있는데, 하나는 Static방식이고, 하나는 DHCP방식이다.

 

-Static 방식

 

Static방식은 내가 사용하고 싶은 IP를 자신이 직접 입력을 해서 할당하는 방식이다.

Static방식을 사용하게 되면 자신만의 고정 IP를 갖게되어서 자신의 IP를 이용해 무언가를 하려고할때(예를들어 원격접속 등)

DHCP 동적 할당 방식에 비해 편리하다.

Static방식을 사용하기 위해서는

 

1. 자신이 사용할 수 있는 IP

2. 자신의 네트워크의 서브넷마스크

3. 자신의 게이트웨이

4. DNS 주소

 

를 알아야한다.

따라서 자신의 네트워크 구조를 어느정도 알고있어야 Static 방법을 사용할 수 있다. (DNS는 입력하지 않으면 알아서 할당을 해준다.)

실제로 DHCP를 통해 동적으로 할당 받을 때도 위의 정보들을 받아온다.

 

-DHCP 방식

 

DHCP 할당 방식은 클라이언트(자신 PC)가 DHCP서버에게 IP를 요청하고, DHCP가 현재 사용하지 않는 IP를 잠시 임대 해주는 방식이다.

따라서 같은 IP를 계속 부여하는 것이 아니라 임대시간(IP Lease Time)동안 빌려주는 것이기 때문에 항상 같은 IP가 아니라 그때 그때 동적으로 IP가 변경 될 수도 있다.

 

========================================================================

 

DHCP : 통신 규약 RFC1541에 규정되어있음

     BOOTP의 확장형

     UDP 67,68 포트

 

 

DHCP헤더 구조

전체 길이 :  최대 576Byte (IP 헤더 20byte + UDP 헤더 8byte + DHCP메시지 548byte)

 

Operation Code (1Byte) : 메세지 유형을 구분하는 코드

- 요청 : 1 (Client --> Server)

- 응답 : 2 (Server --> Client)

 

Hardware Type (1Byte) : 물리적 네트워크 유형을 나타냄.

 

Hardware Length (1Byte) : 하드웨어 주소의 길이

- Ethernet은 6

Hop count (1Byte) : 서버와 클라이언트가 다른 망에 있을 때, 중계 에이전트(Relay Agent)가 패킷 중계

- Request 클라이언트가 0을 세팅하여 발송, 경우 중계 수 마다 증가

 

Transaction ID (4Byte) : 클라이언트가 선택하는 랜덤한 32bit 수

- 요청 및 응답 메세지를 연결하는데 사용

 

Number Of Seconds (2Byte) : 임대 획득 또는 갱신 이후 경과한 시간(초)

 

flags (2Byte) :요청 클라이언트가 서버 응답을 유니캐스트인지 브로드캐스트인지 구분시켜 응답 희망

- 16Bit 중 앞 1bit

  Unicast : 0

  Broadcast : 1

나머지 15비트는 모두 0으로 세팅

 

Client IP Address (4Byte) : 클라이언트의 IP 주소

최초 요청시에는 0.0.0.0 ( IP를 할당 받기 전이므로)

 

Your IP Address (4Byte) : 클라이언트에 할당되는 IP

응답메세지에 포함됨

 

Server IP Address (4Byte) : Bootstap에서 사용하기 위한 서버의 IP주소

서버에서는 DHCPOFFER, DHCPACK로 자신의 IP주소를 돌려주게 됨

 

Gateway IP Address (4Byte) : Defualt Gateway의 IP 주소 또는 DHCP Relay Agent의 IP 주소

 

Client H/W Address (16Byte) : 요청한 클라이언트의 MAC 주소

 

Server Name String (64Byte) : 서버 호스트 이름

Null 문자열로 끝난다.

 

File : Boot File Name (128Byte) : 부트 파일 경로 및 파일명

역시  Null 문자열로 끝난다.

 

Options (가변 Byte) : 추가적 정보

DHCP 메세지는 BOOTP 메세지와 동일하면서 확장한 형태인데,

원래 BOOTP에 없었던 필드들은 모두 옵션으로 전달된다.

 

========================================================================

 

DHCP의 동작 원

 

DHCP 프로토콜은 D O R A라는 4가지 과정을 통해 클라이언트 PC에 IP를 할당한다.

D : Discover (Client가 DHCP서버를 찾는다.)

O : Offer (DHCP서버가 Client에게 자신이 DHCP서버라고 알린다.)

R : Request (Client는 DHCP서버에게 자신이 필요한 정보를 요청한다. IP, Subnetmask, Default Gateway 등)

A : Ack (DHCP 서버는 Client에게 요청한 정보를 제공한다.)

 

 

환경 : Client1이 DHCP서버에게 아이피를 동적으로 할당 받으려 한다.

 

-DISCOVER

 

 

Client1은 Broadcasting으로 DHCP Discover 패킷을 보내 DHCP 서버를 찾는다.

 

 

위 사진은 Wireshark 툴로 캡쳐한 DHCP Discover 패킷의 구조이다.

DHCP는 Bootp을 기본으로 하기 때문에 DHCP로 잡히지 않고 Bootp로 잡힌다.

 

2계층의 Dst를 보면 Boradcast로 되어있는것을 알 수 있다.

현재 Client는 누가 DHCP서버인지 모르기 때문에 Broadcast로 DHCP 서버를 탐색 하는 것이다.

 

Bootp Protocol 쪽을 보면

Message type : Request (클라이언트가 서버에게 요청하는 패킷)

Client IP Address : 0.0.0.0 (아직 할당받은 IP가 없음)

Your IP Address도 현재는 특정 아이피를 요청하는 Request 패킷이 아니라 Discover 패킷이기 때문에 0.0.0.0이다

 

========================================================================

 

-OFFER

 

 

위 사진은 DHCP Discover 패킷을 받은 DHCP 서버가 클라이언트에게 나 여기있다고 보내는 OFFER 패킷이다.

 

여기서 중요한부분은 Your IP Address이다.

OFFER에서는 DHCP서버가 "저 여기있어요!" 라고 답변을 하는 패킷이라고 했는데, Client가 아직 요청하지도 않은 IP를 주고있다.

그 이유는 다음과 같다.

본 필자는 컴퓨터를 DHCP를 통해서 IP를 할당받아서 사용하고 있는데, 패킷을 캡쳐하기 위해 잠시 Static으로 바꿨다가 DHCP로 다시 바꾸었다.

사실 Client는 DHCP를 통해 할당받았던 IP정보를 가지고 있고, 그를 토대로 한 IP주소를 Discover에서 보낸적이 있다.

Discover 패킷의 Option(50)에 자신이 할당받았었던 IP의 주소를 입력해두었다.

다른 특정한 이유가 없다면 그 IP를 할당할 것이다.

만약 DHCP에서 IP를 받은적이 없는 PC에서 DHCP할당을 했다면 Your IP Address가 0.0.0.0일것이다.

 

========================================================================

 

-REQUEST

 

 

Request 패킷에서는 IP를 할당하는데 필요한 정보들을 DHCP 서버에 요청한다.

Discover와 마찬가지로 Broadcast로 패킷을 보낸다.

 

 

 

Request 패킷의 Option (55)를 보면 요청하는 내용들이 나와있다.

Option (50)에 요청받았던 IP Address가 있기때문에 따로 IP는 요청하지 않는다.

 

========================================================================

 

-ACK

 

ACK 패킷은 DHCP 서버가 Request를 받고, 요청받았던 정보들을 제공하는 패킷이다.

DHCP서버에 요청받았던 정보들중에 자신이 가지고 있는 정보들만 제공한다.

만약 현재 DHCP서버에 Router에 대한 정보가 없다면 Router 정보는 제공하지 않는다.

ACK 패킷에서는 Option 부분에 정보들을 담아서 Client에게 보낸다.

그럼 이제 Client는 제공받은 정보들을 통해 IP를 할당하고 네트워킹이 가능하게 된다.

 

========================================================================

 

-DHCP Renewal(갱신)

 

IP를 임대하는과정에서, IP Address Lease Time이 정해진다.

그 임대시간이 동안 할당받은 IP를 사용 가능하다는 얘기이다.

그럼 PC를 사용하는동안 임대시간이 만료가된다면 더이상 인터넷을 사용할 수 없다는 얘기인가??

 

도서관에서 책을 빌린다고 생각해보자. 책 한권을 2주간 빌려서 그 책을 읽고 있다.

그런데 아직 책을 더 봐야하는데 임대 기간이 거의다 끝나간다. 책을 다시 반납하고, 다시 빌려야하는데 번거롭고 책을 봐야하는 시간의 낭비이다.

이를 해결하기 위해 많은 도서관에서는 '기간 연장'이라는 기능을 제공한다.

책을 빌려서 보다가 조금 더 읽고 싶다면 '기간 연장'을 통해 임대기간을 더 늘리는 것이다. 

이로써 도서관에 다시 가서 반납하고 다시 빌리는 수고와 시간을 아낄 수 있다.

 

이와 비슷하게 DHCP 할당 방식에서는 DHCP Renewal(갱신) 이라는 것이 존재한다.

IP를 할당받아 사용하다가 어느정도 시간이되면 갱신을 한다는 의미이다. 갱신이 성공적으로 이루어진다면,

IP를 다시 반환 할 일 없이 다시 사용이 가능하다.

 

 

IP를 할당받고 임대시간의 50%가 지나면 DHCP 서버에게 DHCP Request 패킷을 보내서 갱신을 시도한다.

DHCP에게서 Ack 신호가 와서 성공적으로 진행이 된다면 임대시간이 초기화되서 다시 0%가 되어 처음처럼 사용할 수 있다.

이때에는 Dhcp에게 1:1 Unicast로 통신을 한다.

 

만약 Ack신호가 오지 않는다면 (클라이언트 전원이 꺼져있거나, DHCP서버가 없어졌거나 등등의 이유)

임대시간의 87.5%의 시간이 다시 지났을 때 다시 시도하게 된다.

이때에도 실패한다면 Client는 DHCP서버가 사라졌다고 판단하고, 임대 기간이 끝나는 시점에 주소를 반환하고

Descover부터 다시 시도하게 된다.

 

 

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

본 게시물은 공부한 내용을 바탕으로 작성한 글로써, 점차 수정 및 추가를 통해 내용을 발전시킬 계획입니다.

따라서 오타 및 내용상의 오류, 추가할 내용 등이 있을 경우 주저 없이 알려주시면 감사하겠습니다.

궁금한점을 물어보시면 제가 아는 선에서 최대한으로 알려드리겠습니다.

 

참고한 사이트

 

-정보통신기술용어해설

-나무위키

 

'Network.' 카테고리의 다른 글

TCP와 UDP  (1) 2016.08.28

+ Recent posts