다른 사람들과 통신하기 위한 수단 IP

June 16, 2024 (3mo ago)

LAN을 넘어서기 위해서 필요한 것들은 뭐가 있을까?

결론부터 이야기 하면 IP가 필요합니다!

어째서 IP가 필요할까요? LAN을 사용하더라도 충분히 네트워크를 통해서 메시지를 주고 받을 수 있습니다. 하지만 이로써는 충분하지 않죠 LAN을 통해서 통신하기 위해서는 필요한 조건이 너무 많기 때문입니다. LAN으로 통신하기 위해 필요한 정보는 무엇이 있을까요? MAC 주소를 알아야 합니다. 그렇다면 상대방의 MAC 주소만 알면 굳이 IP가 필요없지 않을까요? 그렇지 않습니다. 이유는 가는길이 너무나도 험난하기 때문입니다. 집에 연결되어 있는 스위치를 통하여 상대방의 스위치로 접속하는 과정은 너무나 험난하고 심지어 MAC주소 만으로는 정확히 찾아가기에 정보가 충분치 못하기 때문입니다. 예를 들어 택배를 보내려고 하는데 시와 구에 대한 정보는 빼고 동에 대한 정보만 적었다고 생각해보면 각 지역에는 겹치는 동이름이 있기 때문에 정확하게 택배가 도착하기에는 충분치 못한 정보에 속합니다. MAC주소가 이에 해당하는 경우이기 때문에 충분치 않고 IP가 필요하다는 이야기입니다.

이제 어째서 IP가 필요한 것인지에 대해서 이해하셨을 것이라고 생각합니다!

그래서 IP는 뭘까?

IP(Internet Protocol)는 네트워크를 이용하여 잘못된 수신지로 빠지지 않고 메세지를 전송하기 위한 네트워크에서 가장 핵심적인 프로토콜입니다. IP는 어떤 기능을 하기에 네트워크에서 핵심적인 기능을 할까요? 앞서 설명했듯이 메세지가 잘못된 길로 빠지지 않고 IP 주소를 하는 역할을 합니다. 또 다른 역할은 IP 단편화 입니다. 단편화는 무엇인가요? 네트워크를 통해서 전송할 수 있는 메세지의 크기와 양은 제한됩니다. 네트워크를 통해서 너무 큰 크기의 메시지를 전송하고자 할 경우 이 메시지는 네트워크의 성능 저하를 야기하여 도착하는데는 오랜 시간이 걸릴 것입니다. 이러한 문제 떄문에 네트워크에는 한 번에 전송할 수 있는 최대 패킷의 크기가 제한되어 있습니다. 이를 MTU(Maximum Transmission Unit)이라고 합니다. IP 단편화는 이 MTU 크기에 맞춰 패킷을 쪼개서 전송할 수 있게끔 나누는 것을 의미합니다. 앞서 설명한 두 특징에 대해서 더 자세하게 다루어 보겠습니다.

1. IP 주소 지정

IP 주소의 구성

위와 같은 형식의 IP를 많이 보셨을 겁니다. 위와 같이 .(옥텟)으로 나누어져 있는 형태의 IP를 IPv4라고 합니다. IPv4는 우리가 가장 많이 접하는 IP 주소의 형태입니다. IPv4는 위에 작성한 것 처럼 한 옥텟당 8비트의 숫자로 표현이 되며 256가지의 데이터를 표현이 가능하며 전체 주소는 4바이트이므로 총 2^32가지의 데이터 표현이 가능합니다. 여기서 데이터 표현이 가능하다는 말이 무엇일까요? 바로 우리가 사용하는 주소를 지정하는 갯수에 해당합니다. 2^32는 4,294,967,296 약 40억개의 데이터가 표현합니다. 이는 현대 인류가 IP 주소를 사용하기에는 많이 부족한 숫자입니다. 우리만 하더라도 집에서도 인터넷을 사용하지만 카페를 가거나 회사를 갔을 경우에도 IP를 사용하니 1인당 한개의 주소를 갖는다고 가정하더라도 부족한 숫자입니다. 이러한 부족한 IP 주소의 갯수를 채우기 위하여 등장한 것이 IPv6 입니다.

IPv6fe01:0db8:85a3:0000:0000:8a2e:0370:7334와 같은 주소의 형태를 갖습니다. 이 주소의 형태를 살펴보면 알 수 있듯이 IPv6는 한개의 데이터를 16진수로 표현합니다. 16진수로 표현할 수 있는 데이터의 갯수는 2^16개이고 IPv4는 옥텟(.)으로 구분이 되지만 IPv6는 클론(:)으로 구분이 됩니다. 이 클론 단위로 한개의 데이터가 16진수로 표현이 되므로 클론 단위로 표현되는 데이터는 16비트고 총 주소는 128비트, 16바이트 2^128가지의 데이터가 표현이 가능합니다. 이렇듯 현 모든 인류가 사용하기에 충분한 주소를 만들 수 있게끔 IPv4가 갖는 부족한 주소의 갯수를 채우고 이외에도 여러 기능들을 추가한 것이 IPv6입니다.

앞서 IPv6에 대해서 이야기하긴 했지만 이번 주제의 핵심 목표인 IPv4로 다시 돌아가서 이야기를 이어가 IP 주소 지정을 위해 필요한 것들에 대해서 자세히 이야기 해보겠습니다.

IPv4 Packet

IP패킷의 구성

