http 프로토콜 리퀘스트 라이프 사이클 (HTTP Protocol Request Life Cycle)

2024. 12. 2. 23:31브라우저&네트워크

http 프로토콜 리퀘스트 라이프 사이클?

이는 개발을 공부하며, 면접경험이 있다면 너무나 익숙할 주제다.

한번쯤 면접에서 아래와 같은 질문을 받아본 적 있을 것이다.

 

https://google.com 을 입력하면 무슨일이 일어나나요?

 

 

이는 네트워크 흐름을 물어보는 질문이다.

이에 대해 정확히 알고있지 않다면, 구구절절 늘어 놓는 답변에 면접관을 지루하게 하거나, 핵심을 빗겨나간 답으로 좋은 평가를 받지 못할 수 있다.

때문에 일련의 네트워크 흐름에 대해 자세히 알아보고, 내가 생각하는 좋은 답변을 요약하는 것으로 마무리를 지으려고 한다.

 


1. 파싱

 

첫번째로 URL 을 입력과 파싱으로 시작한다.

크게 프로토콜과 호스트 명으로 파싱한다.

https:// # 프로토콜
google.com # 호스트명

 

파싱을 하는 이유는 호스트명을 IP 주소로 변환하기 위해 DNS 조회를 하기 위한 것이다.

 


2. DNS 조회

 

브라우저는 파싱한 호스트명의 IP 주소를 찾기 위해 질의를 보낸다.

그러면 DNS 서버는 호스트명의 IP 를 찾아 반환한다.

* 만약 클라이언트가 캐시하고 있다면 생략됨.


3. 연결

 

3-way handshake 를 통해 TCP 연결을 설정한다.

 

 

 

1) SYN 플래그를 보내 클라이언트에서 서버로 요청한다.

 -> 이 패킷에는 클라이언트의 초기 시퀀스 번호가 포함된다. 이는 순서를 보장하기 위해 사용된다.

 

2) 요청을 받은 서버는 클라이언트로 받은 SYN 패킷을 수신하고, 연결을 수락하기 위해 응답을 보낸다.

-> [SYN : 연결을 수락한다는 신호]

-> [ACK: 클라이언트가 보낸 SYN 패킷의 확인 응답, 클라이언트가 보낸 시퀀스 번호를 확인 후 +1 한 값을 ACK 번호로 설정한다.]

서버는 자신의 시퀀스 번호를 포함해 SYN-ACK 패킷을 전송한다.

 

3) 클라이언트는 서버의 SYN-ACK 을 수신하고, 연결을 확인했다는 의미로 ACK 을 보낸다.

클라이언트는 서버가 보낸 SYN-ACK 을 확인하고, 자신의 시퀀스 번호의 +1 더한 값을 ACK 번호로 설정해 응답한다.

 

 

3-way handshake가 완료되면, 클라이언트와 서버 간의 TCP 연결이 완전히 확립됩니다.

그 후, 브라우저는 HTTP 요청을 전송할 수 있으며, 서버는 이 요청에 대해 응답을 보냅니다.

이때부터 클라이언트와 서버는 TCP 연결을 통해 데이터를 주고받을 수 있게 된다.

 

꼭 알아야 할 특징⭐️

- 초기 시퀀스 번호를 교환하며 연결의 안정성을 확보함

- 시퀀스 번호를 사용함으로서 패킷이 제대로 도착 했는지, 순서대로 도착했는지 알수 있어 전송의 신뢰성을 높임. (오류 최소화)

- 서버의 존재와 접속여부를 확인하기에 안정적이고 신뢰성이 높다.

 


4. SSL-handshake

 

https 의 안전한 통신을 위해 SSL-handshake 가 이루어 진다.

이 때 서버의 디지털 인증서를 확인하며, 암호화에 필요한 키를 교환하며, 신뢰할 수 있는 발급기관에서 발급되었는지를 확인한다.

이 부분은 이전에 적은 글이 있으니 간략히하고 링크를 첨부한다.

 

https://muyeon95.tistory.com/331

 

https

https 는 http 에 보안이 추가된 것이다.이는 너무 단순하며, 이렇게만 알고있으면 https 를 설명하기 어렵다. https 암호화 및 인증을 위해 SSL/TLS 프로토콜을 사용하는 http 의 보안 버전이다.기본적으

muyeon95.tistory.com

 


5. 요청 전송

 

이제 브라우저는 실제로 요청을 전송한다.

요청의 형식은 아래와 같다.

GET / HTTP/1.1
Host: google.com
User-Agent: [브라우저 정보]
Accept: text/html,application/xhtml+xml,...

 


6. 서버에서 요청 처리 - 응답

 

Google 서버는 HTTP 요청을 받으면, 요청된 리소스(/ 경로)에 대해 적절한 콘텐츠를 처리한다.

서버는 HTML 페이지, JavaScript 파일, CSS 파일, 이미지 등 여러 리소스를 조합하여 응답을 준비한다.

응답은 아래와 같다.

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: [응답 크기]
Set-Cookie: [쿠키 정보]
Date: [응답 날짜]

7. 렌더링

 

이제 브라우저는 받은 컨텐츠들을 해석해 렌더링해 화면에 표시한다.

HTML, CSS, Javascript 를 로드하고 실행해, 사용자가 볼 수 있는 페이지가 나타난다.

 


8. 면접에 대한 생각

 

이 블로그에 적은 모든 내용을 말하기는 쉽지 않을 것이다. 또한 모두 말하더라도 개인적으로 좋다고 생각하지 않는다.

그 이유는 면접은 발표하는 자리가 아니란 점이다. 질문하고 답하며, 대화하는 자리이다.

절대적으로 바라본다고 했을때, 한번에 모두 답한다면 한번 질문에 답한것이고, 면접관이 질문 할 수 있게 유도하여, 꼬리질문까지 받아낸다면 더 좋은 점수를 받을 것이라고 생각한다.


9. 어떻게 답할까?

 

Q. https://google.com 을 브라우저에 입력하면 무슨일이 일어나는지 설명해주세요.

- 최초에 https://google.com 을 입력하면 프로토콜 부분과, 도메인명이 나누어져 파싱됩니다. 파싱된 도메인명은 DNS 서버를 통해 IP 주소로 변환됩니다. 이후 TCP 통신을 시작해 3-way handshake 를 통해 클라이언트와 서버를 확인해 연결합니다. 이어서 SSL-handshake 를 거쳐 통신 준비가 마무리됩니다. 이때 GET 요청이 발생해 서버로 부터 요청하게 되며, 서버에서 요청을 확인 후 응답을 해주게 됩니다. 이후 받은 컨텐츠가 브라우저에 렌더링되며 화면에 보여지게 됩니다.

 

꼬리질문: 3-way handshake 는 어떻게 일어나나요?

꼬리질문: SSL-handshake 에서 키를 어떻게 전달하나요?

꼬리질문: 요청과 응답시에 어떤 데이터들을 주고 받나요?

꼬리질문: 여기에서 브라우저 렌더링은 어떻게 일어나게 되나요?

'브라우저&네트워크' 카테고리의 다른 글

https  (1) 2024.04.26
OAuth  (0) 2023.08.21
JWT  (0) 2023.08.21
세션 기반 인증 & 토큰 기반 인증  (0) 2023.08.21
OSI 7 Layer  (0) 2023.08.21