예를 들어 클라이언트 옆에 서버가 있으면 케이블을 연결해 “Hello world” 라는 메시지를 보내면 통신이 된다. 하지만 이 클라이언트와 서버 사이에 인터넷 망이 있다면 어떻게 될까? 클라이언트가 한국에 있고 서버가 미국에 있다면 한국에 있는 클라이언트가 “Hello world” 라는 메시지를 보내야 하는데 중간에 케이블이든 인공위성으로 보내든 이러한 수많은 중간 노드라고 하는 서버들을 걸쳐서 미국에 있는 서버에게 안전하게 메시지를 도착해야 한다. 어떤 규칙으로 미국에 있는 서버에게 안전하게 도착할 수 있는지 IP프로토콜을 알아보자.
→ 네트워크 주소 : 공통 영역
→ 호스트 주소 : 중복이 없는 식별자 역할의 값
→ 실제로는 32자리의 2진수로 이뤄져 있으며 위의 나온 192.168.0.103 이라는 IP 주소는 실제로는 다음과 같이 표기
💡 11000000.10101000.00000000.01100111클라이언트에게 IP 주소, 서버에게도 IP 주소가 있어야 하고 서버에게 메시지를 보낼 때 최소한의 규칙이 있어야 보낼 수 있는 데 패킷이라는 규칙으로 보내야 한다.
Payload
: 전송하고자 하는 데이터의 한 블록주소지 정보
: 발신지, 목적지 주소관리 정보
: Header, IPv6 과 같이 망이 패킷을 목적으로 전달하는데 필요한 정보메시지에 패킷의 정보인 출발지 IP 와 목적지 IP 등등을 넣고 보내는데 IP 프로토콜에 의해서 서버들이 규약을 따르고 있다.
인터넷망에서 내가 보낸 패킷을 서로 노드들끼리 출발지가 무엇이고 목적지가 무엇인지 이해하면서 서버 IP 주소인 200.200.200.2 까지 정확하게 도착한다.
서버도 마찬가지로 새로 메시지를 만들어서 메시지에 패킷의 정보인 출발지 IP 와 목적지 IP 등등을 넣고 클라이언트에게 보내는데 클라이언트가 보낼 때랑 서버가 보낼때랑 인터넷 망이 복잡하기 때문에 서로 다른 곳으로 전달될 수 있다. 그래서 IP 라는 패킷에 담는 방식으로는 한계가 있다.
미국에 있는 서버가 PC가 꺼져있는 것도 모르고 클라이언트는 계속 메시지를 보내게 된다. 그래서 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷은 계속 전송한다.
서버들이 전달하는 사이에서 한 서버가 문제가 생겨서 패킷이 유실이 된다.
메시지를 한 번에 보낼 때 보통 1500byte 가 넘어가게 되면 부담스러워서 나눠서 보낸다.
두 개의 패킷을 나눠서 보내는데 인터넷 망안에있는 노드들을 통해서 패킷마다 노드를 각각 선택을 해서 따로 따로 보내게 되는 상황이 오다보니 클라이언트가 보낸 메시지 순서가 서버가 받은 메시지 순서와 상이하게 된다.
구분의 모호함 : 같은 IP를 사용하는 하나의 서버에 하나 이상의 애플리케이션이 구동중일 경우 어떤 어플리케이션에 패킷을 전달해야할 지 알 수 없다.
클라이언트에서 게임도 하고 음악도 듣고 여러가지 프로그램으로 같은 IP로 쓰고 있는데 어떤 방식으로 구분되지 않아 한계가 있다.
출처 :
김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 수강하면서 정리한 내용입니다.
모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의