23 IICIIC协议简介
Posted 人民广场的二道贩子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了23 IICIIC协议简介相关的知识,希望对你有一定的参考价值。
1 硬件连接
IIC硬件接线一般如下所示。从主控芯片引出两根线SCL和SDA。外加一个上拉电阻
2 数据传输格式
2.1 写操作
- 主控芯片发出start信号
- 主控芯片发出一字节的数据。前7bit为设备地址,最后一bit为方向:0表示写,1表示读
- 主设备等待从设备应答
- 主设备接到从设备的应答后开始发送数据,每次发送一字节
- 一字节数据发送完后主设备等待从设备应答后继续相关操作
- 主设备发送停止信号
2.2 读操作
- 主控芯片发出start信号
- 主控芯片发出一字节的数据。前7bit为设备地址,最后一bit为方向:0表示写,1表示读
- 主设备等待从设备应答
- 主设备等待从设备的一字节数据
- 主设备接收到数据后,发出应答信号
- 当主设备不想接受数据时,主设备发送停止信号
3 IIC时序图
SCL和SDA默认拉高(上拉电阻)
SCL为高期间SDA数据需要保持稳定(此时设备会去读取数据),SDA数据变化在SCL为低期间实现
-
开始信号
SCL为高,SDA由高电平拉低
-
结束信号
SCL为高,SDA由低电平拉高
-
ACK
应答信号(1bit),SDA在SCL为高的周期中为低
4 硬件实现
SDA为两个设备都控制的io,如果一侧输出1,一侧输出0,则设备就会异常。
所以设备在硬件设计的时候变规避了此
Socks5协议简介
参考技术Asocks5是一个代理协议,主要的作用就是代理客户端来访问远程服务器,起到一个中介作用。
一般情况下当代理客户端因为防火墙等原因访问不了远程服务器,而另一个服务器即可以访问远程服务器又可以被客户端访问到时,可以在这个服务器上部署socks5服务端,本地部署socks5客户端,让这个中介服务器来代理访问远程服务器。
下面介绍协议流程,可以简单分为握手阶段,准备阶段和代理阶段
客户端建立和代理服的tcp连接A,并发送第一帧数据:
VER:协议版本号,socks5情况下为0x05
代理服务器收到后,会鉴别VER,回应
METHOD:身份验证方法,不需要身份验证时为0x00,此时直接进入”准备阶段“(不为0x00时,需要走身份验证流程,参见 socks5身份验证 )
客户端发送第二帧数据:
CMD:命令,tcp代理0x01,udp代理0x03
RSV:保留字段
ATYP:地址类型 0x01:ipv4,0x03:域名,0x04:ipv6
DST.ADDR:目标地址
DST.PORT:目标端口
比如数据 :0x05|0x01|0x00|0x03|0x0d7777772e62616964752e636f6d|0x01bb
代表需要代理的是tcp连接,目标地址类型是域名,真实解析出来目标地址就是" www.baidu.com:443 ",即告诉代理服,帮我和" www.baidu.com:443 "作代理吧
代理服收到后,就直接建立和DST.ADDR的tcp连接B,回复
REP:状态位,0x00代表连接DST.ADDR成功了
RSV:保留字段
ATYP:地址类型 0x01:ipv4,0x03:域名,0x04:ipv6
BND.ADDR:绑定地址,连接B的本地地址
BND.PORT:绑定端口,连接B的本地端口
比如,返回0x05|0x00|0x00|0x01|0xc0a8c76a|0xcdf0,代表准备代理成功了,进入下一步吧
客户端把发给目标服的数据由连接A发给代理服,代理服将这些数据转由连接B发给目标服,同时代理服收到的目标服数据转由连接A返回给客户端
以上是整个socks5代理的tcp代理流程的简单流程,udp代理会复杂些,后面会单独写一篇,
想详细了解的可以参照我的golang实现 https://github.com/0990/socks5
RFC1928-SOCKS Protocol Version 5
以上是关于23 IICIIC协议简介的主要内容,如果未能解决你的问题,请参考以下文章