搜索
bottom↓
123
返回列表 发新帖
楼主: xukai871105

嵌入式以太网uIP应用笔记

  [复制链接]

出0入0汤圆

发表于 2014-3-16 10:40:55 | 显示全部楼层
xukai871105 发表于 2014-3-14 09:26
兄弟,我觉得uIP做webserver真的是太弱了。如果你想做webserver的话,建议尝试一下树莓派或者类似的linux ...

谢谢大神,但我现在学得是stm32,而且没用过linux,关键这是毕设来的

出0入0汤圆

发表于 2014-3-20 16:29:13 | 显示全部楼层
楼主你好,想你请教个问题可以吗?
6、uip的基本结构和配置那段程序
65.if(BUF->type == htons(UIP_ETHTYPE_IP)) /* 收到IP数据包 */
    {
       uip_arp_ipin();
       uip_input();
       if (uip_len > 0)
       {
         uip_arp_out();
         tapdev_send();
       }
}
调用了uip_arp_ipin();函数读到Ip包后为什么还要再调用uip_arp_out();apdev_send();发送数据呢?是应答吗?我看源码注释那说收到数据后会将带以太网帧头的数据填入uip_buf同时返回包长度到uip_len,没有提到要发数据。在学习以太网,求指点

出0入0汤圆

 楼主| 发表于 2014-3-20 20:14:37 | 显示全部楼层
