DoIP 디버깅하다 보면 은근 자주 보이는 패킷이 하나 있다.
3E 00
처음 보면 좀 이상하다.
- 특별한 데이터도 없음
- ECU 제어도 아님
- 읽는 것도 아님
근데 계속 주기적으로 날아간다.
이게 바로:
- Tester Present
- Session 유지 메시지
다.
오늘은 이게 왜 필요한지,
실무에서는 어떻게 보는지 가볍게 정리해보자.
Tester Present 한 줄 정리
Tester Present는
ECU에게 “아직 진단 중이니까 세션 유지해라”라고 알려주는 메시지다.
즉:
- 연결 살아 있음
- 진단 계속 진행 중
- Session 종료하지 말 것
이 의미다.
왜 이런 게 필요하냐
ECU 입장에서 생각해보면 간단하다.
진단기가:
- Session 변경함
- Security Unlock함
- 그런데 갑자기 조용함
그러면 ECU는 이렇게 생각한다.
“작업 끝났나 보다”
그래서 일정 시간 지나면:
- Default Session 복귀
- Unlock 해제
- 일부 기능 종료
이렇게 돌아간다.
이걸 막기 위한 게 Tester Present다.
보통 어디서 쓰이냐
실무에서는 거의 이런 상황이다.
Flash 작업 중
가장 대표적이다.
Firmware 다운로드 중에는
시간이 꽤 오래 걸린다.
이때 Session 유지 안 하면
중간에 Default Session으로 돌아간다.
긴 Routine 실행 중
예:
- EEPROM 작업
- Calibration 처리
- Internal erase
이런 작업도 시간 걸린다.
사용자 대기 상황
툴에서 잠깐 멈춘 동안에도
세션 유지 필요할 때가 있다.
패킷 구조는 엄청 단순하다
요청
3E 00
의미:
3E → Tester Present
00 → Sub Function
응답
7E 00
그러면 ECU가:
“응 유지 중”
이렇게 응답한 거다.
근데 응답 안 오는 경우도 있다
여기서 헷갈린다.
UDS에서는:
Suppress Positive Response
옵션이 있다.
예:
3E 80
이 경우 ECU가 응답 안 할 수도 있다.
즉:
- 요청은 정상
- ECU도 받음
- 근데 일부러 응답 생략
이런 흐름 가능하다.
처음 보면 timeout처럼 착각하기 쉽다.
실무에서 많이 터지는 문제
이건 진짜 자주 본다.
1) Tester Present 안 보내서 Session 종료
대표적이다.
- Extended Session 들어감
- 잠시 작업 멈춤
- 다시 요청 보냄
- 갑자기 NRC 발생
알고 보면 Session timeout이다.
2) 주기 너무 느림
ECU timeout보다 느리게 보내면 의미 없다.
예:
- ECU timeout: 5초
- Tester Present: 10초
이러면 이미 세션 종료된 뒤다.
3) 너무 자주 보냄
반대로 너무 빠르게 보내는 것도 좋지 않다.
실무에서는 보통:
- 1~2초
- 또는 OEM 권장 주기
이 정도 많이 쓴다.
S3 timeout이라는 것도 같이 본다
Tester Present 이야기 나오면
거의 항상 같이 붙는 게 있다.
S3 Server Timeout
이건 ECU가:
“얼마 동안 요청 없으면 세션 종료할지”
정하는 시간이다.
즉:
- Tester Present 주기
- S3 timeout
이 둘이 연결된다.
디버깅할 때 보는 포인트
개인적으로는 이 순서로 본다.
1. 현재 Session 확인
2. S3 timeout 확인
3. Tester Present 주기 확인
4. Session 유지 여부 확인
5. 중간에 Default 복귀하는지 확인
특히:
- “처음엔 되다가 갑자기 안 됨”
이런 건 Session timeout 꽤 많다.
DoIP에서는 더 티가 난다
CAN에서는 상대적으로 단순하게 보였는데,
DoIP에서는:
- TCP 연결은 살아 있음
- 근데 Session은 종료됨
이 상황이 자주 나온다.
그래서:
“TCP alive ≠ Diagnostic alive”
이걸 구분해야 한다.
패킷 흐름 느낌으로 보면 이렇다
10 03
→ Extended Session 진입
27 01
→ Security Access 진행
3E 00
→ Session 유지
3E 00
→ Session 유지
31 01
→ 실제 작업 수행
이 흐름이 꽤 자주 나온다.
다음 글에서는 ECU Reset 쪽 보자
Tester Present까지 이해했으면
Session 흐름은 거의 잡힌다.
다음은 이런 걸 보면 좋다.
- ECU Reset 종류
- Hard / Soft Reset 차이
- Reset 이후 Session 변화
- TCP 재연결 이슈
여기부터는 실제 ECU 동작 느낌이 더 강해진다.
추천 대상
- Session timeout으로 고생하는 사람
- Flash 작업 중 세션 끊기는 사람
- Tester Present 의미가 헷갈리는 사람
한 줄 요약
Tester Present는 ECU에게 진단 세션이 아직 활성 상태임을 알려 Session timeout과 Default Session 복귀를 방지하는 유지 메시지다.
추천 키워드
UDS Tester Present, S3 timeout, DoIP session keep alive, UDS over IP, Automotive Ethernet
DevBJ | No Bio, Just Log #오늘을살자