⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 嵌入式web服务器中tcp-ip协议栈的实现的研究--《plc&fa》网络版.htm

📁 Automatic Target Recognition
💻 HTM
📖 第 1 页 / 共 3 页
字号:
                        <P><FONT color=#008284>4&nbsp; 
                        嵌入式Web服务器中TCP/IP栈的实现</FONT><BR>嵌入式Web服务器中TCP/IP栈实现时是分模块进行的,分别有ARP模块,IP模块,ICMP模块,HTTP模块。以ARP模块为例介绍一下本文作者的实现方法。<BR><FONT 
                        color=#008284>4.1&nbsp; ARP模块的实现</FONT><BR>ARP 
                        协议头部定义:<BR>struct 
                        arp<BR>{<BR>WZK_SAL_PACKED_FIELD(wzk_uint16 
                        hartype);<BR>/* 硬件类型 
                        */<BR>WZK_SAL_PACKED_FIELD(wzk_uint16 proto); <BR>/* 
                        协议类型 */<BR>WZK_SAL_PACKED_FIELD(wzk_uint8 
                        hadrlen);<BR>/* 
                        硬件地址长度*/<BR>WZK_SAL_PACKED_FIELD(wzk_uint8 prolen); 
                        <BR>/* 协议地址长度 */<BR>WZK_SAL_PACKED_FIELD(wzk_uint16 
                        opcode);<BR>/* 操作码 */<BR>WZK_SAL_PACKED_FIELD(wzk_byte 
                        addrs[1]); <BR>/* 源硬件地址、源协议地址、目标硬件地址、目标协议地址 */<BR>} 
                        WZK_SAL_PACKED_STRUCT;<BR>WZK_SAL_PACKED_STRUCT宏保证整个结构体在内存中紧凑排列。<BR>ARP协议的实现主要由下列4个函数完成:<BR>(1) 
                        void etherarp_init (struct netif 
                        *netif);<BR>初始化函数。在整个协议栈初始化时运行。主要工作就是把ARP映射表中的所有映射项初始化为0,并且如果网络接口设置了默认网关,将发送ARP请求获取默认网关的MAC地址。<BR>(2) 
                        void etherarp_input (struct buffer *buf, struct buffer 
                        *validbuf, struct 
                        netif*netif);<BR>ARP输入处理。主要工作就是处理接收到的ARP 
                        请求和ARP响应。<BR>(3) void 
                        etherarp_timer(void);<BR>ARP定时处理。该函数由嵌入式Web服务器中TCP/IP栈全局的定时器负责调用执行。主要工作就是将所有ARP映射项的定时器加1,然后根据所处状态做响应的处理。<BR>(4) 
                        struct ether_addr* etherarp_lookup4 (struct netif 
                        *netif, struct 
                        addr*ipaddr);<BR>查询以太网MAC地址。该函数供网络接口发送帧时获得目标主机的MAC地址。<BR>ARP定时处理过程伪代码:<BR>for(i=0;i&lt; 
                        WZK_CONFIG_PARAM_EMWEBARP_ CACHE_SIZE; 
                        i++)<BR>{if(WZK_EMWEBARP_GET_STATE(arpcache [i]) == 
                        FREE)/* 如果ARP映射项的状态是未用 
                        */<BR>{continue;}<BR>WZK_EMWEBARP_SET_TIMER(arpcache[i],<BR>WZK_EMWEBARP_GET_TIMER(arpcache[i])+1); 
                        <BR>/* 将 ARP 映射项的定时器加 1 
                        */<BR>if(WZK_EMWEBARP_GET_STATE(arpcache[i]) == PENDING) 
                        <BR>/* 若ARP映射项的状态是解析中 
                        */<BR>{if(WZK_EMWEBARP_GET_TIMER(arpcache[i]) &gt;<BR>/* 
                        如果定时器大于解析中状态延时 
                        */<BR>WZK_CONFIG_PARAM_EMWEBARP_CACHE<BR>_PENDING_TIMEOUT) 
                        <BR>{#ifdef WZK_CONFIG_FUNC_EMWEBARP 
                        _RETRY_QUERY<BR>if(WZK_EMWEBARP_GET_RETRY(arpcache[i])&lt; 
                        <BR>/* 若ARP请求重传次数小于最大重传次数 
                        */<BR>WZK_CONFIG_PARAM_EMWEBARP_MAX_RETRY_QUERY)<BR>{emwebarp_query(i);&nbsp;<BR>/* 
                        重传 ARP 请求 
                        */<BR>WZK_EMWEBARP_SET_RETRY(arpcache[i],<BR>WZK_EMWEBARP_GET_RETRY(arpcache[i])+1);<BR>/* 
                        重传次数加 1 */}<BR>else {WZK_EMWEBARP_SET_STATE(arpcache[i], 
                        FREE);&nbsp;<BR>/* 设置 ARP 映射项的状态为未用 
                        */<BR>continue;}<BR>#else 
                        WZK_EMWEBARP_SET_STATE(&amp;arpcache4[i], FREE); <BR>/* 
                        设置 ARP 映射项的状态为未用 
                        */<BR>continue;<BR>#endif}}<BR>if(WZK_EMWEBARP_GET_STATE(arpcache[i]) 
                        == RESOLVED) <BR>/* 若ARP映射项的状态是可用 
                        */<BR>{if(WZK_EMWEBARP_GET_TIMER(arpcache[i]) 
                        &gt;<BR>/*若定时器大于可用状态延时 
                        */<BR>WZK_CONFIG_PARAM_EMWEBARP_CACHE<BR>_PENDING_TIMEOUT)<BR>/*若定时器大于可用状态延时 
                        */<BR>{WZK_EMWEBARP_SET_STATE(arpcache[i], PENDING); /* 
                        更新 ARP 映射项 */<BR>WZK_EMWEBARP_SET_TIMER(arpcache[i], 
                        0);<BR>emwebarp_query4(i);<BR>continue;}}}&nbsp;&nbsp; 
                        </P>
                        <P><FONT color=#008284>5&nbsp; 
                        测试结果及分析</FONT><BR>在x86硬件体系结构下进行了测试。<BR><FONT 
                        color=#008284>5.1&nbsp; 
                        测试环境</FONT><BR>CPU:奔腾II266M;内存:128M;操作系统:Redhat 
                        Linux9<BR><FONT color=#008284>5.2&nbsp;&nbsp; 
                        测试目的</FONT><BR>(1) 确认ARP协议功能正确;<BR>(2) 
                        确认在x86体系结构下编译后的代码尺寸和内存开销。<BR><FONT 
                        color=#008284>5.3&nbsp; 测试方法</FONT><BR>(1) 
                        配置嵌入式Web服务器的协议栈,可以根据需要选择打开嵌入式Web服务器协议栈WZK_DEBUG选项,并通过GCC进行编译,连接,生成vipstack.o库;(2) 
                        编写测试程序,采用Linux中pcap库,通过捕获ARP数据包,并将捕获到的ARP数据包输入嵌入式Web服务器协议栈,由嵌入式Web服务器协议栈进行处理;重定向嵌入式Web服务器协议栈的输出到屏幕上,也就是在屏幕上显示出嵌入式Web服务器协议栈输出的数据包的数据。(3) 
                        编译测试程序,并和vipstack.o连接,生成可执行测试程序;(4) 
                        运行测试程序,对比输出信息,如果打开了嵌入式Web服务器协议栈WZK_DEBUG选项,则可以观察输出的调试信息。<BR><FONT 
                        color=#008284>5.4&nbsp; 测试结果<BR></FONT>(1) 
                        ARP协议功能正确;<BR>(2) 
                        ARP协议代码最小为1.2K,运行时内存开销最小为80字节。<BR>以上是对嵌入式Web服务器协议栈中ARP协议模块实现时的编程和调试方法,经过测试,可知精简压缩后的ARP能够实现ARP的基本功能。同样对嵌入式Web服务器协议栈中所选择的IP模块,ICMP模块,HTTP模块也做了相应的删减和压缩,在实验室环境下已经对ICMP模块进行了测试,取得了预想的效果。由于本篇篇幅限制,这儿没给出ICMP模块的试验代码。IP和HTTP模块还在进一步修改和验证之中。希望能够得到预期目标。</P>
                        <P><FONT color=#008284>6&nbsp; 
                        结束语</FONT><BR>通过对TCP/IP协议族的精简,初步判断能够在嵌入式系统有限的资源上实现通过嵌入式Web服务器提供HTTP服务,从而实现嵌入式系统联入internet。这样,既兼顾了TCP/IP协议的主要功能的实现,又照顾到嵌入式系统本身的弱点,达到在嵌入式系统中实现HTTP服务的目的。</P></TD></TR>
                    <TR>
                      <TD colSpan=2>&nbsp;</TD></TR>
                    <TR>
                      <TD align=right colSpan=2 height=25><FONT 
                        color=#993333>本文摘自《PLC&amp;FA》</FONT></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD align=middle height=40>
            <TABLE cellSpacing=0 cellPadding=4 width="99%" bgColor=#e6f4fb 
            border=0>
              <TBODY>
              <TR>
                <TD 
                background=嵌入式WEB服务器中TCP-IP协议栈的实现的研究--《PLC&amp;FA》网络版.files/16.jpg 
                height=20>共有网友评论0条【<A 
                  href="http://www.plc-fa.hk/comment.asp?topictype=2&amp;topicid=3972" 
                  target=_blank>查看所有评论</A>】【推荐给好友】【<A 
                  href="javascript:window.print()">打印</A>】</TD></TR>
              <TR>
                <TD></TD></TR></TBODY></TABLE>
            <TABLE cellSpacing=1 cellPadding=5 width="99%" bgColor=#e7f7ff 
            border=0>
              <TBODY>
              <TR>
                <TD align=middle><STRONG>发表对此文评论</STRONG></TD></TR>
              <TR>
                <TD align=middle>
                  <FORM action=postcomment.asp method=post>
                  <TABLE cellSpacing=0 cellPadding=3 width=300 border=0>
                    <TBODY>
                    <TR>
                      <TD height=91><TEXTAREA style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: 1px solid; WIDTH: 250px; BORDER-BOTTOM: 1px solid; HEIGHT: 100px; BACKGROUND-COLOR: #ffffff" name=content rows=6 cols=55></TEXTAREA> 
                      </TD></TR>
                    <TR>
                      <TD align=middle><INPUT style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: 1px solid; WIDTH: 60px; BORDER-BOTTOM: 1px solid; FONT-FAMILY: 宋体; HEIGHT: 20px" type=submit value=提交 name=Submit> 
                        <INPUT type=hidden value=3972 name=topicid> <INPUT 
                        type=hidden value=嵌入式WEB服务器中TCP/IP协议栈的实现的研究 
                        name=topicname> </TD></TR></TBODY></TABLE><INPUT type=hidden 
                  value=2 
        name=topictype><BR></FORM></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 width=770 border=0>
  <TBODY>
  <TR>
    <TD class=666666 vAlign=bottom align=middle width=171 bgColor=#ebebeb 
    height=20>&nbsp; </TD>
    <TD class=666666 vAlign=bottom align=middle width=397 bgColor=#ebebeb><A 
      class=666666 href="http://www.plc-fa.hk/about.asp">杂志简介</A> | <A 
      href="http://www.plc-fa.hk/about1.asp">发行分析</A> | <A class=666666 
      href="http://www.plc-fa.hk/ad.asp">广告预订</A> | <A class=666666 
      href="http://www.plc-fa.hk/doonline.asp">在线投稿</A> | <A class=666666 
      href="http://www.ca800.com/book/showmaga.asp?id=66" target=_blank>在线订阅</A> 
    </TD>
    <TD class=666666 vAlign=bottom align=middle width=190 bgColor=#ebebeb><A 
      href="http://www.servo.hk/" target=_blank><FONT 
      color=#ff0000>伺服控制</FONT></A> &nbsp;&nbsp;&nbsp;&nbsp;<A 
      href="http://www.inverterworld.hk/" target=_blank><FONT 
      color=#ff0000>变频器世界</FONT></A></TD></TR>
  <TR>
    <TD bgColor=#666666 colSpan=3 height=1></TD></TR>
  <TR>
    <TD class=666666 align=middle colSpan=3>&copy;2005 东方国际科技传媒有限公司版权所有 
  未经许可不得转载</TD></TR>
  <TR>
    <TD colSpan=3>&nbsp;</TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript> 
    var __cc_style = 0;
    var __cc_uid="ca800"; 
</SCRIPT>

<SCRIPT language=JavaScript src=""> 
</SCRIPT>

<SCRIPT src="嵌入式WEB服务器中TCP-IP协议栈的实现的研究--《PLC&amp;FA》网络版.files/urchin.js" 
type=text/javascript>
</SCRIPT>

<SCRIPT type=text/javascript>
_uacct = "UA-154698-8";
urchinTracker();
</SCRIPT>
</CENTER>
<SCRIPT>document.write(unescape("%3Cscript%3Edocument.oncontextmenu%3Dnew%20Function%28%22event.returnValue%3Dfalse%22%29%0D%0Adocument.onselectstart%3Dnew%20Function%28%22event.returnValue%3Dfalse%22%29%3C/script%3E"))</SCRIPT>
</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -