스푸핑이 무엇인가? (버스 토폴리지 쪽)
네트워크에서 스푸핑은 한마디로 "나 여기 아닌데, 여기인 척 속이는 행위"
원래 스위치(Switch)는 어떻게 작동하나?
정상적인 LAN 환경에서는 스위치라는 장비가 똑똑한 우체국 역할을 한다.
원칙: "A가 B에게 보내는 패킷(택배)은 오직 B에게만 전달한다."
방법: 스위치는 각 포트에 어떤 주소(MAC 주소)를 가진 컴퓨터가
연결되어 있는지 표로 기록해 둔다.
그래서 엉뚱한 곳으로 택배가 가지 않도록 막아준다.
스푸핑의 원리: "내가 그 사람입니다"
스푸핑은 이 '우체국(스위치)'을 속여서 길을 잘못 들게 만드는 기술이다.
상황: 해커(C)가 A와 B 사이의 대화를 훔쳐보고 싶어 한다.
공격: 해커(C)는 스위치에게 계속해서 가짜 정보를 보낸다.
"내가 바로 B야! 앞으로 B한테 가는 택배는 다 나(C)한테 줘!"라고 속이는 것이다.
결과: 스위치는 속아서 A가 B에게 보내는 패킷을
해커(C)가 있는 포트로 던져준다.
"기능을 마비시키거나 속인다"는 의미
속이기 (ARP Spoofing): 위에서 설명한 것처럼
특정 호스트인 척 위장해서 패킷을 가로채는 것이다.
마비시키기 (Switch Jamming): 스위치의 기억 용량은 한계가 있다.
해커가 수만 개의 가짜 주소를 한꺼번에 보내서
스위치의 '주소록'을 꽉 채워버리면
스위치는 누가 누군지 구분하지 못하는 바보가 된다.
이때 스위치는 "모르겠다, 그냥 모든 포트에 다 뿌려버리자!"라고
작동 방식을 바꿔버리는데(Flooding) 이때를 노려 패킷을 훔쳐보는 것이다.
링형 토폴리지
노드 수가 늘어나도 네트워크 손실이 적은 이유는?
일반적으로 선이 길어지거나 노드가 많아지면 신호가 약해지는데
링형에 연결된 노드는 단순히 데이터를 옮기는 것 뿐 아니라
신호를 증폭하는 리피터 역할을 수행한다.
특정 노드가 데이터를 받으면 그 신호를 다시 깨끗하고,
강하게 재생성하여 다음 노드로 넘겨준다.
노드를 거칠 때마다 신호가 보다 강한 데이터로 탈바꿈하여 나오니
전체적인 신호력이 약해지거나 데이터 손실이 다른 방식에 비해 매우 적다.
충돌 발생 가능성이 적은 이유는?
충돌이 적은 핵심 근거는 토큰 패싱(Token Passing)이라는 제어 방식에 있다.
네트워크상에 토큰이라는 어떤 노드로 데이터를 보낼 수 있는 권한인 단 하나의 발언권이 존재한다.
데이터를 보내고 싶은 노드는 반드시 이 토큰을 획득해야만 데이터 전송이 가능하다.
한 번에 오직 한 노드만 데이터를 보낼 수 있는 구조이기 때문에
여러 노드가 동시에 데이터를 던져서 발생하는 충돌이 원천적으로 방지된다.
링형은 토큰 패싱 때문에 그럼 한 번에 오직 한 노드만 데이터 보내는데 느리지 않나?
일단 데이터가 적을 때는 비효율적이다 전송할 데이터가 하나여도 토큰이 링을 한 바퀴 쭉 돌아
내 차례가 올 때까지 무조건 기다려야 하는데 이를 토큰 대기 시간이라고 하고,
이 시점에서는 다른 방식보다 더 속도가 느리게 느껴질 수 있다.
데이터가 많을 때는 오히려 효율적인데 여러 노드가 동시에 데이터 보내려 할 때,
버스 토폴리지처럼 충돌이 발생하면 데이터를 다 폐기하고, 다시 보내는 과정에서
엄청난 자원이 소모되는데 반면 링형은 대기 시간은 일정하지만 충돌이 0%에 가깝기에
전체적인 데이터 처리량은 훨씬 안정적이고, 높게 유지된다.
단방향의 직렬 구조이기 때문에 링형은 데이터가 순차적으로 전달된다.
데이터가 A → B → C → D 순으로 흐른다고 가정할 때, B 노드가 고장 나거나
A와 B 사이의 선이 끊기면 데이터는 C나 D로 갈 수 있는 경로가 완전히 사라진다.
각 노드가 양 옆 노드와 체인처럼 연결되어 있기에 중간 고리만 하나 끊어져도
정상적인 루프가 즉 데이터 흐름이 깨지게 되는 것이다.
TCP의 가상회선 패킷 교환 방식
해당 방식을 왜 사용하나?
패킷마다 각자 다른 길로 가버리면 도착 순서가 뒤죽박죽 될 수 있다.
가상회선은 같은 길로만 가기에 데이터의 순서가 바뀔 위험이 적다.
가상 경로를 미리 확보하고, 전송하기 때문에 데이터 손실이 발생했을 때
이를 감지하고, 재전송하기가 훨씬 수월하다.
가상회선이란?
Virtual (가상): 실제로 물리적인 전용선이 깔리는 것은 아니지만
Circuit (회선): 마치 전용선을 사용하는 것처럼 데이터를
순서대로 안정적으로 보내는 통로를 의미한다.
동작 과정의 3단계
TCP는 데이터를 보내기 전과 후에 반드시 약속된 절차를 거친다.
연결 설정
데이터 전송
한번 경로가 정해지면, 모든 패킷은 반드시 처음에 정해진 순서대로 이 길을 따라간다.
각 패킷은 목적지 주소 대신에 가상회선 식별 번호를 달고 이동한다.
덕분에 수신측에서는 패킷이 섞이지 않고, 순서대로 도착하는 것을 보장받는다.
가상회선 식별 번호가 사용되는 부분은
만약 전송 과정에 문제가 발생해서 1,2,4 패킷이 먼저 도착했어도 (1,2,4가 식별 번호)
수신측에서 아직 3번이 안 왔다고 판단하고, 4번을 잠시 대기소(Buffer)에 보관한다.
3번이 도착하면 그때서야 순서대로 합쳐서 상위 애플리케이션에 전달한다.
연결 해제
BSS, ESS
와이파이는 알겠는데 BSS랑 ESS는 무엇인가?
BSS (Basic Service Set)
ESS (Extended Service Set)
이더넷 프레임
이더넷 프레임이 무엇이고, 왜 쓰이는가?
데이터 링크 계층에서 데이터를 전송하기 위해 정의된 데이터의 기본 단위이다.
네트워크상의 장치들이 서로 데이터를 주고받을 때
실제 데이터(Payload)에 주소 정보와 오류 제어 정보 등을 붙여서 포장한 상태이다.
케이블로 연결된 여러 장비 중 누구에게 데이터를 전달할지 결정해야 한다. (MAC 주소 사용)
연속적인 전기 신호 흐름 속에서 어디가 데이터 시작이고, 끝인지 명확히 해야 하기에 사용한다.
전송 중 신호 간섭 등으로 데이터가 변형되었을 때 받는 쪽에서 이를 인지하고
폐기하기 위해서 FCS가 필요하다.
이더넷 프레임의 구조
헤더
Preamble & SFD (8 bytes): 수신 측에 데이터가 시작된다고 알리는 신호이다.
수신측 MAC 주소 (6 bytes): 데이터를 받을 대상 장비의 고유 식별 주소
송신측 MAC 주소 (6 bytes): 데이터를 보내는 장비의 고유 식별 주소
EtherType (2 bytes): 상위 계층(네트워크 계층)의 어떤 프로토콜이 들어있는지 적혀있다.
(예: IPv4는 0x0800, IPv6는 0x86DD)
페이로드
상위 데이터 (46 ~ 1500 bytes): 실제 전송하려는 데이터이다. (보통 IP 패킷)
최소 46바이트인 이유는 이더넷의 충돌 감지 기술(CSMA/CD)이 정상 작동하기 위해서
최소한의 길이를 보장하기 위함인데 데이터가 작으면 의미 없는 패딩 값을 채워 넣는다.
트레일러