가자미의 개발이야기
[네트워크] TCP(헤더와 타이머) 본문
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를 예상.
이를 활용해서 타이머는 EstimatedRTT에 약간의 여유를 줘서 준다.
여기서 약간의 여유는 DevRTT(분산값)을 이용한다.
즉 TimeoutInterval = EstimatedRTT + 4*DevRTT로 한다.
'Computer Science > 네트워크' 카테고리의 다른 글
[네트워크] TCP 혼잡제어 (0) | 2021.04.22 |
---|---|
[네트워크] TCP(rdt, flow control, connection management) (0) | 2021.04.16 |
[네트워크] RDT(신뢰성있는 데이터 전송) (0) | 2021.04.06 |
[네트워크] 수송 계층 (0) | 2021.04.03 |
[네트워크] CDN (0) | 2021.03.26 |