과정을 즐기자

네트워크 계층(L3)이 하는 일(feat. IP, 라우터, ARP, NAT...) 본문

Network

네트워크 계층(L3)이 하는 일(feat. IP, 라우터, ARP, NAT...)

320Hwany 2023. 7. 22. 16:12

이번 글에서는 저번 글에 이어서 네트워크 계층(L3)이 하는 일에 대해 알아보겠습니다.    

물리 계층(L1), 데이터 링크 계층(L2)이 하는 일은 이전 글을 참고해주세요

 

물리 계층(L1), 데이터 링크 계층(L2)이 하는 일

이번 글에서는 물리 계층(L1), 데이터 링크 계층(L2)에 대해서 알아보겠습니다. L1 - 물리 계층 L1에는 케이블, 리피터, 허브가 있습니다. L1은 실제로 데이터를 물리적으로 전송해주는 역할을 합니

320hwany.tistory.com

 

L3 - 네트워크 계층

 

이전에 스위치와 허브로만 이루어진 브로드캐스트 영역을 나눠야할 필요성이 있었습니다.    

LAN 영역에서 LAN 영역으로 넘어가게 되면 기존에 사용하던 출발지 MAC 주소, 목적지 MAC 주소만으로는 

다른 LAN 영역에 있는 컴퓨터에 전송하기가 어렵습니다.   

물리적인 MAC 주소 이외에 논리적인 주소가 추가로 필요합니다.

브로드캐스트 도메인을 나누는 장치로 라우터라는 이름을 붙이고 IP 주소를 활용해 LAN 영역 사이를 문제없이

통신하도록 만들었습니다.

스위치, 허브로만 이루어진 영역을 LAN 영역이라고 부르고 라우터를 넘어가는 영역을 WAN(인터넷) 영역이라고 합니다.

IP 주소

IP 주소는 모든 호스트와 라우터에 할당됩니다. 라우터는 IP 주소를 이용해 다른 네트워크에 있는 호스트까지 

데이터를 정확하게 전송할 수 있도록 합니다. 

이때 라우터에는 여러 개의 포트(트랜스포트 계층의 포트와 다름)가 있는데 포트마다 MAC 주소와, IP 주소가 할당됩니다.   

IP 주소는 32비트로 이루어져 있습니다. 8비트마다 점으로 끊어서 10진수로 표현합니다.

IP 주소는 32비트 이므로 2^32을 표현할 수 있고 약 43억을 나타냅니다.

43억개 정도의 IP 주소를 효율적으로 관리하기 위해서 IP 클래스와 서브넷 마스크가 등장하였습니다.

IP 클래스

IP 클래스는 A, B, C, D 4가지가 있습니다.

 

클래스 A

클래스 A는 0으로 시작하며 앞의 8비트를 네트워크 주소로 사용하고 나머지 24비트를 호스트 주소로 사용합니다.

 

클래스 B

클래스 B는 10으로 시작하며 앞의 16비트를 네트워크 주소로 사용하고 나머지 16비트를 호스트 주소로 사용합니다.

 

클래스 C

클래스 C는 110으로 시작하며 앞의 24비트를 네트워크 주소로 사용하고 나머지 8비트를 호스트 주소로 사용합니다.

 

클래스 D

클래스 D는 1110으로 시작하며 32비트 모두를 네트워크 주소로 사용합니다. 

호스트를 지정할 수 없기 때문에 멀티캐스트 용도로 사용합니다.

 

IP 주소만 보고는 어느 클래스에 속하는 지 모르기 때문에 10.1.2.3/8과 같이 슬래쉬(/) 뒤에 어디까지가

네트워크 주소를 표현하는 건지 작성해줍니다.

서브넷 마스크

하지만 이러한 IP 클래스는 한계가 있습니다. 예를들어 300개의 IP 주소가 필요한 곳에 클래스 C를 줄 수 없기 때문에

클래스 B를 주면 6만 개의 IP 주소가 낭비됩니다.    

이렇게 IP 주소가 낭비되는 문제를 해결하기 위해 서브넷 마스크가 등장 했습니다.

서브넷 마스크는 IP 클래스로 나뉘어서 낭비되는 공간을 다시 한번 나누는 기술입니다.

서브넷 마스크는 32비트로 표현하는데 1로 표현한 부분까지 네트워크 주소를 0으로 표현한 부분을 호스트 주소로

나타냅니다.

 

IP 헤더

