네트워크 - 4

KOCW 4강

KOCW 네트워크 강의(이석복 교수님)를 듣고 정리하여 쓴 글이다.


Principle of Reliable Data Transfer : TCP

Application layer에서 data가 하나도 loss나 error 없이 receiver의 application layer로 가는 것.


network4_1

이전까지는 이상적인 상황에서의 packet(data)의 이동을 생각했지만, 실제로는 packet loss와 error가 일어날 수 있다. 이러한 상황이 일어나면 안되기 때문에 우리는 신뢰성이 있는 data를 전송해야 한다.


RDT protocol(Reliable Data Transfer protocol)

data의 loss나 error가 없는 것이 신뢰성 있는 data를 전송하는 것이다.

따라서 우리는 packet을 전송하는 과정 중에 loss, error가 일어날 상황에 대해 다음 3가지 케이스로 생각해볼 수 있다.


Case 1 : Perfect Channel - RDT 1.0

이 경우에는 channel에 문제가 없어서 packet의 loss나 error없이 잘 전송된 케이스이다. 따라서 따로 고려 해줄 것이 없다.


Case 2 : Packet Error(But no Loss) - RDT 2.0

packet error에 대해 필요한 것들이 있다. 먼저 packet에 error가 일어났는지 확인할 방법(error detection), error가 일어났다면 sender측에게 다시 보내달라고 알려줄 방법(feedback) 이 필요하다.


비유적 예시 - RDT 2.0

전화 통화를 할 때 상대방 말을 들으면서 우리는 어, 응, 그래와 같은 잘 알아들었다는 신호(ACKs)를 상대방에게 보낸다. 그러다 음질이 안좋았거나 발음이 안좋아서 상대방이 무슨 말을 하는지 못 알아 듣는 경우 우리는 뭐라고?, 응?, 다시 말해줄래?등의 못 알아 들었다는 신호(NAKs)를 보낸다.


RDT 2.0의 문제점

  1. 만약 ACK, NAK 신호에 error가 있다면? checksum bit 같이 보내면 된다. 그리고 error라면 재전송 하면 되는 것이다. 그러나 receiver측에서는 같은 packet을 2번 받은 것이 된다. 따라서 error때문에 받은 data가 새로운 data인지 다시 보낸 data인지 구분이 안가게 된다. 다음 그림을 보면서 이해를 해보자.

network4_2


문제점을 해결하기 위한 RDT 2.1

RDT 2.0에서의 문제점을 해결하기 위해 등장했다.

각각의 packet에 Sequence #(Seq #) 를 추가하는 것이다.

Seq #을 packet에 붙이게 된다면,

network4_3

현재 가정은 한번에 하나의 packet만을 보낸다이기 때문에 Seq #은 2개가 필요하다.


RDT 2.2 : a Nak-free protocol

기능은 RDT 2.1과 똑같지만 NAK대신 ACK(seq #)을 사용하여 중복된 packet을 받았는지 알려준다.

network4_4

ACK(seq #) : 가장 마지막으로 sender가 receiver에게 준 packet이 seq #번째 packet이다. 그러니깐 이 다음 packet을 receiver에게 달라는 신호.


Case 3 : Channel with Loss & Packet Errors - RDT 3.0

sender가 보낸 packet이 Loss되면 sender에게 아무것도 돌아오지 않는다. 계속 기다리게 되기 때문에 Timer를 설정해놓는다.

Timer : 일정시간 이상 지났는데도 receiver에서 feedback이 없다면 Loss라고 판단 후 재전송.


정리

  1. Unreliable channel에서 일어날 수 있는 일
    1. Packet error
    2. Packet loss
  2. Packet error 해결을 위한 mechanism
    1. Error detection -> checksum bit
    2. Feedback -> ACK or NAK
    3. Retransmission -> NAK면 재전송
    4. Sequence # -> ACK/NAK가 error일 경우 고려.
  3. Packet loss 해결을 위한 mechanism
    • Timeout : 일정시간 지나면 sender에서 receiver에게 packet 재전송(Loss로 판단했기 때문)

TCP Layer가 이러한 기능들을 제공하기 때문에 segment HEADER부분에는 ACK, Seq#, checksum bit등등이 있다. flow control과 같은 다른 기능도 제공하기에 segment HEADER부분에는 많은 field가 있는 것이다.


다음 시간에 할 것

이번시간에 배운 이 RDT protocl은 매우 단순해서 실제로 쓸 수는 없다. 왜냐하면 우리는 한번에 하나의 packet만을 전송한다고 가정했기 때문이다. 따라서 다음 시간에는 ‘Pipelined protocols’에 대해 배워볼 것이다.