[Internet Protocol] DHCP의 offer 과정에서 unicast 가 가능한 이유

naljin
4 min readOct 24, 2022

들어가기 전에

우선 DHCP 란 Dynamic Host Configuration Protocol의 약자로, DHCP 서버를 사용하여 IP 주소 및 관련된 기타 구성 세부 정보를 네트워크의 DHCP 사용 클라이언트에게 동적으로 할당하는 방법을 제공하는 클라이언트/서버 프로토콜이다.

학부생 때 인터넷 프로토콜 강의 수강 중 관련해서 교수님께 메일로 질문드렸던게 있는데, 내용이 조금 딥해서 블로그에 아카이빙해둬야지.. 하다가 3년만에 메일을 찾아왔다 ㅎㅎ

물론 지금 보면 기억이 흐릿하기 때문에 오늘도 과거의 나에게 패배 ㅎ

튼 이번 글은 개인적인 아카이브 용도!

질문

안녕하세요 교수님, 저는 인터넷 프로토콜을 수강 중인 강수진입니다.

다름이 아니라 와이어샤크를 통해 DHCP를 확인하던 중 궁금증이 생겨 여쭙고자 합니다. 이메일을 통한 질문은 삼가라는 교수님의 말씀은 기억하고 있지만, 시험 전 남은 수업이 없어 이렇게 메일을 보내게 되었습니다.

수업시간에 배운대로 DHCP discover에서 src ip 주소는 0.0.0.0 임을 확인했습니다. 클라이언트의 IP는 아직 할당되지 않은 상태였고, discover-offer-req-ack 의 과정이 끝나면 비로소 IP의 할당이 이뤄진다고 이해했습니다. 따라서 offer에서는 해당 패킷을 브로드캐스트를 통해 클라이언트에 전달해 줄 것이라고 예상했습니다. (실제로 와이어샤크를 통해 확인하기 전 찾아본 한 자료에서는 ‘offer에서는 단말의 IP주소를 모르기 때문에, DHCP 서버는 IP 브로드캐스트 주소인 255.255.255.255를 사용하여 본 메시지를 IP망에 Flooding 함.’ 이라고 나와있었습니다.)

그런데 DHCP offer 패킷을 보니, ethernet 헤더의 dst에는 클라이언트의 맥 주소가, IP header의 dst에는 DHCP 메시지 안의 your IP address(YIAddr), 즉 앞으로 클라이언트에게 할당 예정인 IP주소가, DHCP 메시지의 플래그에는 unicast 를 뜻하는 0이 적혀있었습니다. 아직 IP가 할당이 안된 상태일텐데(그 후에 이뤄지는 작업인 DHCP request에서 src IP주소가 0.0.0.0인것을 확인했기 때문에 이렇게 생각할 수 있었습니다), 왜 unicast로 보내고 어떻게 이런 작업이 가능할까 의문이 들었습니다.

구글링을 통해 찾아보니 어떤 답변에서는 그 이유가 relay agent와 dchp server가 같은 L2 네트워크 레이어에 존재해서라고 말했습니다. DHCP offer을 할 때 클라이언트의 MAC 주소를 알고 있는 상태이고 같은 레이어에 존재하기에 맥 주소를 이용한 unicast가 가능하다는 것이 그 글의 요지였습니다.

하지만 수업시간에 들은 바로는 DHCP server는 어느곳에나 존재할 수 있기 때문에(DHCP relay agent와 같은 L2 레이어에 존재하지 않아도 된다고 이해했습니다) 저 답변이 이해가 잘 가지 않았습니다. 그렇다면 ‘DHCP 서버는 relay agent 주소랑 클라이언트 mac 주소를 알고 있으니까 일단 relay agent로 간다음에 그곳에서 클라이언트 mac 주소를 찾아서 보내는 건가..?’ ‘아니면 예전에 proxy arp 때 배운 forward 개념처럼, forwarding 이용해서 클라이언트 맥주소만으로 넘길 수 있는건가..?’ 생각해 봤지만 결론이 나지 않았습니다. 저 두 가지 가설 모두 offer에서 dst ip 주소가 채워져 있는 이유를 설명하지 못했기 때문입니다.

DHCP의 offer 과정에서 왜 broadcast가 아닌 unicast를 사용하는지, 그리고 그것이 가능한 이유가 무엇인지 궁금합니다.

아래의 사진은 DHCP offer에서 src IP 주소가 채워져있던 상황을 캡쳐한 것입니다.

“DHCP offer에서 dst IP 주소가 채워져있던 상황” 이라고 했어야하지 않나???

항상 좋은 강의에 감사드립니다.

답변

좋은 질문이다. 하지만 원칙으로서의 답은 없고, implementation dependent하다는 것이 답이다.

IP (프로토콜)가 자신의 주소가 setup 되어 있지 않다면 자기한테 오지 않았으니 버리는 filtering을 하지 않고 UDP로 올려주게끔 구현되어 있기만 하면 된다.

--

--