编写简单的IP协议栈

waxam06   2008-7-18 10:06 楼主
最近要在ARM平台上实现一个网络IP数据包加密的程序,但是现有的系统没有网络协议栈,而我有不想移植一个完整的TCP/IP协议栈(其实移植困难也很大,因为系统是我们团队自己实现的嵌入式最简系统),完整的协议栈很多部分对我们的这次应用来说是多余的。
现在我已经编写好底层的网卡驱动。接下去应该怎么做呢?我们只想能够解开IP包,然后将数据部分进行加密,再打包发送出去。要做到这点都需要注意些什么?请赐教!谢谢

回复评论 (19)

没有跑操作系统吗?裸奔的?

建议可以到一些开源网站找一些相应资料。

根据以前同事做这个时候的经历,你得先做好啃硬骨头,撞南墙的准备。

即便不准备做完整的TCP/IP协议,你还是需要详细了解完整协议,IP包的传输解析不是简单的一句话能实现的。不了解详细协议,你就不知道哪些是需要实现,哪些不需要实现。
点赞  2008-7-18 15:02
做加密机的时候,是从主机获取发送的ip包,然后不解析路由什么的,只是将IP包中数据部分加密后再将IP包发送出去,IP的头部不做任何更改,这样的实现难吗?请赐教,可能我们对问题的难度估计不足。谢谢!
点赞  2008-7-18 16:38
无论如何,作这个层次的软件想不去全面了解TCP/IP协议栈的实现是不行的,等你去了解了,就会发现移植TCP/IP协议栈难度并非那么大,呵呵~
建议看看lwIP,这个实现适合潜入式系统,可移植性也很好。
点赞  2008-7-19 20:41
建议楼主搜索下 TCP/IP LEAN  ,这本书是针对嵌入式TCP/IP的,里面讲解很消息,也很简单,我就是照这本书自己弄了个TCP/IP协议程序
点赞  2008-7-21 08:29
你的ARP平台要和其他的PC或者一些通用的网络设备通信吗? 如果通信, 就一定要满足TCP/IP协议的标准,
(也就是说, 协议格式, 帧格式, 数据包, 分组头等结构要一样);
如果不需要, 就可以自己定义类似IP的协议, 至于封装和解封装其实和windows下的NDIS
(网络设备接口规范)驱动程序一样, 就是一种包分析程序;
至于网卡如何获取到数据包, 那是应该是硬件驱动程序所要做的
点赞  2008-7-23 17:16
谢谢楼主 学习了 讲解很好
点赞  2008-7-23 20:17
TCP/IP LEAN
    搜索了下这本书,看上去很不错,可惜各大网上书店都已经缺货。
    我之前已经做了部分的移植工作,移植的是瑞士科技大学的lwIP,可是由于之前没有做过类似的移植,
所以遇到了一个棘手的问题后,搁置了,于是才想到自己写一个协议栈的想法。
    现在看来,自己写一个似乎难度更大啊。于是又重新转回移植之路。
lwIP移植性不错,可是由于移植的系统是我们自己写的最简系统,所以难度颇大。到前天为止,系统级的移植已经基本完成,
可是硬件级的问题暴露出来了:发送正常,可是接收不正常!研究之后发现是中断函数根本没有起作用,
于是不断测试中断程序。我用的是双实科技的ARM9试验箱,s3c2440的芯片,系统购买时赠送了一些硬件驱动,可是,
我拿赠送的网卡驱动以及演示程序进行实验室,同样发现中断函数无法被调用。
    顺便说一下,我的测试方法是这样的,高手看下是否有问题:在Linux底下写了一个UDP程序,用一个简单的while循环不断地往网卡发送数据。
这样我认为开发箱的网卡应该是能收到数据的,事实上,我也看到开发箱上网卡的数据接收灯闪烁了。可是按道理说,
一次闪烁就应该调用一次中断函数啊?不是吗?可是中断函数一次也没有被调用!
    一次狂怒之下,我猛按开发箱上所有能够按动的东西,以发泄,却无意中发现当我按下部分开发箱上的键盘按键时,
网卡的中断函数被调用了!这是怎么回事?居然有这么诡异的事情?
    大家看下我的情况,能不能帮帮我,指点一下也非常感谢了!
点赞  2008-7-24 12:20
先用个网络抓包软件,看看你的主机发送的包是否已经出来了,是否正确。
你不停的发送UDP包,会把机器(ARM)直接搞死了,这也有可能是问题的原因。
再要测试,你改成查询方式。看能否收到包。
点赞  2008-7-31 11:49
只是加密转发包么。不通信的话用不着完整的TCP/IP协议。做好网卡驱动的话就好多了,我做过RTL8019的驱动,在网上捕获数据包。我想应该跟这个差不多,需要了解一些协议的格式。从数据链路层网上是IP协议、ARP、RARP,再往上是TCP、UDP、ICMP、IGMP协议。按照格式解包就能得到要传的数据了,加密之后,一些协议的字段可能会改变,比如校验和、长度,所以还得修改包头。
点赞  2008-8-5 20:56
另外还有一点,你想让网络发给你数据,必须得实现ARP协议,否则发送端不知道你的物理地址就发不出去了。
点赞  2008-8-5 20:59
如果只测试驱动的话 不实现ARP 也可以的~~! 直接手动封装数据包~
点赞  2008-8-6 09:51
学习中。
点赞  2008-8-8 13:54
既然都已经有协议栈的源代码了,加密还有困难吗?直接加就行了!
点赞  2008-8-22 14:01
那有人用过lwIP的IPv6模块么?好用么?
点赞  2008-10-11 15:25
学习,哎,我过段时间也看看这个
点赞  2008-10-12 14:51
可以用ZLIP看看也有开源版本的。
点赞  2008-10-12 22:58

学习
点赞  2008-11-5 21:28
是不是中断被屏蔽了,这样的话虽然产生了中断但是CPU不会去处理,而你不小心按到了某个键导致其他程序使能了中断,所以才会使网卡的中断函数被调用
还有一种原因可能是电路有问题,网卡跟那个按键接的是同一个中断(应该不会这么差吧!)









*****************************************************************************
功能最全的S3C2440开发板-飞凌TE2440Ⅱ: http://www.witech.com.cn/product/TE-ARM2440-2.html
*****************************************************************************
点赞  2008-11-8 17:28
不懂,不过关注中
点赞  2008-11-11 09:08
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复