URL 용청은 웹 서버에 수신된 후 요청 내용을 문서로 만들어 사용자에게 송신하게 되는것이 일반적이다. 그러면 사용자 웹 브라우저에서 그림과
문서 등이 로딩되면서 사용자가 비로소 원하는 정보를 얻게 되는데 바로 이 정도의 수준이 일반 사용자가 이해하는 HTTP 프로토콜이다.
그러나 조금 더 기술적인 관점에서 보게되면, 당연한 이야기이지만 요청한 URL 사이트로 이동하기 위해 해당 웹 서버에는 공인 IP가 할당되어 있어야 하며 (전제조건 : 프록시 사용 X) 이를 위해 시스템 파일인 호스트파일(hosts) 혹은 DNS 쿼리 요청을 통해 해당 IP정보를 얻게 된다.
* 호스트 파일 : IP 주소에 호스트의 이름 분적 수조를 알려주는 텍스트 파일. IP 주소 라인마다 해당 호스트 이름을 함께 나타낸 이 파일은
네트워크 기반의 네이밍 시스템에서는 좀 길긴 하지만 아직도 점검이나 특수현 경우에 네이밍 시스템을 무시하고 접속하기
위해 사용
* 윈도우7 호스트 파일 : [ C:\Windows\System32\drivers\etc\ ]
사용자의 웹 브라우저는 사용자 IP를 웹 서버에 전달하면서 상호 간 통신(보통 TCP 세션 연결)이 시작된다.
일단 세션이 성립되면 HTTP Request Header + Body에 주소와 요청 데이터를 포함하여 웹 서버에 전달한다. 이때 웹 서버는 사용자 요청의 유효성을 검증한 후 문제가 없다면 HTTP Response Header + Response Body에 문서를 만들어 사용자에게 전달하게 된다.
HTTP 송수신 과정
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
HTTP 세션 연결 및 데이터 전송 과정
*HTTP Over TCP
HTTP는 TCP 프로토콜 기반 위에서 회선(세션) 연결, 데이터 전송, 회선 종결의 절차를 거친다. 다만, 기존 TCP 프로토콜(TELNET, FTP) 등과의 차이는 세션을 계속 유지하지 않고 (이를 State-Less라 함) 사용자에게 정보를 전달한 후 바로 끊어버린다.
가장 먼저 회선 연결 과정을 거치는데, 이는 전화기의 수화기를 들어 원하는 번호를 눌러 상대방과 통화가 되기를 기다리는 과정과 같다.
① Listen : 웹 서버가 포트(기본 80번)를 열어놓고 사용자 요청을 대기중인 상태
② Synchronize(이하 SYN) - Sent : 사용자가 웹 서버에 접속 요청을 시도하는 단계
③ SYN - Received : 사용자 요청에 대한 응답으로 Acknowledge(이하 ACK) 와 SYN을 전송
④ ACK : 사용자는 다시 한번 웹 서버의 응답 (SYN, ACK)에 대한 확인 메시지인 ACK를 전송
이상으로 세션 연결이 성립되면 상호 간 (웹 브라우저 & 웹 서버) 데이터를 주고 받음
⑤ GET Document - PUSH : TCP 스택에서는 PUSH 옵션을 통해 빠른 처리를 요구할 수 있으며 상위 프로토콜인 HTTP 에서는
GET 메소드를 이용하며 기본페이지(index.html, main.html 등)를 요청
⑥ TCP Checksum, ACK : 웹 서버는 사용자 요청 데이터에 대한 손실 및 훼손을 점검하고 이상 없다는 ACK 메시지를 전송
⑦ 요청 문서 제공 - PUSH : 웹 서버는 요청 문서를 사용자에게 전송
⑧ TCP Checksum, ACK : 마찬가지로 사용자도 웹 서버 전송 및 데이터에 대한 손실 및 훼손을 점검, 이상없다는 ACK 메시지를 전송
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
TCP 헤더에서 메시지 상태를 알리는 6개 BIT
아래의 6개 BIT 조합에 따라 TCP 통신이 어떠한 상태인지를 알 수 잇다. 그러나 사전 약소한(프로토콜) 조합만을 전송할 수 있으며, 비정상적인
조합일 때는 강제로 통신을 끊어버리게 된다.
URG |
다른 패킷에 비해 가장 먼저 긴급하게 처리를 요청하기 위한 BIT |
ACK |
잘 받았다는 메시지 처리하기 위한 BIT |
PSH |
빠른 처리 요구 위한 BIT (일반적으로 모든 TCP 메시지의 기본값으로 포함 |
RTS |
강제로 세션을 끊기 위한 BIT |
SYN |
TCP 세션을 시작하기 위한 BIT |
FIN |
정상적인 절차로 세션을 끊기 위한 BIT |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
HTTP 회선 종결 과정
① FIN - WAIT 1 : 사용자는 세션 종결 요청을 위해 FIN과 ACK를 전송 ( 연결을 시도한자가 먼저 세션 종결 요청을 하게 된다 )
② CLOSE - WAIT : 세션 종결 요청을 웹 어플리케이션에 전달
③ FIN - WAIT 2 : 웹 서버의 대답을 기다리는 중
④ LAST ACK : 웹 서버는 조열 합의의 의미로 FIN과 ACK를 전송
⑤ TIME - WAIT : 합의 데이터 (FIN,ACK)를 잘 받았다는 의미로 ACK를 웹 서버로 전송하게 됨, 그러나 회선 연결이 완전히 끊어진 상태가
아니며 혹시 늦게 도착할 수 있는 데이터를 위해 일정 시간을 잠시 기다리는 시간
⑥ CLOSE : 회선이 완전히 끊어지게 됨