ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네트워크: Transport layer 정리2 (신뢰적 데이터 전송의 원리 Reliable Data Transfer)
    네트워크 2020. 10. 5. 22:41
     

    네트워크: Transport layer 공부하기! (TCP/UDP, 다중화/역다중화, 신뢰적 데이터 전송의 원리(RDT))

     < Transport layer란? > - end-system의 process들 사이에서 logical communication 제공한다. - end-system에서 동작한다. - send side: network layer가 수용할 수 있는 segment로 나누는 역할 - receiver si..

    seungjuitmemo.tistory.com

     

    이번 포스팅은 저번 포스팅에서 끝내지 못한 RDT(Reliable data transfer)에서 발생할 수 있는 loss 문제부터 시작한다. 

     

    sender와 receiver 사이에서 loss가 발생하면 둘 중 하나는 서로의 패킷을 기다리는

    이러지도 저러지도 못하는 교착상태에 빠지게 된다. 

     

    그래서 이에 대한 방안으로 타이머를 추가하여 

    일정시간동안 패킷에 대한 receiver의 응답(ACK)이 없으면 sender는 재전송을 한다.

     

    타이머가 추가된 rdt FSM을 확인해보자.

     

    패킷 재전송만 적절한 시기에 수행되면 되므로 sender의 FSM만 교정하면 된다. 

     

     

     

    < RDT 3.0 sender >

     

    sender에서 패킷을 보낼 때 timer가 start되고 이후에는 다음 조건을 만족한다.

    (형광펜이 칠해진 부분의 경우)

     

    if ( sender가 보낸 패킷이 corrupt 됐거나 receiver가 ACK 1을 보냈다.)

    -> ∧ (아무일도 일어나지 않는다)

     

    if ( time out이 일어났다 ) 

    -> 재전송을 해준다.

    -> timer start

     

    if ( sender가 보낸 패킷이 corrupt되지 않았고, receiver가 ACK 0을 보냈다.)

    -> timer stop

    -> 성공이다. 다음 패킷을 보낼 수 있는 state로 이동한다.

     

     

     

    그런데 과연 packet loss가 일어난 경우에만 타이머가 필요할까?

     

    타이머가 필요한 경우를 알아보자.

     

    < Timer가 필요한 경우 >

     

    1. packet loss 

     

    sender가 전송한 패킷이 receiver에게 제대로 전달되지 못하면서

    receiver는 그에 ACK를 sender에게 전송하지 못한다. 

     

    sender가 제 시간안에 ACK를 수신받지 못하면 time out이 되고

    sender는 packet을 재전송한다.

     

     

     

    2. ACK loss

     

     

    sender가 보낸 패킷이 receiver에게 잘 전달되었지만 

    sender가 제 시간안에 ACK를 수신받지 못하면 sender는 패킷을 재전송한다.

     

    packet loss와는 다르게 이미 receiver에 패킷이 이미 존재하므로

    중복처리(detect duplicate) 처리된다

     

     

     

    3. Premature timeout/ delayed ACK

     

     

     

    패킷과 ACK가 정상적으로 전달되지만 

    전송하는데 걸리는 delay시간이 timeout period을 초과하는 경우다. 

     

    이 경우, 어쩔 수 없이 sender는 재전송을 하고

    중복처리 (detect duplicate)과정이 연쇄적으로 일어난다. 

     

     

     

    <위의 RDT프로토콜의 문제점>

     

    지금까지 살펴보았던 RDT 모델은 정확하게 동작하지만 퍼포먼스적으로 문제가 있다.

     

    stop and wait 모델이기 때문에 sender는 패킷을 보낸 후 ACK를 받기 전까지는 아무것도 하지 않는다.

     

    이를 수치적으로 환산해보면

    1Gbps 링크(R), 15ms prop delay(RTT/2), 8000bit packet(L)이 있다고 했을 때

    효율성은 다음과 같다. 

     

    이는 sender는 0.00027만큼의 일을 한다는 것이다.

     

    거의 일을 하지 않는다고 보면 된다. 

     

    비효율적인 Stop and wait모델의 효율성을 증대시키기 위한 방안으로 

    Pipelined protocol을 사용한다.

     

     

     

    <Pipelinined protocol>

     

    Pipelining이란 하나의 패킷이 아닌 여러개의 패킷을 전송하여 효율성을 높이는 방식이다.

     

    여러개의 패킷을 보내기 위해서는 

     

    1. sequence number의 범위가 커져야 하고

    2. 버퍼링을 사용해야 한다.

     

    버퍼링이란 패킷 전송중 loss되거나 error가 생긴 패킷들을

    재전송할때까지 receiver가 패킷을 보관하고 있는것을 말한다. 

     

    파이프라인 프로토콜을 이용하여 한번에 3개의 패킷까지 보낼 수 있다고 가정하자.

     

    stop and wait 모델과 비교하면 sender는 무려 3배나 더 일을 할 수 있게 된다. 

     

     

     

    파이프라인(Pipedlined protocol)은 다음과 같이 두가지가 있다. 

     

    1. go-Back-N

    2. selective repeat

     

    간략하게 설명하면, 여러개의 패킷을 보내는 것은 동일하지만,

    ACK를 처리하는 과정이 다르다. 

     

     

     

    1. Go-back-N

     

     N개의 패킷을 동시에 보낸 후, ACK는 나중에 받으며

    이때 받는 ACK를 Cumulative ACK라 한다.

     

    만약 중간에 loss된게 있으면 받은 패킷 중에 가장 나중 패킷에 대한 ack를 보낸다

    가장 큰 값의 ACK를 중복해서 받으면 무시한다.

     

     sender는 전송한 패킷 중 가장 나중 packet에 대한 timer를 갖는다.

     

     

     

    sender의 경우 다음과 같은 rdt모델을 갖는다.  

    base는 시작하는 지점

    N은 보낼 패킷 수

    nextseqnum 현재 보내는 패킷

     

     

     

    다음은 receiver의 경우

    receiver는 가장 나중에 받은 패킷에 대한 ACK를 전송한다. 

     

     

    receiver는 패킷을 순서대로만 받을 것이기 때문에 잘못 받은 패킷들은 다 버린다.

     

    버퍼링을 하게되면 나중에 더 복잡해지기 때문에 타이머가 아웃되면 N개를 다시 보낸다.

     

     

     

    2. Selective Repeat

     

     Sender가 패킷을 보낸 후, 이를 받은 receiver는 받은 패킷에 대해 각각 ACK를 보낸다.

     

    receiver는 도중에 gap이 생겨도 이를 무시하며 받은 packet에 대한 ACK만 보낸다.

     

    각각에 패킷에 대해서 타이머가 있기 때문에, 

    timeout 되었을 때는 못 받은 ACK에 대한 패킷만 재전송한다.

    (즉 버퍼링을 사용한다)

     

     

     

     

    ※ Selective repeat의 딜레마

     

    selective repeat는 receiver입장에서는 올바르게 동작하지만 

    sender의 입장에서 문제가 생기는 경우가 있다. 

     

     

    seq numberwindow의 사이즈보다 충분히 커야한다. 

     

    window size x 2 <= sequence number 일때 제대로 동작하며

    그 이외의 경우에는 loss가 생겼을 때 문제가 생길 수 있다.

     

     

     

    지금까지 TCP가 신뢰적인 통신을 하는 방법에 대해서 알아보았다. 

     

    요약하자면 TCP는 효율적인 전송을 위해 여러개의 패킷을 전송하는 Piplined protocol을 이용하며

    Go-back-N 방식과 Selective-repeat방식을 합쳐 하이브리드적인 형태로 동작한다.

     

     

     

    ※전공 공부용으로 작성했습니다.

    출처: computer networking a top down approach

     

    반응형

    댓글

Designed by Tistory.