안녕하세요 코딩도치입니다.
앞으로 네트워크를 자세히 공부하기 앞서 전체적인 네트워크의 흐름,
네트워크를 공부해서 궁극적으로 마지막에 이해해야하는 것에 대해서 알아보도록 하겠습니다.
대표적인 면접 질문이기도 한 'www.google.com에 접근하면 일어나는 일'에 대해서 알아보면서 전체적인 네트워크의 흐름과
앞으로 공부해야하는 것들에 대해서 알아볼 수 있습니다.
한 학생이 학교 (학교 네트워크)에서 노트북으로 www.google.com에 접속하는 상황을 가정하겠습니다.
먼저 학교 네트워크에 연결된 노트북은 다음과 같은 정보가 필요합니다.
1. 자기 자신의 IP주소
- 정보를 교환하기 위해서는 나 자신 또한 주소가 필요합니다.
2. 첫번째 hop (gateway) 라우터 주소
- 신호를 전달할 다음 주소가 필요합니다.
3. DNS서버 주소
- www.google.com의 IP 주소를 알려줄 서버 : DNS 의 주소가 필요합니다.
그래서 DHCP(Dynamic Host Configuration Protocol)를 사용하여 위의 정보들을 얻어옵니다.
DHCP 요청은 UDP, IP, Ethernet 순으로 캡슐화되서 DHCP 서버를 실행하는 라우터로 전송되고,
위의 정보들을 담은 DHCP ACK가 반환됩니다.
다음으로 HTTP 요청을 보내기 전에 www.google.com의 IP 주소가 필요합니다.
그래서 DNS 쿼리를 보내 IP 주소를 알아오는데,
그 중간 과정에서 ARP(Address Resolution Protocol)를 통해 IP주소를 MAC 주소로 변환하는 작업이 일어납니다.
처음 IP 패킷을 다음 장치로 보내기 위해서는 해당 장치의 MAC 주소가 필요하기 때문입니다.
그렇게 DNS 쿼리가 학교 네트워크에서 ISP(Internet Service Provider) 네트워크(SKT, KT...)로 포워드되고 DNS 서버에 도착하면,
DNS 서버에서 www.google.com의 IP주소를 반환해줍니다.
다음으로 HTTP 요청을 보내기 위해서, google의 웹 서버와 TCP 연결이 필요합니다.
TCP SYN(Request), TCP SYNACK(Response)를 주고받으며 TCP 연결이 완료되면, TCP 소켓으로 HTTP 요청을 보내게 됩니다.
www.google.com 웹서버에서 에서 해당 HTTP요청을 받아 처리한 후, 요청에 대한 대답을 다시 클라이언트에서 보내게 됩니다.
이렇게 www.google.com에 접속하고자 했을 때, 네트워크단에서 일어나는 일들에 대해서 알아보았습니다.
정리해보면 다음과 같습니다.
DHCP 요청 -> DNS 쿼리(중간에 ARP) -> TCP 연결 -> HTTP 요청
당장은 이게 뭐하는 건가 싶어도 괜찮습니다.
'이러한 흐름이 있구나' 하고 넘어가셔도 됩니다.
앞으로 네트워크를 공부하며 위에서 나온 많은 단어들, 흐름들에 대해서 하나하나 상세하게 알게 될 것입니다.
감사합니다.