Dolphins의 HelloWorld

전송계층 프로토콜(Stop-And-Wait,Go-Back-N,Selective Repeat) 본문

전공지식 정리/컴퓨터 네트워크

전송계층 프로토콜(Stop-And-Wait,Go-Back-N,Selective Repeat)

돌핀's 2019. 7. 3. 15:07

전송계층(Transport Layer)에서는 데이터 전송 보장(Reliable data transfer)을 위해 다양한 방식의 프로토콜을 사용하고 있다. 


그 중 Stop-And-Wait, Go-Back-N, Selective Repeat 프로토콜에 대해 알아보겠다.



Stop-And-Wait(정지 대기 방식)


컴퓨터 네트워크 설정에서 재전송을 기반으로 하는 신뢰적인 데이터 전송 프로토콜중 하나가 ARQ(Automatic 


Repeat Request)프로토콜이다 Stop-And-Wait는 이 ARQ방식의 일종이다.  이 방식에서 송신측 A가 B에게 1개의 


프레임을 송신하게 되면 B는 해당 프레임의 에러 유무를 판단하여 A에게 ACK혹은 NAK를 보내게 된다.


Stop-And-Wait 방식의 경우 구현 방식이 단순하며 송신측내에 최대 프레임 크기의 버퍼를 1개만 잡아도 되나 


송신측이 ACK혹은 NAK를 받을 때까지 다음 프레임을 받을 수 없으므로 전송효율이 떨어지는 단점을 보인다.




Go-Back-N

GBN 프로토콜에서 송신자는 확인응답을 기다리지 않고 여러 패킷을 전송할 수 있다. 하지만 파이프라인에서 확인


응답이 안 된 패킷의 최대 허용 수 N보다 크지 않아야 한다. GBN프로토콜은 슬라이딩 윈도 프로토콜 이라고 


부르며 sequence number의 bit가 m bits일 때 2^m-1 개까지 아웃스탠딩 프레임이 가능하다. 위의 그림의 경우 


Windows Size가 7이므로 0~6까지 7개의 프레임을 보낼  수 있으며 2, 3, 4를 보내고 있는 와중에 0과 1에 대한 


ACK가 왔기 때문에 Window size에 맞게 옆으로 두 칸 더 늘린 모습을 확인할 수 있다.



윈도우 사이즈에서 1을 빼야 하는 이유는 다음과 같다. 위의 b그림과 같이 만약 5개의 비트가 있다고 가정했을 때 


만약 중간에 모든 ACK가 유실되는 문제가 발생했을 시에 a같은경우 ACK가 안 오면 그 전에 있는 0을 다시 재전송


하는 반면에 b같은 경우 송신측에서 그 전에있던 0이아닌 새로운 0을 보내게 되며 수신 측에서는 정상적으로 ACK


를 전송했고 가는 도중 없어진 것이기 때문에 새로운 0을 그대로 처리하게 된다. 즉 -1을 하지 않으면 기존의 0과


새로운 0이 모두 한 타임 안에 전송이 되는 상황이 벌어지게 된다. 때문에 송신 측에서 ACK를 못 받아 전의 0 


프레임을 다시 보내려고 해도 새로운 0 프레임하고 겹쳐 혼선을 겪게 된다. 중간의 모든 ACK가 유실되는 상황에서


문제가 발생한다는 것을 기억하면 된다.



단점으로는 GBN이 성능문제를 겪을 수 있는 상황이 생길 수 있다는 것인데, 특히 윈도 크기와 대역폭 지연 결과가 


모두 클 때 많은 패킷이 파이프라인에 있을 수 있으며 고로 GBN은 패킷 하나의 오류 때문에 많은 패킷들을 재전송


하므로 많은 패킷을 불필요하게 재전송하는 경우가 발생한다.



Selective Repeat ARQ(선택적 방법)


Selective Repeat ARQ같은 경우 수신자에게 오류가 발생된 수신 패킷만을 다시 전송하기 때문에 불필요한 재전송


을 피한다 이는 GBN방식의 단점을 보완한 모습이라고 볼 수 있다. 하시만 실제로는 Go-Back-N ARQ방식을 제일


많이 사용한다고 한다.



Selective Repeat ARQ는 위와 같이 만약 Frame2와 Frame3이 전송됐을 때 만약 Frame2에 대해 에러가 났을 경우 


2에 대한 NAK를 보내서 Frame2가 다시 재전송될 수 있도록 한다.




이 ARQ를 사용하기 위해서는 Windows Size를 2의 m승의 반 이하로 해야한다. 그 이유는 GBN과 달리 버퍼 


매니지먼트를 할 것이 많기 때문이다. 즉 만약 데이터 한 개가 유실이 되었는데 다음 데이터가 또 올 경우 GBN


은 갖다 버리지만 Selective Repeat 같은 경우 이를 저장해둔다. 고로 이를 저장할 수 있는 공간을 확보해 주어야


한다.



오른쪽 그림을 보면, 맨 아래에서 3 프레임을 받아야 하는데 0 프레임이 와버린다. 그런데 이 때 사이즈가 크다면 


이 프레임이 중복인지 새로운 데이터인지를 파악하기 힘들어서 확보된 공간에 저장해버린다. 하지만 a처럼 1/2


사이즈로 줄여버리면 위에서 볼 수 있는 것과 같이 2가 와야하는데 0이 왔으며 또 버퍼를 저장할 공간도 없기


때문에 버리게 된다. 때문에 사이즈가 1/2로 줄어들어야 하는 것이다. 


만약 메모리가 반이 아니라면 비트수가 많을 수록 중복된 데이터가 쭉 저장되는 문제점이 생긴다.




버퍼 매니지먼트에 있어서 GBN이 좋고, 또 요즘엔 광 케이블이 발달해서 에러가 날 가능성이 적기 때문에 


한꺼번에 많이 보낼 수 있는 것을 선호한다. 때문에 요즘엔 대부분 GBN방식을 사용한다고 한다.





해당 게시물은 아래의 내용을 참고해서 만들어졌습니다.

http://blog.naver.com/no5100/220735525591

Comments