프레임 — 비트를 봉투에 담다
물리계층은 비트를 신호로 바꾸어 회선 위에 흘려보냅니다. 그런데 비트가 끝없이 흐르기만 하면 받는 쪽이 곤란해집니다. 어디서부터 어디까지가 하나의 덩어리인지 알 수 없기 때문입니다. 마치 누군가가 쉼표도 없이 말을 쏟아내면 어느 단어가 어느 문장에 속하는지 헷갈리는 것과 같습니다. 데이터링크계층은 이 문제를 프레임이라는 단위로 해결합니다.
봉투가 필요한 이유
편지를 보낼 때 우리는 내용을 종이에 쓰고 봉투에 넣습니다. 봉투에는 받는 사람 주소와 보내는 사람 주소가 적혀 있고, 봉투를 뜯어야 비로소 내용을 읽을 수 있습니다. 프레임은 네트워크 세계의 봉투입니다. 비트들을 하나의 묶음으로 감싸고, 앞뒤에 특별한 패턴을 붙여 '여기서 시작해서 여기서 끝난다'고 표시합니다.
프레임의 앞부분을 헤더, 뒷부분을 트레일러라고 부릅니다. 헤더에는 출발지와 목적지의 MAC 주소, 데이터 길이나 타입 정보가 담깁니다. 트레일러에는 오류를 확인하는 값이 들어갑니다. 그 사이에 실제 데이터, 곧 상위 계층에서 내려온 패킷이 들어 있습니다.
프레임의 경계를 어떻게 표시하나
비트의 흐름 속에서 프레임의 시작과 끝을 구분하는 방법은 여러 가지입니다. 가장 직관적인 방법은 특별한 패턴을 경계 표지로 쓰는 것입니다. 예를 들어 이더넷은 프레임 앞에 프리앰블이라는 7바이트짜리 패턴을 넣어 '이제 프레임이 온다'고 알립니다. 그 뒤에 오는 SFD 바이트가 '지금 이 순간부터 진짜 시작'이라고 확정합니다.
다른 방식으로는 길이 필드를 쓰는 방법이 있습니다. 헤더에 '데이터가 몇 바이트'라고 적어 두면, 받는 쪽은 그만큼 읽고 멈추면 됩니다. 이 두 방식을 섞어 쓰는 프로토콜도 있습니다.
프레임이 감싸는 것과 감싸지 않는 것
프레임은 직접 연결된 이웃, 곧 같은 네트워크 안의 장치 사이에서만 의미를 가집니다. 이더넷 케이블로 연결된 내 컴퓨터와 공유기 사이를 오가는 데이터는 이더넷 프레임에 담깁니다. 공유기가 그 프레임을 받아 인터넷으로 내보낼 때는 그 봉투를 뜯고 안에 있는 IP 패킷을 꺼내 새 봉투에 다시 담습니다. 프레임은 이웃과의 단 한 구간만 살아 있는 봉투입니다.
이 점이 IP 패킷과 다른 부분입니다. IP 패킷의 헤더에 적힌 주소는 최종 목적지까지 변하지 않지만, 프레임의 MAC 주소는 구간마다 바뀝니다. 다음 절에서는 이 봉투가 내용물을 안전하게 전달하지 못했을 때, 즉 오류가 생겼을 때 어떻게 알아채는지 살펴봅니다.