[Network] 네트워크 계층 1, 2
💻CS/Network

[Network] 네트워크 계층 1, 2

728x90
반응형

Application Layer, Transport Layer 그 아래의 Network Layer에 대해 알아볼 것이다. 

 

네트워크 레이어의 두 가지 핵심 기능 (feat. 라우터)

라우터는 패킷이 들어오면 목적지로 향하는 방향으로 전달하는게 핵심이다. 패킷의 헤더에 해당 정보가 있어 이를 분석하여 정보를 얻어낼 수 있다. 

 

  • forwarding : 들어온 패킷의 목적지 + 표(forwarding table)를 보고 매칭시켜서 알맞는 링크로 보낸다. 
  • routing : forwarding시 참조할 수 있는 forwarding table을 라우팅 알고리즘이 만드는 역할을 한다. 

 

포워딩 테이블의 양이 너무 많다보니 주소 범위로 관리가 되어 있다. 예를 들어서 0 ~ 100부터는  0번, 101 ~ 200은 1번과 같이 구성되어 있다. 

 

만약 포워딩을 할 때, 표와 어떻게 매칭시켜야할까?

첫 번째를 보면 0번 링크를 가진 주소 범위와 유사한 것을 알 수 있다. 이에 0번으로 나가게 된다.

 

두 번째는 2,3번과 유사한데 어떻게 결정되어야 할까?

더 많이 매칭되는 1번으로 나가야 한다. 이러한 매칭 방식을 말 그대로 많이(길게) 매칭이 되어야 한다고 해서 Longest prefix matching이라고 한다. 테이블에서 맞지 않는 경우는 other로 보내준다. 

 


네트워크 레이어에서는 IP가 제일 중요하다.

전송 단위는 패킷(Packet)으로 마찬가지로 헤더와 데이터로 구성되어 있고, 데이터에는 TCP의 세그먼트가 포함되어 있다. 

 

IP 패킷을 나타낸 그림(헤더와 데이터)

source IP address와 destination IP address가 제일 중요하다.

  • source IP address : 메세지를 생성해서 보내는 사람의 IP 주소
  • destination IP address : 최종 목적지 호스트의 IP 주소

time to live는 라우터를 거칠 수 있는 회수를 의미한다. 즉, 20으로 설정되어있다면 라우터를 거치면서 이 값이 1씩 줄어들게 되는 것이다. 이 값이 0이 되는 순간 패킷은 버려지게 된다. (무한루프를 도는 것을 방지한다 = 한정된 시간 동안만 존재해라)

 

upper layer는 데이터에 들어가는 것이 TCP인지 UDP인지 명시하기 위해 적어준 것이다. 즉, 리시버 측에서 upper layer가 무엇인지 받아서 다시 전송하는데 사용한다. 

 

IP Address

  • 32비트 주소 체계를 가진다. (8비트씩 끊어서 10진법으로 표기한다)
  • 호스트에 들어있는 네트워크 인터페이스 자체를 지칭하는 주소이다. 

 

그렇다면 IP주소는 어떻게 배정될까? 

 

그냥 무작위 숫자로 주어지지는 않는다 왜냐하면 아래와 같이 좌측의 LAN의 host에 1.2.3.4를 , 우측 LAN2의 호스트에 1.2.3.5의 주소를 할당했다고 했을 때, forwarding table이 복잡해지게 된다. 

Forwarding Table

1.2.3.4일 경우에는 왼쪽으로 가야하고, 1.2.3.5일 때는 오른쪽... 

이렇게 무분별하게 규칙없이 생성하다보니 forwarding table이 복잡해지면서 커지게 되고, 검색 또한 어려워지게 된다. 

그리하여 무분별하게 IP주소를 할당하는 것이 아니라, 이를 계층화하여 할당해준다. 

 

 

Hierarchical Addressing

32비트의 공간을 두 부분으로 나누어 할당하는데, 앞의 24비트 공간은 네트워크 ID, 나머지 8비트 공간은 네트워크에 속해있는 호스트를 지칭하는 호스트 ID로 나누었다. 즉, 같은 네트워크에 속하면 같은 네트워크 ID를 가지게 되어 주소의 앞부분이 동일해지는 것이다. 

네트워크 ID라고도 하나 간단하게 prefix(접두) 혹은 subnet ID라고 부르기도 한다. 

 

IP Address

 

또한 IP주소 중에서 어디까지가 네트워크 ID(subnet ID)인지 나타내기 위해 Subnet Mask라는 것을 사용한다.

이를 통해 네트워크의 크기 또한 알 수 있다. 

Subnet Mask

