| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- beebox
- 자료구조
- SISS
- acc
- cgroup
- AWS
- Dreamhack
- docker
- backjoon
- pwnable
- datastructure
- cloud
- Linux
- c
- EC2
- CodeEngn
- python
- basicrce3
- System
- 와이어샤크
- 백준
- Reflected
- mount
- htmlinjection
- Reversing
- Systemhacking
- bWAPP
- fork-bomb
- wireshark
- 유석종교수님
- Today
- Total
Ctrl + Shift + ESC
와이어샤크로 DHCP 프로토콜 DORA 살펴보기 본문
실습 동기
https://github.com/esc-beep/TIL/blob/main/Network/3.IP-%EC%A3%BC%EC%86%8C.md
TIL/Network/3.IP-주소.md at main · esc-beep/TIL
Today I Learned. Contribute to esc-beep/TIL development by creating an account on GitHub.
github.com
저번처럼 인터넷 계층에 대한 내용을 이론뿐만 아니라 실습으로, 직접 패킷을 잡아서 헤더에 들어 있는 정보들을 확인해보면 좋을 것 같다는 생각이 들어서 실습을 진행하였다.
이번에는 특별히 다룬 내용 중 DHCP 프로토콜에 대해서 살펴보기로 했다.
DHCP 동작
DHCP는 4단계 절차로 IP 주소를 자동으로 할당하고, 이 과정을 DORA라고 부른다.

| 단계 | 메시지 이름 | 송신자 → 수신자 | 내용 |
| 1 | Discover | 클라이언트 → 브로드캐스트 | “누가 나한테 IP 줄 사람 있나요?” |
| 2 | Offer | 서버 → 브로드캐스트 | “이 IP 써도 돼요.” |
| 3 | Request | 클라이언트 → 브로드캐스트 | “그 IP 주세요.” |
| 4 | ACK | 서버 → 브로드캐스트 | “좋아요, 이 IP 당신 겁니다.” |
각 메시지의 앞글자를 따서 DORA이다.
WireShark로 패킷 캡처

DHCP 프로토콜의 패킷을 찾기 위해 와이어샤크 캡처를 시작한 뒤 wifi를 해제하고 5초 후에 다시 연결했다.
그 결과 DHCP Request와 DHCP ACK를 확인할 수 있었다.
DHCP Request

Request 패킷의 내용을 정리하면 다음과 같다.
| 구분 | 필드명 | 값 | 의미 |
| Ethernet | Src MAC | XX:XX:XX:XX:XX:XX | 내(클라이언트)의 물리 주소 |
| Dst MAC | ff:ff:ff:ff:ff:ff | 브로드캐스트 전송 (모든 장치에게 전달) | |
| IP | Src IP | 0.0.0.0 | 아직 IP를 할당받지 않은 상태 |
| Dst IP | 255.255.255.255 | DHCP 서버를 찾기 위한 브로드캐스트 목적지 | |
| UDP | Src Port | 68 | 클라이언트 측 DHCP 포트 |
| Dst Port | 67 | 서버 측 DHCP 포트 | |
| DHCP | Message Type | Request (3) | “IP 주소를 요청합니다” |
| Transaction ID | 0x330226e0 | 이 요청 세션을 구분하는 식별자 | |
| Client MAC Address | XX:XX:XX:XX:XX:XX | 내 장치의 식별 주소 | |
| Requested IP Address (Option 50) |
172.20.7.17 | 서버에게 이 IP를 달라고 요청 | |
| IP Lease Time (Option 51) | 90 days (7776000s) | 이 IP를 90일간 사용하고 싶다는 의미 | |
| Host Name (Option 12) | Mac | 클라이언트 이름 | |
| Parameter Request List (Option 55) |
Subnet Mask, Router, DNS 등 | 클라이언트가 서버에게 받고 싶은 설정 목록 | |
| Client Identifier (Option 61) |
Ethernet XX:XX:XX:XX:XX:XX | 클라이언트를 식별하는 고유 ID |
해당 패킷을 통해 MAC 주소가 XX:XX:XX:XX:XX:XX인 장치가 이전에 사용했던 IP 172.20.7.17을 계속 사용하기 위해 DHCP Request를 보냈다는 것을 알 수 있다.
DHCP는 초기 요청 시 브로드캐스트를 사용하므로 Src: 0.0.0.0 → Dst: 255.255.255.255인 것을 확인할 수 있다.
DHCP ACK

