노트 정리/모든 개발자를 위한 HTTP 웹

[HTTP 웹] 1. 인터넷 네트워크

DuL2 2022. 10. 24. 22:45

인터넷 통신

 인터넷 통신은 local 망의 클라이언트 - 서버 간의 통신과는 다르다. 인터넷이라는 공용망을 통해서 클라이언트에서 서버로 통신을 보내야한다. 인터넷은 수 많은 node로 이루어져 있는데 그 중 내가 원하는 목적지로 이동하기 위해 또한, 안정적인 통신을 위해 특정 규칙을 통해 송수신을 하게 된다. 이 때 이해해야 하는 것이 IP(인터넷 프로토콜)이다.

 

IP(인터넷 프로토콜)

 먼저 인터넷 통신을 하기 위해서는 클라이언트 서버 모두가 IP 주소를 부여받아야 한다.

 

  • 지정한 IP 주소(IP Address)에 데이터 전달
  • 패킷(Packet)이라는 통신 단위로 데이터 전달
    • IP 패킷 정보가 가지고 있는 데이터
      • 출발지 IP
      • 목적지 IP

패킷이 인터넷 망의 많은 노드를 지나가면서 정해진 통신 규약을 따라 출발지에서 목적지로 이동하게 된다. 서버는 클라이언트로부터 request를 받고 response를 보내게 되는데 이 반대로 출발지와 목적지가 바뀐 상태로 다시 인터넷 망을 지나 클라이언트로 패킷이 전송된다.

 

 

IP 프로토콜의 한계

IP 프로토콜에서의 통신은 다음과 같은 한계를 가지게 됩니다.

  • 비연결성 
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송이 되는 문제
    • 패킷이 보내질 때 목적지 서버가 정상 상태인지 모르기 때문에 이와 같은 문제가 발생하게 됩니다.

 

패킷 소실 패킷 순서 문제
  • 비신뢰성
    • 중간에 패킷이 사라지는 경우
    • 패킷이 순서대로 안오는 경우(인터넷 망의 상황에 따라 다르기 때문)

 

  • 프로그램 구분
    • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상인 경우
    • (목적지는 같지만 수신자가 다를 경우 - ex: 우리 집에는 우리 가족이 모두 살기 때문에 모두의 우편물이 올 수 있음.)

 

 

 

TCP / UDP

IP 프로토콜의 한계를 해결해주는 것이 TCP라 할 수 있다. 

 

 

 

인터넷 프로토콜 스택의 4계층

인터넷 프로토콜에는 다음과 같은 계층이 있다. 오른쪽 그림의 TCP/IP 프로토콜처럼 TCP는 IP를 보조하여 통신하게 된다.

 

 

프로토콜 계층

각 프로토콜 계층을 지나오면서 각 계층의 정보가 생성되게 되는데 다음 그림을 통해 이해해보자.

Application 웹브라우저(Chrome), 게임(lol), 채팅프로그램(Slack)
Socket 라이브러리
OS TCP
IP
네트워크 인터페이스 LAN 드라이버
LAN 장비

 

어플리케이션 계층에서는 우리가 사용하는 프로그램이 존재한다. 우리가 흔히 사용하는 크롬, 슬랙 등과 같은 프로그램에서 데이터를 생성하여 목적지로 이동시키기 위해서는 다음과 같은 과정이 실행된다.

 

  1. 프로그램이 "Hello World!!"와 같은 데이터를 생성한다.
  2. Socket 라이브러리를 통해 전달한다.
  3. OS에서는 TCP 프로토콜에 맞는 정보를 생성하여 데이터 메세지("Hello World!!")를 포함시킨다.
  4. IP 계층에서는 IP 패킷을 생성하여 3번에서 만들어진 TCP 데이터를 담는다.
  5. IP 패킷은 LAN 장비에 의해 Ethernet frame으로 변환되어 인터넷 망으로 전송된다. 
    • Ethernet frame은 LAN 장비의 MAC 주소와 같은 물리적 주소를 담고 있다.

 

각 계층에서 씌워지는 껍데기의 구성요소를 정리해보자.

 

IP 패킷 TCP 세그먼트 Application Data
출발지 IP
목적지 IP
기타...
+@TCP세그먼트
출발지 Port
목적지 Port
전송제어
순서
검증 정보
+@Data
 +@Data
  •  

 TCP 세그먼트에서 전송제어, 순서, 검증정보를 해결해주기 때문에 IP 프로토콜의 한계에서 보았던 비신뢰성과 프로그램의 구분 문제가 해결되게 된다.

Packet = Package(수화물) + Bucket(덩어리)
정보 기술에서 패킷 방식의 컴퓨터 네트워크가 전달하는 데이터의 형식화된 블록이다. 즉, 컴퓨터 네트워크에서 데이터를 주고받을 때 정해 놓은 규칙. 

 

TCP의 특징 - 전송 제어 프로토콜(Transmission Control Protocol)

  • 연결 지향 - TCP 3 Way Handshake (가상 연결)
  • 데이터 전달 보증
  • 순서 보장
  • etc...

위와 같이 TCP를 사용한 통신은 클라이언트-서버 간 통신에서 신뢰할 수 있는 프로토콜이며 현재는 대부분 TCP를 사용중이다.

 

  • 신뢰할 수 있는 프로토콜
  • 현재는 대부분 TCP 사용

 

 TCP 3 Way Handshake

