데이터 링크 계층은 신뢰성있는 데이터 전송을 보장한다. 신뢰성이란 프레임 분실/변형등의 오류를 검출하고 복구하는 것을 말하며 이를 재전송 기법을 통해서 해결한다.
위 방법으로 논리적인 전송선로를 네트워크 계층에게 제공한다.
재전송 기법을 하기 위해서 일단 오류가 발생한 것을 감지해야 가능하다.
이를 위해서 데이터 전송원리 즉, 데이터를 선로를 통해 보내는 방법인 프로토콜에 대해서 알아보아야 한다.
데이터링크계층
데이터 링크 계층에서는 호스트 끼리 1:1 연결돼있는 상태를 전제한다. 사실 연결의 의미는 자세히 말하면 전송의 의미와 비슷하다.
두 호스트가 점대점 방식으로 연결되있는 방식이 있고, 멀티드롭 방식으로 하나의 전송매체를 공유해 여러 호스트가 달려있는 경우도 있다.
후자의 경우 전송시에는 하나의 호스트에만 데이터를 보내기 때문에 브로드캐스팅이 아니라 일대일 연결상태이다.
또한 여러 호스트가 있기 때문에 수신 호스트의 주소 개념이 필요하다.
어쨌든 호스트끼리 연결돼있으면 데이터를 전송해야 하는데 전송하는 방법을 프로토콜이라 정의하고 우리는 이를 프레임을 통해 데이터를 실어 보낸다.
프로토콜에 사용되는 프레임의 종류는 3가지가 있다.
- 정보 프레임 : 데이터 송신용 프레임 ( 데이터 + 순서번호 + 주소 )
- 긍정응답 프레임(ACK) : 데이터 수신이 올바르게 됐음을 알리는 프레임( 다음에 받고자 하는 순서번호 )
- 부정응답 프레임(NAK) : 정보 프레임이 변형됐음을 알리는 프레임( 다음에 받고자 하는 순서번호 )
프로토콜 구성 방식(단방향)
1. 오류제어x 흐름제어x : 단방향, 전송선로의 신뢰도 100%, 수신윈도우의 크기 무한대
송신 호스트가 정보 프레임만 계속 보내면 아무 문제가 생기지 않음.
가장 기초적인 프로토콜
2. 오류제어x : 단방향, 전송선로의 신뢰도 100%, 수신윈도우의 크기 유한대
수신 윈도우의 크기가 유한하기 때문에 흐름제어가 필요하다.
수신 호스트가 송신 호스트에게 전송 신호(전송해도 좋다 = ACK프레임!)를 보냄.
하나 받고 하나 보내고를 반복하는 프로토콜을 정지-대기 프로토콜이라고 함.
3. 단방향 프로토콜 : 전송선로의 신뢰도가 불량하고 수신 윈도우의 크기가 유한하다.
따라서 프레임변형/분실이 발생할 수 있다.
- 정보 프레임 분실 : 수신 호스트는 이 사실을 모른다. -> 송신호스트의 timeout기능으로 해결
- ACK프레임 분실 : 송신 호스트는 이 사실을 모른다 -> 송신호스트의 timeout기능으로 해결
또한 NAK 프레임은 지원하지 않는 시스템도 존재한다.
NAK 프레임이 없는 경우는 데이터 변형에 대응할 방법이 없기 때문에 송신 호스트의 timeout기능으로 해결한다.
NAK 프레임이 있는 경우 변형 프레임에 응답하는데 두가지 방식이 있다.
- 변형 프레임 무시 : NAK 프레임이 없는 경우와 동일하게 송신 호스트의 timeout기능으로 해결
- NAK로 응답 : 송신호스트가 변형을 인지후 재전송
프로토콜 구성 방식(양방향)
1. 슬라이딩 윈도우 프로토콜
두 호스트 사이에 데이터 전송을 위한 일반적인 프로토콜로서 오류제어와 흐름제어의 기능을 동시에 시행한다.
송신 호스트 프레임 ( 호스트 주소, 순서번호, 오류검출--- )
-> 순서번호를 기준으로 순차적으로 프레임 전송
수신 호스트 프레임[ACK 프레임]( 호스트 주소, 다음에 수신받길 기대하는 순서번호 )
-> 기대하는 순서번호 이전까지는 제대로 전송됐다는 의미
순서번호는 프레임의 고유번호이므로 이를 기준으로 순차적으로 전송하고 회신한다.
이때 송신호스트는 ACK프레임을 받지 않고도 여러개의 정보프레임을 전송할 수 있는데 이를 가능하게 해주는 것이
송신 윈도우(buffer) 이다.
송신 윈도우에는 ACK프레임을 받기위해 대기하는 프레임들이 모여있다. 이 프레임들은 전송된 상태이고 송신 윈도우의 크기만큼 한 번에 보낼 수 있다.
이에 따라 수신호스트에도 수신 윈도우가 존재한다. 개념적으로 수신받기 기대하는 프레임의 순서번호가 들어가 있다.
네트워크에서 흐름제어는 수신윈도우와 송신윈도우의 크기를 조정해 전송 프레임 수를 조정하는 것으로 시작된다.
윈도우의 크기는 송신 호스트가 ACK프레임을 수신받지 않고 한 번에 전송할 수 있는 프레임 수와 같기 때문이다.
기본적으로 순서번호는 고유번호의 특성을 지키기 위해 윈도우의 크기보다 더 큰 최대값을 가진다.
이러한 연속된 프레임의 전송을 연속형전송(pipelining)이라고 하고 오류발생가능성이 낮을시에 효율적이다.
하지만... 오류가 발생한다면 이에 대한 해결책으로 Go-Back-N 방식과 선택적 재전송 방식으로 해결한다.
Go-Back-N
오류발생 프레임의 순서번호를 포함한 이후의 프레임을 모두 버리고 재전송 요청한다.
정상 수신된 프레임도 버린다는 점에서 문제점이 있지만 전송선로의 상태에 따라 효율적일 수도 있다.
재전송 요청은 NAK의 존재유무에 따라 달라진다.
- NAK 사용시
오류가 변형인 경우 : NAK 프레임 사용
오류가 분실인 경우 : k-2, k-1, k+1, k+2의 순서번호를 수신받았다고 하면 k 순서번호의 프레임이 분실된 것이므로 NAK프레임에 k를 실어서 송신 호스트에게 전송한다.
- NAK 없을시
송신 호스트의 timeout기능으로 재전송
선택적 재전송
오류발생 프레임만 재전송 요청한다.
- NAK사용시 : NAK(k) 사용
- NAK없을시 : 수신받는 모든 프레임에 ACK 전송이 필요
GO-BACK-N VS 선택적 재전송
Go-Back-N의 경우 임의의 앞선 순서번호를 갖는 정보프레임이 처리될 때 까지 대기하고 나머지는 버리기 때문에 수신 윈도우의 크기는 1이다.
선택적 재전송의 경우 수신한 모든 프레임을 저장하기 때문에 송신윈도우의 크기와 수신윈도우의 크기가 같다.
2. 피기배킹
송수신호스트가 양방향으로 동시에 정보프레임과 응답프레임을 전송할 수 있음. 이를 위해 프레임 구조를 확장해야 하며 전송데이터 + 순서번호 + 정상 수신한 순서번호를 프레임에 실어서 상대 호스트에게 보내주어야 한다.
이를 통해 네트워크에 전송되는 프레임의 수가 현저히 줄어들어서 효율적으로 데이터를 송수신할 수 있다.
하지만 항상 보낼 프레임과 응답할 프레임이 존재하는 것이 아니기 때문에 일부러 데이터 전송까지 응답 프레임을 회신하지 않고 기다리다가 피기배킹방식으로 보낼 수도 있는데 이는 상황에 따라서 호스트가 결정할 문제이다.
2021-11-24
'Computer Science > Computer Network' 카테고리의 다른 글
네트워크 계층 (0) | 2021.11.30 |
---|---|
IP 프로토콜 (0) | 2021.11.26 |
MAC 계층 (0) | 2021.11.18 |
데이터 전송의 기초 (0) | 2021.11.17 |
네트워크 기술 (0) | 2021.11.12 |