[데이터 통신과 네트워킹] Data Link Control (DLC)
DLC services
Data Link Control (DLC)
- 링크가 dedicated이거나 broadcast이거나 상관없이 두 인접한 노드 사이의 통신을 위한 절차를 다룬다.
- dedicated : point-to-point
- framing과 flow & eroor control을 포함한다.
Framing
- 프레임을 만드는 것
- 송신자와 수신자의 주소를 추가하여 구별한다.
Ethernet Frame

- 이더넷에서는 Manchester 방식의 인코딩을 사용한다.
구성
- Preamble : 56비트의 1과 0의 반복, 8bytes
- SFD : 8비트의 프레임 구분자, 10101011, 1bytes
- Destination address : 목적지 MAC 주소, 6bytes
- Source addrress : 송신측 MAC 주소, 6bytes
- Type / Length : 종류 또는 길이, 2bytes
- Data and padding : 최소 길이 46bytes, 최대 1500bytes
- CRC : 오류 체크를 위함, 4bytes
최소 프레임 길이 : 64bytes
최대 프레임 길이 : 1518bytes
CRC
Cyclic Redundancy Check
- 오류 체크 코드
- 송신자가 붙인다.
- 수신측에서 검사해서, 데이터가 오류가 발생했다. → Frame을 버림

HDLC Frame
- 이전에 이더넷과 다른 네트워크에서 사용함
- High-Level Data Link Conntrol은 bit-oriented data link layer protocol이다.
- Frame의 시작과 끝을 flag로 알린다. 01111110

- FCS(Frame check sequence) : 프레임의 오류를 체크하기 위함
Bit Stuffing of HDLC
- 5개의 1 bit가 나오면 0을 추가시킨다.
- 데이터인데 flag 비트가 들어가 있으면 frame이 끝난 것으로 간주해버리므로 0을 하나 끼워넣는 것임
Error control
- 송신측에서 CRC를 추가 시킴
- 만약 수신 받은 프레임이 문제가 있으면, 버림
- 만약 수신 받은 프레임이 문제가 없으면, 송신측에 ack(acknowledge)를 보냄
Flow contorl
- ACK를 받기 전에 송신자가 보내는 frame 수를 조절한다.
- 송신측과 수신측 사이의 frame 갯수를 조절하는 것
CRC 동작 원리
송신측 CRC encoder

- 원래 데이터에 divisor를 나눔
- divisor : 송신자와 수신자가 약속한 나누는 수
- (divisor 개수 - 1)의 0을 더 추가해서 나눔
- Multiply : AND 연산
- Subtractor : XOR 연산
- 나머지를 CRC에 추가시켜 보냄
수신측 CRC deocrder

- 수신된 데이터를 divisor로 나눔
- 나누었을 때 0이면 에러 없음
- 나누었을 때 0이 아니면 에러 → 받은 것을 폐기
Data Link Layer protocol
- 일반적인 flow and error control에는 4가지 방법이 있다.
- Simple protocol
- Stop-and-Wait Protocol
- GO-Back-N protocol using slide window
- Selective-Repeat protocol using sliding window
- 1번과 2번은 요즘도 사용하지만, 3번과 4번은 data link layer에서 사용하지 않는다.
Simple Protocol
- data link layer에서 frame을 보내는 것으로 끝이다.
- flow control과 error control을 하지 않음
- 잘 받았는지 확인하지 않음
- 수신측이 수신하는 모든 프레임을 즉시 처리할 수 있다고 가정한다.

Stop & Wait Protocol
- flow control과 error control 다함
- frame을 먼저 보내고 다음 frame을 보내기 전에 수신자가 잘받았는지 ACK를 기다림
- 보내고 난 뒤에 잘 받았는지 확인하고 다음 것을 보냄
- 중지하고 기다림
- 수신측에서는 CRC를 가지고 에러를 체크한다.
- CRC가 에러가 났으면 frame을 폐기한다.
- 기다려도 ACK가 오지 않으면 frame이 잘못간 것임
- 수신자가 frame을 보낼때마다 Timer를 시작한다. (Timer가 필요)
- Timer가 만료되기 전에 ACK가 도착하면, 송신자는 다음 frame을 보낸다.
- Timer가 만료되면, 송신자는 이전 frame을 다시보낸다.
- 이를 위해 송신자는 ACK가 오기 전까지 frame을 복사해 놓아야 한다.

- 한 방향으로 frame을 보내면 다른 방향으로 ACK를 보낸다.

송신측
- Ready → Blocking
- Packet came from network layer
- frame을 만든다.
- frame을 복사시켜 저장한다.
- frame을 보낸다.
- Timer를 동작시킨다.
- Blocking : stop & wait 상태
- Time-out
- 복사한 frame을 다시 보낸다.
- Timer를 다시 동작시킨다.
- Corrupted ACK arrived
- Blocking → Ready
- Error-free ACK arrived
- timer를 종료시킨다.
- 복사한 frame을 폐기한다.
수신측
- Ready : 받을 준비함
- Corrupted frame arrived
- Error-free frame arrvied
- network layer로 올려보낸다.
- ACK를 보낸다.
Stop & Wait Protocol 예시

중복되는 frame 문제
→ 0과 1만 사용해서 해결
해결책

- ACK에 다음 받을 번호를 표시해서 보냄
- 다음에 받은 패킷의 번호가 다르면 폐기한다.
Piggybacking
- Data를 한 방향으로 보내면, ACK가 다른 방향에서 온다.
- 통신을 더 효율적으로 하기 위해서 다른 방향에 데이터를 보낼때 ACK를 데이터 뒤에 끼워보낸다.