Version은 4비트로 구성되고 IP 헤더의 버전을 나타내는 필드입니다. (ex. IPv4는 4로 나타냄)
Header Length는 4비트로 구성되고 현재 IP 헤더의 크기를 나타냅니다 (32비트 단위)

TOS는 8비트로 구성되고 서비스의 우선순위를 나타내는데 거의 사용되지 않습니다.

Total Packet Length 필드는 16비트로 구성되고 IP 패킷의 크기를 나타냅니다. (바이트 단위)

 

Identifier 필드는 16비트로 구성되고 분할된 패킷을 구분하기 위한 용도로 사용합니다.

Flags 필드는 3비트로 구성되고 패킷을 분할할 지 말지를 나타냅니다.

Fragment Offset 필드는 13비트로 구성되고 분할된 패킷이 원래 데이터에서 얼마나 떨어져 있는지를 나타냅니다.

분할전 패킷을 다시 복원할 때 사용합니다.

 

Time To Live 필드는 8비트로 구성되고 몇 개의 라우터를 이동할 수 있는 지를 나타냅니다.

Protocol ID 필드는 8비트로 구성되고 상위 계층의 프로토콜이 어떤 프로토콜인지를 나타냅니다.
Header Checksum 필드는 16비트로 구성되고 IP 헤더가 손상되었는 지를 체크합니다.

 

Source IP Address는 32비트로 구성되고 출발지 IP 주소를 나타냅니다.

Destination IP Address는 32비트로 구성되고 목적지 IP 주소를 나타냅니다.

Options 필드는 주로 사용되지는 않지만 테스트용으로 사용되는 가변 길이의 필드입니다.

Padding은 Options 필드를 사용하는 경우 길이가 맞지 않았을 때 덧붙이는 용도로 사용하는 필드입니다.

라우터

위에서 언급한 것처럼 스위치, 허브로만 구성된 브로드캐스트 영역을 라우터를 사용해서 나눌 수 있습니다.

라우터CPU와 메모리가 있는 일종의 컴퓨터로 오직 네트워크에서 데이터를 전송하기 위한 컴퓨터입니다.

핵심 라우터들은 다른 통신사와 연결되는데 이를 코어 라우터라고 부릅니다.

코어 라우터로 구축된 시스템을 백본이라고 합니다.

라우팅 프로토콜

라우터는 목적지 네트워크까지 가는 경로를 메모리 안에 있는 라우팅 테이블에 미리 저장합니다.

라우팅 테이블을 만드는 방법에는 2가지가 있습니다.

스태틱 라우팅

스태틱 라우팅은 관리자가 직접 주소 하나하나를 지정하는 방식입니다.

사람이 직접 경로를 지정하기 때문에 라우터의 CPU가 계산할 것이 많지 않아 처리 속도가 빠르고 

메모리도 적게 사용해 라우터의 부담이 적습니다.

또한 자신의 정보를 외부로 전송하지 않기 때문에 보안에도 더 유리합니다.

하지만 특정 라우터가 고장이 나거나 문제가 생겼을 때 유연하게 대처하지 못하여 

대규모 네트워크에서 사용하기에는 적합하지 않습니다.

다이나믹 라우팅

라우터가 다른 라우터들과 정보를 공유해 라우터 스스로 라우팅 테이블을 만드는 방법입니다.

라우팅 테이블에 목적지와 일치하는 정보가 저장되어 있지 않으면 설정한 디폴트 라우트로 보냅니다.

라우터는 디폴트 라우트 덕분에 자신이 모르는 목적지 주소는 연결된 디폴트 라우트를 통해서

목적지까지 보낼 수 있습니다.

 

다이나믹 라우팅에 대해 자세히 알아보기 전에 먼저 AS(Autonomous System)에 대해 알아보겠습니다.

AS는 대학교, 회사, 통신사와 같은 하나의 조직이 많은 라우터를 연결해 만든 네트워크입니다.

AS 내부에서 사용되는 라우팅 프로토콜을 IRP(Interior Routing Protocol)이라고 하고

AS 외부에서 사용되는 라우팅 프로토콜을 ERP(Exterior Routing Protocol)이라고 합니다.

IRP는 다시 Distance Vector, Link State 방식으로 나뉩니다.

대표적인 Distance Vector로는 RIP(Routing Information Protocol)이 있고

대표적인 Link State로는 OSPF(Open Shortest Path First)가 있습니다.