즉 Mask에서 1로 채워져있는 부분을 네트워크 영역으로 사용하겠다는 것이고, 0으로 되어있는 부분은 호스트IP로 사용하겠다는 뜻이다. 

 

이렇게 prefix 방식으로 구성하게 되면, 같은 네트워크에 속하면 같은 prefix를 가진다고 했었다. 그 덕분에 forwarding table이 단순해지게 된다.

hierarchy addressing

앞선 무작위 IP주소 할당과는 달리 LAN1은 1.2.3의 네트워크 IP를 공통적으로 갖고, LAN2는 5.6.7을 공통 네트워크 IP로 갖는 것을 볼 수 있다. 이 덕분에 forwarding table 또한 단순해진 것을 확인해볼 수 있다. 더 나아가서, 새로운 호스트를 추가하는 경우에도, 내 맘대로 호스트 ID를 주어 할당할 수 있다. (같은 prefix만 갖도록 해주면 된다)

새로운 호스트 추가

Classful Addressing

예전에는 IP주소의 prefix를 할당할 때 그 크기를 클래스 마다 다르게 구성하였다. 

 

  • Class A: 무조건 0으로 시작해야함 (0*)
    • /8 블록까지만
    • 나머지(32-8)인 24비트의 크기만큼, 즉 2^24개 만큼 호스트의 수를 정해줄 수 있다. 
    • 2^7만큼, 즉 128개의 기관이 class A라는 주소 공간을 획득할 수 있다. > 자체가 문제. 너무 극소수임
  • Class B
    • /16 블록까지만
    • 나머지(32-16)인 16비트의 크기만큼, 즉 2^16개 만큼 호스트의 수를 정해줄 수 있다.
  • Class C
    • /24 블록까지만
    • 나머지(32-24)인 8비트의 크기만큼, 즉 2^8개 만큼 호스트의 수를 정해줄 수 있다.

여기서 Class A는 소수의 인원만이 사용할 수 있지만, 그 공간은 엄청나게 크다. 그렇기 때문에 사실상 class A를 사용하는 경우, 모든 공간을 사용하지 못해 낭비하게 되는 반면, Class A의 경우 많은 인원이 사용할 수 있지만 그 공간은 작아 비효율적이다.

 예를 들어, 1,000개의 호스트를 필요로 하는 대학교가 있다고 해보자. 이미 Class A,B는 포화되어 C에 의해 IP 주소를 할당받게 되었는데, 최대 호스트의 수가 2^8이기 때문에 그 수가 모자르다. 이를 해결하기 위해 두 개의 네트워크 주소를 할당받아 2^8 * 2개 만큼의 호스트 수를 얻을 수 있다. 

 그 수는 증가하였지만 prefix가 다른 주소를 가지고 있기 때문에 라우터가 참조할 forwarding table이 점점 복잡해지게 되는 것이다. 

 

그래서 90년대 중반에 "Classless Inter-Domain Routing(CIDR)", 즉 Class 없이 주소 공간을 할당하는 방법이 등장했다. 

더 이상 8비트 단위로 prefix가 끊어지는 것이 아니라, 자유롭게 원하는대로 끊어서 사용할 수 있게 되었다.

CIDR

이러한 양상을 그래프로도 확인해볼 수 있다. 

CIDR 이전, 즉 Class만 사용하였을 때는 테이블의 크기가 꾸준히 상승하는 곡선을 보이고 있다. 

CIDR 이전

하지만 CIDR을 적용한 이후 부터는 조금 더 완만하게 증가하고 있음을 확인할 수 있다. 

CIDR 이후

아무튼, 그리하여 이제 prefix 기반의 포워딩이 이루어져 다음과 같이 forwarding table을 통해 나뉘어 이동할 수 있는 것이다. 

 

 

Longest Prefix Match Forwarding

라우터가 패킷을 받으면 destination IP Address를 받게 되는데, 이를 forwarding table내 엔트리와 매칭되는지 확인을 해준다.

3,4번째 엔트리 모두 prefix 방식으로 destination과 매칭이 된다. 여러 개 매칭이 되다 보니 이 중에서 하나를 선택해줘야 하는데, "가장 길게 매칭"되는 것이 기준이 된다. 즉, prefix가 제일 긴 것을 찾아서 매칭해주면 된다. 

 

라우터는 쉬지 않고 longest prefix matching을 계속 해주는데, 이것이 라우터의 역할이다.

 

과연 forwarding table 엔트리는 누가 채우는 것일까? 앞서 봤던 것 처럼 라우팅 알고리즘이 채우게 되는데 이는 다음 번에 자세하게 알아보자. 

 

정리해보자면, IP 주소는 32비트로 이루어져 있고, prefix와 host 부분으로 나뉘어 있는 것이다. (prefix 사이즈는 유연하게 조절 가능하다.)

 

