내일배움캠프 Node.js 트랙 30일차
OSI 7계층 - 데이터 링크 계층
데이터 링크 계층의 정의
- 데이터 링크 계층(DLL)은 OSI 모델의 맨 아래에서 두 번째에 해당하는 계층이다.
- 노드간 데이터 전달을 담당하며, 오류 없이 정보를 전송하는 것이 이 계층이 맡은 역할이다.
- 인코딩, 디코딩, 데이터의 수신과 발신 과정에 에러가 나지 않도록 여러 가지 기능을 담당하고 있다.
데이터 링크 계층의 하위 계층
그럼 데이터 링크 계층은 어떻게 저 많은 일들을 하고 있는 걸까? 데이터 링크를 구성하고 있는 계층의 하위 계층들을 살펴 보고 그들이 맡고 있는 역할을 알아 보자.
논리 링크 제어(LLC)
LLC는 데이터 링크 계층의 하위 계층으로서, 다중화(multiplexing) 매커니즘을 제공한다. 벌써부터 설명이 어려운데 현재 단계에서 다중화에 깊게 알 필요는 없을 것 같다. 그냥 쉽게 말해 보자면, LLC는 애플리케이션과 다른 서비스 간의 데이터 흐름을 처리하는 레이어라고 정리할 수 있겠다.
미디어 액세스 컨트롤(MAC)
MAC는 기기 간의 상호 작용을 관리하고, 프레임의 주소 지정을 담당한다.
살짝 어려운 내용이니 차근차근 뜯어보도록 하자.
프레임이란?
- 데이터 링크 계층에서의 데이터 전송 단위가 바로 프레임이다.
- 다른 계층에서 데이터를 패킷이나 세그먼트 등으로 부르듯이, 데이터 링크 계층에서는 이를 프레임이라고 부른다.
- 데이터를 물리적 네트워크(이더넷, 와이파이)로 보내기 전에 사용된다.
MAC가 주소를 지정한다고?
- MAC 계층은 고유 식별자를 사용하여 네트워크 장치를 구분한다.(장치가 제조되었을 때 할당되는 고유 주소가 존재한다는 소리다.)
- MAC 주소는 48비트로 이루어진 하드웨어 주소이며, 전송할 프레임에 송신자와 수신자의 MAC 주소를 포함시킨다.
- 즉, MAC 계층은 프레임에 주소를 할당하거나 확인하여 올바른 장치로 전달되도록 하는 역할을 담당한다.
데이터 링크 계층의 기능
위에서 이미 설명된 내용이지만 다시 한 번 데이터 링크 계층의 기능들을 정리해보겠다.
프레이밍(Framing)
앞서 언급했듯이 네트워크 계층으로부터 수신된 패킷을 데이터 링크 계층에서는 프레임이라고 부른다. 엄밀히 말하자면, 데이터 링크 계층의 기능 중 하나가 패킷 바로 이 프레임의 형태로 구성하는 것이다.
송신측 데이터 링크 계층
송신측의 데이터 링크 계층은 수신된 패킷을 작은 프레임으로 나누고 해당 프레임을 비트 단위로 기본 물리 계층에 보낸다. 또한 프레임의 헤더와 끝에는 일부 특수 비트(오류 제어 및 주소 지정용)를 첨부한다.
수신측 데이터 링크 계층
수신측 데이터 링크 계층에서는 정확히 반대의 기능을 수행한다. 물리 계층에서 비트 단위가 된 데이터를 가져와서 프레임으로 구성한 후 네트워크 계층으로 보내준다.
어드레싱(Addressing)
데이터 링크 계층은 노드 간 전달을 보장하기 위해 각 프레임의 헤더에 소스와 대상의 MAC 주소/물리적 주소를 캡슐화한다.
오류 제어
네트워크를 통해 전달되는 데이터는 잡음, 감쇠 등 다양한 원인으로 인해 손상될 수 있는데, 데이터 링크 계층이 책임지고 이 오류를 감지하고 정정해준다. 프레임 헤더에 오류 제어용 특수 비트를 첨부한다고 써놓았 듯, 수신된 데이터가 올바른지 확인할 수 있다.
흐름 제어
수신자의 수신 속도가 발신자의 전송 속도보다 낮으면 수신자의 버퍼에 오버플로우가 발생하여 일부 프레임이 손실될 수 있다.(병의 입구는 좁은데 물이 마구 쏟아진다면 손실이 발생하는 것처럼 말이다.)
송신자와 수신자의 속도를 동기화하고 둘 사이의 흐름 제어를 설정하는 것 또한 데이터 링크 계층의 역할이다.
접근 제어
여러 장치가 동일한 통신 채널을 공유하는 경우 충돌 가능성이 높으므로 어떤 장치가 채널을 제어하는지 확인한다.
간단 요약
데이터 링크 계층은 테이터가 안정적이고 정확하게 전송되도록 책임을 맡고 있다. 네트워크 계층으로부터 받은 데이터(패킷)를 프레임으로 캡슐화한 뒤 MAC 주소를 지정하여 전달하기도 하고, 물리 계층으로부터 전달 받은 비트를 프레임으로 구성하여 오류를 감지하기도 한다.
Reference
Data Link Layer - GeeksforGeeks
'개발일지 > TIL(Today I Learned)' 카테고리의 다른 글
2024-12-11 (0) | 2024.12.11 |
---|---|
2024-12-10 <HTTP와 TCP, 그리고 웹소켓> (1) | 2024.12.10 |
2024-12-06 (2) | 2024.12.06 |
2024-12-05 (0) | 2024.12.05 |
2024-12-04 (0) | 2024.12.04 |
댓글