TCP 协议在 STM32 上的移植

2019-01-27 10:21

TCP 协议在 STM32 上的移植

from

http://blog.csdn.net/xukai871105/article/details/37729201 2014-07-12 1.前言

【由于TCP协议负载,若有说的不对的地方,请及时指出,第一时间改正。本博文2013年2月在某论坛发表,现搬迁至CSDN博客】

从实用主义的角度出发,学习嵌入式TCPIP可以直接从本章节开始学习,甚至可以直接从HTTP开始学习。我也曾经是一个现实的实用主义者, 以为有了AVRNET项目的源码,修改移植之后便可以用于STM32。但是现实总是那么残酷,对于一个还不熟悉HTML元素,没有任何PHP和SOCKET编程知识的我来说,修改AVRNET的任何一行代码都是不可能完成的任务,我几乎不知道修改这行代码造成哪些变化。但是通过不断地学习情况有所好转,这些学习包括HTML,CSS,JaveScript,PHP,MySQL,SOCKET等。通过这些学习与积累慢慢地揭开了TCPIP的面纱,而通过TCP让STM32返回Hello是多么令人兴奋的事情。

本文将通过分析和整理AVRNET项目源码并移植到STM32平台中,实现TCP部分内容,通过TCP打印Hello和LED控制实例说明TCP的使用方法。

TCP协议是是一个非常复杂的协议,本文并不会实现TCP的方方面面,毫不避讳的说本文所用TCP是不完整的TCP,没有TCP坚持定时器和TCP重发功能,更别提滑动窗口功能,TCP的传输速度也低的可怜。本文试图通过最简单的代码实现最基本的TCP功能,这些包括TCP建立,TCP数据包发送,TCP关闭连接。

【 STM32NET学习笔记——索引】

【代码仓库】——请以代码仓库中的内容为主。1.2 相关资料

【ENC28J60学习笔记】 【AVRNET项目(国外) 】

【AVR webserver项目(国外) 】1.3 学习路线建议 本文仅仅简单的说明TCP使用的方法,通过一个TCP发射的例子积累学习嵌入式网络应用的信心,但是这些知识是远远不够的,你还需要学习以下知识。这些知识将帮助你设计和实现嵌入式网页,设计优美的嵌入式web类型的API。 【HTML】先学习HTML4,再学习HTML5 【CSS】先学习CSS2,再学习CSS3 【Javascript】

【JSON】强烈建议学习JSON格式和应用方法。 【JQuery】建议先熟悉Javascript,再学习JQuery。 【PHP】和PHP工程师不同,更多关注HTTP部分内容。 【数据库】学习一款数据库,可以是MySQL或SQLite,熟悉基本操作增删改查。

【Linux】更多关注应用层设计,如果你不介意尝试一下树莓派吧。

【RESTFul】学习该框架,了解如何设计HTTP API。 【等等】知识真的是够多的,请您保持耐心。

1.4 其他说明

【PC IP】192.168.1.101 【STM32 IP】192.168.1.15 【TCP端口号】3001

2.TCP协议简述

本小节仅介绍TCP如何建立连接,发送数据和终止连接的技巧,本文将不详细讲述TCP首部中的各种字节含义,因为你可以找到很多说明的图书。 更多基础内容请参考。 【1】《TCP IP详解 卷1》 机械工程出版社出版 【2】《嵌入式Internet TCP IP基础、实现及应用》 北京航空航天出版社

2.1 TCP的建立和终止

在STM32NET项目中暂假定PC机为客户端,STM32为服务器端。在这种情况下,有PC机发起连接,STM32被动的处理整个TCP过程。

【1】PC机试图建立连接,发出SYN标志。

【2】STM32接收到SYN标志,响应PC机的连接请求,发送SYN和ACK标志

【3】PC机收到SYN和ACK标志,发送ACK标志,表示TCP连接建立

【4】PC机在建立连接之后,向STM32发送TCP负载数据,并包含PUSH和ACK标志

【5】STM32收到负载数据,返回应答数据,并包括FIN、ACK和FUSH标志(FIN意味着AVR试图停止本次TCP连接)

【6】PC机对负载数据处理,返回ACK标志

【7】PC机也发出FIN标志和ACK标志,同意停止本次TCP连接

【8】STM32收到该FIN标志,发出ACK标志,意味着本次TCP通信完全结束。

TCP的建立连接,收发数据和停止连接,配合定时器辅

以有限状态机是一个常用的实现方式,但实现这些功能需要成千上万行代码,通过分析可以看出。

【1】对于FIN标志和SYN标志,无论是服务端还是客户端都需要发送ACK标志

【2】STM32共4次收到ACK标志。第一次为上文的第3步,该ACK位的接收表示TCP连接成功,此时负载数据长度为0,STM32对该返回报文不做处理。第二次收到ACK标志,发生在上文的4到5步,和上次收到ACK不同,负载数据一定不为0。第三次收到ACK标志,发生在第6步,此时负载数据长度也为0,STM32对该报文不做任何处理。第四次收到ACK标志发生在第7步,STM32必须应答,但是该报文也含有FIN标志,可以区别于以上几种情况。 STM32NET项目便采用以上的方式区别TCP数据包,通过IF ELSE实现了TCP状态机。STM32NET项目先处理SYN标志,接着检查所有的ACK标志,若标志也含有FIN标志,则返回ACK,若负载数据长度为0,不做响应,若负载数据大于0,取出数据做出合适的响应。

2.2 TCP序号和确认号

TCP序号和确认号也是一个比较微妙的细节。总结起来有以下几点。


TCP 协议在 STM32 上的移植.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:第一个安全教育周内容

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: