当前位置: 首页 > news >正文

SOME/IP学习笔记2

1. SOME/IP 协议

        SOME/IP目前支持UDP(用户传输协议)和TCP(传输控制协议),

PS:UDP和TCP区别如下

  • TCP面向连接的,可靠的数据传输服务;UDP面向无连接的,尽最大努力的数据传输服务,不保证数据传输的可靠性
  • TCP面向字节流,UDP面向报文
  • 应用进程交给 UDP 多长的报文, UDP 就照样发送,一次发送一个报文
  • TCP 在发送时采取的方式完全不同:TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应该包含多少个字节。如果报文太长,TCP会将其拆分再发送,如果报文太短,TCP会等待积累足够多的字节后再构成报文段发送出去
  • TCP数据传输慢,UDP数据传输快
  • TCP有拥塞控制,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有效,如直播,实时视频会议等)
  • TCP 只能是一对一的通信(TCP连接的端点是套接字socket),而 UDP 支持一对一、一对多、多对一和多对多的通信
  • TCP 的首部开销大,有 20 个字节,比 UDP 的 8 个字节的首部要长。
  • TCP提供可靠全双功的通信服务。UDP是半双功,只能单向传播。

        TCP三次握手:

  • 第一次握手

客户端将TCP报文标志位SYN置为1,随机产生一个序号值seq=J,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT状态,等待服务器端确认。

  • 第二次握手

服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1(对上一个序号进行确认的号),随机产生一个序号值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。

  • 第三次握手

客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1(TCP Header标志位),ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

TCP四次挥手

  • 第一次挥手: Client端发起挥手请求,向Server端发送标志位是FIN报文段,设置序列号seq,此时,Client端进入FIN_WAIT_1状态,这表示Client端没有数据要发送给Server端了。
  • 第二次挥手:Server端收到了Client端发送的FIN报文段,向Client端返回一个标志位是ACK的报文段,ack设为seq加1,Client端进入FIN_WAIT_2状态,Server端告诉Client端,我确认并同意你的关闭请求。
  • 第三次挥手: Server端向Client端发送标志位是FIN的报文段,请求关闭连接,同时Client端进入LAST_ACK状态。
  • 第四次挥手 : Client端收到Server端发送的FIN报文段,向Server端发送标志位是ACK的报文段,然后Client端进入TIME_WAIT状态。Server端收到Client端的ACK报文段以后,就关闭连接。此时,Client端等待2MSL的时间后依然没有收到回复,则证明Server端已正常关闭,那好,Client端也可以关闭连接了

       TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。同时由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双工模式,所以需要四次挥手关闭连接。

2.SOME/IP-SD

        服务发现协议,通过OfferService消息,FindService消息来动态发现服务提供者的IP地址、端口信息等,检查服务状态是否可用,通过Subscribe消息来实现订阅,它主要用于定位服务实例;检查服务实例是否正在运行,实现发布/订阅处理。服务发现只能用UDP来实现,Message ID固定为0xFFFF8100;

        格式如下:

            Flags = 重新启动标志位+单播标志+显示初始数据控制标志,服务重新启动后,所有消息的Reboot Flag须置为1,直到Session ID重新从1开始计数,之后的Reboot Flag须置为0。

        SD报文也是一种SOME/IP报文,在此基础上增加了Entry,Option等字段;

        Entry理解为服务实例的入口,包含服务实例以及需要订阅的EventGroup的信息;

        Entry分为两种:面向服务的Entry和面向事件组的entry。

面向服务可分为:发现服务(FindService),提供服务(OfferService)和停止提供服务(StopOfferService);

面向事件组可分:订阅事件组(SubscribeEventGroup),肯定应答(SubscribeEventGroupAck),否定应答(SubscribeEventGroupNAck)和停止订阅事件组(StopSubscribeEventGroup)。

        一个entry可以包含0-2个option。

        Option用于传输Entry附加信息,可以分为以下几种:

通信举例如下:

    详细信息如下:

http://www.lryc.cn/news/227963.html

相关文章:

  • python实现FINS协议的TCP服务端(篇一)
  • 利用uni-app 开发的iOS app 发布到App Store全流程
  • 5个高质量的实用办公软件,每一款都是良心推荐
  • 基于GPTs个性化定制SCI论文专业翻译器
  • Final Cut Pro X for Mac:打造专业级视频剪辑的终极利器
  • c++分割路径的字符串,得到 目录 文件名 扩展名
  • ABAP OpenSQL 分页处理
  • kubeasz一键部署k8s集群
  • 高性能图表库LightningChart JS v5.0 - 轻松实现图表自定义布局
  • 深度学习的集体智慧:最新发展综述
  • Java之“数字困境”:资产管理项目中的Bug追踪与启示
  • 小程序微信登录授权突然没反应的原因和解决方案
  • 文本提交时如何使用PHP替换回车为br
  • 安全框架SpringSecurity-1(认证入门数据库授权)
  • 【MybatisPlus】条件构造器、自定义SQL、Service接口
  • 数组计算广播
  • 代码解读:Zero-shot 视频生成任务 Text2Video-Zero
  • hub.docker访问不了的问题(一步解决)
  • [.NET] Speex 语音编解码介绍, 使用, 代码示例
  • 小样本目标检测(Few-Shot Object Detection)综述
  • 【解决问题】---- 解决 avue-crud 表格勾选数据翻页后界面保持选中
  • JL-03小型气象站气象环境在线监测设备自动上传并保存数据
  • Ansible的变量(vars,register,set_fact)
  • 麒麟KYLINIOS软件仓库搭建03-软件仓库添加新版本的软件包
  • 监控系统是怎么组的(sentry)
  • Java --- 直接内存
  • 数据结构与算法之排序: Leetcode 21. 合并两个有序链表 (Typescript版)
  • AIGC:使用bert_vits2实现栩栩如生的个性化语音克隆
  • 2023年CKA考试真题及注意事项
  • 云计算运维面试