ERP에는 Path Vector 방식인 BGP(Border Gateway Protocol)가 있습니다.

 

IRP - RIP (Distance Vector) 

 

RIP는 목적지 라우터까지의 거리와 목적지까지 가기 위한 어떤 인접 라우터 방향으로 가는지를

라우팅 테이블에 저장하는 방식입니다.

이 정보를 인접 라우터와 30초마다 공유하는 방식으로 라우팅 테이블을 유지합니다.

RIP는 하나의 메모리가 모든 정보를 가지고 있지 않기 때문에 적은 메모리를 요구하고 구성이 간단합니다.

하지만 라우팅에 변화가 없어도 30초마다 인접 라우터와 라우팅 테이블을 교환하기 때문에 쓸모없는 

트래픽이 많이 발생합니다.

또한 이 방식은 전체 경로를 알 수 없어 순환 경로에 빠지는 문제가 발생할 수 있습니다.

대규모 네트워크에서는 사용하기 어렵고 소규모 네트워크에서 주로 사용합니다.

IRP - OSPF (Link State)

LSA(Link State Advertisement)는 연결 정보가 담긴 자신의 링크 정보를 말합니다.

LSA에는 라우터의 ID, 연결된 포트의 IP 주소, 비용 등이 적혀있습니다.

모든 라우터가 동시다발적으로 각자의 LSA를 연결된 모든 라우터에게 전달합니다.

전달된 LSA는 각 라우터의 LSDB(Link State Data Base)에 저장됩니다.

LSDB를 다익스트라를 이용해서 최단 경로를 계산합니다.

 

OSPF는 RIP와 다르게 모든 라우터의 라우팅 테이블이 업데이트 되는 시간이 짧습니다.

또한 링크 정보를 자주 교환하지 않아 트래픽을 줄일 수 있습니다.

따라서 대규모 네트워크에 사용하기 적합합니다.

하지만 모든 라우팅 정보를 저장하기 때문에 많은 메모리가 필요하고 최단 경로도 계산해야하기 때문에 

CPU도 더 바빠집니다. 즉 더 높은 라우터 하드웨어 성능을 요구합니다.

ERP - BGP (Path Vector)

BGP는 경쟁사를 피해 다른 경로를 선택할 수 있으며 라우터를 구분했기 때문에 트래픽을 줄일 수도 있습니다.

각 AS에서 외부 AS와 연결되는 라우터를 ASBR(Autonomous System Boundary Rounter)라고 합니다.

ASBR들은 서로 경로 속성을 공유합니다. 경로 속성은 연결된 모든 ASBR과 양방향으로 교환합니다.

 

라우팅 프로토콜에 대해 정리하자면 인터넷이라는 거대한 네트워크에서 AS간의 연결은 BGP를 사용하고

AS 내부에서는 스태틱 라우팅, RIP, OSPF 등을 적절하게 이용해 라우팅 테이블을 만들어 데이터를 원하는 목적지로 전송합니다.

라우터는 여러 알고리즘을 이용해 라우터 간의 최적의 경로를 계산합니다.

 

  스태틱 라우팅 다이나믹 라우팅(IRP - RIP) 다이나믹 라우팅(IRP - OSPF) 다이나믹 라우팅(ERP - BGP)
장점 CPU와 메모리 사용량이 적음 모든 라우팅 정보를 가지고 있지 않아 라우터 부담이 적음 Coverage time 작음 /
단점 특정 라우터가 고장나면 전체 네트워크 마비될 수 있음 Coverage time이 큼
대규모 네트워크에서는 무리
라우터가 모든 라우팅 정보를 가지고 있어 메모리와 CPU 많이 사용, 복잡함 /

ICMP

ICMP는 네트워크에서 해당 목적지까지 데이터가 도달할 수 있는지 도달할 수 없다면 그 원인이 무엇인지 

알아내기 위한 프로토콜입니다.

 

ICMP 헤더에는 IP 헤더와 이더넷 헤더가 붙습니다. 

ICMP 헤더에는 Type, Code, Checksum 등과 같은 필드가 있습니다.

Type 필드는 8비트로 구성되고 현재 ICMP가 어떤 타입의 ICMP 인지를 나타냅니다.

예를들어 Type 0번은 에코 응답, 3번은 목적지 도달 불가, 8번은 에코 요청, 시간초과를 나타냅니다.

Code 필드는 8비트로 구성되고 Type 필드에 대해 자세한 설명을 합니다.

