본문 바로가기

ComputerScience/Network

컴퓨터 통신 - 11. 오류 복구

728x90

1. 오류 복구

- 2계층에서 frame을 보내고 오류를 검출하는 방법까지 알아봤다. 

- 검출까지는 NIC에서 하드웨어 차원의 작업이지만 이번에는 sw차원에서 오류를 수정하는 방법을 알아본다.

- 참고로 비트오류만 존재하는 것이 아니라 frame자체에서 오류가 생길 수도 있다. frame자체 오류가 생기면 수신자가 frame을 수신하는 것 차제가 불가능할 수 있기 때문에 반드시 송신자입장에서의 복구과정도 필요하다.

2. 수신자가 복구

- Forward Error Correction: FEC

- 2차원 패리티 같은 오류 수정 코드를 사용한다.

- 완벽한 복구는 사실상 어렵다.

- 보통은 오류가 발생한 것을 인식하면 재 전송을 요청하지만 전화처럼 순간순간 재전송이 불가능 하다면 오류 수정 코드가 나름 유용할 수는 있다.

3. 송신자가 복구

- Automatic Repeat reQuest: ARQ

- 오류의 복구를 오로지 수신자에게 맡길수는 없다.

- 타임아웃을 걸고 재전송을 위해 버퍼처리를 거친다. 

- 이 작업은 어댑터에서 처리하기 한계가 있기 때문에 노드 내 소프트웨어가 처리한다

a. 송신자는 frame을 버퍼(재전송버퍼)에 담아두고 timeout을 건다. 그 다음 수신자에게 frame을 보낸다. 수신자는 frame을 받은 다음 ack신호를 보낸다.(다음꺼 보내라는 얘기) 송신자는 ack를 받으면 timeout을 해제하고 다음 frame을 보낸다.

b. ack가 timeout안에 오지 않으면 다시 frame을 재전송한다.

c. 수신자에서 ack가 전송되는 과정에서 문제가 생겼다. 그럼 송신자 입장에서는 ack가 timeout안에 안왔으니 다시 보낸다. 이 경우 수신자 입장에서 재전송된건지, 아니면 다음 frame을 보낸건지 식별이 되어야 한다. 수신자는 받은 frame의 순서번호를 가지고 이 내용을 식별한다. 즉 c경우에서는 재 전송된 frame을 버리고 ack를 보낸다.

d. 응답이 왔긴 왔는데 timeout 밖에 왔다. 이런경우는 동일한 frame을 두번 보내게 된다. 송신자 입장에서는 frame을 보내자마자 바로 ack가 온걸로 받아들인다. 따라서 ack에도 순서번호가 필요하다. 

 

- Nak의 경우 crc로 나누었을때 0이 아니라는 뜻이다. (필수는 아니고 option이다, 그냥 ack를 안보내면 되기 때문)

- ARQ는 stop and wait 방식이기 때문에 링크가 노는 시간이 생긴다.

- 링크 효율이 어느정도 되는지 계산하는 식은 위와 같다.

- 당연히 거리가 멀면 효율이 떨어진다. 왔다갔다 하느라 전파지연시간이 커지기 때문이다.

- 위의 예시에서 식으로 표현하면 사용 효율 = t(frame) / {t(frame) + 2*t(prop)}이 된다.

- 즉 데이터를 많이 보내고 ack를 받는데 조금 걸리는 모양이 바람직하다.

728x90
반응형