HTTP란?
URL요청은 웹 서버에 수신된 후 요청 내용을 문서로 만들어 사용자에게 송신하게 된다.
그러면 사용자 웹 브라우저에 그림과 문서 등이 로딩되면서 원하는 정보를 얻게 된다.
조금 더 기술적인 관점에서 보면,
요청한 URL사이트로 이동하기 위해 웹 서버의 공인 IP가 필요하며 이를 위해 시스템 파일로 존재하는 호스트 파일 혹은 DNS쿼리 요청을 통해 해당 IP정보를 얻게 된다.
웹 브라우저는 사용자 IP를 웹 서버에 전달하면서 상호 간 통신(TCP 세션 연결)은 시작된다.
일단 세션이 연결되면 HTTP Request Header와 Body에 주소와 요청 데이터를 포함하여 웹 서버에 전달한다.
이 떄 웹 서버는 사용자 요청의 유효성을 검증한 후 이상이 없다면 HTTP Response Header 및 Response Body에 문서를 만들어 사용자에게 전달하게 된다.
HTTP는 TCP 프로토콜 기반 위에서 세션 연결, 데이터 전송, 세션 종결의 절차를 거친다. 다만 기존 TCP 프로토콜(TELNET,FTP등)과의 차이는 세션을 계속 유지하지 않고(state-less)사용자에게 정보를 전달한 후 바로 끊어버린다는 점이다.
가장 먼저 세션 연결 과정을 거치는데, 이는 전화기의 수화기를 들어 원하는 번호를 눌러 상대방과 통화가 되기를 기다리는 과정과 같다.
1.Listen: 웹 서버가 포트를 열어놓고 사용자 요청을 대기 중인 상태이다.
2.SYN-Sent: 사용자가 웹 서버에 접속 요청을 시도하는 단계이다.
3.SYN-Received: 사용자 요청에 대한 응답으로 ACK와 SYN을 전송한다.
4.ACK: 사용자는 다시 한 번 웹 서버의 응답(SYN, ACK)에 확인 메시지인 ACK를 전송한다.
이상으로 세션 연결이 되었으면 상호 간(웹 브라우저와 웹 서버)데이터를 주고받게 된다.
5.GET Document-PUSH: TCP 스택에서는 PUSH옵션을 통해 빠른 처리를 요구할 수 있으며 상위 프로토콜인 HTTP에서는 GET메소드를 이용하여 기본 페이지(index.html등)를 요청하게 된다.
6.TCP Checksum,ACK; 웹 서버는 사용자 요청 데이터에 대한 손실 및 훼손을 점검하고 이상 없다는 ACK메시지를 전송한다.
7.요청 문서 제공-PUSH:웹 서버는 요청 문서를 사용자에게 전송한다.
8.TCP CHECKSUM,ACK; 마찬가지로 사용자 측에도 웹 서버 전송 데이터에 대한 손실 및 훼손을 점검하고 이상 없다는 ACK메시지를 전송한다.
TCP 헤더에서 메시지 상태를 알리는 6개 BIT
URG: 다른 패킷에 비해 가장 긴급하게 처리를 요청하기 위한 BIT
ACK: 잘 받았다는 메시지 처리를 위한 BIT
PSH: 빠른 처리 요구를 위한 BIT
RTS: 강제로 세션을 끊기 위한 BIT
SYN: TCP 세션을 시작하기 위한 BIT
FIN: 정상적인 절차로 세션을 끊기 위한 BIT
필요한 데이터를 주고받기를 완료하면 HTTP는 즉시 연결 해제 작업을 수행한다.
1.FIN-WAIT1:사용자는 세션 종결요청을 위해 FIN과 ACK를 전송한다.
2.CLOSE-WAIT:세션 종결 요청을 웹 애플리케이션에 전달한다.
3.FIN-WAIT2: 웹 서버의 대답을 기다리는 중이다.
4.LAST ACK:웹 서버는 종결 합의의 의미로 FIN과 ACK를 전송한다.
5.TIME-WAIT:합의 데이터(FIN,ACK)를 잘 받았다는 의미로 ACK를 웹 서버로 전송하게 된다. 그러나 회선 연결이 완전히 끊어진 상태가 아니며, 혹시 늦게 도착할 수 있는 데이터를 위해 일정 시간을 잠시 기다리는 시간이다.
6.CLOSE: 회선이 완전히 끊어지게 된다.