네트워크 지식 복기도 할겸, 미뤄왔던 CS공부도 할겸 김영한님의 강의를 듣고 정리해서 올리기로 했다. 해당포스트는 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 듣고 작성하였다.
결국 웹이나 HTTP도 전부 인터넷 네트워크 망에 기반하여 동작하기 때문에 이번 포스트는 HTTP 학습을 위한 사전 네트워크 기본 학습 챕터이다.
복잡한 네트워크 망에서 위와 같이 'Hello world' 라는 메세지를 다른 곳에 있는 친구에게 보내고 싶다, 이때 어떤 규칙이 있을까?
IP 주소
를 통해 클라이언트와 서버는 메세지를 주고 받는 것이 가능해 진다.
이를 위해선 클라이언트(나)가 IP 주소를 부여받아야 하며, 내가 메세지를 보내려는 대상(서버)도 IP 주소가 있어야 한다.
이 때 IP 프로토콜이 등장한다.
즉, IP 프로토콜의 역할은 위에서 지정한 IP 주소(100.100.100.1)에 데이터를 전달할 수 있도록 하는 규칙 같은것이다.
메시지(데이터)는 그냥 보내는 것이 아니라 IP패킷이라는 규칙에 따라 보내진다.
IP패킷은 위의 그림 처럼 전송데이터를 감싼 형태
로 IP패킷만의 정보를 담고 있다.
IP패킷의 정보에는 출발지IP
, 목적지IP
등이 있다.
패킷을 통해 출발지IP와 목적지IP를
이 패킷이 클라이언트 -> 서버 / 서버 -> 클라이언트로 전달되며 정보를 주고 받는 것이 가능해진다.
위의 그림을 보면 클라이언트에게서 넘겨진 노드들이 200.200.200.2를 받을 수 있는 서버를 찾아 서로 패킷을 던지며 목적지를 찾아가게(도달하게) 된다.
💥하지만, 100.100.100.1 -> 200.200.200.2인 경로와 200.200.200.2 -> 100.100.100.1 의 경로가 서로 다를 수 있다.
=> 즉 요청과 응답의 네트워크 경로가 다를 수 있다는 뜻이다.(이런 일이 일어지는 이유는 인터넷 망이 복잡하기 때문이다.)
IP프로토콜만으로는 한계가 있다.
IP 프로토콜은 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다. 이 때 데이터를 받아야 하는 서버가 죽어있어도 클라이언트는 대상 서버의 상태를 알 수 없다.
중간에 서버에 문제가 생겨 패킷이 사라지는 문제가 생길수도 있다.(ex. 보내는 네트워크 중간에 있는 서버에 문제가 생기는 경우 => 노드가 갑자기 꺼진다던가, 광케이블이 모종의 이유로 손상된다던가...)
2)패킷이 순서대로 도착하지 않는다면?
메세지가 1500byte가 넘으면 보통은 메세지를 끊어서 보내게 된다. 이 과정에서 내가 원했던 순서대로 도착하지 못하고 뒤죽박죽 섞이는 경우가 생길 수 있다.
IP 프로토콘 만으로는 이러한 문제들을 해결할 수 없다.
이 문제를 해결하기 위해 사용되는 것이 TCP 프로토콜이다.
인터넷 프로토콜 스택은 위와 같은 4계층으로 나뉜다.
인터넷 계층의 IP라는 것에 TCP라는 걸 올려서 보완해주는 역할이라고 생각하면 된다.
TCP의 역할을 자세하게 알아보자.
1. 소켓 라이브러리를 통해 OS계층에 hello world라는 메세지를 넘긴다.
2. OS계층에서 TCP가 hello라는 메세지에 TCP 정보를 씌운다. 그 후 IP계층으로 넘겨서 그 위에 IP와 관련된 정보를 씌운다.
=> 이 과정을 거치며 IP패킷이 생성된다.
3. 이게 진짜 네트워크 인터페이스를 통해서 나갈 때/LAN카드를 통해서 나갈 때 이더넷 프레임(실제 물리적인 정보들)이 포함되서 나가게 된다.
-작성중-