车联网SOMEIP应用总结

1 SOMEIP数据包格式
Figure 1-1 SOMEIP报文头

Figure 1-2 SOMEIP报文头

Figure 1-3 SOMEIP报文格式

1)MessageID(包括16bit ServiceID和16bit MethodID)
等于0xffff8100表示SD消息,其它表示gateway消息。
2)OFFER_SERVICE和FIND_SERVICE
FIND_SERVICE:由Client发起,去对端查找对方是否支持特定的ServiceID,如果对端支持,会用OFFER_SERVICE回应该请求。
OFFER_SERVICE:由本地主动周期性发送(类似于USB-PD中的广播Send_Capabilities包)。

OFFER_SERVICE或者FIND_SERVICE之后,只有event才会SUBSCRIBE,接着如果对端有事件,对端就会notify。
3)Session ID
初始值为1,每次传packet,都需要自动加1,一直到0xffff后,再回到1继续累加计数。如果Session ID的值为0,表示本机或者service正在重启,对端会关闭连接并重新OFFER_SERVICE或者FIND_SERVICE。

2 SUBSCRIBE
- SUBSCRIBE on Offer Service
once ECU1 someipsdd receives OFFER_SERVICE from ECU2 someipsdd and FIND_SERVICE from local client, someipsdd matches the service id , instance id 's of both OFFER_SERVICE and FIND_SERVICE , if matches, FIND_SERVICE成功,然后local client去连接服务器的UDP和TCP sockets,当TCP和UDP sockets连接成功后,then serverConnected EVENT is sent to the local client, and local client sends SUBSCRIBE to ECU2.

tcp/udp socket创建完成 -> serverConnected() -> 订阅
订阅回调如果使用TCP协议,server端由于TCP粘包效应(nagle算法),可能会把几个notification的payload合成一个,然后发送到client端;如果client没有很好地解析该报文,可能导致丢失notification。

tcpdump -i lo port 56790 -w /sdcard/someip_snoop.pcap

Figure 2-1 Subscription

3 Wireshark SOMEIP plugin
解压后,将所有后缀是lua的文件拷贝到Wireshark安装目录下plugins/2.4.10/下。

3.1 时间戳调整为UTC显示格式
View -> Time Display Format -> Date and Time of Day

3.2 常用过滤关键字
1)someip
2)ip.src == 192.168.1.1 - 改到对应的ip地址
3)ip.src == 192.168.1.1 and ip.dst == 192.168.1.2 - 改到对应的ip地址
4)someip.messageid == 0xffff8100 and ip.src == 192.168.1.2 - 改到对应的ip地址
5)dns - 调试域名解析
6)tcp.port == 8000
7)!(tcp.analysis.retransmission)
8)tcp.flags.syn==1 or tcp.flags.ack==0
9)tcp.flags.fin == 1
10)usb.src == "1.6.1" and usb.dst == "host" - 改到对应的USB bus_no.addr.ep_no

3.3 常用搜索关键字
1)OFFER_SERVICE
2)FIND_SERVICE
3)SUBSCRIBE

3.4 SOMEIP TCP连接心跳包
SOMEIP TCP连接心跳包(4个字节):0x dead beef

4 车载以太网测试设备
4.1 测试设备
驱动开发调试设备:NI
SOME/IP测试设备:德国technica engineering车载以太网交换机
TC8 TCP/IP测试设备:英国Spirent, Spirent 测试TC8协议时,需要有一个配套的软件

4.2 抓包工具CANoe.Ethernet
VN5610A / VN5640
CANoe文件格式后缀名.blf

Figure 4-1 VN5610A双通道port mirror抓包

5 网络调试助手
NetAssist.exe

使用说明:勾选“按十六进制发送”CheckBox,然后粘贴要发送的16进制数据到“发送窗口”,点击“发送”按钮。

6 网络线路规程qdisc
6.1 socket buffer
6.1.1 对策
发送端:使用reactor方式,需要发送的数据存放于buffer中,socket可写时再做实际发送
接收端:将业务线程与IO线程分离

6.1.2 URLs
socket之send与发送缓冲区大小的关系
https://blog.csdn.net/smart55427/article/details/9112941

关于socket中的send函数
https://blog.csdn.net/gukesdo/article/details/7295592

socket的发送和接收缓冲区
https://blog.csdn.net/h002399/article/details/46605863/

6.2 qdisc驱动队列
- num_tx_queues表示发送队列的个数,在创建网络设备时进行初始化
- tx_queue_len表示发送队列的最大长度,也即发送队列中正在排队的最大skb个数
-网络的驱动队列由qdisc管理
net/sched/sch_generic.c
pfifo_fast_enqueue()默认的排队函数

Figure 6-1 Driver Queue

6.3 socket读写错误返回值
socket读写错误返回值:errno

7 tcpdump抓到的log循环写
tcpdump -X -i eth0 -s 0 -C 20 -W 3 -w /data/ipsnoop.pcap -Z root

-i:设备名
-s:过滤包大小限制
-C:定义生成文件大小,兆(Mega Bytes)为单位,取整数
-W:可生成多少个文件
-w:指定生成文件的路径
-Z:用户组,user或者root;Linux如果想循环写文件,此选项必须有,Android不需要

8 URLs
wireshark使用过滤表达式(针对ip、协议、端口、长度和内容)
https://blog.51cto.com/nyc1991/1287775

SOME/IP Serialization
https://forums.ni.com/t5/LabVIEW-Automotive-Ethernet/SOME-IP-Serialization/gpm-p/3845830

www.some-ip.com
https://github.com/GENIVI/vsomeip/wiki

发布了121 篇原创文章 · 获赞 47 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/zoosenpin/article/details/73550138
今日推荐