[CS]Connection timeout과 Read timeout의 차이

무지성개발자·2023년 8월 26일
0

Connection timeout과 Read timeout

Connection timeoutTCP 3 way handshake에서 발생하며 예상한 시간까지 제대로 연결을 못해 발생하는 timeout이다.

Read timeout은 연결을 완료한 후 요청을 보냈는데 예상 응답시간을 넘어도 응답이 돌아오지 않아 발생하는 timeout이다.

RTO와 RTT

RTO는 재시도 하는 시간을 말하는데, 상대방의 응답이 RTO을 넘어간다면 내가 보낸 패킷이 유실 됐다고 판단하고 다시 시도하는 시간이다.

한 번 서로 요청과 응답을 완료됐다면 그 통신 시간을 RTT라고 한다.

RTO는 RTT를 기준으로 동적으로 결정 된다. 하지만 맨 처음 연결에는 RTT가 얼마나 걸릴지 모르니 기본값이 정해져 있는데 이걸 InitRTO라고 한다. 리눅스는 1초로 설정돼있다.

Connection timeout이 발생하는 과정

Connection timeout에서 InitRTO를 사용하는 두 가지 경우다. A서버는 A서버가 보낸 SYN가 유실되도, B가 보낸 SNK+ACK가 유실되도 응답을 못 받은건 마찬가지다. 즉, 한번도 연결이 성공한적이 없으니 InitRTO를 기준으로 재시도 한다.

Read timeout이 발생하는 과정

Read timeout은 Connect를 하면서 서로 통신에 걸리는 시간을 알았으니 Connection timeout보다 재시도하는 시간이 빠르다. 하지만 RTO_MIN은 200ms니 RTT가 RTO_MIN보다 짧아도 RTO는 최소 RTO_MIN만큼은 기다린다.


한 줄평 : Connection timeout과 Read timeout의 재시도 시간과 횟수는 정답이 없으므로 적절한 시간을 찾아서 적용해야한다.

참고 -
https://alden-kang.tistory.com/20

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글