IP datagram format & IP Address (IPv4) (4)

쓰리원·2022년 4월 22일
0

Network

목록 보기
4/17
post-thumbnail

1. IP datagram format의 정의

  1. VER (Version): IP 프로토콜의 버전을 의미합니다. IP 프로토콜은 IPv4와 IPv6가 현재 사용되고 있으며, 4자리 비트로 이루어져 있기 때문에, IPv4의 경우 0100, IPv6의 경우에는 0110으로 표기됩니다.
  1. HLEN (Header Length): 헤더의 길이를 알려주는 부분으로, 4 비트로 표현됩니다. 헤더는 헤더의 가장 마지막에 포함되는 옵션의 길이에 따라 옵션이 없으면 20바이트, 옵션이 최대로 추가되면 60바이트가 됩니다. 위의 그림에서는 옵션도 32비트인 것처럼 그려져 있지만, 경우에 따라 옵션 필드가 없을 수도, 훨씬 커질 수도 있습니다.
  1. Service Type: 해당 데이터그램의 지연, 우선순위, 신뢰성, 처리량 등의 정보를 담고 있는 필드입니다. 8 비트로 이루어져 있습니다.
  1. Total Length: 헤더와 데이터 부분을 합한 데이터그램의 전체 길이를 뜻합니다. 이 전체 길이 필드가 16 비트로 이루어지기 때문에, 데이터그램의 최대 길이는 2^16 -1, 즉 65,535비트(64KB)를 넘지 못합니다. 당연히 데이터 부분의 길이는 전체 길이에서 먼저 나온 헤더의 길이를 빼서 알아낼 수 있습니다.
  1. TTL (Time to Live): TTL 필드는 쉽게 말해 수명을 알려주는 필드입니다. 데이터그램이 네트워크 상에서 다양한 이유로 목적지에 도착하지 못하고 네트워크를 떠도는 일이 생길 수 있습니다. 이런 길을 잃은 데이터그램들이 늘어나면, 네트워크의 흐름을 방해할 수 있고, 상위 계층을 혼란시킬 수 있기 때문에 수명을 다한 데이터그램들은 자동으로 폐기되게 됩니다.

    TTL 필드에는 최초에 수명을 할당받은 뒤, 하나의 라우터를 통과할 때마다 숫자가 1씩 감소하며, 목적지에 도착하기 전에 1이 되면 해당 데이터그램은 폐기되게 됩니다. 일반적으로 예상 경로로 가는 길에 거쳐야 할 라우터 수의 2배 정도로 지정해줍니다. 8개의 비트로 이루어져 있습니다.

  2. upper layer: 네트워크 계층의 상위 계층인 전송 계층이 사용하는 프로토콜에 대한 정보를 담고 있습니다. 8 비트로 구성되며, 대표적으로 UDP는 17, TCP는 6, ICMP는 1을 사용합니다. upper layer라는 필드는 리시버 측에서 사용합니다.

  1. Header Checksum: 헤더 체크섬은 헤더에 오류가 있는지를 확인하기 위한 16비트로 이루어진 필드입니다. 데이터 링크 계층에서의 Error Control과 같은 역할을 한다고 볼 수 있습니다. 체크섬에 대해서도 아래쪽에서 더 자세히 알아보겠습니다.

  2. Source / Destination IP Address: 각각 32 비트로 이루어지며 송신과 수신자의 IP 주소가 기록되어 있습니다.

2. IP Address (IPv4)

1. IP Address (IPv4) 개념.

  • Unique 32bits numbers (2의 32승 개의 IP 주소를 가질 수 있습니다.)
  • Identifies a network interface (network interface card, NIC)
    (IP 주소는 호스트에 들어있는 네트워크 인터페이스 자체를 지칭합니다.)
  • Hierarchical Addressing
    • Network and host parts (left and right)

현재 IP 버전 4라는 프로토콜을 사용하는 주소인 IP address는 32비트 주소 체계를 가집니다. 32비트이기 때문에 이론상으로 전체 네트워크에서 2의 32승 개의 IP 주소를 가질 수 있습니다. 32비트는 사람이 읽기 어려워서 8비트씩 끊어서, 읽기 좋게 10진수로 바꿔서 해 놓은 게 IP 주소를 읽는 방식입니다. 8비트씩 끊었기 때문에 10진수로 변환시 255가 최대 입니다. 실제로 라우터와 기계들은 실제 이 32비트만 봅니다.