네트워크에서 사용되는 모든 패킷들은 패킷의 헤더와 페이로드가 존재합니다. 하지만 IP에서 사용되는 패킷에는 다른 패킷과 달리 트레일러가 존재합니다. IP, 네트워크 계층에서 사용되는 데이터는 앞서 프레임(frame) 이라고 표현한다고 설명했었습니다. 프레임 헤더의 구성은 다음과 같습니다.

  • 프리앰플
  • 수신지 MAC 주소, 송신지 MAC 주소
  • 타입 / 길이

위의 헤더에가 다른 것은 다 역할과 기능이 직관적이여서 설명이 필요하지 않지만 한 가지! 프리 앰블에 대해서는 설명이 필요합니다. 프리앰블은 전달되는 프레임 패킷의 수신의 시작과 끝을 구분할 수 있게하는 역할을 수행합니다. 이어서 프레임 페이로드의 구성을 다루어 보겠습니다.

  • 식별자
  • 플래그
  • 단편화 오프셋
  • TTL
  • 프로토콜
  • 송신지 IP 주소, 수신지 IP 주소
  1. 식별자, 플래그, 단편화 오프셋

재가 이 세가지를 묶어서 표현한 것은 동인할 목적을 갖고 있기 때문입니다. 이 3가지는 IP 단편화시 MTU 크기에 맞춰서 나누어지는 프레임의 순서를 섞이지 않고 얻기 위함입니다. 네트워크내에 나누어진 프레임은 순서대로 전송이 이루어지지는 않습니다. 그렇기 때문에 첫번째로 표현된 프레임 다음에 전송되는 데이터는 같은 프레임에 속한 데이터가 아닐 확률이 높습니다. 하지만 기존의 순서대로 나누어진 모든 프레임은 수신지에 도착해야 합니다. 이를 위해 식별자는 단편화가 이루어진 패킷에 번호를 부여하고 해당 번호에 맞는, 동일한 패킷을 재조합하는 단계를 거칩니다.

플래그는 3개의 비트로 구성이 되는데 한개의 비트는 사용하지 않는 비트이고 다른 한 가지는 단편화가 진행되었는지 안되었는지를 나타내는 비트이고 마지막 비트는 단편화가 이루어진 패킷이 더 존재하는지 아닌지를 나타내는 비트입니다.

단편화 오프셋은 단편화된 첫번째 패킷으로부터 얼만큼의 거리가 떨어져 있는 패킷인지를 나타내는 데이터입니다. 예를 들어 1300, 2400이 있을 경우 1300으로 표기된 패킷이 더 앞선 패킷이라는 것을 알 수 있게끔 하는 역할을 수행합니다.

  1. TTL

**TTL(Time To Live)**는 불필요한 패킷이 네트워크를 차지해서 성능을 저하시키는 문제를 방지하기 위하여 존재하는 데이터입니다. 라우터에서 라우터로 패킷이 한 번 전달되는 것을 홉(Hop)이라고 하는데 홉이 하나씩 증가할 때마다 TTL 값이 1씩 감소하여 0이 될 경우 해당 패킷은 사용되지 않는 패킷이라고 간주하여 폐기됩니다.

나머지 구성의 프로토콜은 상위 계층의 프로토콜 예를 들어 네트워크 계층의 상위 계층인 전송 계층에서 사용되는 프로토콜이 TCP인지 UCP인지를 구분하는 용도로 사용이 되고 송, 수신지의 IP주소를 페이로드에 추가하여 패킷의 전송이 이루어집니다.

IP 단편화는 많이 이루어지는게 좋을까?

단편화는 패킷을 MTU에 맞춰서 나누어야 하고 나누어진 패킷을 다시 조합하는 과정이 필요합니다. 그렇다보니 단편화가 너무 많이 일어날 경우 성능 저하로 이어질 수 있습니다. IP 단편화는 분명 IP의 핵심적인 기능 중 하나입니다. 하지만 단편화를 최소화하고 필요한 경우에만 단편화를 수행하는 것이 성능을 향상 시킬 수 있습니다. 그렇다면 단편화가 필요한 경우는 어떻게 필요한 경우를 찾을 수 있을까요? 우선 알야할 것이 있습니다. 서로 다른 두 호스트가 동일한 MTU의 크기를 갖고 있다고 가정하겠습니다. 호스트와 호스트간 데이터를 주고 받기 위해서는 여러개의 라우터를 거쳐서 도착하게 됩니다. 문제는 여기서 발생합니다. 라우터의 MTU의 크기는 호스트가 전송할 수 있는 MTU의 크기와 동일하지 않다는 것이 문제입니다. 예를 들어 호스트 A와 B의 MT는 3이고 A가 크기가 3인 패킷을 전송합니다. 하지만 이때 라우터의 MTU가 1이라고 가정 할 경우 3번의 단편화가 이루어져야 합니다. 이렇듯 단편화를 피하기 호스트간 데이터가 전송되는 경로의 정보 또한 필요하고 IP 단편화 피하기 위해서는 단편화 없이 주고 받을 수 있는 **경로 MTU(Path MTU)**의 최대 크기만큼 전송이 이루어져야 합니다. 이를 위한 기술인 경로 MTU 발견 기능을 오늘 날 대부분의 네트워크들이 지원하고 있기 때문에 현재 우리가 사용하고 있는 네트워크에서는 IP 단편화가 자주 수행되지는 않습니다.