Checksum 필드는 16비트로 구성되고 메세지에 오류가 있는지 확인합니다.

ARP 

ARP는 IP 주소로 MAC 주소를 알아내는 프로토콜입니다.

목적지의 IP 주소만 알고 있다면 출발지에서 ARP 요청 메세지를 만들어 브로드캐스트 합니다.

목적지에서는 ARP 요청 메세지를 받고 ARP 응답 메세지를 보냅니다.

이 과정에서 출발지와 목적지의 컴퓨터의 ARP 캐시라는 곳에 MAC 주소를 저장해둡니다.

이후에 MAC 주소가 필요할 때는 브로드캐스트할 필요 없이 ARP 캐시를 참고하여 바로 보낼 수 있습니다.

NAT

사용자의 모든 장치에 고유한 IP 주소를 부여하면 너무 많은 IP 주소가 사용됩니다.

외부와 통신하는 곳에만 고유한 IP 주소를 부여하고 LAN 환경에서는 가상의 IP를 부여할 수 있습니다.

가상의 IP를 Private IP라고 하며 외부와 통신하는 곳에 부여하는 고유한 IP를 Public IP라고 합니다.

NAT는 Network Address Translation의 약자로 네트워크 주소를 변환하는 것을 말합니다.

 

Static NAT은 관리자가 라우터에 직접 Private IP 주소에 Public IP 주소를 매핑하는 방식입니다.

Private IP 하나에 Public IP 하나를 매핑해서 주소를 아낄 수는 없습니다.

IP 주소를 절약하기 위한 목적으로는 사용되지 않고 주로 보안의 목적으로 사용합니다.

Inbounding 패킷과 Outbounding 패킷 모두에 사용할 수 있습니다.

 

Dynamic NAT은 관리자가 여러 개의 Public IP를 준비해두고 요청한 호스트에게 여분의 Public IP를 

빌려주는 방식입니다.

하지만 이 방식은 관리자가 미리 준비한 Public IP 주소가 부족해지면 다른 누군가가 Public IP 주소를 

반납하기 전까지 외부와 절대 통신할 수 없어 요즘에는 거의 사용하지 않는 방삭입니다.

PAT

PAT(Port Address Translation)은 IP 뿐만 아니라 트랜스포트 계층의 포트까지 이용해 매핑 테이블을 

작성하는 방식입니다. 

PAT을 이용하면 하나의 Public IP 주소에 같은 네트워크에 존재하는 여러 개의 Private IP 주소를 

할당할 수 있습니다. IP 주소가 같더라도 포트로 구분할 수 있기 때문입니다.

 

Static PAT은 하나의 Public IP 주소에 여러 개의 Private IP 주소를 매핑할 수 있는 장점이 있습니다.

하지만 관리자가 일일이 IP 주소와 포트 번호를 지정해줘야 해서 번거롭습니다.

Static PAT은 포트포워딩이라고도 부릅니다.

 

Dynamic PAT은 여러 개의 Private IP 주소를 하나의 Public IP 주소로 매핑시키는 기술로 Static PAT과

비슷하지만 포트를 자동으로 할당해주기 때문에 더 편리한 방식입니다.

매핑 테이블에 저장된 정보는 BindingLifeTime 만큼 유효하다가 시간이 0이 되면 테이블에서 제거됩니다.

안쓰는 IP와 포트는 회수해서 다른 컴퓨터에게 주기 위해서 제거합니다.

Dynamic PAT은 이렇게 여러 개의 Private IP를 포트를 이용해 하나의 Public IP로 자동으로 변환해주는 

편리한 기능을 제공하지만 단방향으로만 통신을 시작할 수 있다는 단점이 존재합니다.

NAT 내부에 있는 컴퓨터에서 먼저 통신을 시작해야만 합니다. (Outbound)

외부에서 먼저 통신을 시작한다면 매핑 테이블에 아무 정보가 없기 때문에 통신이 불가능합니다.

이러한 경우에는 Static PAT을 이용해야 합니다.

 

Static NAT 1:1 양방향 사용됨
Dynamic NAT N:N 양방향 사용안됨
Static PAT 1:N 양방향 사용됨
Dynamic PAT 1:N 단방향(Outbound Only) 사용됨

 

출처 : 그림으로 배우는 네트워크 (인프런 - 감자), 성공과 실패를 결정하는 1%의 네트워크 원리