네트워크 계층 2

윤상준·2022년 4월 4일
0

네트워크

목록 보기
10/19
post-thumbnail

IP datagram format

IP 패킷의 헤더 필드를 모두 합하면 총 20바이트이다.
TCP 세그먼트의 헤더 필드 역시 총 20바이트이다.
인터넷 상에서 존재하는 대부분의 패킷들은 TCP 세그먼트를 담은 패킷이다. 그래서 쉽게 TCP 패킷이라고 한다.
TCP 패킷 안에는 TCP 헤더, IP 헤더 각각 20바이트 씩 들어있으니 기본적으로 인터넷 상의 패킷들은 40바이트 씩 차지한다.

  • ver : IP 프로토콜의 버전이다.
  • time to live : 한정 시간 만큼만 네트워크 상에 존재하다가 사라지는 수명이다.
  • upper layer : 올려 보낼 상위 계층의 프로토콜을 명시한다. (TCP 또는 UDP)
  • data : 통상적으로 TCP 또는 UDP 세그먼트가 들어온다.
  • 32bit source IP address : 32비트짜리의 전송자 IP 주소.
  • 32bit destination IP address : 32비트짜리의 수신자 IP 주소.

IP Address (IPv4)

32비트 짜리의 주소 체계를 가진 고유한 숫자이다. 따라서 2^32 만큼의 주소를 가질 수 있다.

IP 주소는 특정 호스트 안에 들어있는 네트워크 인터페이스 카드 즉, 네트워크 인터페이스 자체를 지칭하는 주소이다.

라우터는 여러 개의 네트워크 인터페이스 카드를 갖고 있고, 각각 다른 네트워크에 연결되어있으며, 각각 고유의 IP 주소를 갖고 있다.

현재 우리가 읽고 있는 IP 주소는, 2진수의 IP 주소를 8비트 씩 끊은 후 각각 10진수로 변경한 것이다.

Internet이란 풀어서 얘기하면 Inter-Network로써, 두 개 이상의 네트워크가 연결되어있는 상태를 의미한다.

주목할 점은 호스트끼리 연결하는 것이 아니라 네트워크 끼리 연결한다는 점이다. 따라서 네트워크의 주소를 지정할 필요가 있다.

Scalability Challenge

IP 주소가 마구잡이로 배정된다면 각각의 라우터 안에 있는 포워딩 테이블은 기하급수적으로 커질 것이며 포워딩 속도가 매우 느려질 것이다. 마구잡이로 배정된 IP 주소를 전부 엔트리에 반영시켜야하기 때문이다.

이러한 문제점을 Scalability Challenge라고 한다. (스케일이 커짐으로 인한 문제점)

Hierarchical Addressing : IP Prefixes

따라서 IP 주소는 계층화되어 구성된다.

32비트의 IP 공간을 임의로 2개의 공간으로 나눈 후,

  • 앞 부분은 네트워크 ID.
    • 같은 네트워크에 해당하는 호스트들은 같은 네트워크 ID를 가지도록 설정한다.
    • 새로운 호스트 추가가 용이하다.
  • 뒷 부분은 네트워크 안에 속해있는 호스트 ID.
    • 해당 네트워크 안에 어느 인터페이스인지를 지칭한다.

따라서 네트워크 ID는 즉, 서브넷 ID라고도 하며, 프리픽스라고도 한다.

Scalability Improved

같은 네트워크 상에 속해있는 호스트들은 같은 프리픽스를 갖게 되므로 포워딩 테이블 구성이 한층 더 단순해진다.

그림에서처럼 1.2.3 의 프리픽스를 가진 호스트들은 왼쪽으로, 5.6.7 의 프리픽스를 가진 호스트들은 오른쪽으로 모을 수 있다.

새로운 호스트를 추가할 때 역시 프리픽스가 같으므로 포워딩 테이블에 새로운 엔트리를 추가할 필요가 없다.

이처럼 계층화는 Scalability (확장성)에 있어서 필수적이다. 현대 인터넷에는 약 400,000개의 네트워크 프리픽스가 사용되고 있다.

Subnet Mask

