📌 이 포스팅에서는 HTTP의 Network 기초 개념에 대해서 정리했습니다.
🔥 IP(Internet Protocol) 란?
🔥 IP(Internet Protocol) 한계점
🔥 TCP, UDP의 역할
✔️ 우에게 집주소가 있듯이, 클라이언트와 서버 또한 각자 자신의 IP주소를 가지고 통신을 합니다.
✔️ "Hello world"라는 데이터를 서버에 전송할 때, 자신의 IP주소와 목적지의 IP주소가 패킷이란 형태로 담겨 인터넷망에 전달되는데, 이 때 인터넷망의 각 노드들이 이 패킷 정보를 보고 목적지로 도달할수 있도록 계속 다음 노드로 데이터를 전달시켜줍니다. 이를 request라 합니다.
✔️ 이 방법을 통해 서버에 데이터가 전송되면, 서버는 요청사항을 확인하여 클라이언트에 응답합니다. 이 때도 출발지 IP(서버의 IP)와 목적지인 클라이언트의 IP가 패킷에 담겨 인터넷망에 노드들을 통해 클라이언트까지 도달하게됩니다. 이를 response라합니다.
✔️ 단, request와 response 과정에서 거치는 노드들은 항상 서로 일정치는 않습니다(항상 같은 노드들을 거치지 않음).
✔️ 이 과정에서 데이터들은 패킷이라는 통신 단위에 담겨 전달되는데,, 패킷이라는 것은 package과 bucket의 합성어입니다.
✔️ 하지만 IP(Internet Protocol)만으로 비연결성, 비신뢰성이라이라는 한계점에 존재합니다. 이에 이런 한계점을 보완하는 TCP, UDP라는 개념이 존재합니다.
✔️ Internet Protocol의 한계점은 아래와 같습니다.
✔️ 클라이언트와 서버는 직접 연결되지 않은 비연결성이라는 특징을 갖고 있기 때문에 목적지 IP가 존재하지 않거나, 서버가 갑자기 다운되는 등의 이유로 서비스 불능 상태여도 패킷은 우선 전송됩니다. 이러한 문제는 IP 프로토콜이 가진 비연결성이라는 한계입니다.
✔️ 클라이언트에서 서버로 또는 서버에서 클라이언트로 패킷이 전달될 때, 중간에 여러 노드들을 거치게되는데 이 중 어떤 노드가 갑자기 서버가 다운되는 현상이 발생할 수 있습니다.
✔️ 마치 방금 도착한 노드에서 다른 노드로 이동을 시작하기 전에 또는 그 전달되는 사이에 여러 문제가 생길 수 있습니다. 바다 속 광케이블을 상어가 물어뜯는다면 순간적으로 그 지점을 통과하는 패킷이 소실되는 것과 같습니다. 이를 비신뢰성의 한계라합니다.
✔️ 클라이언트에 첫번째 패킷과 두번째 패킷이 짧은 시간 간격을 가지고 노드를 타고 이동할 때, 또는 데이터량이 많아 두개의 패킷으로 나눠 전송될 때, 목적지 IP가 같더라도 각 패킷이 항상 같은 노드를 이용해 서버로 도달하진 않습니다.
✔️ 이에 두번째 패킷이 첫번째 패킷보다 서버에 먼저 도착하는 경우가 발생할 수 있습니다. Internet Protocol만으로는 서버가 클라이언트의 요청의 순서를 알아낼 수 없습니다. 이 또한 비신뢰성의 한계입니다.
✔️ 클라이언트에서 유트브로 노래도 듣고, 줌으로 화상회의를하면서 카톡을하고 있을 때 동시에 서버에 요청되는 정보들을 어떻게 분리해서 각 어플리케이션에 전달될까요? 이 또한 Internet Protocol만으로는 해결할 수 없습니다.
✔️ 인터넷 프로토콜에는 애플리케이션 계층, 전송 계층, 인터넷 계층, 링크 계층(네트워크 인터페이스 계층)으로 나뉩니다. OSI 7계층은 추후 정리하도록 하겠습니다.
✔️ 클라이언트에서 서버에게 'Hello World"를 전송할 때, 'Hello World"라는 데이터가 우리가 사용중인 프로그램인 APllication 계층에서 SOKET 라이브러리를 통해 OS단(mac, window, rinux)으로 전달됩니다.
✔️ 이 때 OST 계층에서는 이 데이터를 TCP라는 정보를 생성해서 패킷으로 감싸고, 그 다음에 IP 정보를 생성하여 패킷으로 다시 감싸줍니다.
✔️ 마지막으로 링크 계층에서 Ethernet frame으로 다시 감싼 뒤, LAN드라이버, LAN장비 등 물리적 장치를 통해 패킷을 전송합니다.
✔️ TCP 정보에는 출발지 Port, 목적지 Port, 순서, 전송제어, 검증정보 등이 담겨 있기 때문에 Internet Protocol로만으로 해결할 수 없는 소실 방지, 순서 제어 등의 한계를 연결지향, 데이터 전달 보증, 순서 보장이라는 기능을 통해 해결해줍니다.
✔️ TCP의 연결지향은 데이터가 담긴 패킷을 보내기 전 클라이언트와 서버가 통신을 하여 서로 연결을 확인하다는 가성적 개념입니다. 이를 통해 서버가 현재 불능 상태가 아닌지 확인할 수 있습니다. 이 과정을 TCP 3 way handshake라 부릅니다.
✔️ 또한 전달된 패킷이 중간 어딘가에서 누락이 발생되면 이를 알수 있게해주는 것이 TCP가 가진 특징 중 하나인 데이터 전달 보증입니다.
✔️ 순서 보장의 특징은 데이터량이 많아 3개의 패킷으로 나뉘 전송될 때, 패킷1, 패킷2, 패킷3 순서가 아닌 패킷1, 패킷3, 패킷2 순서로 서버에 도착했다면 서버에서 패킷 2번부터 다시 보내라고 클라이언트에 요청하여 순서를 보장시킵니다.
✔️ UDP는 OS단에서 TCP와 같은 계층인 전송 계층에 있습니다. 즉, 인터넷 계층 위에 있는 프로토콜입니다.
✔️ UDP 프로토콜을 TCP 프로토콜에 비해서 체계적인 역할(연결지향, 데이터 보증, 순서 보장)은 제공하지 않습니다. 하얀 도화지와 같습니다.
✔️ TCP와 비교해볼 때, UDP는 단순하고 빠르다는 특징을 갖고 있고, UDP는 PORT와 체크섬 정도의 기본적인 기능을 갖고 있습니다.
✔️ PORT는 배를 정박하는 항구와 같은 개념으로 클라이언트가 카카오톡, 크롬, 게임 등 여러가지 에플리케이션을 동시에 사용할 때 각 각의 서버로부터 온 reponse를 각 애플리케이션에게 전달될 수 있도록 분배합니다.