- data link control 은 dedicated 인지 broadcast 인지에 관계없이 인접한 두 노드 간의 통신 절차를 처리함.
- data link function 에는 다음 두가지 기능이 존재
- framing
- flow and error control
- framing : 각각의 frame 이 서로 구별될 수 있도록 bit 를 frame 안에 packing 해야한다.
- 우편 시스템에서 우편봉투를 생각하면 쉬움.
- 편지를 봉투에 넣는 간단한 작업으로 편지들끼리 혼동 없이 분리됨.
- framing 과정에서는 sender address 와 destination address 를 adding 함.
- sender address : 받는 사람이 누가보냈는지 확인할 때 사용
- destination address : 패킷이 갈 곳 정의
- Flag : 식별자, 구별자 (실제 정보 없음.)
- Header : source 와 destination address
- trailer : error detection 을 위한 redundancy
- Byte Stuffing and unstuffing
- ESC 를 추가해 ESC 뒤에 오는 Flag 는 식별자로써 사용되는 것이 아니라 데이터에서 사용됨을 알려줌.
(이것을 표시해주기 위해 필요한 byte 가 늘어나는 단점이 있음.)- 중간단계에서 붙는 ESC 와 Flag 등등을 전부 제거하고 난 후 남은 부분이 실제 data 임.
- flow control : receive 가 받을 수 있는 크기 (양) 을 알려줌.
( receive의 상태를 알지 못하고 계속 data를 보내는 문제를 해결하기 위해 사용됨.)
- Buffer : flow control 의 가장 기본적인 방법
- buffer 는 비어있거나 가득차있는 두가지 상태가 존재
- buffer 가 empty 상태일때는 절대 data 손실이 일어나지 않음.
=> 즉 receive 측의 buffer 가 empty 상태일때만 data 를 보냄.
- flow and error control 를 처리하기 위한 4가지 protocol
1) Simple
2) Stop-and-Wait
3) Go-Back-N
4) Selective-Repeat- 1, 2번 protocol 은 아직도 사용되고 있지만, 3, 4번 protocol 은 이제는 사용되지 않는다.
1) Simple : flow 와 error control 이 필요 없는 상황이라고 가정한 후 사용되는 protocol
( error 와 data 손실이 발생하지 않는 상황 == 이상적인 상황 )
- 수신자가 모든 frame 을 받는 즉시 처리할 수 있다고 가정.
- error 가 발생하지 않는 link 사용. (error control 이 필요없음.)
- data 를 받으면 바로바로 사용해 Buffer 가 차지 않음. (flow control 이 필요없음.)
2) Stop-and-Wait : data를 보내면 stop하고 상대가 data 를 처리했다는 신호를 wait 함.
(한번에 한 frame 을 보내고 다음 frame 을 보내기 전에 승인 ( ack ) 을 기다림.)
이 과정에서 손상된 frame 을 감지하기 위한 redundancy 를 추가.
- sender는 receiver 가 보내는 ack 를 기다림.
- Ack 가 제대로 전달이 안되는 경우 ( == error 인 경우 )
1) Data 가 전송이 안된경우
2) Ack 가 중간에 lost 된 경우
- 이 때 sender 가 receiver 의 ack 를 무한정 기다리면 error 발생 시 ack 를 받지 못하므로 계속 기다리게 됨. -> deadlock 발생.
- deadlock 을 해결하기 위해 timer 를 사용.
- timer 의 시간을 정해놓은 뒤 일정 시간안에 ack 가 오지 않으면 error 라고 판단해 message 재전송.
- 이 때 timer 의 시간을 잘못정하면 효율이 매우 낮아지게 되므로 timer 의 시간을 잘 정해야함.
- Stop-and-Wait의 단점은 utilization 이 낮음.
- 대역폭이 높거나 지연이 긴 링크의 경우 링크 용량이 낭비됨.
- 나는 100만큼 보낼 수 있는데 10만큼만 보내고 기다림. -> 낭비
3) Go-Back-N : 파이프를 사용해 2개 이상의 패킷을 대기상태로 두는 방법.
( 전송시간이 있으므로 대기 패킷을 두어 차례로 처리하고자 함.)
- 내가 보낼 수 있는 최대 양 ( == 수신자가 받을 수 있는 최대 양 ) 의 단위를 window 로 관리.
=> window 가 꽉차면 패킷을 더 보내지 못함. (대기 패킷으로 꽉 차 있음.)
- 현재 0 ~ 6 까지 총 7개의 패킷을 보낼 수 있음.
- 0 ~ 3번 message 를 보낸 상태고, 아직 ack 가 오지 않은 상태임.
(만약 time out 상황이 오면 재전송해야하므로 가지고있음.)- 0, 1 에 대한 ack 가 오면 window 를 2 ~ 0 으로 slide 해 옮김.
- window 를 기준으로 왼쪽은 ack 를 받은 ( == 제대로 sending 된 msg ) data 이고, 오른쪽은 아직 받지 못한 data 이다.
- window size 는 message size 보다 작아야 함.
- ex) message size = 4 (0~3) 이라면 window size 는 3 이하여야함.
- ex) message size = 5 (0~3) 이라면 window size 는 3 이하여야함. (2의 배수보다 작아야 함.)
4) Selective-Repeat Protocol : 수신측에서도 잘 받은 data 를 저장할 수 있도록 하는 방법
- Go-Back-N 방법에서는 제대로 보낸 data 도 순서가 잘못되었다면 다시 처음부터 보내야함. ( 비효율적 )
- ex) 1, 2 수신, 3 lost 되고 4 수신하면 ack 번호가 잘못되었으므로 3, 4 를 다시 보냄.
- Selective-Repeat 방법에서는 위와 같은 예시에서 3만 재전송할 수 있도록 함.
- time out 이 되었는데도 오지않은 ACK 가 있다면 그 번호의 data 만을 재전송함.
- 위에서 알아본 protocol 들은 단방향 통신일 때를 알아봤지만, data 는 양방향통신을 하고 있다.
=> 양방향 통신을 하기 위한 방법 : Piggybacking
- piggybacking : sender 와 receiver 모두 ACK 번호를 붙여서 함께 감.
( 내가 보내는 번호와 내가 받은 번호를 함께 보냄. )
- HDLC (High-Level Data Link Control) : 통신을 위한 bit-oriented protocol
- Stop-and-Wait protocol 을 구현함.
- PPP, Ethernet, 무선LAN 과 같은 다른 practical protocol 의 기초이다.
- Transfer Mode
1) Normal response mode (NRM) : primary device는 명령만, Secondary 는 응답만 수행
2) Asynchronous Balanced Mode (ABM) : primary 와 Secondary device 로 나누지 않고 명령 및 응답을 모두 하는 device 로 구성되어있는 mode
- HDLC 에서 사용되는 3가지 framing (1개만 보내는 것이 아니라 3개를 모두 사용)
1) information frames (I - frames) : 정보 전송 시 사용 (0)
2) supervisory frames (S - frames) : error control 을 하기 위함. (10)
( data 는 안보내도 ACK 는 보내야할 때 사용)
3) unnumbered frames (U - frames) : 연결 설정, 연결 끊을 때 사용 (11)
- Flag : 시작과 끝을 나타냄.
- Address : Source / Destination 주소 정보 저장
- Control : 어떤 frame 인지를 구별 ( Control 을 읽고 그것에 맞는 것으로 converting 수행.)
- FCS : error control code ( redundancy )
- control field format
- Point-to-Point Protocol (PPP) : 지점 간 액세스를 위한 가장 일반적인 프로토콜 중 하나