지난 학습에서 다룬 물리 계층 장비인 허브(Hub)는, 수신 신호를 모든 포트로 재전송하는 방식으로 동작. 이로 인해 불필요한 트래픽과 Collision 발생.
이번 주제는 허브의 비효율을 해결하기 위해 등장한 데이터 링크 계층 장비, 스위치(Switch).
MAC 주소 테이블: 스위치의 어떤 포트(Port)에 어떤 MAC 주소를 가진 장치가 연결되어 있는지 매핑해놓은 목록. like key-value
1) 플러딩 (Flooding)
MAC 주소 테이블이 비어있을 때, 스위치는 목적지 MAC 주소의 위치를 알지 못함. 이때, 프레임이 수신된 포트를 제외한 모든 포트로 프레임을 복제하여 전송. 이 과정은 허브의 동작 방식과 동일.
단, 스위치는 이 과정에서 프레임의 출발지 MAC 주소(Source MAC Address)를 확인하여, 해당 주소가 어떤 포트로부터 수신되었는지 MAC 주소 테이블에 기록함.
2) 포워딩 (Forwarding) & 필터링 (Filtering)
MAC 주소 테이블에 정보가 기록된 이후, 스위치는 목적지 MAC 주소를 테이블에서 조회.
포워딩: 목적지 MAC 주소가 테이블에 존재할 경우, 해당 목적지 포트로만 프레임을 전달.
필터링: 목적지 포트를 제외한 다른 모든 포트로는 프레임을 차단.
이 선별적 전달 기능으로 인해 불필요한 트래픽이 감소하고, 각 포트가 독립적인 Collision Domain을 형성하여 네트워크 충돌이 현저히 줄어듦.
3) 에이징 (Aging)
MAC 주소 테이블의 각 항목은 특정 시간(기본값 보통 300초) 동안 유효한 타이머를 가짐. 만약 해당 시간 동안 특정 MAC 주소로부터 들어오는 트래픽이 없으면, 테이블에서 해당 항목을 삭제. 이를 에이징이라 함.
에이징(Aging)의 필요성
네트워크 토폴로지의 동적 변화 대응: 장치의 물리적 위치 변경(예: 다른 포트로 노트북 연결 변경) 시, 이전 위치 정보가 테이블에 남아있으면 통신 오류 발생. 에이징을 통해 기존 정보를 삭제하고 새로운 위치를 정확하게 재학습 가능.
MAC 주소 테이블 자원 관리: 스위치의 MAC 주소 테이블 크기는 한정적. 비활성 상태의 오래된 항목들을 주기적으로 삭제하여, 새로운 장치를 위한 공간을 확보하고 테이블의 효율성과 정확성을 유지.
브리지(Bridge)
브리지는 스위치의 전신인 데이터 링크 계층 장비. 두 개의 LAN 세그먼트를 연결하고, MAC 주소를 학습하여 두 세그먼트 간의 트래픽을 필터링하는 역할을 수행.
스위치와의 차이점: 브리지는 주로 소프트웨어 기반으로 동작하고 포트 수가 적었음. 스위치는 브리지의 기능을 전용 하드웨어(ASIC)로 구현하여 처리 속도를 비약적으로 향상시킨 멀티포트 브리지. 현재는 스위치가 브리지의 기능을 완전히 대체.
VLAN의 주요 사용 사례와 컨테이너와의 연결
주요 사례:
보안 강화: 부서별(재무, 개발, 방문자)로 네트워크를 분리하여, 특정 VLAN에서 발생한 보안 문제가 다른 VLAN으로 확산되는 것을 방지.
브로드캐스트 트래픽 감소: 브로드캐스트 프레임이 자신이 속한 VLAN 내부에만 전파되도록 제한. 네트워크 전체의 불필요한 트래픽을 줄여 성능 향상.
컨테이너와의 연결: VLAN의 '논리적 격리' 개념은 컨테이너 기술의 네트워크 격리와 유사함. 단일 물리 호스트(스위치)가 여러 격리된 컨테이너(VLAN)를 실행하는 구조. 각 컨테이너는 자신만의 가상 네트워크 인터페이스를 가지며, 이는 OS 수준의 네트워크 네임스페이스 격리를 통해 구현됨. VLAN이 Layer 2에서 네트워크를 격리한다면, 컨테이너는 OS 커널 수준에서 네트워크 환경을 격리.
MAC 기반(MAC-based) VLAN: 장치의 MAC 주소를 기준으로 VLAN을 동적으로 할당. 장치가 어느 포트에 연결되든 동일한 VLAN에 속함.
VLAN 트렁킹(VLAN Trunking): 스위치 간 연결 시, 단일 링크를 통해 여러 VLAN의 트래픽을 함께 전송하는 기술. 프레임에 어떤 VLAN 소속인지 식별하는 태그(Tag, IEEE 802.1Q)를 추가하여 구분.
데이터 링크 계층의 MAC 주소만으로는 외부 네트워크에 속한 장치의 위치를 특정하기 어려움. MAC 주소는 물리적 주소로, 계층 구조가 없어 전 세계 모든 장치의 경로를 파악하는 데 비효율적. 따라서, 네트워크 계층에서는 IP 주소라는 논리적이고 계층적인 주소 체계를 사용하여 이 문제를 해결.
1) IPv4 (Internet Protocol version 4)
주소 형식: 32비트(4바이트) 길이의 주소. .으로 구분된 4개의 10진수로 표기. 각 숫자는 8비트로 표현되며 0~255 범위의 값을 가짐. 각 값을 옥텟(Octet)이라 칭함. (예: 192.168.0.1)
주요 기능:
IP 주소 지정(Addressing): 데이터 패킷의 송신지와 수신지를 지정.
단편화(Fragmentation): 데이터 링크 계층의 MTU(Maximum Transmission Unit)보다 큰 패킷을 여러 개의 작은 패킷으로 분할하여 전송.
2) IPv4 헤더의 주요 필드
식별자(Identifier): 단편화 발생 시, 분할된 패킷들이 원래 어떤 패킷에 속했는지 식별하기 위한 고유 번호.
플래그(Flags): 3비트로 구성된 단편화 제어 필드. (예: DF(Don't Fragment) 비트 설정 시 단편화 금지)
단편화 오프셋(Fragment Offset): 분할된 각 패킷이 원래 데이터의 어느 위치에 해당하는지 나타내는 값.
TTL(Time To Live): 패킷이 네트워크 내에서 무한 순환(Looping)하는 것을 방지하기 위한 값. 라우터를 하나 거칠 때마다 1씩 감소하며, 0이 되면 패킷은 자동 폐기.
프로토콜(Protocol): IP 패킷의 데이터 부분에 어떤 상위 계층 프로토콜(TCP, UDP 등)이 포함되어 있는지 식별하는 번호.
프로토콜 번호는 어떻게 지정되는가?
IPv4 헤더의 프로토콜 필드에서 TCP는 6번, UDP는 17번으로 명시됨. 이러한 번호는 특정 기업이나 개인이 임의로 정하는 것이 아님.
IANA(Internet Assigned Numbers Authority)라는 국제 인터넷 주소 관리 기구에서 전 세계적인 표준으로 번호를 할당하고 관리함. 이는 인터넷에 연결된 모든 장비가 프로토콜 번호만 보고도 "아, 이 패킷 안에는 TCP 데이터가 들어있구나"라고 동일하게 해석할 수 있도록 하기 위함. 즉, 인터넷 통신의 표준화와 상호 운용성을 위한 약속.
3) IPv6 (Internet Protocol version 6)
등장 배경: 32비트인 IPv4 주소(약 43억 개)의 고갈 문제 해결을 위해 등장.
주소 형식: 128비트(16바이트) 길이의 주소. 16비트씩 8부분으로 나누어 각 부분을 16진수로 표기하고 :으로 구분. 이론적으로 거의 무한에 가까운 개수의 주소 할당 가능.
헤더의 주요 필드:
다음 헤더(Next Header): IPv4의 '프로토콜' 필드와 유사한 역할. 확장 헤더가 있는 경우 다음 헤더의 종류를, 없는 경우 상위 계층 프로토콜을 명시.
홉 제한(Hop Limit): IPv4의 'TTL'과 동일한 역할.
ARP는 동일 로컬 네트워크 내에서, IP 주소를 알고 있을 때 상대방의 MAC 주소를 알아내기 위한 프로토콜.
ARP 동작 순서
ARP 요청(Request): PC A가 동일 네트워크에 있는 PC B(192.168.0.10)의 MAC 주소를 모를 경우, LAN 전체에 "IP 주소 192.168.0.10을 사용하는 장비는 MAC 주소를 알려주세요"라는 브로드캐스트 메시지 전송.
ARP 응답(Response): 요청받은 IP 주소를 사용하는 PC B가 자신의 MAC 주소(EE-EE-EE-EE-EE-EE)를 담아 PC A에게 유니캐스트로 응답 메시지 전송.
ARP 테이블 갱신(Update): PC A는 응답받은 IP-MAC 매핑 정보를 자신의 ARP 테이블(캐시)에 저장. 이후 PC B와 통신할 때는 브로드캐스트 요청 없이 이 테이블을 참조하여 바로 통신.
ARP는 이처럼 IP 주소(네트워크 계층)와 MAC 주소(데이터 링크 계층) 사이를 연결해주는 핵심적인 역할을 수행.
네트워크 주소: 수많은 네트워크 중에서 특정 네트워크를 식별하는 부분.
호스트 주소: 해당 네트워크 내에서 특정 장치(컴퓨터, 서버 등)를 식별하는 부분.
라우터는 이 네트워크 주소를 보고 목적지 네트워크까지의 경로를 결정함.
A 클래스: 첫 8비트가 네트워크부, 나머지 24비트가 호스트부. 소수의 거대 네트워크를 위한 할당 방식. (0.0.0.0 ~ 127.255.255.255)
B 클래스: 첫 16비트가 네트워크부, 나머지 16비트가 호스트부. 중대형 네트워크용. (128.0.0.0 ~ 191.255.255.255)
C 클래스: 첫 24비트가 네트워크부, 나머지 8비트가 호스트부. 소규모 네트워크용. (192.0.0.0 ~ 223.255.255.255)
이 방식은 네트워크 규모가 클래스별로 고정되어 있어, 실제 필요한 호스트 수와 관계없이 주소를 할당해야 했음. 이는 심각한 IP 주소 낭비를 초래.
서브넷 마스크: IP 주소와 동일한 32비트 값. 연속된 1로 네트워크부를, 연속된 0으로 호스트부를 표시.
네트워크 주소 계산: IP 주소와 서브넷 마스크를 비트 AND 연산하여 네트워크 주소를 추출. 이 연산을 통해 라우터는 IP 주소의 어느 부분까지가 네트워크 식별자인지 판단 가능.
CIDR(Classless Inter-Domain Routing) 표기법: 서브넷 마스크를 더 간결하게 표현하는 방식. IP 주소 뒤에 /와 네트워크부의 비트 수를 표기. (예: 192.168.1.100/24는 서브넷 마스크가 255.255.255.0임을 의미)
공인 IP (Public IP): 전 세계에서 유일성이 보장되는 IP 주소. ISP(인터넷 서비스 제공자)를 통해 할당받으며, 인터넷 상에서 통신하기 위해 반드시 필요.
사설 IP (Private IP): LAN과 같은 내부 사설 네트워크에서만 자유롭게 사용하도록 예약된 주소 대역. 이 주소는 외부 인터넷에서 식별 불가능.
10.0.0.0 ~ 10.255.255.255 (10.0.0.0/8)
172.16.0.0 ~ 172.31.255.255 (172.16.0.0/12)
192.168.0.0 ~ 192.168.255.255 (192.168.0.0/16)
NAT (Network Address Translation): 사설 IP를 사용하는 장치가 외부 인터넷과 통신하기 위해 필요한 주소 변환 기술. 라우터(공유기)가 사설 IP를 자신의 공인 IP로 변환하여 외부와 통신하고, 응답이 오면 다시 해당 사설 IP로 전달. 대부분의 가정 및 기업용 라우터는 NAT 기능을 탑재.
동적 할당 (Dynamic Allocation): DHCP (Dynamic Host Configuration Protocol)를 사용하여 네트워크에 접속하는 장치에 IP 주소를 자동으로 할당하는 방식. 대부분의 PC, 스마트폰 등이 이 방식을 사용.
DHCP 동작 과정 (DORA):
Discover: 클라이언트가 네트워크에 "DHCP 서버 있나요?"라고 브로드캐스트.
Offer: DHCP 서버가 클라이언트에게 "사용 가능한 IP 주소 OOO를 제공할게"라고 응답.
Request: 클라이언트가 "그 주소를 사용하겠습니다"라고 다시 요청.
Ack (Acknowledge): 서버가 "알겠다, 이제 그 주소는 정해진 시간 동안 너의 것이다"라고 최종 확인.
0.0.0.0: '주소 미지정' 또는 '모든 주소'를 의미. DHCP 클라이언트가 IP 할당 요청 시 자신의 초기 출발지 주소로 사용.
255.255.255.255: 제한된 브로드캐스트(Limited Broadcast) 주소. 현재 연결된 로컬 네트워크의 모든 호스트에게 데이터를 전송하기 위한 목적.
127.0.0.1: 루프백(Loopback) 주소. 장치 자기 자신을 가리키는 주소로, localhost라는 이름으로도 알려짐. 로컬 환경에서 네트워크 테스트나 서버 접속 시 사용. 이 주소로 보내는 패킷은 외부로 나가지 않음.
네트워크 주소 & 브로드캐스트 주소:
특정 네트워크 대역에서 호스트부가 모두 0인 주소는 해당 네트워크 자체를 식별하는 주소로 예약됨.
호스트부가 모두 1인 주소는 해당 네트워크의 모든 호스트를 향한 브로드캐스트 주소로 예약됨.
(예: 192.168.1.0/24 네트워크에서 192.168.1.0은 네트워크 주소, 192.168.1.255는 브로드캐스트 주소이므로, 이 두 주소는 일반 PC에 할당 불가.)