네트워크 흐름을 이해하기 위해서는 웹 통신을 가능하게 한 HTTP 통신의 흐름을 파악해야 한다.
IP에서 노드는 하나의 서버 컴퓨터를 의미합니다.
(출발지에서 목적지까지 데이터가 무사히 전달되기 위해서는 규칙이 필요합니다.)
IP 주소를 컴퓨터에 부여하여 이를 이용해 통신합니다.
(IP는 IP Address에 Packet이라는 통신 단위로 데이터 전달을 합니다.)
IP Packet은 송장처럼 전송 데이터를 무사히 전송하기 위한 출발지 IP, 목적지 IP 같은 정보가 포함되어 있습니다.
패킷 단위로 전송 하면 노드들은 목적지 IP에 도달하기 위해 서로서로 데이터를 전달합니다.
(이를 통해 복잡한 인터넷 망 속에서 정확한 목적지로 패킷을 전송할 수 있습니다.)
서버에 데이터를 전달받으면 서버도 응답을 합니다. (서버 역시 Ip Packet을 통해 응답합니다.)
IP 프로토콜에도 한계가 존재합니다.
중간에 패킷이 사라질 수 있다.
서버가 데이터를 전달하던 중 장애가 생겨 Packet이 소실되더라도 클라이언트는 이를 파악할 방법이 없습니다.
패킷의 순서를 보장할 수 없다.
네트워크 계층 구조를 통해 IP Packet의 한계를 보완할 수 있습니다.
네트워크 프로토콜 계층은 OSI 7계층과 TCP/IP 4계층으로 나눌 수 있습니다.
TCP/IP 4계층은 OSI 7계층보다 먼저 개발되었으며 TCP/IP 계층은 OSI 모델과 정확하게 일치하지는 않습니다.
Ex) 채팅 프로그램에서 메시지를 보낼 때
1. HTTP 메시지 생성 후 Socket 라이브러리를 통해 전달
2. TCP 세그먼트를 생성
3. IP Packet 생성
4. TCP/IP Packet을 Ethernet Frame 포함해 서버로 전송
TCP 세그먼트는 IP Packet의 출발지 IP와 목적지 IP 정보를 보완할 수 있는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등을 포함합니다.
SYN: Synchronize
ACK: Acknowledgement
데이터 전송이 성공적으로 이루어지면 서버는 응답을 돌려주기 때문에 IP Packet의 한계인 비연결성을 보완할 수 있습니다.
Packet이 순서대로 도착하지 않는다면 TCP 세그먼트에 있는 정보를 바탕으로 다시 Packet 요청을 할 수 있습니다. (IP Packet의 한계 비신뢰성을 보완 할 수 있다.)
HTTP 1.1 / 2는 TCP 기반
HTTP 3는 UDP 기반이다.
클라이언트가 서버에 요청을 보내면 서버는 그에 대한 응답을 클라이언트에 보낸다.
(클라이언트는 서버에 요청을 보내고, 응답을 대기하고 서버에게 응답 받는다.)
서버가 클라이언트의 상태를 보존하지 않는다.
장점: 서버 확장성 높음 (스케일 아웃)
단점: 클라이언트가 추가 데이터 전송
서버는 클라이언트의 상태를 보존하지 않지만, 클라이언트에서 서버로 부터 받은 응답을 보존하기 때문에 무한한 서버 증설이 가능합니다.
클라이언트가 서버에 요청 후 서버로 부터 받은 응답에 대해서는 상태를 유지한다.
TCP/IP의 경우 기본적으로 연결을 유지합니다.
클라이언트에서 요청을 보내지 않더라도 연결은 계속 유지해야 합니다. 이러한 경우 연결을 유지하는 서버의 자원은 계속 소모 됩니다.
HTTP에는 실제로 요청을 주고받을 때 연결을 유지하고 응답을 주고 나면 TCP/IP 연결을 끊습니다.
이를 통해 최소한의 자원으로 서버 유지를 가능하게 합니다.
트래픽이 많지 않고, 빠른 응답을 제공할 수 있는 것이 비연결성의 특징입니다. (효율적)
(하지만 트래픽이 많고, 큰 규모의 서비스 운영시 비연결성의 한계가 보입니다.)
HTML뿐 아니라, Javascript, CSS, 추가 이미지 등 많은 자원이 함께 다운됩니다.
해당 자원을 연결 시 마다 반복하는 것은 비효율적입니다.
이런 문제를 HTTP 지속 연결 (Persistent Connections)로 해결합니다.
HTTP 초기에는 각각의 자원을 다운로드하기 위해 연결과 종료를 반복했습니다.
HTTP 지속 연결에서는 연결이 이루어지고 난 뒤 각각의 자원들을 요청하고 모든 자원에 대한 응답이 돌아온 후에 연결을 종료합니다.