OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 15807|回复: 20

以太网、uip协议栈相关知识个人见解

[复制链接]

58

主题

288

帖子

1

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2012-3-29
在线时间
81 小时
发表于 2014-3-22 11:36:00 | 显示全部楼层 |阅读模式

       最近在学习以太网和uip协议,有新的理解就会在这里更新,这些仅是个人见解,若有错误欢迎批评指正,希望大家多发言,和大家一起讨论
我的邮箱1024549573@qq.com
       这是我的另一篇关于以太网的贴子:ARP是怎么映IP地址和MAC地址的 ,帖子链接   http://www.openedv.com/posts/list/28828.htm
       在讨论的过程中,是以uip协议栈为基础的,接下来阐述一下我对以太网接收、处理数据的过程的理解。
 

简述以太网数据接收、处理过程:

首先硬件驱动从网络读取一帧的数据到uip_buff 并把数据的长度赋给uip_len , uip_len 大于0的时候说明收到了数据。
但收到的数据可能是
IP数据包也可能是ARP包。

fficeffice" />

然后判断数据包的类型:

if  收到的是IP数据包,

调用函数uip_arp_ipin()进行IPArp部分的处理(更新ARP缓冲表),然后调用uip_input()处理缓存uip_buf中的IP数据,
如果
uip_len 的长度大于零说明有IP的确定号要发送(我觉得应该是IP数据包的确认号),硬件发送数据之前要调用函数uip_arp_out( )
该函数查看ARP表中是否有目标IP对应的MAC地址的历史记录如果有填入以太网帧头,发送数据,注意:这里的发送
数据调用的是硬件的驱动函数
tapdev_send(),而不是uip_send()该函数只在当有uip应用事件发生时有数据要发送才调用uip_send()
如果没有则发送
ARP请求,同时丢弃这帧数据。

    

                                                                                             测试函数用于区别不同的应用事件

else 收到的的ARP

调用函数uip_arp_arpin( )函数,这个函数会判断ARP包的类型是响应包还是请求包,如果是响应包,那么更新ARP表。
如果是请求包,那么发送
ARP回复帧包括本机的IP地址和MAC
地址。


处理数据过程代码

    uip_len = tapdev_read();                                                    /* 读取以太网数据包,返回数据长度 */

              if(uip_len > 0)                                                           /* 收到数据 */   

              {

                     if(BUF->type == htons(UIP_ETHTYPE_IP))    /* 收到IP数据包 */

                     {

                            uip_arp_ipin();

                            uip_input();

       

                            if (uip_len > 0)

                            {

                                   uip_arp_out();

                                   tapdev_send();

                            }

                     }

 

                     else if (BUF->type == htons(UIP_ETHTYPE_ARP))  /* 收到ARP数据包 */

                     {

                            uip_arp_arpin();

                            if (uip_len > 0)

                            {

                                   tapdev_send();

                            }

              }


                                                                                                                                                 更新时间:2014.03.22



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

288

帖子

1

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2012-3-29
在线时间
81 小时
 楼主| 发表于 2014-3-22 11:36:34 | 显示全部楼层
回复 支持 反对

使用道具 举报

58

主题

288

帖子

1

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2012-3-29
在线时间
81 小时
 楼主| 发表于 2014-3-22 11:36:45 | 显示全部楼层
占楼备用
回复 支持 反对

使用道具 举报

58

主题

288

帖子

1

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2012-3-29
在线时间
81 小时
 楼主| 发表于 2014-3-22 11:37:42 | 显示全部楼层
占楼备用
回复 支持 反对

使用道具 举报

56

主题

289

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2012-11-16
在线时间
65 小时
发表于 2014-3-22 12:18:18 | 显示全部楼层
占楼
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-3-22 15:08:42 | 显示全部楼层
围观,等待楼主传更多资料。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

58

主题

288

帖子

1

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2012-3-29
在线时间
81 小时
 楼主| 发表于 2014-3-22 15:11:57 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
呵呵,我会谈一些我个人的理解,如果有好的资料肯定会上传
回复 支持 反对

使用道具 举报

1

主题

215

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2013-9-23
在线时间
4 小时
发表于 2014-3-31 15:00:51 | 显示全部楼层
楼主大神,我最近在做原子的uip网络实验时,用电脑浏览器可以访问网页页面,也可以控制led灯,但用手机访问时可以显示网页页面,但为什么led灯控制不了呢,点led灯状态反转按钮完全没反应?求指教!!谢谢!!
回复 支持 反对

使用道具 举报

7

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-12-20
在线时间
0 小时
发表于 2014-7-15 10:49:55 | 显示全部楼层
回复【8楼】zzj:
---------------------------------
兄弟 你是 用外网??太牛了,,怎么做到的:??
回复 支持 反对

使用道具 举报

1

主题

215

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2013-9-23
在线时间
4 小时
发表于 2014-7-17 17:12:03 | 显示全部楼层
回复【9楼】shaofeng03:
---------------------------------
没什么的,当时只是用花生壳而已;而且上面的问题也存在,只是用wp系统的诺基亚就没问题
回复 支持 反对

使用道具 举报

7

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-12-20
在线时间
0 小时
发表于 2014-7-19 10:40:20 | 显示全部楼层
回复【10楼】zzj:
---------------------------------
怎么用???我有 好多问题 ,可以 加个QQ吗?1063317708
回复 支持 反对

使用道具 举报

1

主题

215

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2013-9-23
在线时间
4 小时
发表于 2014-7-23 09:36:33 | 显示全部楼层
回复【11楼】shaofeng03:
---------------------------------
其实我也不怎么会,当时只是随便弄了一下,下个花生壳软件,注册免费域名,然后进行映射就行了
回复 支持 反对

使用道具 举报

80

主题

268

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2014-8-11
在线时间
84 小时
发表于 2014-12-5 23:10:18 | 显示全部楼层
占楼备用,谢谢啊
我是一只菜鸟,但我会大鹏展翅
回复 支持 反对

使用道具 举报

42

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2014-6-12
在线时间
35 小时
发表于 2014-12-5 23:19:40 | 显示全部楼层
近期也打算学那个以太网模块,我会多来看看的
回复 支持 反对

使用道具 举报

11

主题

62

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2014-9-6
在线时间
0 小时
发表于 2014-12-25 17:38:45 | 显示全部楼层
正准备学习,占楼
回复 支持 反对

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2015-6-3
在线时间
8 小时
发表于 2015-10-30 20:15:52 | 显示全部楼层
占楼备用!顺便顶
回复 支持 反对

使用道具 举报

15

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2014-11-8
在线时间
40 小时
发表于 2015-10-30 21:10:01 | 显示全部楼层
占楼备用!!!
Good good study , day day up...
回复 支持 反对

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2015-6-3
在线时间
8 小时
发表于 2015-11-3 10:26:11 | 显示全部楼层
“这里的发送数据调用的是硬件的驱动函数tapdev_send(),而不是uip_send()该函数只在当有uip应用事件发生时有数据要发送才调用uip_send();"  新手,对这句话不是很懂,能不能解释一下,谢谢!
回复 支持 反对

使用道具 举报

2

主题

90

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1107
金钱
1107
注册时间
2014-8-9
在线时间
192 小时
发表于 2016-7-25 16:21:57 | 显示全部楼层
占楼学习
回复 支持 反对

使用道具 举报

0

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-3-3
在线时间
7 小时
发表于 2016-8-10 10:10:01 | 显示全部楼层
学习了 思路很清晰
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2017-12-31
在线时间
13 小时
发表于 2018-1-2 20:17:51 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 16:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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