Subnets

서브넷(subnet)이란, 같은 prefix를 가진 디바이스의 집합이다. 

 

subnet

좌측 상단에는 223.1.1을 prefix로 가진 서브넷이 위치해있고, 우측 상단에는 223.1.2를 prefix로 가진 서브넷이 위치해있다. 

서브넷은 또 다른 말로, 라우터를 거치지 않고 접근할 수 있는 호스트들의 집합이라고도 한다. 

 

위 그림을 보면 라우터는 1개이고, 인터페이스가 3개(= IP 3개)인 것을 볼 수 있다. 만약 prefix를 /24 까지 본다고 하면 3개의 IP주소가 다 다른 것을 볼 수 있다. 즉, 라우터는 하나의 서브넷에 속한게 아니라 여러 개에 서브넷에 속해있다. 즉, 교집합 같은 느낌인 것이다. 이 라우터(교집합 부분)을 거쳐야 다른 IP로 이동할 수 있는 것이다. 

 

여러 개의 서브넷

즉 위와 같은 경우는 서브넷이 총 6개가 되는 것이다. (기준은 동일하게 prefix /24) 즉 라우터들은 각 3개의 네트워크에 걸쳐있는 것이다. 

 

70년대부터는 IP.4 버전을 처음으로 인터넷을 사용하고 있었다. 이는 총 2^32 개(약 40억개)의 호스트들을 지원하는 규모를 가지고 있었으나, 인터넷이 점점 상용화되면서 부터, 주소 공간이 부족할 것이라는 예상이 있었다. 

이에 96년도에 IP.6 버전이 등장하며 2^128개까지 지원해줄 수 있게 되었다. 개수는 표현할 수 없을 정도로 많아, 전 세계 해변의 모래알 개수와도 같다는 비유를 들기도 한다. 과연 현재까지 IP.6을 잘 사용하고 있을까? 답은 아니다.

현재는 다시 회귀하여 IP.4를 사용하고 있는데, 기존 주소 공간을 재활용하면서 이 상황이 가능해졌다. 40억개의 주소 공간을 고유한 것을 쓰는게 아니라 공유하면서 사용하기에 현재까지 이어질 수 있는 것이다. 이러한 트릭이 NAT이다. (네트워크 주소 공간 문제를 근본적으로 해결하지 않고 트릭으로 일부 해소한 것이기 때문이다)

 

NAT (Network Address Translation)

인터넷 상에서 데이터를 주고받기 위해서는 서로 고유한 IP주소를 가져야하는데, 현재 고유한 IP를 가지기에는 너무나 공간이 부족한 상황이다. 

 

이에 IP 패킷의 TCP/UDP 포트 넘버와 source/destination IP Address를 재작성하여 라우터를 통해 네트워크 트래픽을 주고받는 NAT 방식이 등장하였다. IP 주소들은 내부적으로는 유일하되 외부에서는 사용이 가능하다. (NAT를 통해 재작성되기 때문) 즉, IP 주소 공간을 절약할 수 있고, 보안까지 챙길 수 있는 방식이다. 

출처: 위키피디아

 

라우터는 네트워크 레이어의 디바이스로 네트워크 레이어의 헤더만 봐야한다. 즉, 우편 배달부의 역할인 라우터는 편지 봉투(헤더)만 봐야하는데, 편지 내용(데이터)을 보고 수정하고 있는 것이다. 이를 layer violation 이라고 하며, 라우터가 멋대로 헤더 정보도 바꾸고 데이터 정보도 바꿔버린 것을 의미한다. 

 

또한 NAT 라우터를 통해 IP와 포트 넘버가 변경되어 요청되고 이를 응답 받는데서 문제가 하나 더 발생한다. 일반적으로 포트넘버를 통해 호스트 내의 프로세스를 찾고 IP를 통해 호스트 인터페이스를 찾는데, NAT에서는 포트 넘버를 통해 호스트 인터페이스를 찾기 때문이다. 그러면 이제 프로세스를 찾는 역할을 하는 포트 넘버가 다른 역할을 하기에 서버 운영에 차질이 생기는 것이다.

 만약 기존에 N개의 IP가 있었다고 해보자. 외부에서 응답을 받는 경우 어떤 IP로 변환해야 할 지 모르는 문제가 발생하기에 위 처럼 서버에서 운영할 수 없다고 생각될 수 있을 것 같다. 

 

 

 

http://www.kocw.net/home/cview.do?mty=p&kemId=1169634 

 

컴퓨터네트워크

인터넷을 동작시키는 컴퓨터네트워크 프로토폴을 학습한다.

www.kocw.net

 

 

 

 

 

728x90
반응형