네트워크를 공부하다 보면 결국 이런 질문을 만나게 된다.
“내 컴퓨터에서 보낸 데이터는 같은 네트워크 안의 다른 장비를 어떻게 찾아갈까?”
지난 글에서는 0과 1이 전기 신호, 빛 신호, 전파 같은 물리적인 신호로 바뀌어 이동한다는 이야기를 했다.
그런데 신호가 이동할 수 있다는 것만으로는 충분하지 않다.
사람이 말을 할 수 있다고 해서 대화가 바로 되는 건 아니다.
누가 누구에게 말하는지, 말의 형식은 어떤지, 내용이 손상되지는 않았는지 확인하는 규칙이 필요하다.
같은 네트워크 안에서 이런 역할을 해주는 대표적인 기술이 이더넷(Ethernet) 이다.
이더넷은 현대 유선 LAN에서 가장 널리 쓰이는 네트워크 기술이다.
여기서 LAN은 Local Area Network의 줄임말로, 비교적 가까운 범위 안에서 구성된 네트워크를 말한다.
집, 학교, 회사 사무실처럼 하나의 공간 안에서 여러 장비가 연결된 네트워크를 떠올리면 된다.
내 노트북, 데스크톱, 공유기, 프린터, 서버가 같은 네트워크에 연결되어 있다면, 이 장비들은 LAN 안에 있다고 볼 수 있다.
그런데 같은 LAN 안에 장비가 여러 대 있으면 문제가 생긴다.
“이 데이터는 누구에게 보내는 거지?”
“받는 쪽은 이 데이터가 자기 것인지 어떻게 알지?”
“전송 중에 데이터가 깨졌는지는 어떻게 확인하지?”
이더넷은 이런 문제를 해결하기 위해 데이터의 형식과 전달 방식을 정해둔 규칙이라고 볼 수 있다.
여기서 중요한 건, 이더넷은 단순히 케이블을 꽂는 기술이 아니라는 점이다.
같은 네트워크 안에서 데이터를 주고받기 위해 어떤 형식으로 포장할지, 누구에게 보낼지, 손상 여부를 어떻게 확인할지까지 포함한 약속이다.
네트워크 계층 구조에서 데이터는 계층을 내려갈수록 각 계층의 목적에 맞게 포장된다.
데이터 링크 계층에서는 데이터를 프레임(Frame) 이라는 단위로 다룬다.
이더넷에서 사용하는 프레임을 이더넷 프레임이라고 한다.
프레임은 택배 상자와 비슷하다.
택배 상자 안에는 실제 물건이 들어 있고, 상자 겉면에는 보내는 사람, 받는 사람, 송장 번호 같은 정보가 붙어 있다.
이더넷 프레임도 비슷하다. 실제 데이터만 덜렁 보내는 게 아니라, 데이터를 전달하기 위해 필요한 정보를 앞뒤에 붙여서 보낸다.
크게 보면 이더넷 프레임은 이렇게 나눌 수 있다.
Header | Payload | Trailer
Header에는 이 프레임을 어디로 보낼지, 누가 보냈는지 같은 정보가 들어간다.
Payload에는 실제로 전달하려는 데이터가 들어간다.
Trailer에는 데이터가 전송 중에 손상되었는지 확인하기 위한 정보가 들어간다.
즉, 이더넷 프레임은 “실제 데이터”에 “전달을 위한 정보”를 붙인 포장 단위라고 이해하면 된다.
이더넷에서 중요한 주소가 하나 나온다.
바로 MAC 주소다.
MAC 주소는 같은 네트워크 안에서 장비를 식별하기 위한 주소다.
정확히는 네트워크 인터페이스 카드, 즉 NIC에 부여되는 하드웨어 주소에 가깝다.
우리가 흔히 IP 주소를 많이 들어서 네트워크 주소라고 하면 IP부터 떠올리기 쉽다.
하지만 같은 LAN 안에서 실제로 프레임을 전달할 때는 MAC 주소가 중요하게 사용된다.
IP 주소가 “최종적으로 어디에 있는 호스트로 가야 하는가”에 가깝다면,
MAC 주소는 “지금 이 LAN 안에서 어떤 장비에게 프레임을 전달해야 하는가”에 가깝다.
비유하자면 IP 주소는 도시와 건물 주소에 가깝고, MAC 주소는 같은 건물 안에서 특정 사람을 찾기 위한 출입증 번호에 가깝다.
물론 이 비유가 완벽한 건 아니지만, 지금 단계에서는 이렇게 구분해두면 좋다.
IP는 네트워크를 넘어 목적지를 찾아갈 때 중요하고,
MAC은 같은 네트워크 안에서 실제 장비를 구분할 때 중요하다.
이더넷 프레임의 Header에는 대표적으로 두 가지 MAC 주소가 들어간다.
목적지 MAC 주소
출발지 MAC 주소
목적지 MAC 주소는 이 프레임을 받을 장비의 MAC 주소다.
출발지 MAC 주소는 이 프레임을 보낸 장비의 MAC 주소다.
장비 입장에서 프레임을 받으면 먼저 이런 식으로 생각할 수 있다.
프레임이 들어왔다.
목적지 MAC 주소를 확인한다.
이 MAC 주소가 내 MAC 주소인가?
맞으면 위 계층으로 넘긴다.
아니면 버린다.
즉, 같은 LAN 안에서 장비들은 흘러들어오는 프레임을 무조건 다 처리하지 않는다.
프레임 안의 목적지 MAC 주소를 보고 “이게 나한테 온 건가?”를 판단한다.
여기서 중요한 건, 이더넷은 같은 네트워크 안에서 데이터를 아무렇게나 흘려보내는 방식이 아니라는 점이다.
프레임 안에 목적지와 출발지 정보를 넣고, 장비는 그 정보를 기준으로 자신이 처리할 프레임인지 판단한다.
Header가 배송 정보라면, Payload는 실제 내용물이다.
예를 들어 웹 요청을 보낸다고 해보자.
브라우저에서 만든 HTTP 요청 데이터는 여러 계층을 거치면서 포장된다.
그리고 데이터 링크 계층까지 내려오면 이더넷 프레임의 Payload 안에 들어간다.
이더넷 입장에서는 Payload 안에 HTTP가 들어 있는지, TCP가 들어 있는지, IP가 들어 있는지 자세한 내용까지 신경 쓰지 않는다.
이더넷의 관심사는 이것이다.
이 프레임을 같은 LAN 안에서 누구에게 전달할 것인가?
프레임이 깨지지 않았는가?
각 계층은 자기 역할에 집중한다.
이더넷은 데이터 링크 계층의 기술이기 때문에, 같은 네트워크 안에서 프레임을 전달하는 데 집중한다.
이더넷 프레임의 뒤쪽에는 Trailer가 붙는다.
여기에는 대표적으로 FCS(Frame Check Sequence) 라는 값이 들어간다.
FCS는 프레임이 전송 중에 손상되었는지 확인하기 위한 값이다.
네트워크를 통해 데이터가 이동하다 보면 신호 간섭이나 여러 이유로 데이터가 깨질 수 있다.
받는 장비는 프레임을 받았을 때 FCS를 확인해서 “이 프레임이 정상적으로 도착했는지” 검사한다.
흐름을 단순하게 보면 이렇다.
송신 측:
프레임 내용을 바탕으로 FCS 값을 계산한다.
프레임 뒤에 FCS를 붙여 보낸다.
수신 측:
받은 프레임 내용을 다시 계산한다.
프레임에 붙어 있던 FCS 값과 비교한다.
값이 맞으면 정상으로 판단한다.
값이 다르면 손상된 프레임으로 보고 버린다.
여기서 중요한 건, FCS가 데이터를 복구해주는 장치는 아니라는 점이다.
FCS는 “깨졌는지 확인”하는 역할에 가깝다.
깨진 프레임을 고쳐서 다시 살리는 것이 아니라, 문제가 있다고 판단되면 해당 프레임을 버린다.
그 이후 다시 보낼지 말지는 더 위 계층의 프로토콜이 담당할 수 있다.
이제 내 컴퓨터가 같은 네트워크 안의 다른 장비에게 데이터를 보낸다고 생각해보자.
내 컴퓨터는 먼저 데이터를 이더넷 프레임으로 포장한다.
목적지 MAC 주소: 받는 장비의 MAC 주소
출발지 MAC 주소: 내 컴퓨터의 MAC 주소
Payload: 실제로 보내려는 데이터
FCS: 오류 확인용 값
그다음 NIC를 통해 이 프레임을 신호로 바꿔 네트워크로 내보낸다.
받는 쪽 장비는 프레임을 수신한 뒤 목적지 MAC 주소를 확인한다.
목적지 MAC 주소가 나인가?
맞다 → Payload를 위 계층으로 넘긴다.
아니다 → 이 프레임은 내가 처리할 게 아니라고 판단한다.
그리고 FCS를 통해 프레임이 손상되지 않았는지도 확인한다.
이 과정을 보면 이더넷이 하는 일이 조금 더 선명해진다.
이더넷은 같은 LAN 안에서 데이터를 보내기 위해, 데이터를 프레임이라는 형식으로 포장한다.
그리고 그 프레임 안에 MAC 주소와 오류 확인 정보를 넣어, 장비들이 데이터를 올바르게 주고받을 수 있게 한다.
처음에는 네트워크 통신을 “그냥 데이터가 간다” 정도로 생각하기 쉽다.
하지만 실제로는 데이터가 그냥 이동하는 게 아니다.
같은 LAN 안에서도 데이터는 이더넷 프레임이라는 형식으로 포장된다.
프레임 안에는 목적지 MAC 주소, 출발지 MAC 주소, 실제 데이터, 오류 확인 정보가 들어간다.
장비는 프레임을 받으면 목적지 MAC 주소를 보고 자신이 처리할 데이터인지 판단한다.
그리고 FCS를 통해 전송 중에 프레임이 손상되지는 않았는지 확인한다.
여기까지 이해하면 “같은 네트워크 안에서 데이터를 주고받는다”는 말이 조금 더 구체적으로 보인다.
단순히 케이블을 타고 신호가 흐르는 것이 아니라,
정해진 형식의 프레임이 이동하고,
그 안의 주소 정보를 보고 장비들이 판단하며,
오류 확인까지 거쳐 데이터가 다음 단계로 넘어가는 것이다.