신뢰성 있는 전송
패킷 로스, 비트 에러가 없고 순서가 맞는 전송
만약 신뢰성 있는 전송을 원하지만 사용하는 채널은 ip와 같이 신뢰성이 없는 경우 어디서 신뢰성을 보장하게 해야하는지 생각할 수 있다.
ip는 신뢰성이 없으므로 그 위의 전송 계층이나 응용 계층에서 신뢰성을 보장해야 한다.
응용 계층에서 신뢰성 없는 전송 계층을 사용한다면
응용 계층에서 신뢰성을 위한 작업들을 해야한다.
응용 계층에서 신뢰성 있는 전송 계층을 사용한다면
응용 계층은 아무것도 하지 않아도 된다.
단 전송 계층은 신뢰성이 없는 ip를 사용한다. 따라서 전송 계층에서 신뢰성을 위한 작업들을 해야한다.
고려해야 하는 사항들
신뢰성 있는 전송을 위해선 다음과 같은 항목들을 고려해볼 수 있다.
에러 감지
- 수신자는 비트 에러를 감지할 수 있어야 한다.
- 전송자가 무엇을 보냈는지 몰라도 감지할 수 있어야 한다.
시퀀스 번호
- 패킷의 번호라고 생각하면 된다.
- 시퀀스 번호가 있어서 애크와 내크가 작동할 수 있다.
애크
- 전송자가 보낸 것을 받았다고 수신자가 알려주는 메세지
링크 계층 애크
- 한 링크로 연결된 두 노드 사이에서 애크를 주고 받을 수 있다.
- 여기서는 1을 보내면 1을 기다리고
- 받으면 2를 보내고 2를 기다리는 스탑앤 웨이트 방식을 동작한다.
엔드 투 엔드 애크
- 스탑 앤 웨이트 방식으로 진행하기에는 너무 오래 기다릴 수 있다.
- 그래서 여러 패킷을 보내고 나중에 여러 패킷에 대한 애크가 올 수도 있다.
내크
- 수신자가 어떤 것을 못 받았거나 어떤 것에 에러가 있을 때 이를 알려주기 위해서 보내는 메세지
- 내크만으로는 오류를 감지하지 못할 수도 있다.
예를 들어 전송자가 123456을 보냈는데 수신자가 12345를 받았다. 이 경우 수신자가 보기에는 빠진 것 없이 순서에 잘 맞게 왔다 느낄 수 있다. 따라서 6번 패킷이 빠진 것을 모를 수도 있다.
애크 vs 내크
- 보내는 패킷의 양이 많으면 애크가 많으니 비효율적일 수도 있다.
- 따라서 오류율이 적은 경우 내크가 효율적일 수도 있다.
- 다만 내크는 오류를 감지하지 못할 수도 있다.
로스 감지
타임아웃
- 무한정 기다리는 것을 막기 위해 있다.
- 전송자가 메세지를 보내고 타이머를 설정한다.
- 타임아웃이 발생하기 전 애크가 오면 타이머를 재설정한다.
- 타임아웃이 발생하면 재전송한다.
재전송