Skip to content
Go DevBJ
Go back

DoIP 통신이 가끔 끊긴다: Alive Check / TCP Keepalive / Tester Present를 분리해서 보자

Edit page

DoIP는 TCP라서 “연결만 되면 됐다”라고 생각하기 쉬운데,
실무에서는 가만히 두면 어느 순간 죽는 경우가 생각보다 많다.

이때 흔히 하는 실수가 이거다.

Alive Check를 붙이면 UDS 세션도 유지될 거라고 착각한다

결론부터 말하면,
Alive Check / TCP Keepalive / Tester Present는 목적이 다르다.

오늘은 “끊김”을 줄이기 위해
이 3개를 어떻게 나눠서 보면 되는지 정리해본다.

세 가지 keep-alive를 한 줄로 구분

실무에서 끊김 이슈는 대부분 여기 셋 중 하나다.

셋을 섞어서 보면 원인 파악이 늦어진다.

1) TCP Keepalive: “패킷이 안 오면 중간 장비가 끊는다”

DoIP는 기본적으로 TCP 위에서 돈다.
근데 TCP는 “애플리케이션 데이터”가 없으면 조용하다.

이 구간에서 흔히 마주치는 게 이런 것들이다.

이건 DoIP가 아니라 네트워크 레벨 이슈다.

그래서 TCP Keepalive는 “DoIP 기능”이라기보단
네트워크 장비에 의해 세션이 정리되는 걸 줄여주는 쪽이다.

체크 포인트는 단순하다.

2) DoIP Alive Check: “DoIP Entity가 이 세션을 계속 인정하냐”

Alive Check는 DoIP 레벨의 확인 메시지다.
의미는 대략 이거다.

“너(테스터) 아직 살아있냐?”

실무 포인트는 이거다.

그래서 “TCP 연결은 유지됐는데 DoIP가 먹통” 느낌이면
Alive Check 쪽을 먼저 의심해보는 게 빠르다.

3) UDS Tester Present: “진단 세션 타이머는 따로 돈다”

UDS 세션은 보통 별도 타이머가 있다.
진단 툴이 잠깐 멈추거나, 주기가 느려지면 ECU가 이렇게 판단한다.

“테스터가 떠났네. 세션 닫자”

여기서 중요한 건,
TCP/DoIP가 살아있어도 UDS 세션은 죽을 수 있다는 거다.

즉:

그래서 “세션 유지” 목적이라면
결국 Tester Present를 설계에 넣어야 한다.

구현할 때 흔한 함정 3개

1) Tester Present를 무조건 주기 전송

무조건 보내면 편하긴 한데,
ECU/게이트웨이에 따라 부담이 될 수 있다.

실무에서는 보통 이렇게 나눈다.

2) 끊김 후에 Routing Activation을 재시도 안 함

끊겼다가 자동 재연결만 해놓고
Routing Activation을 다시 안 하는 경우가 있다.

이러면 UDS를 아무리 보내도
차량 쪽에서 그냥 무시한다.

끊김 복구 플로우는 보통 이거다.

TCP 재연결
→ Routing Activation 재요청
→ UDS 재시작

3) “무응답”을 전부 timeout으로만 처리

무응답이라고 다 같은 무응답이 아니다.

빠르게 분리하는 방법은 이거다.

디버깅 체크리스트 (짧게)

  1. 끊긴 시점에 Wireshark로 FIN/RST를 확인
  2. TCP 재연결이 됐으면 RA를 다시 했는지 확인
  3. 세션 유지가 목적이면 Tester Present 주기/조건을 확인
  4. “TCP OK + UDS 무응답”이면 Alive Check 응답이 오는지 확인
  5. 멀티 테스터 환경이면 다른 테스터가 세션을 밀어내는지 확인

한 줄 요약

DoIP 끊김은 하나가 아니라 TCP/DoIP/UDS 세 레이어 문제라서, Alive Check·TCP Keepalive·Tester Present를 분리해서 설계/디버깅해야 한다.

추천 키워드

DoIP, Alive Check, TCP Keepalive, Routing Activation, Tester Present, UDS session timeout


DevBJ | No Bio, Just Log #오늘을살자


Edit page
Share this post on:

Previous Post
lwIP에서 ISR에서 바로 보내면 가끔 터진다: tcpip_thread로 넘기는 패턴 정리
Next Post
DoIP에서 Tester Present 왜 계속 보내는 걸까