protocol function 은 프로토콜에서 사용되는 공통적인 기능임
한쪽 entity에게 pdu를 보내면 receiver entity에 그 pdu 가 도달했는지 알수 있어야함 그래서
도달 여부를 알리기 위해서 사용하는 방법이 명시적 에크놀리지먼트이다(explicit acknowledgement)
explicit acknowlegement 매우 단순하게 수신측에서 송신측에게 잘받았다고 메세지를 전달하는데 그 메세지의 이름이 ACK이다
explicit acknowlegement는 두가지의 종류가 존재한다
reaction은 재전송이나, 세부적인 방법은 다양하다
piggy backing - 수신측에서 수신된데이터에 대한확인 응답을 즉시 보내지 않고 별도의제어프레임도 사용하지 않은채,전송할데이터가 있는 경우에 만, 그데이터 프레임 안에 확인 필드를 덧붙여전송(Piggyback,등에 업혀 보냄)하는,
다시 말하면 ack를 다른 데이터를 송신 측에 보낼일이 있을 때 같이 실어서 보낸다는거 같다
ACK역시 시간이 지나면 손실되어야함 그 이유는 송신측(TXentity)에서는 PDU를 보낸뒤에 ACK를 무한정으로 기다릴 순 없다 - ㅅTX 가 ACK를 무한정으로 기다려서 기능을 수행하지 못하는 상황을
따라서 deadlock stiuation을 피하기 위해서는 ack를 얼마나 기다릴지 기한을 정하고 기한을 넘기면 action을 취할 필요가 있다
- TX측에서 PDU를 보내고 부터 timer가 작동하면서 ACK의 도달을 monitoring한다
- 보통의 경우에 pdu를 보내고 타이머가 작동한다
- timer interval(그냥 타이머 시간)은 ACK가 도달할 예상 시간을 감안하여 정의 한다
- 만일 ack가 도달하지 않으면 timer expriry(시간초과)가 되고
- time-out 이 되면 기정의된 plan B를 수행해서 deadlock에 빠지지 않도록 만든다
- ACK가 정상적으로 수신측에 도달하면 timer를 다시 reset한다.
### Activity timer
- peer entity의 대한 모니터링 용도로 활용한다
- peer entity가 무슨 이유에 의해서 communication을 몸추었을 때 deadlock이 발생할 수 있으므로 이를 방지하기 위해서 timer 를 가동한다
- peer partner의 inactive 감지하면 timer를 작동한다.(갑자기 최규현이 동작을 안하면 이새끼 이상하다고 느끼고 잠깐 ! 하는거임)
- peer entity의 inactivation을 감지하고 timer를 작동하고 나서 다시 peer entity에서 PDU를 받아서 peer entity의 reaction을 확인하면 activity의 작동을 멈춘다
- 보통 reaction 타임 보다 더 큰 시간 간격을 둔다
timer name/interval/start/stop/expiry
특히나 시간 간격 설정이 매우 중요한데(time interval)
- time interver이 너무 길다면 불필요한 deadlock에 빠질 위험이 있음.
- time intever이 너무 짧으면 너무 빈번하게 time out이 발생하니까 불필요한 reaction을 수행하게되고
data전송 동안(data transmission) pdu가 손시로디거나 중복 수신이 될 수 있다
수신 쪽에서 보낸 ACK가 timeout에 의해서 손실되면서 reaction으로 송신측에서 다시 pdu를 재전송해서 deplication이 발생한다.
수신쪽에서는 이렇게 재전송된 pdu를 자기가 가지고 있는 pdu의 sequence number를 확인해서 무시 할 수 있다 중복전송된 정보는 그냥 상대도 안한는 거지
ARQ : 의 구성요소 acknowledgement + timer + reactions
pdu loss가 발생했을 때 pdu를 재전송하는 방식에 따라서 여러가지 방식이 존재한다
go back N
- 풀어서 말하면 n 번째 sequence에서 pdu 로스 가 발생해서 TX가 ack를 받지 못하면 n번째 pdu부터 Rx에게 pdu를 모두 재전송하는 방식이다. 재 전송이 시작되면 RX는 n번째 이후 데이터 부터 다시 받기 때문에 n 번째 이후에 수신했던 모든 데이터를 버린다.
- 조금 비효휼적인 면은 Tx에서 데이터를 모두 전송하기 전까지 모든 데이터를 항상 다 저장하고 있어야한다. 왜냐하면 그래야 오류가 발생한 부분부터 데이터를 다시 보내는 것이 가능할 것이니까 그렇게 데이터를 가지고 있지 않으면 TX측에서 데이터를 다시 보내는 것이 불가능하겠죠?
- selective repeat
- 손실이 발생한 PDU에 대해서만 골라서 재전송하는 방식이다
- RX쪽에선 데이터 transmission이 모두 완료될 때까지 pdu 시퀀스를 모두 저장하고 있다가 오류가 발생한 n번째 pdu 만을 재전송 받는다. 따라서 Rx 쪽에서 제대로 받은 trasnmission order대로 다 받을때 가지 pdu를 저장할 수 있는 버퍼가 필요하다
- cumulative ack를 통해서 제대로 전달된 pdu를 TX entity에서 확인 가능하다.
go back n , selective repeat 방식 비교
- go back n 방식은 TX 측에서 reaction으로 pdu를 재전송해야하기 때문에 데이터를 저장할 수 있는 버퍼가 Tx측에서 필요하고 또한 pdu를 재전송하는 시간이발생한다
- selective repeat방식은 RX쪽에서 빠진 시퀀스 넘버를 알아야하기 때문에 pdu를 저장 할 수 있는데 버퍼가 RXㄷ쪽에 필요하다 하지만 빠진 시퀀스 만을 재전송하기때문에 go backㅜn방식보다 재전송에 필요한 시간이 상대적으로 적다는 장점이 있다.
- stop and wait TX에서 RX측의 ack를 기다렸다 ack를 받은 후에야만 다음 시퀀스를 가진 pdu를 전송하는 방식이다
# Forward Error control
- 이는 재전송을 통해서 에러를 해결하는 방식이 아니고 수신측에서 에러를 coding theory를 이용해서 복구하는 방법이다. 이론의 배경은 다음고 같은데 일부 bit 오류에 대해서 정정이 가능하도록 data bit을 뻥튀기 해주는 이론이다.
- FEC를 사용하기 위해서는 coding theory를 기반으로 pdu의 일부 오류를 정정한다.
- coding theory를 사용하기 위해서 추가적인 데이터를 삽입해서 전송하는데 이렇게 오류수정을 위해서 사용하는 추가적인 데이터를 redundant data라고 한다.
- FEC특징
- 보통의 경우 계산량이 증가한다
- 하지만 재전송을 하지 않으니까 실시간 통신에 강점을 가진다.(real time traffic)
- 이러한 음성이다 영상 통화는 시간이 지나면 pdu의 수신이 의미가 없기 때문에 재전송이 필요가 없는 FEC가 재격인거임 받는 즉시 coding throy를 이용해서 수정을 해야 의미가 있는 것임
- 요즘에 대부분의 무선통신에서 사용하는 기술이다.
- 최근에 FEC가 활성화된 이유는 기기의 계산능력의 향상때문이고 무선자원에 대한 효휼성이 증가했기 때문이다.
FEC를 이용하더라도 모든 많은 비트에 손상이 발생한경우에는 무든 오류를 복원할 수는 없다 따라서 이때 CRC를 사용한다. FEC는 redundant data를 이용해서 오류를 수정하는 반면에 CRC 는 원데이터에 paritybit 들을 꼬리에 추가하여 error를 detacting하고 이를 재전송을 요구하는 방식이다.
CRC는 원데이터에 parity bit들을 꼬리에 추가하는데
주로 FEC와 조합해서 사용한다
Tx에서 만들어낸 parity bit와 수신측에서 만들어낸 parity bit 가 동일하다면 오류를 발생하지 않고 다르면 오류가 발생한다.
if TX parity bit == RX parity bit :
return nopoblem
channel coding이 원데이트를 완벽하게 복원했는지 확인하는 용도이다.