모든 것이 HTTP - 인터넷 통신과 프로토콜

Kafka·2022년 1월 29일
0

모든 것이 HTTP

목록 보기
1/4
post-thumbnail

인터넷 통신이란 무엇인가 ?

통신 : 메세지를 서로 주고 받는 행위

통신이란 메세지가 한 컴퓨터에서 출발하여 , 다른 컴퓨터로 도달하는 여정을 의미한다.

현대사회는 어마무시하게 복잡한 네트워크 망을 가지고 있고, 우리는 이 복잡하게 구축된 네트워크 망을 통해서 다른 나라끼리도 통신이 가능하다. 위의 그림에서 , 메세지는 멀리 떨어진 서버에 도달하기 위해서 우선적으로 중간 서버(노드)를 경유해서 가게 된다.

이 복잡한 통신과정을 간단하게 해결하기 위해서 , 통신 규약 (약속) 이 필요하다. 이를 프로토콜이라고 한다.

프로토콜 : 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다.

인터넷이 발전함에 따라서 다양한 종류의 프로토콜이 나왔지만, 현재는 인터넷상에서의 데이터 이동의 대부분을 HTTP 프로토콜을 통해서 해결한다.
-> 모든것이 HTTP 이다.

프로토콜의 발전이유는 단 한가지이다. 시간이 흐름에 따라 인터넷이 복잡해지고, 앞으로도 더욱더 복잡해질것이라는 점이다. -> 인터넷 속도의 저하를 막기 위해서 더욱더 효율적이고 안정적인 프로토콜의 존재가 필요해진다.

프로토콜의 종류

IP 프로토콜

(인터넷 프로토콜)

IP 프로토콜은 각 컴퓨터에 IP 주소를 부여하고, 지정한 IP주소에 데이터를 전달하는 프로토콜이다. 패킷이라는 통신 단위로 데이터를 전달 할 수 있다.

패킷(packet, 소포) : 정보 기술에서 컴퓨터 네트워크가 전달하는 데이터의 형식화된 블록이다.

IP 프로토콜은 다음의 한계를 가진다

1. 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
2. 비신뢰성 : 패킷이 사라지면 ? 패킷이 순서대로 안오면 ?
3. 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면 ?

다음에 나올 프로토콜들은 IP 프로토콜이 가지는 한계점을 보완하기 위해서 등장했고, 발전하게 도니다.

TCP 프로토콜

전송 제어 프로토콜(Transmission Control Protocol)

TCP는 다음과 같은 방법으로 , IP 프로토콜의 한계를 극복한다.

TCP 는 3 way handshake 라는 연결방법을 통해서 ,
1. 비연결성 -> 연결을 확인한후 데이터를 전송한다.
2. 비신뢰성 -> 데이터를 받고나서, 데이터를 받았다는 신호를 보내준다. / 패킷의 순서를 보장한다.

IP 프로토콜의 2가지 문제점을 보완한다. 검증과정때문에 다른 프로토콜에 비해서 속도가 느리다는 단점이 있지만 , 현재는 대부분 TCP 프로토콜을 사용한다.

UDP 프로토콜

사용자 데이터그램 프로토콜(User Datagram Protocol)

그와는 반대로 , 빠른 전송속도만을 특징으로 하는 프로토콜도 존재한다.

UDP 프로토콜은
1. 비연결성 -> 연결 확인 과정 없음
2. 비신뢰성 -> 데이터 전달 및 순서 과정을 서로 알려주지않음 .

(사실상, IP 프로토콜이랑 거의 같다 IP 프로토콜에 + PORT + 체크섬 기능만 추가되었다.)
라는 특징을 가진다. 이러한 특징으로 UDP 프로토콜은 단순하고 빠르게 데이터를 주고 받아야 할때, 이용하게 된다.

우리는 , 앞서서 IP 프로토콜이 가지는 2가지 문제점을 TCP 프로토콜이 해결했다고 배웠다. 그러면 3번째 문제점 3. 프로그램의 구분 이라는 문제점은 어떻게 해결해야 할까 ? 우리는 여기에서 포트라는 개념을 배우게 된다.

PORT

IP 프로토콜이 가지는 2가지 문제점을 TCP 프로토콜이 해결했다고 배웠다. 그러면 3번째 문제점
3. 프로그램의 구분 이라는 문제점은 어떻게 해결해야 할까 ? 우리는 여기에서 포트라는 개념을 배우게 된다.

포트는 같은 IP내에서 , 서로 다른 프로세스(프로그램)을 구분하게끔 해주는 개념이다.
가장 간단한 개념으로 비유하자면 ,
IP주소가 아파트의 동이라면, PORT는 아파트의 호수 개념인것이다.
데이터를 전달하는 택배기사는 네트워크 상에서 최종 전달지는, 아파트의 이름을 보고 찾아가고. 아파트에 도착한후에, 세부적인 전달지는 아파트의 호수를 보고서 소포를 배달하는 것처럼.
네트워크 통신상에서도 포트라는 개념을 통해서 각기 다른 프로세스(프로그램)을 구분하는 것이다.

