on
컴퓨터 통신 11
컴퓨터 통신 11
1. 오류 복구
- 2계층에서 frame을 보내고 오류를 검출하는 방법까지 알아봤다.
- 검출까지는 NIC에서 하드웨어 차원의 작업이지만 이번에는 오류를 수정하는 방법을 알아본다.
- 참고로 비트오류만 존재하는 것이 아니라 frame자체에서 오류가 생길 수도 있다. frame자체 오류가 생기면 수신자가 frame을 수신하는 것 차제가 불가능할 수 있기 때문에 반드시 송신자입장에서 복구과정이 필요하다.
2. 수신자가 복구
- Forward Error Correction: FEC
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를 안보내면 되기 때문)
- stop and wait 방식이기 때문에 링크가 노는 시간이 생긴다.
- 즉 데이터를 많이 보내고 ack를 받는데 조금 걸리는 모양이 바람직하다.
from http://jsdysw.tistory.com/190 by ccl(A) rewrite - 2021-10-12 18:00:26