그냥 블로그

[네트워크] 데이터 링크 계층 본문

CS/네트워크

[네트워크] 데이터 링크 계층

코딩하는 공대생 2024. 3. 23. 01:50
반응형

데이터 링크 계층의 (내가 아는) 모든 것!

 

DataLink 계층

OSI 7 Layer 2계층
대표 기술 : LAN(이더넷, IEEE802), Bridge, Switch 
단위 : 프레임
물리적 단계의 오류 제어, 흐름 제어 기능을 수행

LAN ( 이더넷, IEEE 802.3 )

LAN(Local Access Network)

네트워크의 크기 별로 LAN, MAN, WAN이 있다. 그 중 데이터 링크 계층이라 하면 대표적으로 언급되는 기술이 LAN에서 주로 사용되는 이더넷이다.

 

먼저, LAN에 대해 설명하자면 LAN은 LLC 계층과 MAC 계층으로 나누어져 있다.

 

LLC 계층 ( Logic Link Cotrol )로 WAN의 데이터 링크 계층과 거의 유사하다. 

MAC 계층 (Medium Access Control)로 이더넷과 아주 깊은~~ 관계가 있는!!! 계층이다. 

 

MAC 주소

MAC 주소는 들어본 적이 있을 거다! 이는 물리적 네트워크 세그먼트 통신을 위한 식별자이다. 디바이스 제조 업체에서 할당한다. => 이 할당된 디바이스가 NIC(Network Interface Card)

NIC
이 NIC가 전기신호를 데이터 형태로 변환하고, 패킷의 목적지가 내가 맞는지 확인한다! 
계층 간을 Interface라고 한다

 

 

왜 MAC 주소가 이더넷과 연관이 있나?

바로 이더넷이 찾아가는 주소가 MAC 주소 이기 때문이다.

 

=> 이더넷은 건물 단위에서 각 장치의 고유한 MAC 주소를 찾아 프레임을 전송해 주는 것이다! 

 

LAN ( 이더넷 ) 연결 방식

토폴로지 ( STAR, BUS, 망, 링, 트리... ) 

LAN은 BUS(과거) STAR(요즘) 토폴로지를 사용한다. 

BUS 구조 : 예전의 이더넷은 주로 BUS형으로 설치되었다. BUS 형의 경우에는 송수신을 동시에 할 수 없는 반이중화 통신을 사용하는데, 이걸 해결하기 위한 방법이 CSMA/CD ( Carreire Sense Multiple Access with Collision Detection) 방식이다. 참 길다..

 

CSMA/CD가 왜 반이중화의 해결 방법일까 ?

 

여러 노드들이 하나의 BUS에 연결되어 있는 구조에서, 데이터 송/수신이 동시에 일어나지 않았기 때문이다.(반이중화) 

한 노드가 BUS를 통해 데이터를 송신하고 있을 때, 다른 노드가 송신하면 충돌(Collision)이 발생했다.

* 참고로 BUS는 Broad Casting 방식이다. 통로가 하나기 때문에 연결된 모든 노드들에게 퍼트린다.

 

기본적인 통신의 세가지 목표 1) No error 2) No loss 3) No duplication에서 데이터 충돌이 발생하면,

손실되거나 손상될 확률이 높기 때문에 이를 해결할 방법이 필요했고, CSMA/CD(IEEE 802.3)이 사용된 것이다.

 

사실, 이더넷 대신 나왔던 방법이 하나 더 있는데, 바로 토큰을 사용하는 것이다. (토큰 링, 토큰 버스)

특정 토큰을 한 노드가 발급하고, 토큰을 가진 노드만 데이터를 전송할 수 있게 하는 방식인데, 초기에는 이더넷 문제를 해결하기 위한 좋은 방안으로 떠올랐었지만 좀.. 문제가 있었다고 한다.

잠깐 설명하고 가자면, 토큰의 분실이 나는 경우가 있었던 것이다. 이 경우를 해결하려면 감시 노드를 두고, 토큰이 일정 시간 이상 오지 않으면 재발급해주는 노드를 뒀어야 하는데, 만약 이 노드까지 문제가 생기면..? 또 감시의 감시의 감시 노드를...?

암튼...

 

CSMA/CD의 방식 
1. 송신할 각 노드(host)는 bus를 확인한다. ( Carrier Sense )
2. 캐리어가 감지 되면, Bus가 사용되는 중인 것이므로 대기한다. 
3. 캐리어가 감지 되지 않는 시점에 데이터를 송신한다. 

이때, 만약 여러 대의 노드가 캐리어를 감지하고 있다 동시에 데이터를 송신하면? 

