Devlog

인터넷 네트워크 본문

네트워크

인터넷 네트워크

ehdrb92 2023. 2. 28. 23:28

인터넷에서 클라이언트와 서버 두 개의 컴퓨터는 인터넷이라는 매체를 통해 서로의 데이터를 주고받는다. 서버 개발자로서 기본적으로 알아야 할 인터넷이 어떤 원리로 데이터를 주고받을 수 있는지 핵심적인 개념을 되짚고 가보자.

IP(Internet Protocol)

IP는 인터넷상에서 각 네트워크 장치에 할당되는 고유 식별자이다. 소프트웨어에 의해 할당되고 변경될 수 있음을 의미하는 논리 주소이다.

 

만약 내가 어떤 서버에 요청을 보내게 되면 전달할 데이터 패킷을 출발지 IP 주소, 도착지 IP 주소와 그 외 메타데이터를 캡슐화하여 인터넷상으로 던지게 된다. 그러면 출발지와 목적지 사이에 존재하는 노드들은 해당 정보들을 확인하고, 목적지를 향해 계속해서 전달한다. 목적지에 도착하면 서버는 요청 데이터를 확인한 뒤 적절한 응답 데이터를 다시 캡슐화하여 출발지로 반환한다. 그리고 같은 과정을 반복하여 출발지는 요청 데이터를 받게 된다.

IP의 한계점

IP는 다음과 같은 한계점들을 가질 수 있다.

  • 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송이 가능하다.
  • 비신뢰성: 패킷이 중간에 사라지거나 순서대로 도착하지 않을 수 있다.
  • 프로세스 구분: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 때 구분이 불가능하다.

비연결성은 나의 요청을 받을 목적지 서버가 어떤 이유로 인해 사용불능이 되었을 경우 서버가 요청을 받지 못했기 때문에 당연히 응답도 하지 않고, 클라이언트는 이유도 모른 채 기다릴 수 있다. 또한 목적지까지 노드들을 타고 가는 과정에서 노드의 문제에 의해 패킷이 전달되지 않아 목적지 서버에 요청이 가지 않을 수 있다.

 

보통 인터넷을 통해 데이터가 전달될 때는 데이터가 크기 때문에 일정한 크기로 분할하여 전달한다. 그런데 해당 패킷들은 무조건 같은 경로를 순서대로 이동하지 않는다. 상황에 따라 패킷들이 다른 경로로 이동하여 더 늦게 보낸 패킷이 먼저 도착할 수 있다. 여기서 데이터가 잘못 전달되어 문제가 발생할 수 있다.

 

그리고 목적지 서버에는 요청 데이터를 처리하는 여러 개의 프로세스가 동작 중일 가능성이 높다. IP를 통해 목적지 서버는 잘 찾아왔지만, 어떤 프로세스가 해당 요청을 처리해야 할지 모를 수 있다.

 

이러한 문제점들은 네트워크의 TCP에서 처리되게 된다.

TCP(Transmission Control Protocol)

TCP는 IP가 갖지않는 정보인 출발지와 목적지 서버의 포트번호와 전송 데이터의 순서, 검증 정보 등을 담고 있다. 그래서 보통 TCP/IP로 묶어서 부르는 경우가 많다. 여기서 포트번호란 컴퓨터에서 작동 중인 특정 프로세스로 통하는 통로라고 생각하면 된다. 해당 정보가 존재함에 따라 IP의 문제였던 프로세스 구분이 해결되게 된다.

3 way handshake

TCP는 클라이언트가 서버에 데이터를 전송하기 전에 서로 간의 연결상태를 확인하기 위해 3 way handshake라는 과정을 실시한다. 기본적인 과정은 다음과 같다.

  1. 클라이언트 측에서 SYN(접속 요청)을 서버에 전달
  2. 서버가 SYN을 받으면 클라이언트 측과 연결을 확인하기 위해 SYN + ACK(요청 수락) 전달
  3. 클라이언트가 SYN + ACK를 받으면 ACK와 함께 요청 데이터를 서버에 전달

이러한 과정을 거치면서 연결상태를 보장하게 된다.

 

그리고 TCP는 앞서 말했듯이 전송 데이터의 순서 정보를 포함한다. 그렇기에 서버에 패킷이 틀린 순서로 도착하더라도 해당 정보를 확인하여 패킷의 재정렬이 가능하다.

UDP(User Datagram Protocol)

UDP는 TCP와 비슷한 또 다른 프로토콜이다. TCP와 달리 클라이언트와 서버가 통신하기 전 3 way handshake와 같은 과정을 별도로 거치치않으며, 개별적으로 전송되는 패킷들의 순서 또한 보장하지 않으며, 심지어 패킷이 중복되거나 손실될 수 있다.

 

대신 UDP는 속도가 TCP에 비해 빠르다는 강점을 가지고 있다. 그래서 실시간 멀티미디어, VoIP(Voice-over-IP)와 같이 시간에 민감한 애플리케이션이나, 온라인 게임 들에서 사용된다고 한다.

Port

포트는 앞서 설명했듯이 하나의 컴퓨터 내에서 실행중인 프로세스를 구분하기 위해 사용된다. 각각의 프로세스는 하나의 포트를 사용하게 된다. 포트는 특정한 정수로 되어있는데 범위는 다음과 같다.

  • 0 ~ 65535: 할당 가능한 포트 범위
  • 0 ~ 1023: 보통 특정 프로세스가 점유하도록 정해진 포트 (별도로 사용하지 않는 편이 좋다.)
    • FTP: 20, 21
    • TELNET: 23
    • HTTP: 80
    • HTTPS: 443