ACK 패킷의 내용을 정리하면 다음과 같다.
| 구분 | 필드 | 값 | 설명 |
| 프레임 | Frame 70 | 342 bytes | 실제 네트워크 상의 전송 크기 |
| Ethernet II | Src MAC | YY:YY:YY:YY:YY:YY | DHCP 서버(또는 라우터)의 MAC 주소 |
| Dst MAC | XX:XX:XX:XX:XX:XX | 클라이언트(나의 PC) MAC 주소 | |
| IP | Src IP | 172.20.7.254 | DHCP 서버의 IP 주소 |
| Dst IP | 172.20.7.17 | 클라이언트에게 할당된 IP 주소 | |
| UDP | Src Port | 67 | DHCP 서버 포트 (DHCP Server Port) |
| Dst Port | 68 | DHCP 클라이언트 포트 | |
| BOOTP | Message type | Boot Reply (2) | 서버에서 클라이언트로 가는 응답 |
| Transaction ID | 0x330226e0 | 클라이언트의 요청(Request)과 일치해야 함 | |
| Client IP address | 0.0.0.0 | 아직 설정되지 않은 상태 (DHCP 단계에서 표준) | |
| Your IP address | 172.20.7.17 | 클라이언트에게 할당된 최종 IP 주소 | |
| Relay agent IP | 172.20.7.254 | DHCP 릴레이(게이트웨이 역할을 하는 장비) | |
| Client MAC address | XX:XX:XX:XX:XX:XX | 내 컴퓨터의 MAC 주소 | |
| DHCP | Option 53 | ACK (5) | DHCP 메시지 타입 (요청 승인) |
| Option 54 | DHCP Server Identifier: 203.252.192.1 | IP를 할당한 DHCP 서버 주소 | |
| Option 51 | Lease Time: 30분 (1800초) | IP 임대 시간 (만료 후 갱신 필요) | |
| Option 1 | Subnet Mask: 255.255.255.0 | 서브넷 마스크 | |
| Option 3 | Router: 172.20.7.254 | 기본 게이트웨이 주소 | |
| Option 6 | DNS: 168.126.63.1 | DNS 서버 주소 | |
| Option 255 | End | DHCP 옵션 종료 |
해당 패킷을 통해 DHCP 서버(203.252.192.1)가 클라이언트(XX:XX:XX:XX:XX:XX)에게 IP 주소 172.20.7.17을 30분 동안 임대함을 승인한 것을 확인할 수 있다.
해당 패킷에서는 기본 게이트웨이(172.20.7.254), DNS(168.126.63.1), 서브넷 마스크(255.255.255.0) 등의 네트워크 설정 정보를 함께 전송한다.
ACK 패킷은 DHCP 프로세스의 마지막 단계로, 클라이언트는 이후 이 정보를 사용해 네트워크 통신을 수행한다.
DHCP Discover, Offer의 행방
그렇다면 DHCP의 DORA중 Discover, Offer은 어디로 간 것일까?
DHCP는 IP가 이미 있을 때, 처음부터 다시 DORA를 전부 수행하지 않고 단축된 과정인 Request → ACK만 수행한다.
이미 해당 Wifi에 연결한 정보가 있어 IP가 할당되어 있기 때문에 갱신만 일어난 것이다.
따라서 Discover, Offer를 하기 위해서는 현재 IP를 완전히 반납하고 처음부터 재요청을 해야 한다.
MAC 기준 다음 명령어를 입력하면 된다.
sudo ipconfig set en0 DHCP

와이어샤크에서 DHCP Discover, Offer, Request, ACK 과정이 일어나는 것을 확인할 수 있다.