OSI 데이터 링크 계층
OSI 데이터 링크 계층
- 일반적으로 우리가 컴퓨터간에 통신을 할 때는 IP를 기반으로 통신을 한다.
- ![[Pasted image 20220819224746.png]]
- 물리 계층이 데이터를 하드웨어적 관점에서 다루었다면 데이터 링크 계층은 소프웨어와 하드웨어 모두의 관점에서 데이터를 처리하는 계층이다.
- 물리 계층을 통해 어떤 데이터를 보낸하고 해보자. 그럼 이 데이터를 어디로 보내야 할까?
- 우리가 상대방의 IP주소를 알아내 이 주소를 통해 데이터를 보내면 된다고 보통 생각한다.
- 만약 지구 반대편 칠레에 한 가정집 PC에서 네이버를 볼 수 있게 하려면 네이버 웹 사이트 데이터를 보내야하는데 생각해보면 바로 직통 회선이 연결된 것이 아닌데 어떻게 보낼 수 있다는 말일까?
- 이러한 의문을 해결해주는 실마리가 바로 이 데이터 링크 계층에서부터 시작된다.
데이터 계층의 기능
Framing
- 물리 계층만 있다면 회선이 물리적으로 연결되어 있는 컴퓨터에 데이터를 전송할 수 있을 것이다.
- 하지만 각 컴퓨터는 한대의 컴퓨터하고만 연결되어 있지 않고 수많은 컴퓨터들과 연결이 되어 있다.
- 인터넷을 할 때만해도 웹서핑을 10분만 해도 수많은 웹페이지에서 보내주는 수많은 데이터들을 받을 텐데 하나의 랜선만 꼽아서 사용하는 환경에서 수많은 데이터 전송을 어떻게 차례 차례 처리할까?
- 상위 계층인 네트워크 계층에서 구성되는 데이터의 단위를 데이터그램이라고 한다. 이 데이터그램이 데이터 링크 단으로 넘어오면 데이터 그램을 프레임 단위로 변환하고 헤더와 트레일러를 추가한다. 이러한 과정을 캡슐화라고 한다.
- 헤더: 목적지, 출발지 주소 및 데이터 내용 정의
- 트레일러: 비트 에러 감지 ![[Pasted image 20220819232832.png]]
- 2계층에서는 데이터를 프레임단위로 변환하고 헤더와 트레일러, 링크를 붙여 데이터를 물리 계층으로 전송한다.
-
직접 연결된 네트워크 장치간에 데이터를 전송
- ![[Pasted image 20220819225710.png]]
- 이 그림에서 보면 H1에서 H2로 데이터를 바로 보내지 않는다.
- 데이터 계층이 데이터를 전송하는 방식은 다음과 같다.
- 데이터 링크 계층은 데이터 송신 주체와 직접적으로 연결된 네트워크 장치간에 데이터를 전송하도록 명령하는 계층이다.
- 네트워크 계층에서 어떤 위치(H2)에 데이터를 전송하라고 오더를 내리면 데이터 링크는 인접한 노드에게 데이터를 전송한다.
- 인접 노드(라우터2)는 프레임 데이터에 담긴 해더를 참고해 자신과 연결되어 있는 노드(라우터4)로 데이터를 전달한다.
- 이 과정을 반복해 결국 라우터3이 H2를 찾아 데이터를 넘겨주고 통신이 완료된다.
- 이 과정을 보면 데이터 링크 계층에서는 이웃한 노드에만 데이터를 전해준다. 실제 우리가 목표로하는 H2에 바로주는 것이 아니라 인접한 노드들을 돌아가면서 점차 H2에 다가가는 것이다.
- 이 이웃한 노드를 찾아가기 위한 주소가 MAC 어드레스이다.
- 맥 어드레스는 2계층에서 통신에 사용하는 프로토콜로서 이 맥 어드레스를 통해 이웃 노드간에 직접적인 통신이 가능하다.
- 맥 주소는 하드웨어 주소로 변경이 불가능하다.
- 정확히는 NIC, 즉 렌카드 제조사가 랜카드에 부여한 고유 번호인데 이 고유번호를 가지고 H1에 연결된 R2에게 연락을 할 수 있는 것이다.
※ 조금 더 설명을 붙이자면 H1이라는 우리의 컴퓨터는 직접적으로 연결되어 있는 여러 컴퓨터들이 있을 것이다.(비유를 하자면 같은 아파트 동에 사는 사람들과 같은 인터넷 회선을 공유하고 있다고 하자, 101동이라는 동일한 네트워크망 안에 속해 있는 것) 만약 다른 동 사람, 다른 동네, 다른 국가의 네트워크망에 접속하기 위해서는 서로 다른 네트워크 망끼리 연결이 가능해야 101동 네트워크 망에서 타고타고 흘러가 저~기 칠레 까지 네이버를 볼 수 있는 것이다. 이렇게 네트워크 간에 연결을 해주는 것을 라우터라고 부른 것.
이 라우터를 통해 다른 네트워크로 넘어가기에 앞서 우선적으로 옆 노드로 데이터를 보내기 위한 주소가 바로 맥 어드레스이다.
회선 제어
- 아까 위에서 프레이밍의 역할은 수많은 데이터가 들어올 때 각 데이터를 구분할 수 있도록 헤더와 트레일러를 달아 주었다. 이렇게 데이터를 구분을 할 수는 있어졌는데 많은 데이터가 몰려 이 데이터 신호간의 충돌이 발생하지 않게 하는 기능도 필요하다.
- 2계층에서 이를 방지하는 회선 제어 기능도 담당한다.
- ENQ/ACK 방식을 사용하는 1대1방식과 Polling 방식을 통한 1대多 방식이 존재한다.
- 이 내용은 심화적인 내용이므로 자세한 내용을 관련 전공 자료를 보도록 하자. 여기서는 간단히 언급만 하겠다.
흐름 제어
- 데이터가 막 들어올 때 각 데이터를 구분, 충돌 방지도 했다면 데이터 속도 또한 조절할 수 있다.
- Feedback 방식의 흐름 제어하며 이를 Stop & Wait 방식이라고도 불린다.
- 이 내용은 심화적인 내용이므로 자세한 내용을 관련 전공 자료를 보도록 하자. 여기서는 간단히 언급만 하겠다.
오류 제어
- 2계층에서 데이터를 전송하다가 오류가 날 수도 있다. 이 경우 발생하는 에러를 감지해 수신자가 송신자에게 에러를 전송하고 재전송하도록 요청한다.
- Stop and Wait ARQ - Go back n ARQ
- Selective Repeat ARQ
Ethernet v2
-
2계층에서 데이터를 인접 노드에게 보낼 때 맥 어드레스를 토대로 보낸다고 하였다. 이 맥 어드레스도 데이터를 보낼 때 사용하는 프로토콜이 바로 많이 들어본 이더넷이다. 맥 통신과 프로토콜의 형식을 정의한 것.
- Preemble : 이더넷 프레임의 시작과 동기화
- Dest. Addr. : 목적지
MAC
주소 - Src. Addr. : 출발
MAC
주소 - Type : 캡슐화되어 있는 패킷의 프로토콜 정의
- Data : 상위 계층의 데이터, 46~1500-byte, 46보다 작을 경우 이를 맞추기 위한 패딩
Padding
데이터가 붙어요 - FCS(Frame Check Sequence) : 프레임 에러 체크
목적지의 MAC 주소를 알아내는 방법
- 2계층은 노드를 통해 타고타고 흘러서 칠레에 한 가정집 컴퓨터에 도달한다고 하였다. 그렇다면 결국에는 마지막 목적지의 MAC 주소를 알아야 한다. 근데 옆집 노드부터 타고 흘러가는 과정상 칠레 가정집 컴퓨터 맥 주소를 어떻게 알 수 있을까?
- 바로 IP주소를 통해 알 수가 있다. 네트워크 계층에서 설명하곘지만 네트워크 계층은 IP 프로토콜에 따라 IP 주소를 사용한다. IP는 드넓은 네트워크 망인 인터넷에서 주소로서 역할을 한다. 수많은 라우터와 서버를 지날 수 있는 이정표인 것
- 하지만 IP는 고정적인 것이 아니다. 경우에 따라 A IP를 쓰던 사용자가 B로 갈아타거나 아예 사라질 수도 있는데 정확한 주소를 어떻게 확신하겠냐는 문제가 생긴다.
- 이때 도움을 주는 것이 바로 ARP(Address Resolution Protocol)이다.
- 데이터를 보내고자하는 송신자는 Broadcast Address를 이용해 전체 노드에게 특정 IP를 가지고 있는 컴퓨터의 MAC 주소를 달라고 요청한다. 그러면 해당 IP를 가진 노드가 MAC 주소를 보내주고 서로간에는 IP와 MAC 주소를 교환한다.
- 이 ARP를 통해 Mac 주소를 알아내어 통신을 할 수 있는 것이다.
출처 https://velog.io/@redgem92/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%A7%81%ED%81%AC-%EA%B3%84%EC%B8%B5Data-Link-Layer-1 https://jhnyang.tistory.com/403?category=947031 https://www.youtube.com/watch?v=1pfTxp25MA8 https://tyeolrik.github.io/network/2017/02/14/Networking-4-Data-Link-Layer.html
댓글남기기