Computer Science/네트워크

[컴퓨터네트워크] 09. 전송계층(2)

lumana 2024. 5. 18. 18:20

전송 계층

Go-Back-N 프로토콜(GBN)

  • 전송 효율을 높이기 위해서는 Ack를 받기전에 여러 패킷을 보낼 필요가 있다
  • Ack를 받기 전에 미처리 (outstanding) 패킷의 수를 1 이상으로 유지하여 채널을 바쁘게(busy) 함
  • cf) Stop and Wait 프로토콜 : 패킷 1개 주고, 1개 받음

 

 

 

 

 

 

 

!! Go-Back-N의 경우 Send window 크기가 2^m보다 작아야 한다

Example 8.7

그림 8.29(다음페이지)는 Go-Back-N의 예를 보여준다.

이 예는 순방향 채널이 신뢰할 만하고, 역방향은 그렇지 않은(신뢰적이지 않은) 경우임.

데이터 패킷은 유실되지 않은데, 몇몇 ACK는 지연되거나 유실되는 환경이다.

이 예는 또한 한꺼번에 확인응답하는 방법은 응답이 늦거나 유실될 경우에 유리하다.

 

Example 8.8

그림 8.30(다음페이지)은 패킷이 유실되는 예이다.
패킷 0, 1, 2, 3을 보냈고, 패킷 1이 유실됨. 수신측은 패킷 2,3을 받았지만, 순서에 맞지 않으므로 버림. (1번을 기다리고 있음)
수신자는 패킷 2,3을 받은 이후에 ACK 1을 보내서 1번을 기다리는 것을 알린다.
하지만 이 ACK는 송신자에게 도움을 주지는 못한다. 왜냐하면,이 번호는 Sf 값인데,송신자는 Sf 보다 큰 값을 기다리고 있기 때문이다.
타임아웃이 발생해야 송신자는 패킷 1,2,3을 보내고, 이들에 대한 ACK를 받게 된다.

 

Selective-Repeat 프로토콜

SR 프로토콜을 살펴보기 앞어서 Go-Back-N 프로토콜 구조를 다시 봐보자

  • Go-Back-N 프로토콜은 수신측의 과정을 간단화한다. 수신측은 하나의 변수값만 유지하면 된다.
    • 기다리는 번호 오면 받고, 안오면 버리는 구조(기다리는 번호는 하나만 유지하면 됨)
  • 또한, 순서에 안 맞는 데이터는 그냥 버린다.
  • 하부의 네트워크 프로토콜이 데이터의 유실을 많이 하는 경우에는 불리하다.
  • 패킷 하나가 유실될 때마다, 순서 안 맞게 잘 들어온 데이터라도, 아직 미처리 상태이므로 (outstanding), 이들 데이터 모두를 다시 보내야 한다.

 

 

Example 8.9

송신자는 6개의 패킷을 보냈다: 패킷 0, 1, 2, 3, 4, 5
이후, 송신자는 ackNo = 3인 ACK를 받았다. GBN과 SR에서는 이 값을 어떻게 해석할까?

Solution

GBN 시스템에서는, 패킷 0, 1, 2를 잘 받았고, 이제 3번 패킷을 기다리고 있음.
SR 시스템에서는, 3번 패킷을 잘 받았음.

 

 

Ready : 윈도우가 꽉 차지 않은 상태

Blocking : 윈도우가 꽉 찬 상태, ack를 받아야 ready 상태로 바뀜

 

Example 8.10

그림 8.20(다음페이지)에서, 패킷 0,2,3이 잘 전달되고, 1이 유실된 경우에, Selective-Repeat 프로토콜의 경우에는 어떻게 행동할까?

송신측에서는 패킷 0이 응답되고, 슬리이딩 윈도우가 1 만큼 전진한다.

패킷 1이 유실되고, 1번이 빠진채로 패킷 2,3이 확인응답된다.
이후, 타임아웃이 발생되면 패킷 1이 재전송되고, 확인응답된다.
이후 슬라이딩 윈도우가 3만큼 전진한다.

수신측에서는 패킷의 수신과 응용계층으로의 전달을 구분해야 한다.

패킷 1번이 유실된 이후에 패킷 2번이 들어오면, 일단 저장을 하고 마크한다.

1번이 빠졌으므로 이 패킷은 응용 계층으로 전달하지 못한다. 3번이 수신된 경우도 같다.
1번 패킷이 잘 들어온 이후에 패킷 1,2,3번을 응용계층에 전달한다.

 

 

 

SR의 윈도우 크기는 2^(m-1) 이하여야 함!

양방향(Bidirectional) 프로토콜

  • 지금까지 살펴본 4가지의 프로토콜은 모두 한 방향으로 설명 : 데이터는 한쪽 방향으로 가고, 확인응답은 방다방향으로만 전달
  • 실제로는, 데이터 패킷은 양방향으로 흐름: 클라이언트에서 서버로, 서버에서 클라이언트로
  • 확인응답도 양방향으로 흐름
  • 피기백킹(piggybacking) 방식은 양방향의 효율을 높이는 방식으로, 데이터 패킷에 확인응답 번호를 실어서 나르는 방법
  • 헤더에는 데이터의 번호와, Ack 번호가 실어져서 전송됨

 

Go-Back-N과 Selective Repeat의 차이점

  • window size는 Go-back-n의 경우 2^m-1이지만, selective는 2^(m-1)이다
  • receive window의 크기가 send window와 같다(buffer size의 증가). 이 이유로는 송신된 패킷이 수신될 때까지 저장될 수 있어 에러가 난 프레임을 알 수 있기 때문이다.