서브넷 마스크
네트워크 ID를 기계가 이해할 수 있도록 비트맵으로 표현한 것이다.

서브넷 마스크는 단순히 IP 주소 중에서 어디까지가 서브넷 ID (= 네트워크 ID = 프리픽스) 인지를 나타내는 것이다.

Classful Addressing

예전에는 IP 주소를 클래스로 나눠서 분리했다. /8, /16, /24 등등으로 8비트씩 고정해서 나눴다. 하지만 이 방식은 8비트 만으로는 부족할 경우 등을 대비하기 어려워서 개선안이 등장했다.

Classes Inter-Domain Routing (CIDR)

8비트 씩 고정해서 끊는 것이 아니라 네트워크 크기에 맞게 유동적으로 끊을 수 있다.

Subnets (서브넷)

서브넷 (Subnets)
같은 프리픽스 (서브넷 ID)를 가진 디바이스들의 집합

서브넷 안에 있는 호스트들끼리는 라우터를 거치지 않고 서로 접근할 수 있다.

또한 라우터는 여러 개의 IP 주소를 갖고 있는데, 이는 즉 라우터는 하나의 서브넷에만 포함되어있는 것이 아니라 여러 개의 서브넷에 걸쳐있는 존재임을 의미한다.

Network Address Translation (NAT)

NAT가 등장한 상황을 간략하게 살펴보면 다음과 같다.

IPv4는 32비트의 주소 체계를 갖고 있으며 총 2^32개의 호스트들이 사용할 수 있다. 하지만 90년대 초반에 들어서면서 많은 사람들이 인터넷을 사용하기 시작했고 곧 IPv4의 한계가 나타났다.

1996년 제안된 IPv6는 128비트의 주소 체계로 인해 총 2^128개의 호스트들이 사용할 수 있다. 하지만 아직 본격적으로 사용되고있지는 못하고 있다. 왜냐하면 기존에 IPv4를 사용하고 있던 라우터들을 모두 IPv6로 교체해줘야하는데 말처럼 쉬운 일이 아니기 때문이다.

그렇다면 한정된 IPv4를 어떻게 효율적으로 사용할 수 있을까?

바로 IPv4의 주소 공간 하나를 한 명만 쓰는게 아니라, 하나의 주소 공간을 여러 명이 공유하면서 사용하도록 일종의 트릭을 통해 IPv4를 효율적으로 사용할 수 있다.

이러한 트릭을 Network Address Translation (NAT) 라고 한다.

NAT의 동작 방식은 그림과 같다.

  • 서브넷 안에 있는 호스트들은 고유한 사설 IP 주소를 사용한다. (그림의 10.0.0.1, 10.0.0.2)
    • 이때 내부의 IP 주소들은 외부와의 통신에 사용될 수 없다.
  • 서브넷 너머에 있는 외부와 통신할 때는 NAT 역할을 하는 게이트웨이 라우터를 거쳐서 전세계적으로 고유한 IP 주소 (공인 IP 주소)로 변경된다.
  • 외부와 통신이 끝나고 다시 서브넷 안으로 들어올 때 역시 게이트웨이 라우터를 거쳐서 내부만의 사설 IP 주소로 변경되어 들어온다.

가운데에 있는 게이트웨이 라우터를 기준으로 왼쪽은 외부 인터넷이고, 오른쪽은 내부의 Local Network이다.

  • 서브넷 안에서 돌아다니는 데이터그램은 모두 10.0.0/24의 사설 IP 주소를 갖는다.
  • 반면 서브넷을 떠나는 모든 데이터그램은 NAT를 거쳐서 하나의 고유한 IP 주소를 갖게 된다. (138.76.29.7)
    • 이때 유의할 점은 IP 뿐만 아니라 포트 번호까지 같이 바뀐다는 점이다. 그 이유는 Local 환경에서 같은 포트 번호를 사용할 수도 있기 때문이다.
    • 결국 외부에서 내부로 들어올 때는 하나의 IP 주소로 들어오기 때문에, 포트 번호로 서브넷 중 어디로 보낼지를 식별해야한다.
profile
하고싶은건 많은데 시간이 없다!

0개의 댓글