HTTP 요청 흐름

justugi·2024년 5월 12일

Web

목록 보기
8/14

HTTP 요청 흐름

  1. URL 입력 후 이동 : 사용자가 웹 브라우저의 주소창에 URL을 입력한다. URL은 웹 페이지의 위치를 나타낸다.
  2. DNS에서 IP 주소 조회 : 웹 브라우저는 DNS를 조회하여 웹 서버의 IP 주소를 찾아낸다. 이 과정에서 도메인 이름 (예: www.example.com)이 해당 서버의 IP 주소로 변환된다.
  3. MAC 주소로 변환 : ARP를 통해 IP 주소를 실제 네트워크 장치의 MAC 주소로 변환한다.
  4. TCP로 웹 서버 연결 : 3-way handshake를 사용하여 웹 서버에 TCP로 연결한다.

    3-way handshake : 네트워크 장치들 사이에서 TCP 연결을 성립하기 위해 사용하는 과정

    • 양쪽 모두 안전하게 데이터를 전송할 준비가 되었다는 것을 보장하기 위해 세션을 수립하는 것을 목표로 한다.
    • 양쪽 모두 상대편에 대한 초기 순차 변호(ISN)를 얻을 수 있도록 한다. 

      SYN : Synchronize Sequence Number (세션을 연결하는데 사용되는 임의 시퀀스 번호)
      ACK : Acknowledgment (승인)

    [STEP 1] SNY. 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 클라이언트는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다. 

    [STEP 2] SNY-ACK. 서버는 SYN요청을 받고 클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 클라이언트가 다시 ACK으로 응답하기를 기다린다. 이때 서버는 SYN_RECEIVED 상태가 된다.

    [STEP 3] ACK. 클라이언트는 서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 된다. 이때의 서버 상태가 ESTABLISHED 이다.

  5. HTTP 통신
  6. 통신 종료

    4-way handshake : TCP에서 연결(세션)을 종료하기 위해 수행되는 절차

    FIN : Finish
    [STEP 1] FIN. 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송하고 FIN_WAIT1 상태가 된다.

    [STEP 2] ACK. 서버는 FIN요청을 받고, ACK메시지를 보내고 자신의 통신이 끝날때까지 기다리는 CLOSE_WAIT 상태가 된다. 

    [STEP 3] FIN. 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송하고 LAST_WAIT 상태가 된다. 

    [STEP 4] ACK. 클라이언트는 확인했다는 ACK메시지를 보내고 TIME_WAIT 상태가 된다.

    TIME_WAIT : 클라이언트가 서버에게 마지막 ACK 패킷을 보낸 후(TCP 연결 종료 후) 일정 시간(2MSL. 최대 세그먼트 생존 시간의 2배) 동안 대기하는 상태로, 이 시간 동안 클라이언트는 서버로부터의 모든 마지막 패킷을 수신한다.

    TIME_WAIT 상태가 필요한 이유
    - 지연 패킷 처리 : 이미 다른 연결로 진행되었을 때 지연 패킷이 도달 시 발생하는 문제를 방지한다.
    - 원격 종단의 연결 확인 : 서버가 클라이언트로 보내는 ACK 패킷이 유실되면 서버는 클라이언트가 자신의 FIN 패킷을 받았는지 확신할 수 없어져서 서버는 LAST_ACK 상태에 머무르게 된다.
      이 상태에서 클라이언트가 새로운 연결을 시도하면, 서버는 아직 이전 연결이 완전히 종료되지 않았다고 판단하고 RST(Reset. 비정상적인 세션 연결 종료) 패킷을 보내 연결 요청을 거절한다. 이로 인해 새로운 연결은 오류를 발생시키며 실패한다.
      TIME_WAIT 상태는 이런 상황에서 클라이언트가 추가적인 ACK 패킷을 보낼 수 있는 시간을 제공한다.

  7. 브라우저 렌더링

출처
https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake
https://docs.likejazz.com/time-wait/

profile
IT 보안, 관심 있는 것을 공부합니다.

0개의 댓글