코딩일지(2024-05-23)
컴퓨터망 19장쪽을 복습했다.
이제 곧 있으면 기말고사이다.
기말고사 준비기간에 들어가면 또 코딩할 시간이 부족할까봐, 미리 배웠던 것들으 C/C++로 구현해보려고 한다.
그리고 예전에 컴퓨터망공부를 하면서 한가지 아쉬웠던게 C#에서 모드버스를 실습해보지 못한거다. (그래도 다행히 와이어샤크를 실습해본것은 다행이다ㅋㅋ)
그래서 이 부분에 대해서 조금 정리를 할까 한다.
Stop-and-Wait
Go-Back-N
복습에 있어 해당 영상을 참고했다.(15년전 영상인데 꽤 이해가 잘되더라ㅋㅋ)
예시를 들어보자,Alice와 Bob이 있다. 그리고 그 사이에는 데이터를 전달하는 Line이 있다.
엘리스가 밥한테 0,1,2,3,4,라는 데이터를 보내려고 한다. 총 5개의 데이터를 보내는거지, 보내기 시작!
엘리스는 송신자(센더)이다. 센더는 라인한테 0을 전달한데, 라인은 0을 받아 리시버한테 전달한다.
그 다음에 센더는 1을 라인한테 보낸다. 마찬가지로 라인은 1을 받아 리시버한테 전달해야 한다. 하지만 리시버한테 가는 도중에 넘어져서 1이라고 하는 데이터가 소실되었다고 하자.(시나리오상 그렇게 가정)
하지만 일단 센더는 임무가 있으니, 그 다음에 2,3,4도 순차적으로 라인한테 보내고, 라인은 순차적으로 리시버한테 데이터르 전달한다.
데이터를 다 받고 나서 리시버가 데이터는 확인해보니, 1이 하나 비어있다. 그래서 라인한테 1이 비어있다는 정보를 전달한다(ACK 1), 그러면 라인은 1을 센더한테 보내고, 임무를 다 끝내고 놀고있던 센더는 [ACK 1]을 받고 나서 다시 1부터 데이터를 보낸다.
1을 보내고 리시버가 받고,
2를 보내고 리시버가 받고,
3을 보내고 리시버가 받고,
4를 보내고 리시버가 받고,
이후 리시버는 데이터가 중간에 소실된것이 없는 것을 확인하고 라인한테 [ACK 5]를 전달한다. 시나리오상 4까지밖에 데이터가 없지만, 원래는 계속해서 주고받는다. 그래서 맥락상 [ACK 5]를 써주었다. 하지만 보낼데이터가 없으면 N까지 보내고 나서 [ACK N+1]이 왔을지라도 통신을 종료한다.
알고리즘은 아래와 같다.
댓글남기기