业未央 发表于 2014-3-20 16:29
楼主你好,想你请教个问题可以吗?
6、uip的基本结构和配置那段程序
65.if(BUF->type == htons(UIP_ETHTYPE ...

这个是ARP请求的应答,该部分和IP没有关系,ARP请求主要为了获得某IP的MAC地址!

出0入0汤圆

发表于 2014-3-21 20:01:52 | 显示全部楼层
xukai871105 发表于 2014-3-20 20:14
这个是ARP请求的应答,该部分和IP没有关系,ARP请求主要为了获得某IP的MAC地址! ...


那为什么还要分IP帧和ARP帧呢?
我突然觉得应该是这样的,我说一下不对请指正:
首先从网卡驱动读取一帧的数据   line62
然后根据读到数据的帧类型进行不同的判断,
   这是uip_arp_ipin();源码的英文注释
/*-----------------------------------------------------------------------------------*/
/**
* ARP processing for incoming IP packets
*
* This function should be called by the device driver when an IP
* packet has been received. The function will check if the address is
* in the ARP cache, and if so the ARP cache entry will be
* refreshed. If no ARP cache entry was found, a new one is created.
*
* This function expects an IP packet with a prepended Ethernet header
* in the uip_buf[] buffer, and the length of the packet in the global
* variable uip_len.
*/
/*-----------------------------------------------------------------------------------*/     
    if 读到的是IP数据包
      uip_arp_ipin();
  /* Only insert/update an entry if the source IP address of the
     incoming IP packet comes from a host on the local network. */  这是这个函数源码内部语句的注释。
    我是这样理解的,如果读到的是IP数据包,调用这个函数进行IP包ARP部分的处理——插入或更新ARP表。
如果原来的ARP缓存中有源IP的记录那么进行更新,如果没有则创建一个该IP的ARP表,这个函数的源码最后
确实调用了ARP表更新的函数。
    更新有这样的好处,ARP表中的记录是有生命周期的假如是A分钟,当进行频繁的通信时,在每包的数据
都更新ARP表,生命周期都重新从零开始记,这样就避免了只是在固定的将A分钟到了之后更新ARP表,发送ARP请求
等待响应目标IP的响应会浪费时间。
    进行IP数据包ARP部分处理的时候会把一个带以太网帧头的数据写入堆栈uip_buf 同时使把数据长度赋给uip_len,
然后调用 uip_arp_out();  tapdev_send();
       这个是 uip_arp_out();   函数的源码注释
/*-----------------------------------------------------------------------------------*/
/**
* Prepend Ethernet header to an outbound IP packet and see if we need
* to send out an ARP request.
*
* This function should be called before sending out an IP packet. The
* function checks the destination IP address of the IP packet to see
* what Ethernet MAC address that should be used as a destination MAC
* address on the Ethernet.
*
* If the destination IP address is in the local network (determined
* by logical ANDing of netmask and our IP address), the function
* checks the ARP cache to see if an entry for the destination IP
* address is found. If so, an Ethernet header is prepended and the
* function returns. If no ARP cache entry is found for the
* destination IP address, the packet in the uip_buf[] is replaced by
* an ARP request packet for the IP address. The IP packet is dropped
* and it is assumed that they higher level protocols (e.g., TCP)
* eventually will retransmit the dropped packet.
*
* If the destination IP address is not on the local network, the IP
* address of the default router is used instead.
*
* When the function returns, a packet is present in the uip_buf[]
* buffer, and the length of the packet is in the global variable
* uip_len.
*/
/*-----------------------------------------------------------------------------------*/
       这个函数会检查ARP表中是否有目标IP对应的MAC地址的历史记录,如果有填入以太网的帧头然后返回,tapdev_send();
发送数据,我觉得这帧数据应该是IP数据包的确定号。如果没有则会发送ARP请求同时丢弃这帧IP数据。
  
   else 是ARP帧
    79.uip_arp_arpin();   对数据进行ARP部分的处理,如果收到的是本机上次发出ARP请求的回复,那么更新ARP表。
如果是其他主机的ARP请求并且目标IP匹配,那么创建ARP回复帧并把数据填入uip_buf 缓冲,同时把数据长度赋给uip_len
80.if (uip_len > 0)
81.{
82.tapdev_send();
83.}
如果是请求帧响应ARP请求。
    这是uip_arp_arpin() 这个函数源码的注释。   
/*-----------------------------------------------------------------------------------*/
/**
* ARP processing for incoming ARP packets.
*
* This function should be called by the device driver when an ARP
* packet has been received. The function will act differently
* depending on the ARP packet type: if it is a reply for a request
* that we previously sent out, the ARP cache will be filled in with
* the values from the ARP reply. If the incoming ARP packet is an ARP
* request for our IP address, an ARP reply packet is created and put
* into the uip_buf[] buffer.
*
* When the function returns, the value of the global variable uip_len
* indicates whether the device driver should send out a packet or
* not. If uip_len is zero, no packet should be sent. If uip_len is
* non-zero, it contains the length of the outbound packet that is
* present in the uip_buf[] buffer.
*
* This function expects an ARP packet with a prepended Ethernet
* header in the uip_buf[] buffer, and the length of the packet in the
* global variable uip_len.
*/
/*-----------------------------------------------------------------------------------*/     

    我不是故意挑刺的,看到楼主的认真,今天下午我突然有了想法索性说一下,说了这么多也不知道对不对,诚惶诚恐,请指点或大家一起再讨论。

出0入0汤圆

 楼主| 发表于 2014-3-22 21:25:50 | 显示全部楼层
业未央 发表于 2014-3-21 20:01
那为什么还要分IP帧和ARP帧呢?
我突然觉得应该是这样的,我说一下不对请指正:
首先从网卡驱动读取一帧的 ...

不好意思,我上一个回复没有认真看,您的分析是正确的。

uIP的具体代码我并没有一行一行的深入研究,花的时间都在把握框架如何使用上。

出0入0汤圆

发表于 2014-3-23 20:45:37 | 显示全部楼层
xukai871105 发表于 2014-3-22 21:25
不好意思,我上一个回复没有认真看,您的分析是正确的。

uIP的具体代码我并没有一行一行的深入研究,花 ...

谢谢您的精彩讲解,看了明白了很多,希望以后能与你有更多的交流

出0入0汤圆

发表于 2014-3-23 22:31:34 | 显示全部楼层
收下了,mark 党

出0入0汤圆

发表于 2014-3-24 15:03:47 | 显示全部楼层
誓要把楼主所有的帖子看完,看每一个都很好,都能长知识。

出0入0汤圆

发表于 2014-3-28 16:56:07 | 显示全部楼层
楼主给力,正在学习uip这方面的知识

出0入0汤圆

发表于 2014-5-22 18:57:20 | 显示全部楼层
好资料,谢谢楼主分享

出0入0汤圆

发表于 2014-5-29 15:26:34 | 显示全部楼层
xukai871105 发表于 2013-6-12 15:27
自己写顶一个,没想到写完这么累啊!

楼主QQ多小,我在搞方面,有很多不懂啊,能指导指导吗

出0入0汤圆

发表于 2014-5-30 14:39:55 | 显示全部楼层
留名,回头看看

出0入0汤圆

 楼主| 发表于 2014-5-31 21:27:50 | 显示全部楼层
jie18778884418 发表于 2014-5-29 15:26
楼主QQ多小,我在搞方面,有很多不懂啊,能指导指导吗

基本不用QQ,如果有问题可以给我发邮件,xukai19871105@126.com
或者去我的CSDN博客看看,或许有更多的收获!

出75入88汤圆

发表于 2014-6-2 20:36:25 | 显示全部楼层
xukai871105 发表于 2013-7-13 22:18
感谢支持!
等了那么久,怎么还没有裤子啊!
我认真经营,努力回答问题!有的时候网友们提问我回答不出来 ...


现在才看到你的帖子,其实  火了,对于你也是一种认同.
很敬佩你认真写东西的精神,虽然我暂时用不到你提供的知识,但是依旧感谢你!

祝2014端午节快乐!希望不是最晚的一个祝福

出0入0汤圆

 楼主| 发表于 2014-6-11 12:40:53 | 显示全部楼层
bzbs 发表于 2014-6-2 20:36
现在才看到你的帖子,其实  火了,对于你也是一种认同.
很敬佩你认真写东西的精神,虽然我暂时用不到你提供 ...

一起努力吧,我后面的一些东西都总结在CSDN上了!
这个论坛来的越来越少了!

出0入0汤圆

发表于 2014-6-12 16:50:07 | 显示全部楼层
期待继续精品好文。。

出0入0汤圆

发表于 2014-6-13 15:46:25 | 显示全部楼层
mark.......

出0入0汤圆

 楼主| 发表于 2014-6-14 10:27:36 | 显示全部楼层
yujietangying 发表于 2014-6-12 16:50
期待继续精品好文。。

不会在该论坛发表文章了,如果你对我的分享感兴趣,请查看我的博客

出0入0汤圆

发表于 2014-6-14 19:01:19 | 显示全部楼层
顶!lz不错。介绍的很详细

出0入0汤圆

发表于 2014-7-7 21:43:11 | 显示全部楼层
mark        

出0入0汤圆

发表于 2014-7-8 07:26:25 来自手机 | 显示全部楼层
标记uIP lwip

出0入0汤圆

发表于 2014-7-8 12:09:55 | 显示全部楼层
我也来学习。

出0入0汤圆

发表于 2014-7-14 16:42:51 | 显示全部楼层
楼主强人呀,,收藏了

出0入0汤圆

发表于 2014-7-14 17:05:13 | 显示全部楼层
谢谢楼主的分享。

出0入0汤圆

发表于 2014-7-14 17:30:58 | 显示全部楼层
楼主强人呀,,收藏了

出0入0汤圆

发表于 2014-7-26 09:43:50 | 显示全部楼层
楼主你好,当板子做服务器,用两个客户端连接的时候,服务器把两个客户端发来的数据返回给各自的客户端,但是为什么总是第一个连接收到数据,第二个连接的被第一个收到了,用的是TCP协议,谢谢

出0入0汤圆

 楼主| 发表于 2014-7-28 08:36:23 | 显示全部楼层
lazyboyp 发表于 2014-7-26 09:43
楼主你好,当板子做服务器,用两个客户端连接的时候,服务器把两个客户端发来的数据返回给各自的客户端,但 ...

看来我也要回去测试一下!

出0入0汤圆

发表于 2014-8-19 19:58:46 | 显示全部楼层
楼主好人  真心学习啦   !  最近正好在弄网络通讯,用uIP试试

出0入0汤圆

发表于 2014-8-28 14:48:58 | 显示全部楼层
楼主大哥,我移植uip-1.0协议栈可以在局域网实现一个web服务器,客户机可以向我的嵌入式设备请求到动态网页。现在我想将我的嵌入式设备接入公网,因为我的嵌入式设备接入公网的时候不能有一个固定的IP,所以我移植花生壳的DDNS协议实现域名到动态ip的解析。但是现在出了问题,我用网线将板子连到路由器上,并不识别,就是说我的嵌入式设备并不是一个网络设备,路由器并没有给它分配一个IP。我该怎么解决这个问题呢?网络技术方面是菜鸟,求指教!!

出0入0汤圆

 楼主| 发表于 2014-8-28 20:01:03 | 显示全部楼层
silence2455 发表于 2014-8-28 14:48
楼主大哥,我移植uip-1.0协议栈可以在局域网实现一个web服务器,客户机可以向我的嵌入式设备请求到动态网页 ...

我并没有详细使用过花生壳,一般uIP只在局域网中跑server,还不是webserver。
uIP还是功能太简单了,建议你还是毫不犹豫的使用linux系统吧,做起来简单多了!

出0入0汤圆

发表于 2014-8-29 08:31:08 | 显示全部楼层
暂时还没用,先收藏起来,以后细细品味。

出0入0汤圆

 楼主| 发表于 2014-8-29 08:32:25 | 显示全部楼层
gpfrank 发表于 2014-8-29 08:31
暂时还没用,先收藏起来,以后细细品味。

http://blog.csdn.net/xukai871105 我的博客有时间看看,共同进步。

出0入0汤圆

发表于 2014-8-29 11:05:58 | 显示全部楼层
xukai871105 发表于 2014-8-28 20:01
我并没有详细使用过花生壳,一般uIP只在局域网中跑server,还不是webserver。
uIP还是功能太简单了,建议 ...

楼主大哥,现在来说uip可以满足我的要求,你有没有了解过uip协议栈里app中的dhcp client这个文件,它是不是可以实现由外界自动获取IP,比如插在路由器上,就可以自动获取路由器分配给它的IP了。

出0入0汤圆

发表于 2014-8-29 11:10:23 | 显示全部楼层
楼主大哥,dhcp client这个文件几乎完全没有注释,看不懂啊!求大哥指教

出0入0汤圆

发表于 2014-8-29 12:09:50 | 显示全部楼层
xukai871105 发表于 2014-8-29 08:32
http://blog.csdn.net/xukai871105 我的博客有时间看看,共同进步。

非常感谢。您的BLOG内容真丰富,都是我想看的。呵呵!
也正准备买ZLG的那个LINUX板子呢!
287,283,257,您认为那个好?

出0入0汤圆

 楼主| 发表于 2014-8-31 18:33:24 | 显示全部楼层
gpfrank 发表于 2014-8-29 12:09
非常感谢。您的BLOG内容真丰富,都是我想看的。呵呵!
也正准备买ZLG的那个LINUX板子呢!
287,283,257, ...

我买的287,我觉得用的还可以,价格也不是很贵!

出0入0汤圆

 楼主| 发表于 2014-8-31 18:34:14 | 显示全部楼层
silence2455 发表于 2014-8-29 11:10
楼主大哥,dhcp client这个文件几乎完全没有注释,看不懂啊!求大哥指教

我没有使用过uIP的DHCP功能,不能给你乱出注意啊!

出0入0汤圆

发表于 2014-9-7 08:41:05 来自手机 | 显示全部楼层
楼主的贴很不错

出0入0汤圆

发表于 2014-9-15 17:20:38 | 显示全部楼层
mark! thanks!

出0入0汤圆

发表于 2014-9-15 18:14:30 | 显示全部楼层
两本书是好书。。。。

出0入0汤圆

发表于 2014-10-22 14:02:33 | 显示全部楼层
楼主的资料实在强大~~~

出0入0汤圆

 楼主| 发表于 2014-10-22 15:31:25 | 显示全部楼层
linux-0405209 发表于 2014-10-22 14:02
楼主的资料实在强大~~~

去博客看看吧,说不定还有惊喜!

出0入0汤圆

发表于 2014-10-23 08:44:19 | 显示全部楼层
xukai871105 发表于 2014-10-22 15:31
去博客看看吧,说不定还有惊喜!

好,谢谢楼主的提醒~~

出0入0汤圆

发表于 2014-10-23 09:09:25 | 显示全部楼层
lz的帖子都是花时间整出来的 多谢分享 谢谢!

出0入0汤圆

发表于 2014-11-6 13:45:20 | 显示全部楼层
好帖,写的很详细,学习了。

出0入0汤圆

发表于 2014-11-6 17:33:59 | 显示全部楼层
好贴。这两天刚开始学这个,刷了个例程看了看效果,断断续续看了两天资料眼都要瞎了。
去图书馆找找有没有楼主推荐的书

出0入0汤圆

发表于 2015-10-15 15:53:16 | 显示全部楼层
谢谢楼主!

出0入0汤圆

发表于 2016-6-2 15:38:38 | 显示全部楼层
需要标记一下,马上就要用到

出0入0汤圆

发表于 2016-6-2 16:27:34 | 显示全部楼层
必须顶一发
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 02:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表