회사에서 서버를 다룰 때, 각 계층별 스위치에 대한 이야기를 많이 듣게 된다.
대학교 학부 시절, 어렴풋이 배웠던 기억만 나지, 정확히 각 계층이 어떤 역할을 하고, 여러 스위치가 왜 존재하는지 등 자세히 설명할 수 없었기에, 실무에서 대화를 제대로 이어가기 어렵단 느낌을 받았다.
그러다 보니 이번에 해당 내용을 정리해보려 한다.
내가 실무를 하며 기본적으로 알아야 할 내용들에 대한 공부이므로, 교과서적인 정리는 아니고, 실무에서 이해할 정도만 정리해보려 한다.
스위치
먼저 스위치란 무엇일까?
스위치는 이름 그대로, 스위칭(Switching)을 해주는 도구이다.
데이터가 오고 갈 때, 각 데이터가 목적지에 해당하는 경로로 이동하도록 안내해 주는 이정표와 같은 역할을 한다.
네트워크는 고속도로와 비교할 수 있다.
자동차가 A -> D로 간다고 할 때, A는 D로 가는 길에 여러 갈림길을 만난다.
여기서 D로 가기위해선 각 갈림길에서 D로 안내하는 이정표를 따라 이동할 것이다.
이걸 네트워크로 변경해보자.
패킷(데이터)이 A -> D로 간다. 패킷도 목적지로 가며 여러 갈림길을 만난다.
여기서 D로 가려면 각 네트워크 갈림길에서 D로 가는 경로를 따라 이동한다.
이렇게 특정 목적지로 가는 경로를 따라 이동하는 것을 스위칭이라 한다.
(여기서 패킷은 L3 계층에서 데이터 단위이다.)
여기서 경로를 선택할 때 근거가 있다.
만약 이 근거가 IP라면, L3 스위칭을 한 것이고 ,
이 근거가 MAC 주소라면 L2 스위칭을 한 것이다.
스위치는 이런 근거들을 그냥 주먹구구 식으로 패킷에게 알려주지 않는다.
각 목적지로 가기 위해선 어떤 경로를 선택해야 하는지 표로 정리하고, 이 표를 보고 각 패킷을 스위칭한다.
이렇게 각 스위치가 가지고 있는 표를 라우팅 테이블(Routing Table)이라 한다.
(여기서도 당연히 L2 스위치라면 MAC 주소 테이블을 가지고 있다!)
우리가 특정 위치에 접근하거나, 통신을 할 때, 우리의 데이터 단위인 패킷이 인터넷을 돌아다닌다.
패킷은 인터넷을 돌아다니다 라우터를 만나고, 라우터가 이 패킷을 스위칭한다.
그러므로 라우터는 L3 스위치의 일종이라 말할 수 있다.
(물론 통상적으로 스위치라 하면 L2 스위치를 의미한다.)
그런데... 생각해 보면 같은 목적지로 가는데 한 방법만 있지는 않다.
A -> B -> D로 갈 수 있고 또는 A -> C -> D 로 갈 수도 있다.
이렇게 같은 목적지로 가는데, 여러 방법이 있을 때, 라우터는 무엇을 선택할까?
이때 이 선택의 기준이 되는 값을 매트릭(Metric)이라 한다.
이건 "값"이자 "비용"이다.
이 매트릭 값이 낮을수록 좋다.
그러므로 매트릭 값이 낮은 방향으로 이동한다.
L2 계층
회사 by 회사겠지만... 우리 회사는 온프레미스 환경이다.
이번에 인터넷 전용회선 및 보안장비를 교체하는 작업을 했는데, 서버실의 스위치와 각 층 및 사무실에 있는 스위치 역시 교체했다.
여기서 각층에 존재하며 사무실에서 사용하는 스위치가 L2 스위치이다.
여기서 L2가 무엇일까?
학교에서 배웠던 L2는 "데이터 링크 계층(Data Link Layer)"로 동일한 네트워크 내 여러 장치 간의 데이터 전송을 담당하는 계층을 의미한다. 이때 서로 주고받는 데이터의 전송 단위를 "프레임(Frame)"이라 하고, MAC 주소를 기반으로 통신한다.
여기서 동일한 네트워크 내 여러 장치란 쉽게 말해 우리 PC나 노트북을 의미한다.
우리는 PC 또는 노트북에 랜선을 꽂고, 인터넷을 받고 소통을 한다. 여기서 랜선을 꽂아 인터넷 통신을 가능하게 하는 것을 NIC(Network Interface Card) 또는 LAN(Local Area Network) 카드라고 한다.
인터넷이 라우터를 거쳐 L3 스위치, 그리고 L2 스위치를 통해 각 디바이스에 연결된다. 이때 이 디바이스의 유일한 H/W 주소를 MAC 주소라 한다.
주로 서버실에 L3 스위치가 존재하고 각 사무실 또는 방에 L2 스위치가 존재하는 이유가 여기 있다.
외부에서 우리 서버로 통신할 때 우리 서버의 IP를 찾아 통신이 들어온다. 이때 IP를 기준으로 들어온 외부 통신들을 적절한 내부 네트워크로 라우팅 해줘야 하기에, 서버실에 L3 스위치가 존재한다.
이때 IP를 기준으로, 어떤 IP에 해당하는 실제 H/W 장비에 요청을 전달해줘야 한다.
여기서 L2 스위치의 역할이 드러난다.
L3 스위치는 목적지 IP 주소를 확인하고 해당 네트워크로 라우팅 한다.
(이때 IP에 해당하는 MAC 주소를 찾기 위해 ARP 프로토콜이 사용된다.)
그러면 해당 네트워크에 연결된 각 층의 L2 스위치가 프레임을 받게 되고, L2 스위치는 프레임의 목적지 MAC 주소를 확인하여 자신의 MAC 테이블을 참조한다.
그리고 해당 MAC 주소를 가진 디바이스가 연결된 포트로 프레임을 스위칭한다.

