uip之udp应用笔记.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
uip之udp应用笔记

千兆网项目中,移植了uip到mcu中,采用udp通信方式,主要用来做一些控制协议的处理。刚开始接手的时候,并没有做过网络方面的应用,而且对tcp/ip及udp通信又不太熟悉。好在网上有一些文档,加上仔细阅读uip_process代码,一边用抓包软件一边调试,总算把uip很好的应用了起来,而且还针对项目某些应用的特殊性,对uip源码进行了一些修改。本文前半部分对uip源码的一些重要函数进行介绍,后半部分将对修改的部分做个记录,以备往后查阅。 本次使用的 是uip-1.0,抓包软件用的Wireshark 1.6.7,这个软件真的很不错,居然支持gige vision,这点真的很意外。 一、一个完整的UDP数据报文格式 其实uip就是将你要发送到网络上的数据加上报头,好让它被成功发送到目的主机。所以我们要先搞清楚一个完整的数据报文,才能搞清楚uip到底在做些什么。 Ethernet Header:由目标mac和本机mac及type组成,共14byte,当目标mac全为ff时,表示是udp广播。Type=0x0800表示是ip。在uip中,Ethernet Header结构体定义如下: IP Header:0x45表示version=4,header length=20byte; 0028表示ip header+udp header+user data长度为40byte;6C14为包的ID,每发一个包,这个ID会自加1。80的意义是time to live,表示这个包的存活时间,路由每转发一次,就会对它自减1。17表示通信协议类型为UDP,4a0a为ip header的校验码。再后面就是源IP和目的IP地址了。 UDP Header:0aaa表示src port为2730;0f74表示dst prot为3956;14表示udp header+user data长度为20byte,c477表示udp header的校验码,在一般的情况下,这个可以为0。 在uip中,ip header和udp header结构体定义如下: User Data:再后面就是用户的数据了。 二、ARP数据报文格式 网络中是使用IP来标识主机的,而数据链路层的第一道关卡是MAC地址。因此IP和MAC有一张动态映射表,而这张表就是由ARP协议来建立并维护的。下面是一个ARP数据报文。 同样的,前面14byte是eth header。Hardware type对于以太网来说为0001;0800表示是IPV4;06表示MAC地址的长度;04表示IP地址的长度;0001表示是arp请求,如果是0002那就是ARP应答了。后面就是发送方的MAC地址,IP地址,接收方的MAC地址,IP地址。 在eth header中,目的MAC全是ff,则表示这是一个广播,所有网络里的主机都能收到。但只有ip地址为192.168.1.11的主机才会应答。实际上,这个ARP包的意义就是在获取IP为192.168.1.11主机的MAC地址。 网络里,如果114要与11进行通讯,但又不知道它的MAC地址,那么就发一个这样的报文,11收到后会向114发一个ARP应答,114收到应答后,会将11的MAC保存在动态映射表中。当然这个表会动态的更新,也就是说11的MAC会有一个生成时间,当超时后,就要重新建立。 以上介绍的是一种情况,还有一种情况是IP冲突的检测,这个正好本项目中用到,后面会有介绍。 三、UIP源码简介 主要介绍如下三个文件。 Uip_arp.c:arp的实现; Uip.c:uip_process实现; Tapdev.c:网卡的底层读写调用。 四、建立一个连接 uip_udp_new是用来建立一个UDP连接的,入口参数是远程的IP地址和远程的端口。uip_udp_new函数将远程ip和端口写入到uip_udp_conns数组中的某一个位置,并返回它的地址。系统中支持的最大连接数量就是这个数组的大小,可通过UIP_UDP_CONNS宏来定义它的值。 当网卡收到数据时,uip_process会遍历uip_udp_conns数组,如果当前包的目的端口与本机端口不匹配,或者远程端口与uip_udp_new中的端口不匹配,那么uip会直接丢弃这个包。 如下例,建立的是一个目的IP为255.255.255.255,目的端口为1234的连接,本地端口号为5678。在本项目中,是用来向网络中广播设备信息。所有网络中的主机1234端口都能收到这个数据包。 五、uip主调函数 uip协议的处理都是通过主调函数来调用的,它应该被放在主程序while循环中,而用户的数据接收处理,和数据发送则是在回调函数中。 主调函数分成三个部分,第一个是检查网卡上有没有接收到数据,第二个是检查有没有用户

文档评论(0)

sh4125733 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档