OSI 7 Layer는 네트워크 통신에 필요한 프로토콜을 7계층으로 나누어서 통신 과정의 복잡성을 줄인다. 각 계층의 이름은 하위 계층부터 Physical Layer, Data Link Layer, Network Layer, Transport Layer, Session Layer, Presentation Layer, Application Layer이다. AWS 강의실의 상운님은 이 Layer들의 이름을 외울 때 앞글자만 따서 'Please Do Not Throw Sausage Pizza Away'라고 외우셨다고 하는데 나름 괜찮은 것 같다.
각 계층의 역할이 무엇인지, 그 역할은 왜 필요한지를 중심으로 OSI 7 Layer를 이해해보자.
Physical Layer(물리 계층)에서는 실제로 데이터를 보내는 매체들의 물리적인 사항을 정의한다. 예를 들어 전선의 규격, 전송 종류(구리선, 전파 등), 전압 등이 이에 해당된다.
이 계층의 주요 단위는 bit이다. 전송 매체를 통해 전달되는 실제 데이터들은 0과 1의 형태로 전송되며 이를 표현하는 단위는 bit이다. 당연하게도 실제로 숫자 0과 1이 왔다 갔다 하는 것은 아니고 전송 매체의 상태에 따라 0, 1로 판단하는 것이다. 예를 들어 전압이 일정 수치 이상이면 1, 이하이면 0으로 판단하는 등 그 방법은 매체에 따라 다양하겠지만 우리는 이런 방법을 통틀어서 0과 1로 이루어진 데이터를 전송한다라고 말한다.
모든 디바이스가 서로 데이터를 주고 받을 수 있으려면 각 디바이스는 아래와 같이 다른 모든 디바이스들과 연결되어 있어야 한다. 하지만 이 방법은 비용 측면에서 비효율적이기 때문에 허브라는 장치가 개발되었다.

허브는 다수의 디바이스를 연결해주는 장치이다. 서로 다른 디바이스들이 통신할 수 있도록 해준다. 하지만 허브는 디바이스로부터 받은 내용을 무조건 broadcast 방식으로 전달하며, 그 과정에서 에러, 충돌, 디바이스 별 제어는 수행하지 않는다.
즉 허브는 받은 내용을 다른 디바이스들에게 대신 전달해주는 심부름꾼 역할만 할뿐 다른 일은 하지 않는다.

위 그림에서 허브가 Client A로부터 받은 데이터를 broadcast할 때 데이터가 회선을 따라 이동하는 도중에 다른 Client에서 데이터를 보내면 어떻게 될까? 데이터끼리 충돌이 발생하여 올바른 데이터를 송수신하지 못하게 된다. 하지만 Physical Layer는 데이터를 전달하는 매체를 정의한 계층이기 때문에 데이터 충돌과 같은 문제를 처리하기엔 적합하지 않다. 계층의 역할을 무시하고 처리해도 되지만 그럴 경우 비효율적이고 복잡해질 수 있다. 다시 강조하지만 OSI 7 Layer가 도입된 이유는 통신 과정의 복잡도를 줄이기 위함이다.
또한 broadcast 방식이 아니라 대상을 지정하여 통신하고 싶은 경우에도 Physical Layer만으로는 문제를 해결할 수 없다. 이처럼 Physical Layer에서 처리하지 못하는 '제어'를 담당하는 계층이 다음에 설명할 Data Link Layer이다.
물리적인 통신을 제어함으로써 디바이스 간의 통신 및 전송을 안정화 하기 위한 계층이다. Data Link Layer에서 사용되는 용어인 MAC Address, CSMA/CD, Frame, Switch를 익혀보자.
MAC Address는 네트워크를 공부하지 않았다면 쉽게 접할 수 있는 용어는 아니다. 그래서 처음 배울 때 IP Address와 많이 헷갈렸던 기억이 난다. MAC Address는 주민등록번호와 같다. 각각의 장치에 고유하게 부여된 번호이며 변하지 않는다. 반면 IP Address는 집주소와 같다. IP Address는 고유하지 않으며 변동될 수 있다. IP Address는 다음 계층인 Network Layer에서 사용되므로 여기서는 MAC Address에 대해 알아보자.
MAC Address는 총 6바이트(48비트)로 이루어져 있다. 그 중 첫 세 바이트는 OUI(Organizationally Unique Identifier)이며 장치를 만든 제조사에 부여된 고유 식별자이다. 즉, 서로 다른 장치라도 같은 제조사에서 만든 장치라면 MAC Address의 첫 세 바이트는 같다. 나머지 세 바이트는 NIC(Network Interface Controller)이며 제조사가 같더라도 장치가 다르면 다른 값을 가진다. 예를 들어 00:1A:2B:3C:4D:5E라는 MAC 주소를 가진 장치라면 00:1A:2B는 OUI를 뜻하고 3C:4D:5E는 NIC를 뜻한다. 이러한 MAC 주소로 장치를 구분한다.
공유 링크(회선)에 여러 장치가 데이터를 동시에 보내면 충돌이 발생하게 된다. 이를 방지하기 위해 장치 간에 약속(=프로토콜)을 하는데 그런 약속 중 Random Access 방식에 속하는 프로토콜 중 하나가 CSMA/CD이다. Random Access란, 랜덤한 시간에 회선에 접근하는 방식을 말한다. (자세한 내용은 글을 읽다 보면 이해가 될 것이라 생각한다) Random Access를 사용하는 다른 프로토콜로는 CSMA/CA, ALOHA 등이 있다. 참고로 CSMA/CD는 유선 방식, CSMA/CA는 무선 방식의 통신에서 사용되는 Random Access 프로토콜이다.
CSMA/CD에서 CSMA는 Carrier Sense Multiple Access의 준말이고 CD는 with Collision Detection의 준말이다. 풀어서 말하면 '다중 접속 환경에서 발생하는 문제를 반송파(Carrier Sense)를 사용하여 해결하며 충돌을 판단할 수 있는 프로토콜'이다. 여기서 반송파란 각 장치가 데이터를 보내기 전에 회선이 이미 점유 중인지 확인하는 신호이다. 장치는 다른 장치들에게 이 신호를 보내고 회선이 점유 중이 아니라면 다른 장치들은 데이터를 전송해도 좋다는 반송파를 보냄으로써 충돌을 피할 수 있다.
충돌을 피할 수 있는데 왜 CD(Collision Detection, 충돌 감지)라는 이름이 붙은걸까? 반송파를 사용하더라도 충돌은 발생할 수 있기 때문이다. 회선이 점유되지 않은 특정 시기에 여러 장치가 동시에 점유 확인 신호를 보내는 경우 충돌이 발생할 수 있다.
장치는 본인이 보낸 데이터가 목적지에 도착하기 전에 다른 장치의 bit가 감지되면 충돌이 일어난 것으로 판단한다. (만약 충돌이 없다면 장치는 본인이 보낸 신호만 받는다) 충돌이 발생했다면 각 장치는 랜덤 시간을 기다리고(Random Access) 다시 데이터를 전송한다. 만약 이 경우에도 충돌이 발생한다면 좀 더 오래 기다린 후 재전송을 시도한다.
데이터의 충돌이 일어났을 때 이러한 프로토콜을 도입하여 문제를 해결할 수 있다. 하지만 여기엔 또 다른 문제가 존재한다. 이 문제는 조금 있다가 Switch 목차에서 자세히 알아보자.
Data Link Layer의 주요 단위는 Frame이다. Frame은 아래와 같은 구조를 가진다. 장치는 Frame을 주고 받으며 통신한다.

