이 글은 IT 엔지니어를 위한 네트워크 입문 스터디를 마치고 정리한 글이다.
라우터 : 3계층에서 동작하는 여러 네트워크 장비의 대표격으로 경로를 지정해주는 장비
라우터에 들어오는 패킷의 목적지 IP 주소를 확인하고 자신이 가진 경로 정보를 이용해 최적의 경로로 포워딩 한다.
라우터는 다양한 경로 정보를 수집해 최적의 경로를 라우팅 테이블에 저장한 후 패킷이 들어오면 최선의 경로로 패킷을 내보낸다.
반대로 들어온 패킷의 목적지가 라우팅 테이블에 없으면 패킷을 버린다. 라우터는 패킷 포워딩 과정에서 기존 2계층 헤더 정보를 제거한 후 새로운 2계층 헤더를 만든다.
하나씩 자세히 알아보자
라우터의 가장 중요한 역할로 라우팅 테이블에 저장하고, 경로를 지정한다.
라우터는 경로 정보를 얻는 역할과 포워딩 하는 역할로 구분되는데, 자신이 얻은 경로로 포워딩 하기 때문에 정확한 목적지 경로를 얻는 것이 중요하다.
경로 정보 얻는 방법
스위치의 브로드캐스트 플러딩은 LAN의 크기가 작고, NIC에서 자신의 주소가 아닌 패킷은 버리기 때문에 큰 무리를 주지 않는다.
반면에 라우터에서 명확하지 않은 패킷이 플러딩 된다면 인터넷이 패킷으로 가득차 통신 불능 상태가 될 수 있다.
라우터는 바로 연결되어 있는 네트워크를 제외하고 경로가 없으면 패킷을 포워딩할 수 없다. 라우터는 멀티캐스트 정보를 습득하지 않고, 브로드캐스트 패킷을 전달하지 않는다. 이 기능을 통해 브로드캐스트가 다른 네트워크로 전파되는 것을 방지할 수 있다. 이를 브로드(멀티)캐스트 컨트롤이라고 한다.
네트워크에 브로드캐스트가 많이 발생하는 경우 라우터로 네트워크를 분리하면 브로드캐스트 네트워크를 분할해 네트워크 성능을 높일 수 있다.
라우터의 또 다른 역할은 서로 다른 프로토콜로 구성된 네트워크를 연결하는 것이다. 현대는 이더넷으로 수렴되지만, 과거에는 LAN과 WAN의 프로토콜은 완전히 구분된 공간이었다.
라우터는 3계층 장비이므로 2계층까지의 헤더 정보를 벗겨내고 2계층 헤더 정보를 새로 만들어 외부로 내보낸다.
라우터가 패킷을 처리할 때 크게 두 가지 작업을 수행한다.
경로 정보가 점점 더 다양하고 많아졌기 때문에 라우터는 서브넷 단위로 라우팅 정보를 습득한다.
그리고 이를 최적화 하기 위해 서머리 작업을 통해 여러개의 서브넷 정보를 뭉쳐 전달한다.
그래서 라우터에 들어온 패킷의 목적지 주소와 라우팅 테이블의 정보가 정확히 일치하지 않더라도 가장 근접한 정보를 찾아 패킷을 포워딩한다.
라우터는 목적지까지의 모든 경로를 책임지지 않고, 인접한 라우터(넥스트 홉) 까지만 경로를 지정한다.
넥스트 홉을 지정할 때 일반적으로 세 가지 방법을 사용한다.
일반적으로 상대방 라우터의 인터페이스 IP주소를 지정하는 방법을 사용한다.
상대방 넥스트 홉 라우터의 IP를 모르고 MAC 주소를 알 수 있을때는 나가는 인터페이스를 지정하는 방법을 쓴다.
인터페이스와 IP를 모두 지정하는 경우VLAN 인터페이스와 같은 논리적인 인터페이스를 사용할 수 있다.
라우터가 패킷을 포워딩 할때는 출발지를 고려하지 않고 목적지 주소만 보고 포워딩 한다. 따라서 라우팅 테이블에는 다음과 같은 정보만 수집한다.
물론 출발지 주소를 이용해 라우팅이 가능하지만, 다른 라우터로의 전파가 어려우며 별도의 설정이 필요하고, 관리가 어려워 특별한 상황에서만 사용한다.
라우터가 경로 정보를 얻는 방법은 크게 3가지가 있다.
다이렉트 커넥티드
IP 주소를 입력할 때 사용된 IP 주소와 서브넷 마스크로 해당 IP 주소가 속한 네트워크 주소를 알 수 있다.
이 정보를 통해 라우팅 테이블을 자동으로 만드는데, 강제로 지울 수 없으며 해당 네트워크가 삭제되거나 비활성화 되어야 사라진다.
스태틱 라우팅
관리자가 목적지 네트워크와 넥스트 홉을 라우터에 직접 지정하는 방법. 매우 직관적이다.
해당 네트워크가 삭제되거나 비활성화 되면 사라지고, 물리 인터페이스가 비활성화 되더라도 논리 인터페이스가 비활성화되지 않으면 삭제되지 않는다.
다이나믹 라우팅
규모가 큰 네트워크에서는 스태틱 라우팅으로는 버겁다. 장애 사항을 파악하고 대체 경로를 찾아야 하기 때문인데, 대응을 적절히 하지 못하면 패킷은 드롭된다.
다이나믹 라우팅은 라우터끼리 알고 있는 경로 정보나 링크 상태 정보를 교환해 전체 네트워크 정보를 학습한다. 따라서 회선이나 라우터에 장애가 발생해도 이를 인지하고 대체 경로로 포워딩한다.
다이나믹 라우팅에서는 정보 공유를 위해 자신이 광고할 네트워킹을 선언해야 한다.
다이나믹 라우팅의 역할은 경로정보를 얻는 것, 경로 정보를 체계적으로 데이터베이스화 하고 순위를 부여해 최선의 경로만 수집하는 것이 있다.
라우터가 수집한 경로 정보를 원시 데이터라고 하고 토폴로지 테이블에 담고, 최적의 경로를 라우팅 테이블에 담는다.
스위칭은 라우팅 테이블을 참조해 최적의 경로를 찾아 외부로 포워딩하는 작업을 뜻한다.
이때 정확히 일치하지 않고 비슷하게 일치하거나 일치하지 않는 상황 때문에 고려해야 하는 사항이 있는데, Longest Prefix Match 기법을 사용해 라우팅 테이블에 있는 가장 가까운 경로를 선택한다.
목적지와 더 많이 매칭되는 정보를 최선의 정보로 인식하는 기법
우선순위는 경로 정보를 받은 방법과 거리를 기준으로 결정한다.
라우팅 기법에 따른 우선순위는 기본적으로 다이렉트 커넥티브, 스태틱, 다이나믹 순이다. 하지만 관리자가 우선순위를 조정할 수 있다. 이를 AD(Administrative Distance)라고 한다.
목적지가 다이렉트 커넥티드라면 L2 통신으로 목적지에 도달한다. 이때 목적지가 외부 네트워크라면 통신이 불가능 하다. (스태틱 라우팅, 다이나믹 라우팅에서 얻은 정보 필요)
이 때 외부 네트워크 라우팅 정보가 있더라도 커넥티드 정보를 잘못 입력하면 외부와 통신할 수 없다. 따라서, IP 주소를 잘못 설정하거나, 서브넷 마스크를 다르게 설정하면 잘못 입력되어 통신이 안될 수 있다.
네트워크 정보를 쉽게 추가하고 제어할 수 있는 가장 강력한 방법이다. 다이렉트 커넥티드를 제외하고 우선순위가 가장 높다.
사내 네트워크에선 스태틱 라우팅으로 처리할 수 있지만, 네트워크 규모가 커지면 어려움이 있다. 이런 경우 대용량의 인터넷 라우팅 전용 라우터가 필요한데, 보통 통신사같은 인터넷 사업자가 운영한다.
일반적인 회사의 라우터는 인터넷 사업자로부터 회선을 임대해 사용하는 것이기 때문에 모든 인터넷 경로를 받아 처리하는 것은 부적절하다. 이런 경우 디폴트 라우팅을 사용하면 좋다.
SPoF를 방지하기 위해 여러 경로를 유지하는 경우 스태틱 라우팅만으로는 신속한 대응이 어렵다.
대체 경로를 설정하거나 네트워크가 많아지면, 스태틱 라우팅으로 관리하기 어렵기 때문에 다이나믹 라우팅을 사용해 라우터끼리 정보를 교환하여 최신 경로 정보를 유지한다.
역할
일반적으로 라우팅 프로토콜은 유니캐스트 프로토콜을 말하는데, 인터넷에는 AS 라는 자율 시스템이 존재한다. AS 내부에서 사용하는 프로토콜을 IGP, AS 간 통신에 사용하는 프로토콜을 EGP라고한다.
AS 간 통신에서는 조직 간 정책이 중요하기 때문에 EGP 는 이런 통신을 정책적으로 조정한다.
IP 부족으로 NAT 기술, 방화벽, 프록시 같은 장비들이 등장하며 4계층 장비도 네트워크 장비에 포함되었다.
기존 2, 3 계층 장비가 고려하지 않았던, 방향성이나 순서를 관리하는데 이를 세션테이블에 담아 관리한다.
4계층 장비는 TCP와 같은 4계층 헤더 정보를 이해하고 동작한다.
4계층 장비가 2, 3계층과 다른점은 세션 테이블과 세션 정보가 가장 중요하다고 할 수 있다.
세션을 기반으로 동작하는 방화벽, NAT, 로드 밸런서같은 장비가 있으면 시스템 설계, 애플리케이션 개발에도 세션 장비에 대한 고려가 필요하다.
세션 테이블 : 세션 정보를 저장, 확인한다. 이때 세션 정보에는 life time이 존재한다.
대칭 경로 요구 : Inbound와 Outbound 경로가 일치해야한다.
정보 변경 : IP 주소가 변경되며 확장된 L7 로드 밸런서는 애플리케이션 프로토콜 정보도 변경된다.
서버나 장비의 부하를 분산하기 위해 사용되는 장비이다. 4계층 7계층에서 동작하며 IP 주소나 4계층 정보, 애플리케이션 정보를 확인/수정 한다.
스케일 업보다 스케일 아웃을 선호하는데, 장비가 여러대여도 하나의 서비스로 보여야 하기 때문에 로드 밸런서가 서비스의 대표 IP를 갖고 각 시스템으로 분산한다.
L4 로드 밸런싱
TCP, UDP 정보를 기반으로 로드 밸런싱 수행
L7 로드 밸런싱
HTTP, FTP, SMTP와 같은 애플리케이션 프로토콜 정보를 기반으로 로드 밸런싱 수행
HTTP 헤더나, URI같은 정보를 기반으로 프로토콜 이해 후 부하 분산. 일반적으로 ADC라고 부르며 프록시 역할 수행한다. 스퀴드나 Nginx에서의 리버스 프록시와 비슷한 기능.
4계층에서 동작하며 로드 밸런싱 기능이 있다. 여러가지 로드 밸런서중 가장 대중화 되어있으며, 부하 분산, 성능 최적화, 리다이렉션 기능 제공.
L4 스위치가 동작하려면 가상서버, 가상IP, 리얼 서버, 리얼 IP를 설정해야 하는데, 가상 서버는 사용자가 바라보는 실제 서비스를 뜻하고, 가상 IP는 사용자가 접근하는 서비스 주소이다. 리얼 서버는 실제 서비스를 수행하고, 리얼 IP는 실제 서버의 IP이다. L4스위치는 가상IP를 리얼 IP로 변경해주는 역할을 한다.
애플리케이션 계층에서 동작하는 로드밸런서로 L4와 달리 애플리케이션 프로토콜의 헤더와 내용을 이해하고 동작하여 다양한 부하 분산, 정보 수정/필터링이 가능하다. 프록시로 동작한다.
대부분의 ADC는 L4 스위치의 기능(페일오버, 리다이렉션)을 포함한다. 이 외에도 캐싱, 압축, 콘텐츠 변환/재작성, 인코딩 변환등이 가능하고 애플리케이션 프로토콜을 최적화 하기도 한다.
플러그인 형태로 보안 기능을 추가해 WAF나, HTML, XML 검증과 변환을 수행하기도 한다.
L4 스위치
TCP, UDP 정보를 기반으로 부하 분산 및 TCP 최적화 및 보안기능 제공.
TCP의 간단한 DoS 공격 방어 및 TCP 세션 재사용 가능.
ADC
애플리케이션 내용 분산, 리다이렉션, 최적화등 L4보다 다양한 기능
이미지나, 정적 콘텐츠 캐싱 가능. → 웹 서버 부하 줄임
SSL 엔드포인트로 동작하기 때문에 SSL 전용 카드 내장.
네트워크 중간에 위치해 해당 장비를 통과하는 트래픽을 정책에 따라 허용하거나 차단하는 장비.
일반적으로 3, 4 계층에서 동작하고 세션을 인지하는 SPI 엔진을 기반으로 동작한다.
NAT 방식과 유사하게 세션 정보를 내부에 저장하여, 외부로 나갔던 세션 정보를 저장하고 들어오는 패킷을 가려낸다. 만약 이런 세션 정보를 저장하는 세션 테이블이 없다면 매우 복잡한 정책관리를 해야할 것이다.
세션 장비는 일반적인 2, 3 계층 네트워크 장비와 달리 세션을 이해하고 세션 테이블을 유지한다.
보안 강화 및 애플리케이션 성능 최적화를 위해 패킷을 포워드/드롭할 수 있다. 이 기능을 충분히 활용하기 위해선 세션 장비 간 정보를 동일하게 유지해야 한다. 특히 비대칭 경로를 피하는 것이 좋은데 대부분의 문제는 이 부분을 고려하지 않아서 발생한다.
세션 테이블은 메모리에 저장되기 때문에 일정 시간만 정보를 저장한다.
악의적인 사용자가 세션 공격을 하는 경우 타임 아웃 값을 더 줄이기도 한다.
타임 아웃 값을 조정할 때 장비의 타임 아웃 값이 애플리케이션의 타임 아웃 값보다 짧아지면 통신 중간에 세션 테이블에 정보가 사라져 패킷을 차단해 문제가 생긴다.
인바운드와 아웃바운드 패킷이 다른 장비를 통과하는 경우를 비대칭 경로라고 한다.
세션 테이블을 만들어 관리해야 하는데, 인바운드와 아웃바운드 경로가 다르면 정상적인 서비스가 되지 않는다.
최고의 방법은 예방이다. 비대칭 경로가 생기지 않도록 네트워크와 경로 디자인을 하는 것이다.
NAT(Network Address Translation)
네트워크 주소 변환 기능으로서, 1 : 1 또는 주소 고갈 문제로 1 : N 으로 변환하기도 한다. 공유기, 통신사, 회사 네트워크, 라우터, 스위치등에서 사용하는 기능이다.
PAT(Port Address Translation)
NAT와 동일하다. 1 : N 변환을 NAPT 또는 PAT라고 부른다.
NAT 환경으로 인해 애플리케이션을 개발할 때 더 많은 고려사항이 생겼고, 네트워크 엔지니어가 변경된 IP에서 장애가 일어나도 찾아내기 어려워 졌다.
NAT : 테이블을 거쳐 출발지/목적지 IP를 변환해준다.
PAT : NAT와 동일 하지만, IP와 포트까지 변환해준다.
PAT는 서비스 포트 개수가 제한되어 있어 재사용하는데, 포트가 모두 사용되고 있는 경우 PAT가 정상적으로 작동하지 않아 IP 풀을 구성해야 한다.
PAT IP가 목적지일 때는 어느 IP에 바인딩 되는지 확인할 NAT 테이블이 없기 때문에 DNAT에 적용되지 않는다.
기준은 NAT가 일어나기 전 시작 지점이다.
SNAT : 출발지 주소 변경 (사설 IP → 공인 IP, IP 숨길 때, 로드밸런서를 스킵할 때)
DNAT : 도착지 주소 변경 (로드밸런서에서 요청을 처리할 때, 대외망과 네트워크 구성할 때)
정적 NAT : 매핑 관계를 사전 정의한다. 1:1 NAT, 테이블 타임아웃 없음.
동적 NAT : NAT 수행하며 매핑관계 저장. 1:N, N:M, 테이블 타임아웃 있음.
외우기 어려운 IP 주소 대신 문자열을 사용하는 방법이다.
도메인 주소를 이용하면 IP주소가 변경되어도 서비스를 유지할 수 있고, 여러개의 IP 주소를 사용할 수 있다.
사용자가 도메인 주소를 입력하면 DNS서버로부터 IP 주소를 받아 요청을 보낸다.
보통 3계층으로 이루어져 있으며, 128 계층까지 가능하고, 한 계층에 최대 63바이트, 전체 길이 255바이트이다. 도메인에는 알파벳, 숫자, -만 넣을 수 있다.
클라이언트
DNS에 쿼리를 날려 IP 주소로 변환하는데, DNS 서버 없이 로컬에서 변환할 수 있다. 로컬의 hosts 파일에 도메인과 IP 정보를 저장하면 DNS 캐시에 정적 캐시로 저장된다.
성능상 이점 때문에 DNS 서버에 쿼리하기 전에 캐시를 먼저 확인하게 되는데, hosts 파일 외에도 질의 했던 내용들은 동적 캐시로 저장되어 사용된다.
DNS 서버
DNS 서버에서 모든 도메인의 정보를 가지고 있지 않다. 따라서 DNS 서버마다 정보가 분산 저장되어 있다.
그림으로 나타내면 다음과 같다.
DNS는 다른 Master-Slave 처럼 이중화 목적 또는, 읽기 쓰기 목적으로 나눠지지 않았다.
두 서버 모두 쿼리에 응답하고, Master 서버가 다운되고 만료시간까지 복구하지 못하면 Slave 서버도 다운된다.
Slave는 Master로부터 zone파일을 복제하여 동기화 하는데, Master에서 복제 가능한 서버를 지정할 수 있다.
DNS에서 동일한 레코드 이름으로 서로 다른 IP 주소를 동시에 설정할 수 있다. 이를 DNS 로드밸런싱이라고 한다.
DNS는 서비스 상태를 확인하지 않기 때문에 특정 서버에 문제가 있을때 문제가 생긴다. GSLB는 DNS의 문제점을 해결해 도메인을 이용한 로드밸런싱 구현을 도와준다.
GSLB는 DNS와 동일하게 도메인 질의에 응답하고 동시에 헬스체크를 하며 로드밸런싱(라운드 로빈)을 한다.
GSLB는 단순히 도메인 주소를 응답하는 것이 아니라 FQDN(풀 도메인)에 대해 헬스체크를 한다.
헬스 체크를 통해 서비스를 안정적으로 제공하는 것 외에 다른 사이트로 서비스를 분산하는 것이 GSLB의 중요한 역할이다.
로드밸런싱 방식에는 라운드 로빈, 최소 접속, 해싱등 다양한 방법이 있다.
GSLB는 헬스 체크 모니터링 요소로 RTT/Latency와 IP 지역 정보를 제공한다.
IP와 네트워크 정보를 동적할당 하고 테이블에 기록할때 사용되는 프로토콜을 뜻한다.
DHCP는 BOOTP 프로토콜을 기반으로 한다. 클라이언트 포트는 68, 서버 포트는 67이다.
DHCP가 할당한 IP는 임대시간이 있어 임대시간이 만료되면 IP를 회수한다.
임대시간의 절반 이상이 지나고 클라이언트가 계속 사용중이라면, 위의 3,4 과정을 통해 갱신을 시도한다.
DHCP 서버에 설정하는 값은 다음과 같다.
DHCP에서 사용되는 패킷은 모두 브로드캐스트로 전송되기 때문에 네트워크마다 DHCP가 있어야 한다.
네트워크가 여러개인 환경에서 DHCP를 이용하려면 여러개 사항을 고려해야 한다. DHCP 릴레이 Agent를 사용하면 DHCP 서버 한 대로 여러 네트워크 대역에서 IP 풀을 관리할 수 있다.
다음과 같이 구성을 하여 여러개의 네트워크에서 하나의 DHCP를 사용할 수 있다.
이때 어떻게 통신이 이루어지는지 알아보자.
DHCP와 DHCP 릴레이 Agent는 유니캐스트로 동작하기 때문에 같은 L2 네트워크에 존재해야 하모, DHCP 서버에는 유니캐스트로 전달하기 위해 DHCP IP 주소를 등록해놔야 한다.