Skip to content
Go DevBJ
Go back

DoIP에서 ACK를 받았는데 UDS 응답이 없다: Diagnostic ACK/NACK를 제대로 쓰는 법

Edit page

실무에서 이런 로그를 한 번쯤 본다.

이때 흔히 하는 착각이 이거다.

ACK가 왔으니 ECU가 처리한 거 아닌가?

결론부터 말하면,
DoIP ACK/NACK는 UDS 응답이 아니다.

오늘은 “ACK를 받았는데 왜 UDS가 없지?”를 빠르게 분해하기 위해
DoIP Diagnostic ACK/NACK를 어떻게 봐야 하는지 정리해본다.

한 줄로 구분하기

계층을 분리해서 보면 헷갈릴 일이 줄어든다.

즉,

전형적인 흐름(그림으로)

보통은 이런 느낌이다.

Tester  --(TCP)-->  DoIP Entity/Gateway  --> ECU

1) Tester: Diagnostic Message(UDS Request) 전송
2) DoIP: (있다면) ACK 또는 NACK 수신
3) UDS: (있다면) ECU의 UDS Response 수신

여기서 포인트는 2)와 3)이 다른 신호라는 것.

ACK가 와도,
UDS 응답은 늦게 오거나 아예 안 올 수 있다.

“ACK가 왔는데 UDS가 없다”에서 갈리는 2가지 경우

1) DoIP는 받았지만 UDS까지는 못 갔다

ACK가 “게이트웨이가 TCP로 데이터를 받았다/처리 큐에 올렸다” 수준일 수 있다.

이 경우는 이후에:

같은 이유로 UDS 응답이 안 올 수 있다.

즉, ACK는 ‘최종 ECU 응답 보장’이 아니다.

2) UDS는 갔는데, 응답을 너(테스터)가 못 받는 구조다

예를 들면 이런 케이스다.

그래서 “ACK는 왔는데 응답이 없다”면
네트워크/DoIP/UDS를 동시에 의심하지 말고 분기부터 하자.

NACK가 왔을 때는 오히려 쉬워진다

NACK는 보통 이런 메시지다.

“이 Diagnostic Message는 DoIP 레벨에서 거절한다”

실무에서 자주 보는 NACK 원인은 대략 이 범주로 정리된다.

표준 명칭/코드값은 구현마다 로그 표현이 조금 다를 수 있는데,
핵심은 동일하다.

UDS 레벨로 내려가기 전에, DoIP에서 이미 거절됐다

그래서 NACK가 보이면
UDS 디버깅보다 먼저 SA/TA/RA 상태부터 잡는 게 정답이다.

ACK/NACK를 디버깅에 써먹는 로그 포인트

개인적으로는 이 6개를 같이 남기면 추적이 빨라진다.

ACK/NACK만 따로 보면 힌트가 약하다.
UDS 요청/응답 로그와 같은 축으로 묶어서 봐야 한다.

빠른 체크리스트(현장용)

NACK가 보이면

  1. SA가 Routing Activation 때 쓴 테스터 주소와 같은지 확인
  2. TA가 실제 ECU/게이트웨이 라우팅 테이블에 존재하는지 확인
  3. 재연결 후 RA를 다시 했는지 확인(“TCP만 재연결” 실수 주의)
  4. 패킷 길이/헤더/페이로드가 깨지지 않았는지 Wireshark로 확인

ACK는 오는데 UDS 응답이 없으면

  1. 같은 소켓에서 응답이 돌아오는지(멀티 테스터/세션 꼬임) 확인
  2. UDS 세션이 살아있는지(Tester Present, session timeout) 확인
  3. ECU가 “무응답 정책”인 서비스인지 확인(예: suppress response)
  4. Response Pending(0x78) 처리/타임아웃 정책이 맞는지 확인
  5. 게이트웨이 내부 포워딩/버스 부하로 지연이 늘었는지 확인

한 줄 요약

DoIP Diagnostic ACK/NACK는 DoIP 레벨 신호이고 UDS 응답과 별개라서, ACK를 “성공”으로 착각하지 말고 SA/TA/RA/세션 로그와 함께 디버깅 힌트로 써야 한다.

추천 키워드

DoIP, UDS over IP, Diagnostic ACK, Diagnostic NACK, Source Address, Target Address


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


Edit page
Share this post on:

Previous Post
lwIP pbuf가 가끔 터진다: PBUF_REF/POOL/RAM 수명주기와 zero-copy 함정
Next Post
DoIP Functional Address는 왜 응답이 이상하게 보일까