Skip to content
Go DevBJ
Go back

DoIP Gateway 구조를 이해해야 ECU가 보인다

Edit page

처음 DoIP를 접하면 보통 이렇게 생각합니다.

Tester <-> ECU

하지만 실제 차량에서는 구조가 더 복잡합니다.

대부분은 이런 형태에 가깝습니다.

Tester <-> DoIP Gateway <-> Multiple ECUs

즉, 테스터가 직접 ECU와 붙는 게 아니라,
중간 Gateway를 통해 routing 되는 경우가 많습니다.

이 구조를 이해하지 못하면:

같은 문제가 반복됩니다.

시리즈 목차

Gateway는 사실 라우터에 가깝다

이름 때문에 헷갈리는데,
DoIP Gateway는 단순 relay보다 router에 가깝습니다.

예를 들면:

Tester
  |
Ethernet
  |
DoIP Gateway
  ├── CAN ECU #1
  ├── CAN ECU #2
  ├── LIN ECU
  └── Ethernet ECU

Gateway는 내부적으로:

을 처리합니다.

즉, 진짜 진단 대상 ECU와 TCP 연결 endpoint가 다를 수 있습니다.

그래서 TCP endpoint만 보면 안 된다

이 부분이 꽤 중요합니다.

예를 들어:

TCP Connected IP = 192.168.0.10

이라고 해서 ECU가 직접 그 IP를 가진 건 아닙니다.

실제로는:

192.168.0.10 = Gateway
0x1201        = Actual ECU

일 수 있습니다.

즉:

입니다.

패킷 흐름은 이렇게 간다

예를 들어 ECU Reset 요청:

Tester
  |
  | Diagnostic Message
  | TA = 0x1201
  v
Gateway
  |
  | Internal Routing
  v
Target ECU

응답은 반대로 올라옵니다.

Target ECU
  |
  v
Gateway
  |
  | Diagnostic Response
  | SA = 0x1201
  v
Tester

여기서 중요한 건:

logical address 기반 routing

입니다.

Routing Activation도 Gateway 기준이다

이 부분도 자주 헷갈립니다.

Routing Activation 성공은:

Tester <-> Gateway

세션이 열린 겁니다.

즉:

RA success != 모든 ECU 접근 가능

입니다.

실제로는 gateway 정책에 따라:

같은 조건이 붙을 수 있습니다.

현장에서 자주 보는 오해

1) ECU 응답이 없다고 ECU 문제로 판단

실제로는 gateway routing 문제일 수도 있습니다.

예시:

wrong target address

그러면 gateway 내부에서 drop될 수 있습니다.

Tester 입장에서는 그냥 timeout처럼 보입니다.

2) ECU source address를 안 봄

응답 payload만 보는 경우가 많습니다.

하지만 gateway 환경에서는:

SA = 실제 응답 ECU

입니다.

즉:

RX payload 정상
BUT
unexpected source address

상황도 충분히 가능합니다.

특히 multi-ECU 환경에서는 source address 로그가 중요합니다.

3) Gateway overload 상황

Firmware flashing 중 자주 나옵니다.

예를 들어:

multiple tester
+ large transfer
+ internal CAN forwarding

상황이면 gateway queue가 밀릴 수 있습니다.

이 경우:

로 이어집니다.

내부 bus 속도 차이도 영향이 있다

이더넷은 빠릅니다.

하지만 내부 ECU 연결은:

일 수도 있습니다.

즉:

Ethernet ingress
→ Gateway processing
→ Slow internal bus

구조가 됩니다.

그래서 tester 입장에서는:

왜 Ethernet인데 이렇게 느리지?

상황이 나옵니다.

실제로 병목은 gateway 뒤쪽일 수 있습니다.

로그는 gateway 관점도 보여야 한다

추천 로그 예시:

[doip] rx ta=0x1201
[gateway] route target=CAN1
[gateway] forward success
[gateway] response from=0x1201

최소한:

정도는 보이는 게 좋습니다.

ECU 하나처럼 구현하면 나중에 힘들다

초기 테스트는 보통 단일 ECU라서 단순합니다.

Tester <-> ECU

하지만 실제 양산 구조는 거의 gateway 기반입니다.

그래서 코드 구조도 처음부터:

transport
→ routing
→ target ECU abstraction

형태로 나누는 게 유지보수에 좋습니다.

Wireshark만으로 부족한 경우

Gateway 내부 routing은 packet capture에 안 보이는 경우가 많습니다.

예를 들어:

Tester packet 정상
Gateway packet 정상

인데 내부 CAN forwarding 실패일 수 있습니다.

그래서 gateway internal log가 중요합니다.

특히:

같은 이벤트는 외부 trace만으로 안 보입니다.

오늘 포인트

DoIP 환경에서는 TCP 연결 대상과 실제 ECU가 다를 수 있습니다.

실제로 중요한 건:

입니다.

Gateway 구조를 이해하기 시작하면 DoIP 로그가 훨씬 읽히기 시작합니다.

다음 글에서는 DoIP에서 Vehicle Announcement와 Discovery timing이 실제 네트워크에서 어떻게 움직이는지 이어서 다뤄보겠습니다.

추천 대상

한 줄 요약

DoIP에서는 TCP 연결 endpoint보다 logical address 기반 gateway routing 구조를 이해하는 게 더 중요하다.

추천 키워드

doip, gateway routing, logical address, automotive ethernet, uds over ip, ecu routing


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


Edit page
Share this post on:

Previous Post
DoIP Vehicle Discovery가 가끔 안 잡히는 이유
Next Post
DoIP Firmware Download에서 갑자기 문제가 터지는 이유