Data Link Control(DLC)
계층에서 데이터를 어떻게 다루는지에 대해 알아보자.
Data link control은 크게 세 가지로 나눌 수 있는데,
1. Framing
2. Flow control
3. Error Control
이 있다.
Framing
Data link 계층은 상위 계층인 Network 계층에서 데이터를 받아 주소를 붙이고 Physical 계층을 통해 목적지로 보낸다.
이때 "주소를 붙이고"와 관련된 일들을 Framing 이라고 한다.
목적지 주소는 결국 패킷이 어디로 가야하는지에 대한 정의를 해주고
보내는 주소는 수신인이 수신을 확인할 수 있도록 도와준다.
Data link 계층에서 다루는 객체의 이름이 frame이다.
따라서 상위 계층인 Network 계층으로부터 datagram을 받아서 frame으로 만들기 때문에 framing이라고 한다.
Character-oriented protocol
바이트로 이루어져있음.
Flag : Frame의 시작 또는 마지막을 의미
Header : 출발지와 목적지에 대한 주소 등, data와 관련된 정보들이 들어있다.
Data : 상위 계층인 Network 계층에서 받은 data, 가변적인 길이를 가진다.
Trailer : Error 검출을 위해 포함된다. (CRC, Checksum 등)
만약 data를 이루는 byte들 중에 Flag와 값이 같은 데이터가 들어 있다면 frame이 이상한 위치에서 끝날 수 있다.
Byte Stuffing and Unstuffing
그래서 나온것이 Byte Stuffing이다.
먼저 Escape Character(ESC)라는 특별한 값을 정의한다.
그래서 Flag나 ESC와 같은 값을 갖는 부분 앞에 ESC를 추가해준다. -> Byte Stuffing
그리고 나중에 Frame을 받아서 data를 볼때, ESC가 보이면 제거하고 ESC 다음값은 데이터로 받아들인다. -> Unstuffing
Flow control
1.
가장 이상적인 상황이다.
주는대로 받아서 처리한다.
아무 문제가 없어 평화롭다.
2.
받아서 처리하는 속도가 보내지는 속도보다 빠르다면 어떨까?
잘 처리해서 좀 당황스럽긴 하지만, 별로 문제가 되지는 않는다.
시스템이 조금 비효율적으로 변하는 거 말고는 큰 문제는 없다.
3.
보내는 속도가 받아서 처리하는 속도보다 빠르면 어떻게 될까?
보내지는 데이터를 어디다가 저장해놓지 않는 이상, 분명 유실되는 데이터가 존재한다.
위 사진에서 보이는 Flow control은 적당히 보내라는 말을 하는 부분이다.
보내는 속도가 받아서 처리하는 속도보다 빨라 데이터를 어디다가 저장해놓지 않는 이상, 유실되는 데이터가 존재하기 때문이다.
버퍼(Buffer)
flow control의 가장 기본적인 방법
- buffer 는 비어있거나 가득차있는 두가지 상태가 존재
- buffer 가 empty 상태일때는 절대 data 손실이 일어나지 않음.
=> 즉 receive 측의 buffer 가 empty 상태일때만 data 를 보냄.
이 Flow control을 어떤 식으로 할지 에 대해서는 네 가지의 protocol이 있다.
1. Simple Protocol
2. Stop and Wait Protocol
3. Go-Back-N Protocol
4. Selective-Repeat Protocol
Simple Protocol
S == R인 상황을 가정하고 만들어졌다.
즉, receiver는 받은 프레임을 바로 처리한다.
Stop and Wait Protocol
보내는 걸 멈추고 기다리는 식으로 작동한다.
1. Frame을 전송하고, 동시에 Timer를 정해진 시간만큼 동작시킨다.
이때 전송된 frame을 잠시 저장한다.
ACK가 올때까지 기다린다.
2-1. 시간이 다 가기전에 받는쪽으로부터 ACK가 도착한 경우
저장된 frame을 버린다.
Timer를 멈추고, 1번을 수행한다.
2-2. 시간이 다 갈때까지 받는쪽으로부터 ACK가 도착하지 않은 경우
저장된 frame에 대해 1번을 수행한다.
이때 ACK란 frame을 잘 받았다는 응답이다.
이때 ACK에 CRC라는 error 검출용 코드가 붙어있는데, 이를 확인해서 문제가 생긴 ACK라면 폐기한다.
받는 쪽은 다음과 같이 동작한다.
1. Frame이 잘 도착한 경우
ACK를 전송한다.
frame의 CRC를 확인해서 오류가 있는 frame이라면 폐기한다.
위 flow diagram으로부터 세 가지 상황이 발생할 수 있다.
1. 정상적으로 처리된 경우
Frame이 잘 도착하고, ACK가 잘 전송됐다.
2. 보내진 frame에 문제가 생겼거나, 잃어버린 경우
받는 쪽에서는 아무것도 하지 않기 때문에 timer가 다 끝날때까지 아무일도 일어나지 않는다.
Timer가 정해진 시간만큼 다 돌았다면, 다시 frame이 보내진다.
3. 보내진 ACK에 문제가 생겼거나, 잃어버린 경우
보내는 쪽은 ACK가 오지 않았으므로(혹은 왔는데, 문제가 생겨서 폐기했으므로) 아무것도 하지 않기 때문에 timer가 다 끝날때까지 아무일도 일어나지 않는다.
Timer가 정해진 시간만큼 다 돌았다면, 다시 frame이 보내진다.
이 경우 문제가 있는데, 받는 쪽은 이미 잘 처리한 frame을 다시 받아야하는 문제가 생긴다.
따라서 주고받는 frame이나 ACK에 숫자를 붙이게 되는데, 다른 protocol에서 보자.
Stop-and-Wait Protocol은 낭비되는 시간이 너무 많다.
timer가 동작하는 시간을 줄이자니, ACK가 늦게오는 경우가 있고
timer가 동작하는 시간을 늘리자니, 너무 많은 시간을 낭비한다.
Go-Back-N Protocol
1. 한번에 여러개의 frame을 보내고, 동시에 여러개의 ACK를 받게된다.
2. 보낸 frame과 ACK에 번호를 붙여서 flow control을 더 효율적으로 진행한다.
이를 처리하기 위해 window라는 개념을 사용한다.
Window
이미 보내버린 frame을 outstanding packet 이라고 부른다.
또한 outstanding packet은 아직 해당 packet의 ACK가 오지 않은 상태이다.
받는 쪽의 window는 항상 다음에 받을 frame의 번호를 보고있다.
Flow diagram으로 예시로 들면 다음과 같다.
맨 처음 packet부터 lost 되었다.
따라서 받는 쪽에서는 seqNo가 1이 아닌 frame이 오면 계속 ACK에 받아야 할 frame의 번호를 넣어서 보낸다.
보내는 쪽은 ACK가 오긴 왔는데, ackNo가 Sf와 같기 때문에 계속 무시한다.
그리고 결국 timer가 종료된다.
Selective - Repeat Protocol
Go-Back-N 방식은 받는 쪽에서 받고싶은 frame을 순서대로 하나씩 받았다.
사실 하나씩 받지 않았다면, 정상적으로 들어온 frame들을 미리 처리할 수 있을 것이다.
이 프로토콜은 기본적인 네트워크 프로토콜이 많은 패킷을 잃으면 비효율적이다.
비록 이러한 패킷들 중 일부가 안전하게 수신되었지만, 패킷이 손실되거나 손상될 때마다 sender는 다시 패킷을 보낸다.
flow diagram을 보자.
Flow diagram을 보면, 맨 처음 frame은 lost 되어 전송되지 않았다.
그러나 나머지 frame은 잘 전송되었고, 그에 대한 ACK도 잘 받아서 이를 체크한다.
HTimer가 멈추면 아직 ACK를 받지 못한 frame이 있는 경우 다시 보내고, timer를 다시 시작한다.
이후 받는 쪽은 맨 첫번째 outstanding frame에 대한 ACK가 들어왔고,
보내는 쪽도 맨 첫번째 frame이 들어와서 처리되었으므로 양쪽 모두 window를 오른쪽으로 이동시킨다.
위에서 알아본 protocol 들은 단방향 통신일 때를 알아봤지만, data는 양방향 통신을 하고 있다.
-> 양방향 통신을 하기 위한 방법 : Piggybacking
Piggybacking : sender와 receiver 모두 ACK 번호를 붙여서 함께 감. (내가 보내는 번호와 받은 번호를 함께 보냄)
HDLC (High-level Data Link Control)
- point-to-point와 multipoint links에서 통신을 위한 bit-oriented protocol
- Stop-and-Wait protocol을 구현함.
- PPP, Ethernet, 무선LAN과 같은 다른 practicl protocol의 기초이다.
NRM (Normal Response Mode)
primary device는 명령만, Secondary는 응답만 수행
ABM (Asynchronous Balanced Mode)
primary 와 Secondary device 로 나누지 않고 명령 및 응답을 모두 하는 device 로 구성되어있는 mode
HDLC 에서 사용되는 3가지 framing (1개만 보내는 것이 아닌 3개를 모두 사용)
1. information frames : 정보 전송시 사용. (I - Frames)
2. supervisory frames : error control 을 하기 위함. (S - Frames)
3. unnumbered frames : 연결 설정, 연결 끊을 때 사용 (U - Frames)
- Flag : 시작과 끝을 나타냄.
- Address : Source / Destination 주소 정보 저장
- Control : 어떤 frame 인지를 구별 ( Control 을 읽고 그것에 맞는 것으로 converting 수행.)
- FCS : error control code ( redundancy )
PPP (Point-to-Point Protocol)
지점 간 엑세스를 위한 가장 일반적인 프로토콜 중 하나.
References
https://velog.io/@jmink002/%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%86%B5%EC%8B%A0-Chapter-8
[데이터통신] Chapter 8 정리
Chapter8 : Media Access Control (MAC)
velog.io
https://ideadummy.tistory.com/113
[데이터 통신] Data Link Control(DLC)
Data Link Contorl(DLC) 이전 내용에서는 매번 데이터가 전송된다고만 했지, 정확히 각 계층에서 어떤 일이 일어나는지에 대해서는 언급이 없었다. 오늘은 data link 계층에서 데이터를 어떻게 다루는지
ideadummy.tistory.com
'🖥️ Computer Science > Data communication' 카테고리의 다른 글
[데이터 통신] Wired LANs - Ethernet (0) | 2024.06.01 |
---|---|
[데이터 통신] Media Access Control (0) | 2024.05.22 |
[데이터 통신] Introduction To Data-Link Layer (0) | 2024.05.08 |
[데이터 통신] Error Detection and Correction - 2 (0) | 2024.05.07 |
[데이터 통신] Error Detection 과 Correction (0) | 2024.04.16 |