reliable transfer in pipeline protocol(Go-back N, Selective repeat)

ㅎㅎ·2023년 9월 2일
0

네트워크

목록 보기
5/6
  • 지금까지는 요청-응답-요청이 순차적으로 하나씩 진행되는 전송 방식에 대해서 다뤘음
  • 하지만 현실에서 이 방식을 이용하기에는 너무 느리다. 따라서 pipeline에 보낼 packet을 한 꺼번에 쏟아내는 느낌으로 왕창 packet을 전송한다. 그래야 utilization을 늘릴 수 있다.
  • 어떻게 할 수 있을까?

Go-Back N

  • 동작 방식
    • window size 만큼의 packet을 한꺼번에 전송
    • 성공적으로 Ack를 받으면 그 다음 packet을 window에 추가
    • 이 window는 buffer이며, 유실 발생 시 재전송을 위하여 window 내에 각 packet 정보를 저장하고 있음.
    • 각각의 패킷에 대한 Timer를 두고, Timeout이 발생하면 해당 packet부터 window 내에 있는 그 이후의 모든 packet을 재전송함
    • receiver는 ACK(n)을 응답하는데, 이는 이전 패킷부터 n번 packet까지 성공적으로 수신했음을 의미한다. 이를 cumulative ACK라고 함
    • 만약 packet이 순차적으로 들어오지 않으면 receiver는 모두 discard 함
  • 문제점

    • ACK(n)을 받고 그 이후에 timeout이 발생하면 어느 packet이 유실됐는지 확인할 수가 없다. 정상적으로 수신한 연속적인 packet의 마지막 번호를 계속해서 ACK로 보내기 때문에, 그 이후 LOSS 상황에 대해 판단할 수가 없다. 따라서 sender는 n 이후의 window 내에 있는 모든 packet을 전부 재전송해야 한다.(아래 그램 예시)
    • receiver 또한 연속적으로 packet이 들어온 것만 저장하였다가 application으로 전달하기 때문에, loss가 발생하면 계속 정상 수신한 다른 pakcet들을 discard함.
    • 이 문제를 개선한 것이 selective repeat


Selective repeat

  • 동작방식

    • receiver는 정상 수신한 packet에 대해 각각 Ack(n)을 보내게 되어, sender는 정상 수신한 packet을 파악할 수 있고, timeout 발생시 loss된 packet만 재전송할 수 있다.
    • sender는 각각의 packet에 대해 timer를 유지하고 있다가, 정상수신하면 timer를 폐기, 아직 Ack를 응답받지 못한 packet이 timeout 나면, 해당 packet만 재전송한다.
    • receiver는 순서대로 들어온 packet은 전달하며, 순서가 꼬인 packet은 buffer에 저장한다. 유실된 packet이 정상 수신되어 packet이 연속적으로 완성되면 application에 전달한다.


pipeline protocol의 문제점

  • 시퀀스 번호가 무한하지 않다. 세그먼트 헤더에 시퀀스 번호를 저장해야 전송해야 하는데, 번호가 커질 수록 더 많은 비트가 필요하다. window size가 N이면 대략 2배 만큼의 시퀀스 번호가 필요하다. 그래야 유실이 발생한 걸 건너뛰고 다음 packet을 window에 또 넣을 수 있으니까.

  • 또한 window 내의 각각의 packet마다 tiemr를 설정해야 하는데, 현실에서 몇백 개 이상 패킷을 전송하는데 타이머를 모두 설정하는 것은 과부하다.

  • 따라서 TCP에서는 대표 timer와, cumulative Ack 방식을 혼합해 사용한다.

profile
Hello World

0개의 댓글