TCP 3 Way Handshake는 다음과 같이 진행된다.

 

  1. 클라이언트가 서버에 연결을 확인해달라는 의미로 SYN(Synchronize)을 보낸다.
  2. SYN(Synchronize)를 받은 서버는 데이터를 받았다는 의미로 ACK(Acknowledge)를 보내며 서버 또한 확인을 위해 SYN(Synchronize)를 함께 보낸다.
  3. 클라이언트에서도 SYN(Synchronize)를 받았기 때문에 다시 ACK(Acknowledge)를 보내주고 3번의 통신이 완료된 후 통신이 가능함을 서로 확인한다.
    • 이 때, 데이터도 함께 보낼 수 있다.
  4. 이 후 본격적인 데이터 통신이 진행된다.

 

 이 연결은 물리적 연결이 아니다. 클라이언트와 서버가 TCP 세그먼트의 정보를 통해 서로 논리적 개념으로 서로를 인지하고 연결을 하는 것이고 인터넷 망의 수 많은 노드, 서버들은 클라이언트와 서버가 연결을 했다는 사실을 모른다.

 

 이렇게 연결을 진행하고 나면 다음과 같은 이 점을 가집니다. 먼저, 데이터 전달이 되었는지 보증할 수 있다. 데이터를 보내고 난 후 각자는 데이터를 잘 받았다는 패킷을 다시 보내줌으로써 데이터 전달이 무사히 완료되었음을 확인할 수 있다.

 

 두번째로는 순서를 보장할 수 있습니다. 만약 큰 데이터를 `패킷1`, `패킷2`, `패킷3`으로 쪼개어 보내게 되었는데 `패킷1`, `패킷3`, `패킷2` 순서로 도착하게 되었다면 `패킷2`부터 다시 보내달라는 요청을 할 수 있다.

 

 이런 장점이 가능한 이유는 TCP 세그먼트가 위에서 말했듯 전송제어, 순서, 검증 정보에 대한 데이터를 담아 보내기 때문이다. 이를 통해 신뢰성있는 통신이 가능해진다.

 

 하지만 Transport 전송계층에는 TCP말고도 UDP라는 것이 존재한다. 

 

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

  • 하얀 도화지에 비유합니다. 기능을 거의 가지고 있지 않기 때문이다.
  • 연결 지향 - TCP 3 Way Handshake (가상 연결) X
  • 데이터 전달 보증 X
  • 순서 보장 X

TCP의 데이터 전달 및 순서가 보장된다는 장점을 모두 가지고 있지 않음에도 사용되는 이유는 단순하고 빠르기 때문이다. 신뢰성보다는 빠른 반응을 통해 통신해야 할 때의 장점이 발휘되는 프로토콜이다.

 

 들어오는 패킷이 어느 어플리케이션으로 향해야 하는지 지정해주는 Port와 Port로 들어온 메세지가 제대로 들어왔는지 검증해주는 데이터인 체크섬 정도가 추가로 들어있으며 IP와 거의 같은 모습을 띈다.

 

 현재는 안정적인 통신을 제공하는 TCP가 대부분 장악했지만(심지어는 동영상 전송도..) HTTP 3가 나오면서 TCP의 SYN, ACK 과정마저 최적화를 시켜버렸고 최근에는 UDP가 주목을 받고 있다.

 

Port

 포트는 한 컴퓨터에서 한번에 여러 어플리케이션을 연결할 때 필요하다. 예를들어 우리는 OS의 도움으로 여러 작업을 멀티태스킹을 통해 실행한다. 이 때, 우리는 음악을 스트리밍으로 들을 수도 있고, 웹 브라우저를 통해 구글링을 할 수 도 있으며, 화상통화를 하거나 게임을 할 수도 있다. 이렇게 여러 어플리케이션이 동시에 사용되고 통신되는 상황에서 단순히 IP만을 가지고 통신을 하게 된다면 PC 입장에서 어느 패킷이 어느 어플리케이션으로 가야하는지 혼선이 생길 것이다. 이를 위해 존재하는 것이 Port이다.

 

TCP/IP 패킷에는 목적지와 출발지의 IP:Port 값이 들어있다. 비유를 하자면 아파트 명 : 동-호수가 될 수 있을 것이다. 같은 아파트에 여러 세대가 살 수 있다.

 

특징

  • 0 ~ 65535 까지 할당 가능하다.
  • 0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음
    • FTP - 20, 21
    • TELNET - 23
    • HTTP 웹 브라우저 - 80
    • HTTPS - 443
  • port의 예시!
    • Tomcat - 8080
    • MySQL - 3306
    • Elasticsearch - 9200
    • Kibana - 5601

 

DNS - Domain Name System

 IP를 생각해보면 참 기억하기가 어렵다.  예를들어 우리가 자주 사용하는 구글과 네이버를 들어가기 위해 다음과 같은`123.231.222.37` 이라는 무작위의 숫자를 기억해서 들어가야 한다고 생각해보자. 우리는 언어를 사용하여 소통하기 때문에 특정 단어를 떠올리는 것이 쉽지 8비트 4개로 이루어진 32비트 숫자는 기억하기가 힘들다. 또한, IP의 단점은 IP는 변경이 될 수 있다. 서비스 업체의 IP는 고정되어 사용되겠지만 이외의 우리가 사용하는 많은 서비스들의 IP가 시시각각 변경된다면 어떻게 기억할 수 있을까?

 

 그렇기 때문에 나온 개념이 바로 DNS이다. DNS는 도메인 네임 시스템의 약자로 IP의 전화번호부처럼 특정 도메인을 호출하여 접속할 수 있도록 도와주는 시스템이다. DNS를 통하여 기억하기 어려운 부분을 도메인 이름으로 기억할 수 있고 설령 IP가 변경되더라도 전화번호부에 IP를 변경해주면 된다.

 

정리

 오늘은 웹의 아주 기초적인 IP, TCP, UDP, Port, DNS에 대해서 알아보았다. 각 개념이 무엇을 의미하는지 어떻게 만들어지게 되었는지를 다시 생각해본다면 더 오래 기억할 수 있을 것 같다.