허브
허브는 네트워크에서 가장 기본적인 연결 장치로, 여러 대의 컴퓨터를 연결하여 하나의 네트워크를 구성한다.
간단히 말하자면, 허브는 연결된 모든 컴퓨터들에게 데이터를 전달하는 역할을 한다.
하지만, 허브는 데이터 패킷이 어디에서 들어왔고, 어디로 나가야 하는지 구별하지 못한다.
따라서, 허브는 들어온 데이터 패킷을 연결된 모든 포트로 브로드캐스트(Broadcast)를 날리게 된다.
허브의 단점
위에서 언급했듯이, 허브는 컴퓨터의 맥 주소를 저장하거나 관리하지 않기 때문에 데이터 패킷의 출발지와 목적지 주소 정보를 가지고 있지 않는다.
허브 입장에서는 당연하게도 출발지/목적지를 모르니 모든 포트에 브로드캐스트 패킷을 전달하게 된다.
그래야 데이터를 실제 목적지로 어떻게든 보낼 수 있을테니까.
그러다 보니 허브는 연결된 네트워크에서 'A'라는 컴퓨터가 받아야 할 데이터를 'B', 'C'도 같이 받게 되는 것이다.
이렇게 되면 허브에 연결된 장비가 많아지면 많아질수록 네트워크 트래픽이 불필요하게 증가되고,
결과적으로 네트워크 성능이 저하될 수 밖에 없는 것이다.
또한, 허브 환경에서는 호스트간 데이터가 동시에 전송될 경우 충돌이 발생할 가능성이 높아지게되고 그로 인해 전체 네트워크 지연이 또 발생할 수 밖에 없다.
물룐 요즘에는 '허브'를 사용하는 곳이 거의 없기도 하다.
솔직히 '허브' 기능만하는 장비도 찾기 힘들다. (거의 대부분이 스위칭 허브)
스위치
스위치도 허브와 마찬가지로 하나의 네트워크로 묶어주는 역할을 한다.
하지만 스위치는 허브 보다 훨씬 더 지능적인 연결 도구이다.
스위치는 연결된 각 컴퓨터의 맥 주소를 학습하고 저장하여, 데이터 패킷의 출발지와 목적지를 인식할 수 있다.
이를 통해 스위치는 데이터를 목적지 주소가 있는 특정 포트로만 전송할 수 있다.
(목적지 MAC 주소에 대해 학습이 되어있지 않은 경우 ARP를 발생시켜 들어온 포트를 제외한 나머지 포트로 브로드캐스트가 Flooding 되기도 한다.)
따라서 스위치는 네트워크 효율성을 향상시키고, 데이터 충돌을 줄여준다.
또한 스위치는 데이터를 필요한 포트로만 전송하기 때문에, 불필요한 네트워크 트래픽을 줄일 수 있고, 충돌 도메인을 분리하여 네트워크의 신뢰성을 높일 수 있다.
스위치와 허브의 동작 방식
- 스위치와 허브 각각의 동작 방식을 비교해보자.
허브
허브에는 다음과 같은 사용자 4명이 연결되어 있다.
'A' 유저가 'B' 유저에게 ping 10.0.0.2
을 쏜다고 가정해보자.
- 'A' 유저가 메시지를 네트워크에 띄운다.
- 허브가 'A'의 메시지를 받는다.
- 허브는 메시지를 보낸 기기외에 자신과 연결된 나머지 기기들에게 해당 메시지를 보낸다.
- 메시지를 받은 기기들은 자신의 IP 주소가 맞는지 확인한다.
- 받은 메시지의 주소가 자신의 주소와 일치하는 것을 본 'B' 유저는 응답 메시지(Reply)를 보낸다.
- 허브가 'B'의 메시지를 받는다.
- 허브는 메시지를 보낸 기기외에 자신과 연결된 나머지 기기들에게 해당 메시지를 보낸다.
- 메시지를 받은 기기들은 자신의 IP 주소가 맞는지 확인한다. ('A' 유저는 'B' 유저에게 응답을 받음)
'A'와 'B'는 네트워크 상에서 서로의 존재 여부를 확인하였다.
하지만 허브의 작동 방식을 보면 주소 확인도 하지 않고 연결된 모든 기기에게 일방적으로 메시지를 뿌리고 있다.
이러한 문제점 때문에 불필요한 네트워크 트래픽이 발생되고, 클라이언트쪽에도 부하를 주는 것이다.
스위치
- 각 호스트에는 서로 간의 ARP 테이블이 기록되어 있고, 스위치에는 맥 주소 테이블이 각각 기록되어 있다고 가정함.
스위치에는 다음과 같은 사용자 4명이 연결되어 있다.
이번에는 'C' 유저가 'D' 유저에게 ping 10.0.0.4
을 쏜다고 가정해보자.
- 'C' 유저가 메시지를 네트워크에 띄운다
- 스위치가 'C'의 메시지를 받는다.
- 스위치는 메시지에 IP 주소를 보고 해당 IP 주소로 메시지를 보낸다.
- 'D'는 메시지를 확인한다.
- 'D'는 자신이 있다는 것을 'C'에게 알리기 위해 응답(Reply) 메시지를 보낸다.
- 스위치가 'D'의 메시지를 받는다.
- 스위치는 메시지에 IP 주소를 보고 해당 IP 주소로 메시지를 보낸다.
- 'C'는 'D'에게 응답을 받았다.
'C'와 'D'는 네트워크 상에서 서로의 존재를 확인 했다.
스위치는 이러한 방법이 어떻게 가능했을까?
포트란?
아래와 같이 이더넷 케이블을 이용해 스위치와 연결하는 구멍을 '포트'라고 한다.
MAC 주소란?
데이터 통신이 가능한 전자기기는 네트워크 상에서 기기의 식별을 가능하게 해주는 고유한 주소를 가지고 있다.
해당 주소를 알면 LAN 상에서 기가간의 구분이 가능하다.
허브와 스위치의 차이점을 조금 더 명확히 이해해보기 위해서 OSI 7계층에 대해서 살짝만 파보자.
Layer 1: 실제 기기간의 물리적 연결을 정의하는 계층
- 이더넷 케이블 같은 물리적인 장치를 통해 전기적 신호의 송수신이 이루어짐.
- 해당 계층에서는 데이터를 전기적 신호로 변환하여 전달하는 역할만 함.
Layer 2: 네트워크 상에 있는 기기간의 데이터 전송 및 물리 주소(Mac address)를 결정하는 계층
- 물리 계층에 들어온 전기적 신호를 데이터형태로 처리함
Layer 3: 데이터 통신 과정 중에서 여러 개의 노드를 거칠 때 경로를 찾아주는 역할을 함.
이더넷 케이블이나 허브는 물리 계층에 속하는 장치로써 단지 데이터를 전기적 신호로 전달하는 역할만 할 뿐,
데이터의 내용이나 출발, 도착지는 신경 쓰지 않는다.
그래서 허브를 통해서 기기간 통신이 이루어지면 허브는 자기가 받은 전기적 신호를 그대로 자신과 연결된 다른 기기들에게 전달하는 것이다.
허브와는 다르게 스위치는 데이터 링크 계층에 속하는 장치로써 MAC 주소 식별이 가능하다.
즉, 자신과 연결된 기기들의 MAC 주소를 이용하여 메시지의 출발지와 도착지를 알 수가 있다.
그래서 스위치를 통해 기기간의 통신을 하면 스위치는 메시지에 적혀있는 MAC 주소를 보고 목적지에 전달이 가능한 것이다.
물론 호스트의 ARP 테이블에 상대방 MAC 주소가 기록되어 있지 않다면
메시지를 보내기 전에 먼저 ARP 요청이 발생하게 된다.
ARP는 목적지가 브로드캐스트(FF:FF:FF:FF:FF:FF)이며, 스위치에서는 해당 ARP를 들어온 포트를 제외한 모든 포트로 Flooding 시킨다.
이 과정에서 스위치는 출발지와 목적지 모두의 맥 주소를 학습하여 mac table에 기록한다.
그렇다면 OSI 7계층에서 이러한 동작을 한다는 것을 알게 되었으니 메시지 전송 과정에서 7계층이 어떻게 동작하는지 살펴보자.
1. 'A' 유저가 'D' 유저에게 ping을 쏜다! (ping 10.0.0.4)
- 'A' 유저의 컴퓨터로부터 메시지가 생성되어 스위치로 전달된다.
- 이 때 위에서 언급했듯이, A 유저 컴퓨터의 ARP 테이블에 목적지에 대한 mac 주소가 기록되지 않은 경우 ARP 요청을 보낸다.
- 스위치는 Layer 2에 속하는 기기이다. 따라서 Layer 2까지 파악이 가능하다.
- Layer 2에는 'A' 유저의 MAC 주소 >> 'D' 유저의 맥 주소가 표시되어 있다.
2. 스위치에서 'A"가 보낸 메시지를 받았다.
- 스위치에서 메시지를 열어보면
In Layer 1
에는 메시지가 들어온 포트번호,Out Layer 2
에는 메시지가 나간 포트 번호가 기록되어 있다. - Layer 2에서는 출발지, 도착지 MAC 주소가 기록되어 있다.
3. 'D' 유저가 최종적으로 메시지를 받았다.
- 'D' 유저의 컴퓨터에서 메시지를 열어보면 Layer 3계층 까지 확인 가능하다.
- 명령 프롬프트 창에서 IP 주소를 이용해
ping
명령을 날린 것은 3계층을 이용한 것이다. - In Layers: 'A' -> 'D'
- Out Layers: 'D' -> 'A' ('A'의 ping에 대한 응답)