WEB 통신 흐름

·2024년 2월 11일

나도 들은 이야기이긴하지만 현직자님으로부터 들은 거니 신뢰성은 있다고 생각한다. 프론트 개발자에게 web 개발 흐름 질문은 정말 밥 먹듯이 들어오고, cs지식 중 가장 첫번째 질문으로 많이 물어본다고 한다. 그런데 여기서부터 막힌다면 뒤는 들을 필요도 없어질 정도로 기본적이면서도 중요도가 상당한 부분이라고 이해하면 좋을 것 같다. 보통 블로그에서는 DNS 부터 과정을 시작하고는 하는데, 정리하다보니 DHCP부터 시작하게 되었다. 아무튼 과정은 다음과 같다.

구글페이지에 접속하는 과정

  • 인터넷 연결 - DHCP(IP주소 할당)
    1. 접속하는 노트북은 IP주소 필요
    2. DHCP - UDP - IP - ETH 로 이루어진 frame을 DHCP request
    3. broadcast ⇒ DHCP 서버가 받음
    4. 서버측에서 Demuxed 함
    5. DHCP ACK [ client IP주소, first-hop-router IP주소, DNS name & IP주소 ] 생성
    6. 다시 encapsulate 하고, self-learning한 스위치를 통해 client에게 전달 ⇒ client demuxed
    7. client는 성공적으로 DHCP ACK를 받아 IP주소를 할당받음
  • 구글 주소 파악 - APR / DNS / 라우팅 프로토콜
    1. DNS서버는 LAN에 있지 않으므로 라우터를 거쳐야함. 이 말은 즉슨 Frame을 라우터로 보내야하고 그럴거면 mac dest addr이 라우터의 mac addr이어야하니 APR 필요
    2. DNS-UDP-IP-ETH로 encapsulate된 DNS 쿼리 생성 (아직 전송 못함)
    3. client가 라우터 IP주소 정보를 담은 ARP query를 broadcast함. (이때, DHCP에 의해 first-hop-router의 IP주소를 알고 있는 상태)
    4. 해당 라우터가 받아서 MAC주소를 ARP reply함.
    5. 이제 MAC주소도 알았으니 DNS 쿼리를 포함한 frame을 전송할 수 있게됨.
    6. 라우터에서 라우팅 프로토콜에 의해 라우트된 path로 포워딩되어 DNS서버에 접근
    7. DNS 서버측에서 demuxed 하고 구글의 IP주소를 응답으로 client에게 보내줌
    8. 성공적으로 그 응답을 client가 받아 구글 주소를 알게 됨
  • TCP 3WAY handshaking
    1. client - TCP socket OPEN
    2. TCP SYN segment를 서버에게 보냄
    3. 서버는 TCP SYNACK을 보냄
    4. TCP 연결 완료
  • HTTP 요청, 응답
    1. TCP socket을 통해 HTTP 요청 보냄
    2. 요청을 포함하고있는 datagram이 구글서버에 route됨
    3. 구글서버가 웹페이지를 HTTP reply로 응답보냄
    4. datagram이 client에게 route됨
    5. 이제 웹페이지가 보임
profile
말 배우는 감자

0개의 댓글