네트워크 - 6

KOCW 6강

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


5강 복습

TransPort Layer에서 중요한 기능인 Reliable Data Transfer의 원리와 RDT를 구현하기 위해 필요한 메커니즘을 배웠다. 그리고 실제로 RDT network를 사용하기 위해서는 pipeline 방식이 전송이 필요하다는 것도 알게되었다.

Pipeline 방식으로 동작하기 위해 어떤 방식으로 생각해야 할지에 대한 2가지 approach를 했었다. (Go-Back-N, Selective Repeat)


6강 시작

TCP(Transmission Control Protocol)


TCP Segment Structure

network6_2

Application의 message가 socket이라는 interface를 통해 Transport layer로 내려가서 TCP의 전송단위인 Segment에 들어간다. 그림에서는 message의 HEADER가 없는 것 같지만 실제로 message도 HEADER가 있다. 이번 단원은 Transport Layer에 관해 다루는 것이라서 무시하고 넘어간 것.


network6_3

 사진 출처 


TCP Seq #’s and ACKs

* 다시!! 정리하고 들어갈 내용 - ACK 의미


network6_4

 사진 출처 


TCP에서 쓰는 Seq #

network6_7

위 그림과 같이 Seq #을 설정해주는 것이다.


Timeout - function of RTT(Round Trip Time)

segment가 중간에 Loss되면 RDT에서는 timer를 이용해서 timeout이 되면 탐지를 할 수 있다. 근데 과연 timeout의 기준은 어떻게 할까??

5강에서는 timeout 시간의 관계를 위와 같이 설명했었다. 과연 어떤 값이 가장 효율적일까?


timeout을 RTT로 한다면?

RTT : segment의 왕복 시간.

그러나 RTT는 network 상황(queueing delay 등등), 모든 segment가 같은 경로를 지나가는 것이 아니라는 것 등등 다 달랐다. 밑에 그림의 파란색 그래프가 RTT의 큰 편차를 보여준다.


timeout을 Estimated RTT로 한다면?

\[EstimatedRTT = (1-\alpha)*EstimatedRTT + \alpha*sampleRTT\]

일반적으로 a=0.125 로 하여 편차가 큰 현재 측정값(RTT)을 덜 심각하게 반영하려고 했었다. 따라서 편차는 줄어들었다. 근데 너무 촉박하다는 느낌이 든다. 따라서 여유시간이 필요해 보였다.

아래 그림은 sample RTT와 timeout을 Estimated RTT로 했을 때의 그래프이다. 편차가 큰 RTT에 대해서는 무조건 timeout이 일어날 것이다.

network6_8

 사진 출처 


timeout 최종 결정

timeout이라는 것은 loss가 확실할 때 일어나야 하는게 아닐까? 하는 생각이 적용됐다. \(DevRTT = (1-\beta)*DevRTT + \beta*|SampleRTT - EstimatedRTT|\) Estimated RTT에 safety margin을 추가하고 싶었다. 그 safety margin이 바로 DevRTT. 따라서 최종 timeout은 \(TimeoutInterval=EstimatedRTT+4*DevRTT\) 가 된다.


TCP Reliable Data Transfer


Fast retransmit

TCP에서는 ACK를 받은 후 동일한 ACK가 3개 이상 받게되면 timeout으로 하라고 권고한다. 이렇게 하면 timeout이 일어나기 전에 빠르게 재전송을 할 수 있다.