IP 주소는 호스트에 들어있는 네트워크 인터페이스 자체를 지칭합니다. 컴퓨터 안에 보면 네트워크 인터페이스 카드, nic라고 불리는 게 있습니다. 예를들어 램 카드를 끼우는 것도 다 인터페이스 입니다. 그래서 IP 주소는 네트워크 인터페이스를 지칭하는 주소 입니다.

보통 네트워크 인터페이스 카드 한 개를 사용하기 때문에, IP 주소가 한 개 입니다. 컴퓨터에 네트워크 인터페이스 카드를 여러 개 끼우면 IP 주소를 여러 개 가질 수 있습니다. 이런 컴퓨터의 대표적인 예가 라우터 입니다. 인터페이스 여러 개 두면서, 각각 다른 네트워크에 연결되 있고, 각각 IP 주소를 갖습니다.

2. IP Addressing: Classful Addressing.

예전에는 IP 주소 prefix 자체의 클래스를 나눠놨습니다. 그래서 위 그림과 같이 클래스a, 클래스 b, 클래스 c가 존재했습니다.

class a에 해당하는 IP 주소 뭉태기들은 prefix가 /8, class b는 /16, class c는 /24 이런 네트워크 주소를 가졌습니다. 네트워크 아이디가 앞에 8, 16, 24 비트라는 얘기죠. 그러니까 클래스 a의 경우 /8에 해당하는 주소를 배정받으면 호스트를 나머지 부분인 2의24승만큼 이론상으로 보유할 수 있게 됩니다.

a의 특징은 무조건 앞에는 0으로 시작합니다. 그래서 2의 7승인 128개의 기관이 이 클래스a라는 어드레스 공간을 획득할 수 있습니다. 전 세계에 기관들이 수백만 개 엄청나게 많을 텐데 그 중에 딸랑 128개의 기관만이 클래스 a를 획득할 수 있다는 것 자체도 문제가 됩니다. 또한 host를 다 못 씁니다 이거는 엄청나게 큰 공간인데, 한 기관이 이걸 쓸 수 있는 크기가 아닙니다. 이로인해 추가적인 낭비가 발생합니다. 클래스 c는 2의 24승 개의 기관에 줄 수 있으니까 양이 많습니다. 그러나 255개까지 호스트를 처리할 수 있어서 너무 적어 문제가 됩니다.

3. Classless Inter-Domain Routing (CIDR)(1993)

예전에 나온 클래스 개념의 배정 시스템이 너무나 비효율적이라 없애고 나온 게 바로 이 클래스가 없는 개념의 주소 공간 배정입니다. 그래서 Classless Inter-Domain Routing해서 이걸 줄여서 CIDR라고 불리는데, 핵심적인 단어는 classless 입니다. 그래서 더 이상 이 8비트 단위로 prefix가 끊어지는 게 아니라, 자유롭게 끊어지게 됩니다.

예시1

예시2

이 예에서 보면 prefix가 15비트 입니다. 그러니까 이런 게(12.4.0.0/15) 가능합니다.

그래서 과거에 이런 클래스 개념일 때는 이 클래스c짜리 prefix를 갖고 있었기 때문에, 네트워크 안에 있는 라우터들의 포워딩 테이블 크기가 컸습니다.

왜냐하면 포워딩 테이블 엔트리는 네트워크에 존재하는 prefix만큼 갖고 있습니다. 그래서 prefix가 줄면 네트워크 안에 들어있는 라우터들의 포워딩 테이블 크기 자체도 줄어들게 됩니다.

4. Subnets

서브넷이나 네트워크나 비슷한 의미인데 서브넷은 같은 서브넷 id, 같은 prefix를 가진 IP 주소, 같은 prefix를 가진, 인터페이스 디바이스의 집합입니다. 또는 라우터를 거치지 않고 접근이 가능한 호스트들의 집합입니다. 예를 들면 이미지의 왼쪽 애들은 서브넷 id, prefix가 223.1.1 입니다. 그래서 여기 애들은 다 223.1.1 가졌습니다.

라우터가 IP 주소를 인터페이스 개수만큼 가지니까, 오히려 라우터는 IP 주소를 호스트 보다 많이 가집니다. 라우터 지금 인터페이스가 IP 주소 3개의 prefix가 다릅니다. 즉, 라우터는 하나의 서브넷에 속한 게 아니라 여러 개의 서브넷의 교집합 입니다. 그래서 이 교집합을 통해서만 다른 집합으로 갈 수 있습니다.

profile
가장 아름다운 정답은 서로의 협업안에 있다.

0개의 댓글