여기서는 Frame이 대상 MAC(목적지 MAC)과 소스 MAC(출발지 MAC) 주소를 가지고 있다는 것만 알고 넘어가도록 하자.
Switch는 Data Link Layer를 이해하고 있는 대표적인 장치이다. 여기서 '이해하고 있는'의 뜻은 CSMA/CD와 같은 프로토콜을 수행할 수 있다는 의미이다.

Switch의 내부를 좀 더 자세히 알아보자. 아래 사진을 보면 Switch 내부에는 Frame Storage, 그리고 MAC 주소와 PORT를 매핑한 테이블이 존재한다. MAC-PORT 테이블을 사용하면 Frame이 제공하는 목적지 MAC 주소를 통해 데이터(Frame)가 이동해야 할 PORT를 정할 수 있다. 그렇다면 Frame Storage는 왜 사용하는 걸까?

앞서 CSMA/CD 목차의 마지막 문단에서 '또 다른 문제'가 있다고 했는데 이를 해결하기 위해 Switch가 도입됐으며 해결 방법으로 Frame Storage를 사용한 것이다.
문제 상황을 간단하게 설명하면, N개의 장치들이 Switch와 같은 base station 없이 공유 회선을 통해 연결되어 있다고 생각해보자. 이런 경우 하나의 장치가 데이터를 보내기 위해선 다른 N-1개의 장치가 모두 데이터를 보내지 않는 순간을 기다려야 한다. 즉, 장치들이 많아질수록 데이터를 보내기 힘들어지게 된다.
Switch는 일종의 버퍼 역할을 해줌으로써 이 문제를 해결해준다. Switch에 연결된 각 장치들은 자신과 Switch 사이의 회선의 점유 유무만 확인하여 점유 상태가 아니라면 Switch에게 데이터를 보낸다. (Switch를 사용하지 않으면 공유 회선에 연결된 다른 모든 장치들이 보내는 데이터가 자신에게도 전달되기 때문에 모든 장치의 점유 유무를 확인해야 한다) Switch는 받은 데이터(Frame)를 Frame Storage에 저장한다. Frame Storage가 버퍼 역할을 해주는 것이다. 그 후 Switch는 Frame의 목적지 MAC을 확인하여 Frame을 올바른 PORT로 전달한다. 만약 Frame이 PORT를 출발하여 목적지로 이동하는 도중에 충돌이 발생한다면, Switch는 충돌이 발생한 Frame을 Frame Storage에 기억해 두었다가 랜덤 시간 이후에 재전송한다. 충돌이 발생한 목적지 장치도 마찬가지로 랜덤 시간 이후에 재전송한다.
Switch는 Frame이 목적지로만 이동하도록 함으로써 장치들이 불필요한 충돌로 인해 데이터를 전송하지 못하는 상황을 피하게 해준다. 이로써 Physical Layer가 해결하지 못한 데이터 '제어' 문제를 해결할 수 있게 되었다.
Data Link Layer는 각 장치들 사이에 전송되는 데이터를 제어할 수 있게 해준다. 하지만 서로 다른 네트워크 사이의 데이터 전송은 불가능하다. 예를 들어 서로 다른 Switch에 연결된 장치는 MAC 주소를 알 수 없기 때문에 통신이 불가능하다. Network Layer는 IP 주소를 사용하여 이를 해결한다. 다음 글에서 Network Layer에 대해 알아보자.