이 주제는 프론트엔드, 백엔드 할 것 없이 면접에서 주로 나오는 단골 질문이다.
사실 맨처음에 면접 보러 다닐 때는 이 질문을 왜 하는지 잘 이해하지 못했지만,
지금 생각해보면 내가 면접관이 된다면 무조건 물어볼 것 같은 질문이다.
왜냐하면 이 질문으로 네트워크에 대해 얼마나 깊이 파악하고 있는지 단번에 확인할 수 있다.
다들 이 질문에 완벽하게 답변할 수 있을 것이라고 생각한다.
하지만 그렇게 생각하는 사람들의 답변의 길이는 정말 각각 엄청난 차이를 가지고 있을 것 같고, 완벽한 답변의 길이는 웬만한 논문의 길이를 넘을 수도 있을 것이라고 생각한다.
나도 처음에 면접준비를 하며 이 질문을 준비했을 때 완벽하게 답변할 수 있다고 생각하고 만든 답변이 있는데 지금 그 답변을 보면 정말 형편없다.
지금 이 글을 적고나서도 나중에 네트워크에 대한 공부를 더 하게 된다면 이 글이 형편없게 느껴질 것 같지만,
지금의 내가 이 질문을 받게되면 할 답변에 대해 적고 정리해보려고 한다.
질문을 조금 더 구체화하자면
집에 있는 데스크탑으로 처음 컴퓨터를 켜서 인터넷을 연결하고, google.com을 접속하는 케이스를 정리해보려고 한다.
(어떠한 캐시도 없다는 가정)
DHCP
맨 먼저 데스크탑을 켜게 되면 자기 자신의 IP를 모른다.
그렇기 때문에 자기 자신의 IP를 알아야 한다.
이 과정을 DHCP라고 한다.
DHCP를 한 번 해보자..
1. DHCP discover
연결되어 있는 호스트들에게 IP를 달라고 요청을 한다.
2. DHCP offer
호스트들 중 DHCP 서버인 호스트는 이 요청을 보고 DHCP offer를 보내게 된다.
3. DHCP request
내 컴퓨터는 offer를 보고 수락해 DHCP request를 보내게 된다.
4. DHCP ACK
DHCP 서버가 마지막으로 DHCP request에 대한 DHCP ACK를 보내주면 내 컴퓨터는 그 IP를 사용할 수 있게 된다.
위 과정을 거쳐 드디어 내 컴퓨터는 IP를 얻게 되었다.
DNS
내 IP를 알았지만 google.com에 해당하는 IP를 아직 알지 못한다...
그렇기 때문에 google.com의 IP를 알아내는 작업이 필요하다
이는 아래와 같은 DNS 과정을 통해 얻어 낼 수 있다..
이때 DNS는 UDP를 이용함 (+DNS 스푸핑은 이 취약점을 활용한다)
1. 로컬 DNS 서버로 google.com의 IP를 요청한다.
(보통 일반적인 경우 라우터가 이 DNS 서버의 역할을 함)
2. 로컬 DNS 서버에서는 google.com에 해당하는 IP가 있는지(DNS 캐시) 먼저 확인한다.
3. DNS 캐시가 없는 경우 로컬 DNS 서버는 루트 DNS 서버로 DNS 쿼리를 보낸다.
4. 루트 DNS 서버는 로컬 DNS 서버로 .com을 관리하는 gTLD DNS 서버의 주소를 알려준다.
5. 로컬 DNS 서버는 gTLD DNS 서버로 DNS 쿼리를 보낸다
6. gTLD DNS 서버는 로컬 DNS 서버로 google.com 도메인 권한이 있는 DNS 서버의 주소를 알려준다.
7. 로컬 DNS 서버는 반환받은 DNS 서버로 DNS 쿼리를 보낸다.
8. 이 DNS 서버는 google.com에 대한 IP를 반환해준다
9. 로컬 DNS 서버는 이 IP를 받아 DNS 캐시에 저장하고 내 컴퓨터로 이 IP를 알려준다.
... 드디어 google.com의 IP를 알게 되었다.. ㅠㅠ
원래는 한 글에서 마무리하려고 했지만 글이 길어져 두 파트로 나누어 올리려고 한다.
(미리 스포를 하자면 나머지 파트에서는 이제 https 요청을 보내고 렌더링 하는 과정이 담길 것 같다.)
위 과정도 최대한 디테일하게 적으려고 했지만, 틀리거나 놓친 부분이 있을 수 있습니다..
그러니 반박과 태클을 마구마구 날려주시면 감사하겠습니다..