4. Collision Detect! 가 발생하면 각자 일정 시간을 다시 대기한다 ( 랜덤 시간 )
5. 다시 시작된다..! 


이 CSMA/CD도 여러가지 방식이 있는데... 그렇게 까지 알아야 할까 ㅎㅎ??

 

STAR 구조 (성형, 요즘) : 중앙 집중형 구조라고 할 수 있다. 위에서 언급한 BUS형의 경우, 한 노드가 전송할 데이터가 너무 많을 경우 네트워크 효율이 좋지 않을 거다..!! 그걸 해결하기 위해 STAR 구조를 사용한다. 

 

이때, STAR 구조의 가운데 있는 것이 스위치(중앙장치)이다. 이 친구는 여러 네트워크의 Data Link 계층을 서로 연결해 준다. 각자 집에서 PC 기기들을 LAN 선에 연결해주는 스위치..! 와 같은 거다!!! Tree 형식으로 연결되어 있는 거다! 

 

저 위에 사진을 보면 알겠지만, 성형은 bus형과 다르게 동시에 데이터를 전송할 수 있다. 새 노드를 추가하기에도 좋다고 한다 

 

참고로 요즘은 송수신 데이터 통로를 따로 두는 전이중화 통신 형태를 사용하고 있어, CSMA/CD도 잘 쓰지 않는다고 한다.

 

그저 과거의 유물이라 생각할 수 있지만, 결국 발전 역사를 알아야 이해하기가 쉬운 것 같다


데이터 링크 계층의 오류제어, 흐름 제어

이더넷이 어떻게 연결되고, 작동되는 지는 위에서 알아봤다. 그럼 이 과정에서 데이터의 오류 제어, 흐름 제어는 어떻게 하는 건지 이제 알아보겠다 ! 

 

이를 알기 위해서는 데이터 링크 계층의 프로토콜을 알아야 하는데, 그 전에 프레임부터 잠깐 보고 가자! 

 

데이터 링크 계층의 프레임 

1)  정보 프레임 ( i-frame) : 상위 계층에서 전송한 데이터, 순서 번호, 송수신 호스트 정보 등을 포함

2)  긍정 응답 프레임 (ACK) : 수신 호스트가 송신 호스트에게 잘 받았음을 회신하는 프레임

3)  부정 응답 프레임 (NAK) : 수신 호스트가 송신 호스트에게 데이터에 오류가 있었음을 알려줌 

=> 모든 프레임은 "순서 번호"를 포함

 

프레임을 먼저 보고 간 이유는 프로토콜에서 이 프레임들을 사용하기 때문이다. 

 

그럼, 오류와 흐름제어가 필요한 원인과 상황을 가정하고 들어가겠다. 

기존에 프로토콜은 혼잡제어, 오류제어가 없다고 가정한다. 또, 단방향 전송이라 가정한다.

그러면 오직 송신 호스트가 보내는 i-frame만이 존재할 것이다.

여기서 현실은 수신 버퍼가 유한하기 때문에 문제가 발생하고, 흐름 제어를 해야한다. 


오류 제어 

1) 프레임 전송이 단방향 (송신 -> 수신) 으로 일어난다. 

2) 수신 버퍼가 유한하기 때문에 프레임 분실이 일어날 가능성이 있다. 

 

프레임 분실을 해결해야한다. 그럼 어떻게 ?

ACK 프레임을 사용한다 + 순서 번호

 

만약 수신에서 응답이 없다면, 프레임 분실이 일어났는지 알 수 없다. 순서 번호가 없다면 어떤 프레임이 분실되었는지 알 수 없을 것이다. 

 

여기서 가장 기본적인 정지-대기(stop-wait) protocol을 사용하자. 

정지 대기 프로토콜

 

이제, 수신기가 응답 회신을 보내면서 Frame이 잘 도착했는지 알 수 있다. 여기서 상황을 더 추가해 보자. 

1) 프레임 전송이 단방향 (송신 -> 수신) 으로 일어난다. 

2) 수신 버퍼가 유한하기 때문에 프레임 분실이 일어날 가능성이 있다. 

3) 전송 도중에 데이터 변형이 발생할 수 있다.

 

정보 변형이 일어났지만, 수신 호스트는 순서번호에 맞는 프레임을 받았고 긍정 응답밖에 할 수 없기 때문에 문제가 발생한다. =>  타임 아웃 + NAK 을 줘보자.

 

 

Time Out : 프레임 분실이 되면, 수신 호스트가 응답을 보내지 않을 거고 송신 호스트는 일정 시간 내 응답이 없으면 재전송 한다. 