위 그림처럼 동작을 한다.
이렇게 우리의 디바이스(엔드포인트)와 직접적으로 연결된 스위치를 L2 스위치라 한다.
L3 계층
우리가 알고 있는 자유의 여신상은 아래 모습이다.

그런데 이 자유의 여신상은 프랑스에서 미국에 선물한 동상이다.
이렇게 큰 동상을 어떻게 미국으로 옮겼을까?

위 그림처럼 자유의 여신상을 여러 조각내서 미국으로 옮기고, 미국에서 조립을 했다.
우리가 인터넷에서 어떤 정보를 보낼 때, 이 정보를 통째로 보내지 않고 여러 개로 쪼개서 보낸 뒤, 수신 측에서 이를 조합한다.
L3 계층(네트워크 계층)에서는 이렇게 전송되는 데이터 단위를 패킷(Packet)이라 한다.

위 표를 보면 Layer 3(네트워크 계층)에 PDU가 Packet이라 나와있다.
이렇듯 패킷은 L3 계층에서 사용하는 데이터 통신 단위이다.
L3 계층의 역할에 대한 설명을 보면
"멀티 노드 네트워크 환경을 구성하고 관리하며, 주소설정, 라우팅 그리고 트래픽 컨트롤을 담당한다."
라고 되어있다.
우리가 사용하는 인터넷이 대표적인 멀티 노드 네트워크 환경의 예시다.
L2 계층에선 MAC 주소로 각 노드를 식별했다.
그렇다면 L3에선 각 노드를 어떻게 식별할까?
L3에서 사용되는 식별값이 IP 주소이다.
IP주소(여기선 IPv4를 기준으로 설명한다.)는 32비트로 구성되어있다.
예를 들어 192.168.0.1 이란 값을 보면 4구간으로 나뉘어져 있고, 한 구간이 8비트값을 나타낸다.
그러므로 한 구간은 0~255까지의 값을 가진다.
L3와 IP 주소 등 이런 내용에 깊이 들어가기 전에, 스위치를 먼저 생각해보자.
위에 설명했듯이, 각 층과 각 방에 L2 스위치가 존재하고, 이 스위치는 개인 PC에 연결되어 있다.
그리고 서버실에 L3 스위치가 존재한다.
여기서 L3 스위치의 역할이 무엇이 될까?
스위치의 역할이 특정 기준을 통해 스위칭을 하는 것이었고, L3 계층은 IP 주소를 전송 단위로 사용하니 IP 기준으로 스위칭(라우팅)을 하는 것이다.
L3 스위치의 주요 역할은 서로 다른 네트워크(VLAN) 간의 통신을 연결하는 것이다.
예를 들어, 1층 네트워크와 2층 네트워크가 논리적으로 분리되어 있을 때, L3 스위치가 이들 사이의 라우팅을 처리한다.
IP는 인터넷에서 사용되는 주소인 것은 다 알고 있을 것이다.
그런데 외부에서 우리 사내 서버로 요청을 보내는 과정은 조금 더 복잡하다.
외부에서는 우리 회사의 공인 IP 주소로 요청을 보낸다. 이 요청은 먼저 방화벽(또는 라우터)에 도착한다.
방화벽은 NAT(Network Address Translation)를 통해 공인 IP를 내부 사설 IP로 변환하고, 필요한 보안 검사를 수행한다.
그 다음, 내부 네트워크에서 L3 스위치가 등장한다. 만약 목적지 서버가 다른 VLAN에 있다면, L3 스위치가 해당 요청의 목적지 IP 주소를 확인하고 적절한 VLAN으로 라우팅한다. 같은 VLAN 내에서는 L2 스위치가 MAC 주소를 기반으로 최종 목적지까지 전달한다.
물론 위 설명은 우리 회사의 인프라를 참고해서 적은 설명이고, 회사마다 이런 네트워크 구성은 다를 것이다.
라우터를 따로 두는 경우가 있을 수 있고, L3 스위치를 라우터 역할까지 하도록 설정할 수도 있다.
아래 그림은 외부에서 우리 회사 내부의 특정 서버에 접근하는 경우를 예시로 나타냈다.

