Data Link Control(DLC)는 2개의 다른 네트워크 장치간의 데이터 전송을 담당한다. 특히, 이 layer에서 전송되는 데이터를 Frame이라 부른다. DLC layer가 주로 하는 일은 framing, flow-control(흐름제어:sender가 reciever의 상황을 고려하여 데이터 전송), error-control(에러 검출 및 복구)가 있다.
Network Layer가 보내느 Data에 DLC가 넣은 정보를 넣은 것을 Framing이라 한다. DLC layer는 비트들을 프레임들로 묶고, 각 프레임들을 구별할 수 있게 해준다. 마치 우편에서 편지봉투가 서로를 구분시켜 주듯이 말이다. Data-link 계층에서 Framing은 메시지에다가 sender address(수신자가 ack를 할 수 있도록), destination address(packet의 목적지 설정)를 추가시켜 서로를 분리시킨다.
위의 그림은 frame을 나타낸 것입니다. 원래 Physical layer는 계속 무엇인가를 주고 받는데(무의미한 정보 포함한 training), Flag는 Physical layer에게 정보가 DLC로부터의 메시지라는 것을 알려주는 역할을 한다. 앞의 Flag는 DCL message가 시작하고, 마지막 Flag는 message 종료를 알려준다.
위의 그림은 Byte(8bit) stuffing과 unstuffing의 예시를 보여준다. 만약, 사용자가 보낸 데이터가 Flag와 같을 때 생기는 혼선의 문제를 막기 위해, 위의 그림처럼 주황색의 ESC를 Stuffing을 하여, 뒤의 데이터가 Flag가 아닌 User data임을 알려준다. 이후 Frame을 수신하면, 다시 주황색의 ESC를 unstuffing하여 원래의 정보를 복원한다.
위의 그림은 Bit(0,1) stuffing과 unstuffing을 나타낸다. 위의 그림처럼 1이 연속되어 5번 나오면 무조건 0을 넣는 stuffing과, reciever에서는 반대로 1이 5개 나오면 0을 하나 제거하는 unstuffing 등이 있다.
데이터 링크 계층의 가장 중요한 역할로는 흐름 제어(flow control)와 에러 조정(error control)이 있다.
DLC protocol은 connectionless(비연결 지향, 사전/사후 작업 필요x), connection-oriented(연결 지향, 사전/사후 작업 필요O)이 있다. 둘 다 데이터를 주고 받는다는 공통점이 있고, 차이점으로는 비연결 지향은 프레임 간의 연결(상관)이 없다는 것과 달리 연결 지향은 프레임이 순서대로 번호가 매겨져서 논리적 연결이 있다는 것을 의미한다. 주로 connection-oriented에서 흐름제어나 error-control이 많이 이뤄진다.
이 프로토콜은 흐름 제어나 오류 제어가 없는 것을 가정한다. 여기서는 수신자가 수신한 프레임을 즉시 처리하는 것을 가정한다. 즉, 수신자에서는 수신 프레임들이 넘치지 않는다는 것이다.. FSM(Finite State Machine, 상태천이도)에서 simple protocol을 아래 그림과 같이 나타낼 수 있다.
위 그림은 MSG(Message Sequence Chart)를 나타낸 것이다. 네트워크 계층에서 패킷이 생성되어 Data-Link에서 프레임 단위로 송신한 이후, 수신하여 다시 Packet으로 네트워크 계층에 전달하는 과정을 보여준다.
이 프로토콜은 흐름 제어와 오류 제어 모두 사용한다. Sender는 한번에 1개의 프레임을 보내고 다음 프레임을 보내기 전까지 acknowledgment(확인) 메시지를 기다린다. 만약 수신자로부터 확인 메시지가 오지 않은 경우 재전송한다. Corrupted(손상)된 프레임을 탐지하기 위해서, 각 데이터 프레임에 CRC를 더해준다. CRC에서 0과 1이 변조된 경우 에러가 발생한 것으로 판단하고, 손상된 프레임은 버려버린다.
위의 그림을 통해 자세히 살펴보면, 송신자에서 먼저 프레임에 CRC(일종의 코드값이 붙임)를 붙여서 전송된다. 이 때, 수신자에서도 수신된 프레임을 이용하여 CRC값을 계산하여 송신자의 CRC와 비교한다. 만약, CRC가 서로 다른 경우, 에러가 발생한 것으로 판단하여, 프레임을 버려버리며, ACK 메시지를 발생하지 않는다. 반면, CRC가 같은 경우, 정상 수신으로 판단하여, ACK 메시지(CRC를 붙인)를 보내고, 송신자는 ACK에서 받은 CRC과 자신의 것을 비교하여, 정상적으로 수신이 완료된 것을 판단할 수 있다. 만약 ACK를 수신하지 못한 송신자는 비정상으로 판단하여 재전송한다.
이 프로토콜에서 Stop은 sending 노드가 프레임을 전송한 후, 추가 프레임을 전송하는 것을 멈춘다는 것이다. Wait은 수신자로부터 ACK 메시지를 기다린다는 것이다.
위 그림은 FSM(상태 천이도)를 나타낸 것이다.
위 그림은 flow diagram을 나타낸 것이다.
piggybacking
communication을 효율적으로 하기 위해, 만약 다른 기기에 보낼 데이터와 ACK 메시지가 있으면, 따로 보내지 않고 같이 보내는 방법이다. 이렇게 하면 메시지 양을 줄일 수 있다.
Go-Back-N 프로토콜에서는 sender는 확인 응답(ACK)을 기다리지 않고, 여러 프레임을 보낼 수 있다. 이 때 보낼수 있는 window size는 (2^^m - 1)
이다. m은 sequence number의 bit가 m bit일 때 m값을 나타낸다.
위의 그림처럼 m=3일 때, window size 는 7이며, ACK 메시지를 받은 0,1은 sliding 되어 아래처럼 window가 이동하게 된다.
위의 그림은 1을 빼야하는 이유를 설명하는 그림이다. 만약 b의 경우처럼 모든 ACK 메시지가 중간에 소실되는 경우, 처음에 보낸 Frame0과 마지막에 보낸 Frame0를 같은 Time안에 수신하게 된다. ACK가 안 왔으면 다시 Frame을 송신하는데, 처음 보낸 Frame0와 다른 새로운 Frame0를 b의 경우에서는 송신하기 때문에, 적어도 1개를 빼줘야 제대로 재전송이 일어날 수 있기 때문이다! 즉 -1을 하지 않으면 기존과 새로운 Frame0이 모두 한 타임안에 전송되고, 겹쳐서 혼선이 일어나게 되므로, 중간의 모든 ACK가 유실되는 상황에서 문제가 발생한다
.
위의 그림은 GBN의 flow diagram을 나타낸 것이다. 만약 위의 경우처럼 ACK2가 중간에 소실되어도, ACK3,4에 의해서 Support 받아서 정상적으로 작동하는 것을 볼 수 있다.
위의 경우처럼 중간에 Frame1이 소실되는 경우, Frame2,3을 정상적으로 수신해도 Receiver는 action을 취하지 않으며, Sender는 한 타임이 끝날때까지 ACK를 받지 못하므로, ACK를 받지 못한것부터 재전송하게 된다.
GBN의 단점으로 방금처럼, 하나의 패킷에 오류가 생긴 경우, 많은 패킷들을 불필요하게 다시 재전송해야 한다는 단점이 있다.
Go-Back-N의 단점을 보완하기 위해 Selective Repeat ARQ(선택적 방법)의 경우는 오류가 난 수신 캐시만을 다시 전송한다. 만약 중간에 프레임이 소실되면, receiver는 NAK를 보내어 에러가 난 프레임을 재송신하게 한다. 실제로는 Go-Back-N ARQ 방법을 많이 사용한다고 한다.
GBN과 이 방식의 차이로는 가장 크게, window size를 말할 수 있을 것이다. GBN의 경우는 (2^m - 1)이지만, Selective는 (2^(m-1))의 크기를 갖는다. 이 이유로는, GBN과 달리 buffer management를 할 것이 많기 때문이다. 즉, 데이터가 손상되어 오는 경우에 GBN은 그 데이터를 버리지만, Selective Repeat은 window 내 원소들을 저장하기 때문에, 저장 공간에 대한 필요가 생긴다. 위의 그림처럼 빨간색으로 색칠된 경우는 정상적으로 수신되어 저장된 것을, 하얀색은 error가 난 것을 나타낸다.
GBN과의 차이점
만약 window의 사이즈가 크다면, 이 프레임이 재전송으로 온 중복인지 새로운 데이터인지 파악하기 힘들어, 확보된 공간에 저장하게 된다. 반면에 a처럼 사이즈가 절반이면, Receiver 입장에서 2를 받아야 하는데 0을 받았고, 저장할 공간 역시 없기 때문에 버리게 된다. 따라서 사이즈를 절반으로 해야한다.
위의 그림처럼 Frame1이 중간에 소실된 경우, Receiver는 Frame1을 받지 못했다는 NAK1을 Sender에게 보내게 되고, Sender는 NAK1을 수신하면 다시 Frame1을 재전송하게 된다.
High Level Data Link Control(HDLC)는 Point-to-Point, Broadcast 링크에 대한 비트 지향 프로토콜들이다. 앞에서 다룬 Stop-and-Wait protocol을 사용하며, PPP, Ethernet, wireless LANs에 자주 사용되는 개념이다. Practical한 개념이다.
위와 같이 3가지의 frame format을 가지고 있다. I-frame은 데이터를 주고 받는데 주로 사용되며, CRC와 대응되는 FCS(Frame Check Sequence)가 있다. User info가 없는 것이 S-frame, User info가 아닌 통신 링크를 유지하는 사람의 입장에서 필요한 정보를 실어나르는 것이 U-frame이다. U-frame에는 trailer가 존재하지 않는다.
정보(I) 프레임(Information Frame) : Control이 '0'으로 시작하는 프레임. 사용자 데이터를 전달하거나 Piggybacking 기법을 통해 데이터에 대한 확인 응답을 보낼 때 사용
감독(S) 프레임(Supervisior Frame) : Control이 '10 '으로 시작하는 프레임. 오류 제어와 흐름 제어를 위해 사용
비번호(U) 프레임(Unnumbered Frame) : Control이 '11'으로 시작하는 프레임. 링크의 동작 모드 설정과 관리, 오류 회복을 수행
1) 상위 계층인 Ip protocol등이 잘 돌아가게 해주는 역할과, 2) 통신하고자 하는 사람들의 인증하는 역할을 한다.
구성요소
1) LCP(Link Control Protocol)
- PPP를 개설, 유지, 종료, 시험을 담당하는 프로토콜이다
- 최대 프레임 길이와 인증 프로토콜의 종류(PAP, CHAP)을 결정한다
2) NCP(Network Control Protocol)- 서로 다른 네트워크 계층 프로토콜을 사용할 수 있게 하고, 세부적인 제어가 가능
3) Encapsulation- 네트워크 계층에서 온 패킷을 캡슐화한다.
option을 주고 받으며 Authenticate(적합성 판단)를 한다. 인증이 성공되면 configuration이후 데이터 전송 상태가 되며, 실패하면 제거된다.
PPP 인증 Protocol
1) PAP
- 문자 ID와 암호를 이용하여 인증하는 단순한 구조의 프로토콜
- 인증 요청과 인증 response 2단계로 이뤄진다.
- 암호 누출 시 취약하다는 단점 -> CHAP이 보완
2) CHAP- 기존 PAP 방식의 보안 취약점을 개선한 인증 프로토콜이다.
- Challenge, Response, authentification 3단계로 구성
- Challenge : 인증 서버가 클라이언트에게 random한 Challenge 메시지를 보내 정답을 요구
- Response : Challenge에 대해 자신의 암호 등을 이용해 해쉬 함수를 사용하여 결과인 해쉬를 보낸다.
- Authentification: 받은 정답이 올바른지 따라 인증 승인 or 거부