자동차

차량 네트워크 / SOME/IP

삼전동해커 2023. 2. 27. 13:29

1. SOME/IP

 

SOME/IP는 Scalable service-Oriented MiddlewarE over IP의 약자이다.

automotive 영역에서 ECU간 Ethernet 기반 데이터 통신을 지원하기 위해 만들어진 protocol이다.

IP를 통해 ECU 간에 전송되는 메세지로 데이터를 주고 받는 것이 목적이다.

Device A가 원하는 서비스 정보를 담은 메세지를 Device B에게 전송하고 이를 응답해주는 구조이다.

메세지는 Header와 Payload로 구성되고 Byte 형태이다.

 

1-1. Header

Service ID : 서비스 고유의 ID

Length : Payload length

Client ID : ECU 내의 unique ID

Protocol version : 0x01

Interface version : Service interface의 메이저 버전

Message Type : 요청에 대한 응답을 기다릴 것인지 단순히 데이터 전송용인지 등에 대한 정보

Return Code : 응답이 정상인지 서비스가 있는지 없는지 등 응답의 상태에 대한 정보

 

 

SOME/IP는 UDP나 TCP를 사용해 통신한다.

패킷의 크기가 MTU 이상이면 TCP를 사용하게 된다.

UDP로 MTU 크기 이상의 패킷을 보내기 위해선 SOME/IP -TP라는 것을 사용해야 한다.

 

Serialization

SOME/IP의 직렬화는 binary (이진 형태로 인코딩)와 non-descriptive 포멧을 이용해 최소한의 RAM과 CPU 자원을 사용하도록 한다.

대부분의 메세지들은 비슷하거나 같은 형태의 포멧을 이용한다.

 

SOME/IP의 기본적인 datatype

boolean : 8bit의 False, True 값

uint8 : 8bit의 unsigned integer

uint16 : 16bit의 unsigned integer

uint32 : 32bit의 unsigned integer

uint64 : 64bit의 unsigned integer

sint8 : 8bit의 signed integer

sint16 : 16bit의 signed integer

sint32 : 32bit의 signed integer

sint64 : 64bit의 signed integer

flot32 : 32bit의 floating point number

flot64 : 64bit의 floating point number

 

Remote Procedure Call (RPC) and Messaging

1. Request / Response

요청 : 클라이언트가 서버에게 메소드를 요청하는 메세지

응답 : 서버가 클라이언트에게 메소드 동작의 결과를 전송하는 메세지

 

 

2. Fire / Forget

요청 : 클라이언트가 서버에게 메소드를 요청하는 메세지

응답없이 요청만 전송함. Message Type이 REQUEST_NO_RETURN 형식

 

클라이언트는 다음 사항을 만족해야 한다.

1. payload construct

2. client가 원하는 method에 대한 Message ID 설정

3. length field를 8bytes까지 설정 (header에서 length field 이 후를 위해서) + 직렬화된 payload의 길이 설정

4. Request의 ID를 unique하게 설정

5. protocol version을 설정해야함

6. interface version을 설정해야 함

7. message type을 REQUEST로 설정

8. return code를 0x00으로 설정

 

클라이언트는 request message가 완전히 전송되지 않았는데 response message가 오면 무시해야 한다.

서버는 다음 사항을 만족해야 한다.

1.  payload construct

2. request에 대응하는 Message ID를 설정

3. length를 8bytes까지 설정 + 새로운 payload size를 설정

4. request에 대응하는 Request ID를 사용

5. Message Type을 RESPONSE나 ERROR로 설정

6. return code를 설정

서버는 request message가 도착하기 전까지 특정한 Request ID에 대한 response를 보내면 안된다.

 

 

3.Event

서버가 전송하는 fire/forget의 회신.

일반적인 CAN 메세지와 비슷함.

 

4.Fields

Field란 Getter나 setter가 접근할 수 있는 속성을 나타낸다.

Getter : field 값을 읽기위한 메소드

setter : field 값을 설정하기 위한 메소드

 

AUTOSAR 표준

Transport Protocol Bindings

SOME/IP는 UDP와 TCP를 이용한다. 모든 TPB는 하나 이상의 메세지를 전송할 수 있다.

 

 

Error Handling

Error는 application layer 하위에서 다루어져야 하고 다음 2가지를 만족해야 한다.

1. response message에 return code가 있어야 한다.

2. error message에 대한 명시적 설명

 

Error Processing Overview

UDP로 전송된 SOME/IP 메세지는 아래의 조건을 만족해야 한다.

1. UDP 데이터그램 사이즈는 최소 16 bytes.

2. length field의 값은 UDP 데이터그램 페이로드의 나머지 bytes보다 작거나 같아야 한다.

이 중 하나라도 만족하지 못하면 malformed error가 발생한다.

 

TCP 과정에서 error가 발생하면 TCP 연결 상태를 체크하고 재연결한다.

연결 상태 체크는 다음을 포함한다.

1. 데이터가 다른 그룹으로 제대로 전달되었는지 확인한다.

2. Magic Cookie 메세지를 전달하고 TCP ACK를 기다린다.

3. TCP 연결을 재수립한다.

 

 

출처 : https://www.autosar.org/fileadmin/standards/R23-11/FO/AUTOSAR_FO_PRS_SOMEIPProtocol.pdf