깊게 들어가면 끝도 없으니 일단 네트워크 요청 흐름은 이정도로 설명을 마무리하고..
IP에 대해 좀 더 알아보자.
IP 주소를 보다보면 123.45.67.89/24 이런식으로 뒤에 24와 같은 숫자가 붙은 것을 볼 수 있다.
이걸 CIDR(Classless Inter-Domain Routing)이라 부르고, 이 값은 IP의 Netwokr ID가 어디까지인지를 나타내는 값이다.
오잉?
여기서 Network ID란 무엇일까??
IP 주소는 두 부분으로 구성되어 있다.

Network ID란 이름 그대로 어느 네트워크에 속하는지 나타내는 주소이다.
만약 서로 다른 두 IP의 Network ID가 같다면, 같은 네트워크에 있다는 뜻으로 직접 통신이 가능하다.
만약 Network ID가 다르다면 서로 다른 네트워크에 있으므로 라우터를 통해 통신해야 한다.
Host ID란 하나의 호스트를 나타내는 값이다.
동일 네트워크 안에서 개별 디바이스를 구분하는 값이 된다.
(L2에선 MAC값으로 구분한다. L3에서 특정 디바이스를 나타내는 값은 전체 IP 주소이다.)
여기서 CIDR의 24 또는 16 이런 값들은 왼쪽부터 몇비트가 네트워크 ID인지를 나타낸다.
/24라면 왼쪽부터 24비트까지가 네트워크 ID란 뜻이다.
123.45.67.89/24 <- 이 경우엔 123.45.67 이 값이 네트워크 ID가 된다.
CIDR 표기법과 서브넷 마스크는 같은 개념을 다르게 표현한 것일 뿐이다.
과거에는 A, B, C 클래스로 고정 분할했지만(Classful), 현재는 CIDR을 통해 유연하게 네트워크 크기를 조정한다(Classless).
(서브넷 마스크와 클래스에 대해선 구글링을 해서 공부해보자!)
ARP(Address Resolution Protocol)
위에 잠깐 나왔던 ARP 프로토콜에 대해 알아보자.
L3가 IP 주소로 라우팅을 하고, 이 IP주소로 라우팅 된 패킷(데이터)은 L2 계층으로 내려가야 한다.
여기서 IP에 매핑된 실제 HW 장비(MAC 주소)를 어떻게 알 수 있을까?
이때 ARP이 사용된다.
얘를 들어 PC1 -> PC2로 요청을 보낸다고 해보자.
PC1은 PC2의 IP주소(e.g. 192.168.10.6)은 알지만 MAC주소는 모르고 있다.
이때 ARP Request를 보낸다.
여기서 ARP Request는 Broadcast로, 같은 네트워크에 존재하는 모든 디바이스에 요청을 보낸다는 뜻이다.
(브로드캐스트도 구글링 해서 더 공부하면 좋다!)
ARP Request는 이런 느낌이다.
"192.168.10.6에 해당하는 디바이스의 MAC값이 무엇인가요?! 알고 있으면 PC1에게 답해주세요!!"
이때 네트워크에 있는 192.168.10.6은 하나만 존재할 것이다. 그러므로 해당 디바이스를 제외한 모든 디바이스는 응답을 하지 않고, PC2만 이 요청에 대해 응답한다.
"제가 192.168.10.6이고, 제 MAC 주소는 AB:AB:AB:AB:AB:AB 입니다!"
이렇게 ARP를 통해 알아낸 PC2의 MAC 주소를 PC1은 일정기간 캐싱한다.
실무를 하고, 다른 엔지니어들과 대화하며 내가 잘 모르고 있다 느낀 부분들에 대해 정리해보았다.
네트워크란 깊고 넓다 정말...