NAK : 수신된 데이터가 변형되어 있으면 (Check Sum같은 방식으로 확인) 송신 호스트에게 부정 응답을 보낸다. 

 

Time Out과 ACK, NAK, 순서번호를 사용해서 오류 제어 ( 프레임 분실, 변형 )을 해결했다. 


혼잡 제어

하지만 여전히 수신 버퍼에는 한계가 있다. 

정지-대기 프로토콜 처럼 프레임을 하나하나 전송하고 응답을 받으면 전송 시간에 대해 효율이 극단적으로 떨어진다

 

그럼, 프레임을 연속적으로 보내고 문제가 발생한 프레임만 수신 호스트가 응답한다면..? 

수신 버퍼가 유한하기 때문에 프레임 분실이 엄청나게 발생할거다. 

=> 이걸 해결하기 위해 혼잡 제어를 한다.

 

슬라이딩 윈도우 

혼잡 제어로 슬라이딩 윈도우를 사용한다. 

 

윈도우? 긍정 응답 프레임(ACK)을 받지 않고도 연속으로 전송할 수 있는 프레임의 최대 개수 

 

 

 

송신 호스트와 수신 호스트는 각각 정해진 윈도우 크기를 가진다. 

 

송신 호스트는 정해진 윈도우 크기만큼의 프레임을 보내고, 다음으로 전송하기 위해 대기시킬 수 있다. 

윈도우 크기가 3이고 1,2,3,4,5,6 윈도우 크기를 갖고 있다고 생각해보자. 

1) 송신 호스트가 프레임 1을 보낸다. 
2) 수신 호스트가 프레임 1을 받고, 2를 달라고 응답한다. ( 다음 순서번호를 회신하는 것이 일반적이다. )
3) 송신 호스트는 프레임 2를 보내고, 송신 윈도우에 ACK 회신이 없는 프레임을 보관한다. 
    (응답이 회신 되지 않은 프레임 2를 대기, 3,4는 보낼 수 있는 상태)
4) 수신 윈도우는 프로토콜에 따라 크기가 다르다 
   4-1 ) 선택적 재전송
   4-2 ) Go-back N 방식

 

 

혼잡 제어를 위해 슬라이딩 윈도우를 사용했다. 

 


이제, 정지-대기를 던지고 연속형 전송(Pipelining)으로 전송 속도를 높여보자 ! 

 

1) 선택적 재전송 

2) Go-back N 방식

 

선택형 재전송

이 방식은 수신 호스트가 모든 프레임에 대해 응답을 하는 것은 아니다. 단지, 오류가 발생한 프레임만 선택적으로 복구하는 방식이다. 즉, NAK을 사용해서 오류가 발생한 프레임을 처리한다.

만약, 송신 호스트가 11,12,13번 프레임을 전송한 상태라고 하자. 
근데, 전송 도중 11번 프레임에서 오류가 발생했다.
수신 호스트는 11번 프레임의 오류를 읽고, NAK(11)을 보낸다. 그리고 12,13번 프레임은 오류가 없기 때문에 수신측에서 보관해 둔다. 
송신 호스트는 11번 프레임만 재전송한다.

 

 

Go-back N 방식

이 방식은 수신 호스트가 오류가 발생한 프레임 후에 보내진 모든 프레임을 폐기한다. 

 

다시, 11 12 13번 프레임을 전송한 상태고 11번 프레임에서 오류가 발생했다면
수신 호스트가 받은 12, 13번 프레임까지 폐기하고 
송신 호스트는 11번부터 13번까지 다시 전송한다.

 

=> Go-back N은 윈도우 크기가 실질적으로 1일것이고, 선택적 재전송은 저장을 해야하기 때문에 좀 크겠지....


피기 배킹(Piggy Backiing)

피기 배킹은 양방향 전송인 경우 사용할 수 있는 방식이다.

이 방식은 송신 호스트가 다음 프레임을 전송할 때, 수신 호스트가 전 프레임에 대한 응답을 동시에 보낸다.

 

피기배킹을 사용하는 경우 발생할 수 있는 문제

다음으로 전송할 프레임이 없다면, 수신 프레임이 오지 않는다.

  -> 응답 프레임만 전송 

  -> 응답을 잠시 늦추고 피기배킹 사용

 

 

 


해당 포스팅은 아래 강의를 기반으로 작성된 글입니다.

 

컴퓨터 네트워크

데이터 통신의 근간이 되는 OSI 참조모델과, 각 계층의 프로토콜과 기능들에 대해 학습한다.

www.kocw.net

 

수정 사항이나 궁금한 점은 댓글 달아주세요!