DNS

도메인 네임 시스템(Domain Name System)

IP는 네트워크 상에서의 컴퓨터의 주소이다. IP는 두가지 문제점을 내포하고 있는데, 이는 두가지 문제점을 포함하고 있다.

  1. IP는 기억하기 어렵다 -> 10자리가 넘는 의미없는 숫자쌍 수백개를 암기할 수 있는 이용자는 없다.
  2. IP는 변경될 수 있다. -> IP는 단순히 분류번호이고, 이 분류번호는 네트워크의 여러가지 사정상 언제든지 변경될 수 있다 .

이 2가지 문제점을 해결하기 위해서 , DNS라는 개념이 등장하게 된다.

DNS는 간단히 말하면 전화번호부이다. DNS라는 개념은 우리에게 매우 친숙하므로 다음의 그림 한장으로 충분히 이해할 수 있을것이다.

사용자는 IP주소 대신에 , 기억하기 쉬운 도메인명을 입력하면 이 도메인명을 DNS서버가 받아서 실제적인 IP주소로 변환해준다.

Packet

패킷(packet,소포)은 컴퓨터 네트워크가 전달하는 데이터의 형식화된 블록이다.

우리는 프로토콜을 통해서 데이터를 주고받는다. 컴퓨터공학을 조금이라도 배워본 사람이라면, 데이터의 전송이라는 것이 언제나, 기본 단위의 전송을 의미한다는것을 알고 있을것이다. 그러면 네트워크상에서의 데이터의 기본단위는 무엇일까? 우리는 이를 패킷이라고 부른다. '

프로토콜의 종류가 여러가지 인것처럼, 각각의 프로토콜에 해당하는 패킷의 구조에도 차이가 있다. 기본적으로 모든 네트워크 패킷은 IP 프로토콜위에서 움직이기 때문에, IP패킷의 구조에서 , TCP 패킷에 필요한 정보를 추가한다면 (위의 그림처럼) TCP 패킷이 완성된다 .

프로토콜 계층

프로토콜끼리는 계층을 가진다. 계층을 가진다는 의미는 무엇일까? 계층을 가진다는 의미는 , 기본적으로 해당 프로토콜을 기반으로 작동하면서도 다양한 기능들이 추가되는 것을 의미한다. 그리고 계층이 올라갈수록 더욱더 복잡하고 추상화된 프로세스(프로그램)의 요구를 처리하는 프로토콜을 의미한다. 반대로 계층이 내려갈수록 간단하면서도 실제적인 과정을 처리하게된다.

추상화와 실제적이라는 단어에 주목하여서 위의 그림을 바라보자. 프로그램이 Hello world라는 메세지를 생성해서 , 이를 다른 컴퓨터에 전송해달라는 요구는 추상적인 요구이다.

추상적인 요구 : A라는 컴퓨터에게 Hello world라는 메세지를 보내줘 .

추상적이라는 말은, 컴퓨터 공학자가 아닌 사람이여도 이해할 수 있는 과정에 가깝다. 그러면 실제적으로 메세지를 전송하기 위해서는 어떠한 과정이 필요할까? 상세적으로 살펴보자.

  1. 프로그램이 Hello , world라는 메시지 생성 ( 추상적인 단계 ) -> 전송한다.

  1. 애플리케이션의 Socket 라이브러리를 통해서 OS 계층으로 메세지 전송 ( 추상적인 단계 )

  2. OS 계층에서 , 메세지를 전송하기 위해서 TCP 프로토콜에 따라서 TCP 패킷으로 메세지 데이터를 포장하기 시작한다. (실제적인 단계 )

  3. TCP 패킷위에, IP 프로토콜 전송을 위해서 필요한 정보를 넣는 IP 패킷으로 TCP 패킷을 한번 더 포장한다. (실제적인 단계)

  4. 컴퓨터 자체에 물리적으로 탑재되어있는 LAN 카드를 통해서 물리적인 네트워크 선을 통해서 패킷으로 포장된 데이터를 전송한다. (실제적인 단계)


Hello world라는 메세지 전송에만 무려 5가지의 복잡한 과정이 필요하다 . (이 역시도 무수하게 많은 과정이 생략된 것이다. ) 아마 일반적인 사용자라면 1번의 과정만을 이해해도 컴퓨터를 이용한 통신에 아무런 문제도 없을것이다. 우리는 컴퓨터 공학 전공자 이므로 ,
실제적으로 메세지 전송이 어떤 과정으로 이뤄지는지에 대한 이해가 필요하다 .

profile
글,코드,운동을 사랑하는 개발자

0개의 댓글