잡음 환경에서 작동을 보장하도록 진단기와 DoIP Edge Node PHY간의
최대 케이블 길이에 의해 구현되기 위한 요구 사항
DoIP Edge Node는 100Base-TX 지원해야 함 ➢ 최대 100 Mbit/s 100m
DoIP Edge Node는 10Base-T를 지원해야 함 ➢ 최대 10 Mbit/s 100m

DoIP 통신 표준이고 위에는 OBD-II 단자로 주행 도중 통신이 필요없음

DoCAN 대신 DoIP Layer로 하게 된다
ISO 13400-3 : 물리/데이터 링크 계층. IEEE 802.3 기반 유선 차량 인터페이스
ISO 13400-2 : NW, 전송 계층. TCP/UDP/IP 사용
ISO 14229 : UDS


Protocol Version : DoIP Packet의 버전
Inverse Protocol Version : Inverse value of Protocol 버전
Payload Type : DoIP가 제공할 진단 서비스
Payload Length : Data length
Data : Payload Type에 따른 서비스의 Data
만약 진단 메시지라면, UDS가 쓰인다.

일반적인 DoIP Header의 구조

당연히 TCP/UDP를 사용하기 때문에 Port가 필요하고 열어야 할 필요가 있다.
DoIP 지원 TCP Port :13400(TCP_DATA)
진단 메시지를 위해서는 TCP를 사용해야함

UDP인데 비신뢰성 비연결성 통신이다보니까
순서 뒤틀리고 데이터 무결성이 보증되진않다보니 진단에선 잘 안쓴다.

진단 서비스의 표준으로 DoCAN과 마찬가지로 SID가 존재한다.

DoIP 진단기와 CAN base ECU간 Interface가 필요함
일단 IP없는 CAN Node ECU의 경우 CGW_CCU가 CAN ID를 통해 어디로 라우팅할 지 결정한다
CGW_CCU가 DoIP M를 받고 CAN-TP를 통해 CAN M를 던진다.
[0x03, 0x22, 0x00, 0x01, 0x00 ...] 처럼

진단기와 CGW_CCU간 TCP socket의 연결이 되어야 함
Gateway를 통한 진단 Routing

UDP 등을 사용해 브로드캐스트 또는 멀티캐스트하여 차량 정보를 통지
1. VIN 일부 : 첫 3or9 글자
2. Logical Address : UDS의 사용주소
3. EID(Entity Identifier) : 장치 고유 ID
4. GID(Group Identifier) : ECU가 속한 그룹 ID
해당 메시지의 Source IP를 이용해 Edge Gateway의 IP 주소를 알 수 있음
혹은
Static IP 설정 : Edge Gateway IP를 고정값을 사용
OEM별 자체 알고리즘 : OTA등을 위한 자체 알고리즘 활용함

TCP 소켓 열고 Routing 요청과 응답을 받은 후에 진단 메시지 날린다.
CGW_CCU에서는 DoIP 메시지를 CAN으로 변환하여 Node에 전달(CAN Node 한정)
이는 응답때 다시 DoIP 메시지로 변환하여 결과를 응답해주게 됨


ARP를 통한 MAC주소 확인 필요
진단기(192.168.1.1)이 CGW_CCU(192.168.1.2)의 MAC주소를 get
TCP Socket 연결 과정 수립
Handshaking 후 연결 맺음


Routing Activation
진단기와 CGW_CCU간 Routing Activation 응답과 요청
진단기는 진단 메시지 요청을 전송
진단기(0x200)이 UDS data(10 01)을 ECU(0x203)에 요청함
CGW는 있는 서비스에 있는 노드니까 긍정 응답을 진단기에 전송


ECU는 진단 응답 메시지를 진단기에 전송
CGW는 ECU의 TxID(0x700)과 RxID(0x600)에 요청과 응답을 진행
ECU 응답 : [06] 50 01 F4 09 C4 [00]
06: LEN / 그 뒤가 응답 Data
CGW는 이를 진단기에 응답(DoIP로 전환)



Ethernet Node의 경우 CGW타고 CAN-TP를 통해 보내줄 이유가 없음
진단기와 ECU간 TCP Socket 연결
Routing Activation
진단기가 ECU에 진단 메시지 요청
ECU 처리
ECU가 진단기에 메시지 응답


이건 뭐 CGW랑 하는거랑 똑같다. TCP_DATA socket 연결


Activate Diagnostic Routing
진단기와 ECU간의 Routing Activation 요청/응답
진단기가 진단 메시지 송신
진단기(0x200)이 UDS(10 03) Data를 요청함 - DoIP ECU에(0x205)
ECU는 진단 응답(Pos ACK)을 진단기에 전송함


ECU가 진단 메시지를 진단기에 전송함(요청에 대한)