가자미의 개발이야기

[네트워크] TCP(헤더와 타이머) 본문

Computer Science/네트워크

[네트워크] TCP(헤더와 타이머)

가자미 2021. 4. 16. 16:18

a. TCP의 특징 간단요약

 

point to point : 한 리시버와 한 센더가 참여.

신뢰성(rdt지원), in order 지원

pipelined 형식(버전에 따라 gbn, selective 형식 지원)

센드 버퍼와 리시브 버퍼 존재

한 연결에서 양방향 데이터 흐름

connection  oriented(handshaking) 센더와 리시버의 상태정보를 기억.

flow controlled 처리 속도보다 전송 속도가 빠를 경우 속도를 조절.

 

b. TCH 헤더

sequence number, ack => rdt에 사용되는 기능

시퀀스 번호와 ack는 바이트 단위당 1씩 늘어간다.

 

head len(head length) : 디폴트 헤드 20바이트 + option의 길이를 확인. option의 존재 유무 파악

 

UAPRSF =>모두 1비트(0과 1 값만 가질 수 있음)

U 잘 안쓰임.

A ack가 유효한가?

P 잘 안쓰임.

R reset. 연결리셋 연결강제종료

S sync. 연결

F final. 연결종료

 

recieve window : 리시버가 현재 받을 수 있는 데이터 량. 플로우컨트롤에 활용

 

check sum : udt에서 check sum과 동일한 기능

 

urg data pointer : 잘 안쓰임

 

option : 있을 수 있고 없을 수도 있는 가변기능(특별한 경우 아니면 잘 안쓰임)

 

c. TCP timer

TCP는 데이터에 대한 ack가 정해진 시간내에 오지 않으면 보낸 패캣을 재전송한다.

이때 정해진 시간을 재는 타이머를 너무 길게, 너무 짧게 설정하면 피해를 본다

 

길게 하면, rtt(데이터가 전송되고, ack가 오는 데 걸리는 시간)이 끝나도 다른 패캣을 보내지 않기 때문에 시간적인 손해를 본다.

짧게 하면, 정상적으로 ack가 오고 있는데 패캣을 재전송하는 불필요한 작업을 하게 될 수 있다.

 

TCP는 timer를 여유있게 하는편.

SampleRTT(측정값)를 다 모아 정규분포 95%의 신뢰도로 타이머를 설정.

하지만 매번 SampleRTT는 매번 달라져 정규 분포 모양이 달라짐.=>SampleRTT 수집방식은 사용할 수 없음.

 

대신 exponential weighted moving average를 사용

EstimatedRTT (특정 시점에서의 RTT의 가중평균)를 통해 대략적인 평균 RTT를 예상.

이때 SampleRTT는 지금까지 관찰된 모든 RTT를 의미(알파는 0.125)

 

이를 활용해서 타이머는 EstimatedRTT에 약간의 여유를 줘서 준다.

여기서 약간의 여유는 DevRTT(분산값)을 이용한다.

측정한 값-평균값이라는 느낌..

즉 TimeoutInterval = EstimatedRTT + 4*DevRTT로 한다.