엔지니어링

TCP 연결 확인 방법

powerpress0809 2024. 6. 3. 13:04

데이터를 주고 받을 경우

재전송이 발생하는 상황 (Retransmission 상황)
1. Packet Lost : 송신자가 보낸 패킷을 수신자가 받지 못함. ACK도 송신자에게 보내지 않음. (송신자의 Timer 만료)
2. Ack Lost : 송신자가 패킷을 보냈고, 수신자가 받아서 ACK를 보냄. 하지만, 유실되어 송신자가 ACK 수신 불가. (송신자의 Timer 만료)
3. Early Timeout : 송신자가 패킷을 보냈고, 수신자가 받아서 ACK를 보냄. 하지만, 네트워크 지연이 발생하여 송신자의 Timer 만료 이후에 도착.

RTO (Retransmission Time Out) VS RTT (Round Trip Time)
위의 3가지 상황에서 공통점은 "Timer 안에 ACK를 받지 못했다." 여기서 프로토콜이 할 수 있는 최선은 Timer 시간을 정의하는 것.
Timer의 시간이 지나치게 짧으면 재전송 패킷의 낭비가 심해지고, 지나치게 길면 패킷이 손실되었다는 판단을 얻고 다음 전송을 하는 시간이 너무 길어진다.

RTO는 운영체제 커널에 정의가 되어있다. 운영체제 별로 초기값을 갖고 있지만, 당연히 모든 네트워크 상황은 다르므로 RTO는 동적으로 변한다.
RTO는 RTT에 의해서 변하는데, RTT는 서버와 클라이언트간의 Ack를 받기까지 걸리는 시간을 의미.

Sample RTT : 보통 Original Transmission, 재전송이 아닌 첫 전송에 대한 ACK를 받기까지의 시간으로 설정. 
             이때, 재전송이 발생할 경우, 첫 전송에 대한 Ack인지, 재전송에 대한 Ack인지 알 수 가 없다.
 
================================================================================================================================

데이터를 주고 받지 않을 경우

Keepalive 매커니즘: TCP Keepalive는 서버가 클라이언트와의 연결 상태를 주기적으로 확인할 수 있는 방법을 제공. 
설정된 간격으로 서버는 클라이언트에 Keepalive 패킷을 전송하고 응답을 기다린다. 일정 횟수의 Keepalive 패킷에 대한 응답이 없으면 서버는 연결이 끊어진 것으로 간주.  

결국, Established 상태에서 두 종단 간 데이터 전송시 수신자가 데이터를 받았다는 Ack를 송신자에게 보낸다. 연결이 원활하면 송신자가 Ack를 받는다. 
아닌 경우에는 Timer가 만료되어 Retransmission 상황이 발생. 단, 이것은 데이터를 주고 받을때의 경우이다. 
만약 둘 중 하나의 연결이 끊어졌고 서로 데이터를 주고 받지 않을 때에는. Keepalive 매커니즘이 동작하여 연결 유무를 판단.

'엔지니어링' 카테고리의 다른 글

리눅스 네트워크 스크립트 정리  (0) 2025.03.06
L7 장비 - 용어 정리  (0) 2024.06.11
TCP 상태  (0) 2024.05.08
IP에 대해서  (0) 2024.05.08
SSL 용어 정리  (0) 2024.05.07