以太帧、ip帧、udp/tcp帧、http报文结构

从最简单的一个http请求开发,根据TCP/IP协议,分开来看每一层的数据帧结构,以及它们是怎样承担起网络服务的。

协议栈
因特网协议栈共有五层:

1.应用层,是网络应用程序及其应用层协议存留的地方。因特网的应用层包括许多协议,常见的有HTTP(它为web文档提供了请求和传送)、SMTP(它提供了电子邮件报文的传输)和FTP(它提供了两个端系统之间的文件传送)。

2.传输层,负责为信源和信宿提供应用程序进程(包括同一终端上的不同进程)间的数据传输服务,这一层上主要定义了两个传输协议,传输控制协议即TCP和用户数据报协议UDP。

3.网络层,负责将数据报独立地从信源发送到信宿,主要解决路由选择、拥塞控制和网络互联等问题。

4.链路层,负责将IP数据报封装成合适在物理网络上传输的帧格式并传输,或将从物理网络接收到的帧解封,取出IP数据报交给网络层。

5.物理层,负责将比特流在结点间传输,即负责物理传输。该层的协议既与链路有关也与传输介质有关。

继续阅读以太帧、ip帧、udp/tcp帧、http报文结构

TCP/IP TIME_WAIT状态原理

  • TIME_WAIT状态原理

    ----------------------------

    通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态。

    客户端主动关闭连接时,会发送最后一个ACK后,然后会进入TIME_WAIT状态,再停留2个MSL时间(后有MSL的解释),进入CLOSED状态。

    下图是以客户端主动关闭连接为例,说明这一过程的。

    TIME_WAIT状态存在的理由

    ----------------------------

    TCP/IP协议就是这样设计的,是不可避免的。主要有两个原因:

    1)可靠地实现TCP全双工连接的终止

    TCP协议在关闭连接的四次握手过程中,最终的ACK是由主动关闭连接的一端(后面统称A端)发出的,如果这个ACK丢失,对方(后面统称B端)将重发出最终的FIN,因此A端必须维护状态信息(TIME_WAIT)允许它重发最终的ACK。如果A端不维持TIME_WAIT状态,而是处于CLOSED 状态,那么A端将响应RST分节,B端收到后将此分节解释成一个错误(在java中会抛出connection reset的SocketException)。

    因而,要实现TCP全双工连接的正常终止,必须处理终止过程中四个分节任何一个分节的丢失情况,主动关闭连接的A端必须维持TIME_WAIT状态 。

    2)允许老的重复分节在网络中消逝 

    TCP分节可能由于路由器异常而“迷途”,在迷途期间,TCP发送端可能因确认超时而重发这个分节,迷途的分节在路由器修复后也会被送到最终目的地,这个迟到的迷途分节到达时可能会引起问题。在关闭“前一个连接”之后,马上又重新建立起一个相同的IP和端口之间的“新连接”,“前一个连接”的迷途重复分组在“前一个连接”终止后到达,而被“新连接”收到了。为了避免这个情况,TCP协议不允许处于TIME_WAIT状态的连接启动一个新的可用连接,因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个新TCP连接的时候,来自旧连接重复分组已经在网络中消逝。

    MSL时间

    ----------------------------

    MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间IP数据包将在网络中消失 。MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒。

     

    TIME_WAIT状态维持时间

    ----------------------------

    TIME_WAIT状态维持时间是两个MSL时间长度,也就是在1-4分钟。Windows操作系统就是4分钟。

    服务器上的TIME_WAIT状态

    ----------------------------

    注意一个问题,进入TIME_WAIT状态的一般情况下是客户端。大多数服务器端一般执行被动关闭,服务器不会进入TIME_WAIT状态。
    当在服务器端关闭某个服务再重新启动时,服务器是会进入TIME_WAIT状态的。 大多数服务器端一般执行被动关闭,服务器不会进入TIME_WAIT状态。

    服务端为了解决这个TIME_WAIT问题,可选择的方式有三种:

    Ø 保证由客户端主动发起关闭(即做为B端)
    Ø 关闭的时候使用RST的方式
    Ø 对处于TIME_WAIT状态的TCP允许重用

    参考链接


    TCP/IP TIME_WAIT状态原理

电脑通过飞特URT-1控制飞特SCS115舵机(读取参数/设置参数/升级固件/测试好坏)

飞特SCS115舵机,参数信息如下,官方没有给出详细的DataSheet。

具体信息如下:

继续阅读电脑通过飞特URT-1控制飞特SCS115舵机(读取参数/设置参数/升级固件/测试好坏)

电脑控制Dynamixel MX-28R舵机(读取参数/设置参数/升级固件/测试好坏)

一定要注意 MX-28R 的两边的 RS485 接口线序时不同的,从主舵轮方向观察,左侧跟右侧的线序刚刚好相反,在上电之前一定要反复检查接线顺序,否则可能损坏设备。如下图:

继续阅读电脑控制Dynamixel MX-28R舵机(读取参数/设置参数/升级固件/测试好坏)

I2C总线协议图解

I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。

I2C通信方式为半双工,只有一根SDA线,同一时间只可以单向通信,RS485也为半双工,SPI和UART为双工。

继续阅读I2C总线协议图解