打印
[ZLG-ARM]

关于ZLGIP

[复制链接]
3513|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eworker|  楼主 | 2007-4-10 08:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
eleven11| | 2007-4-13 15:22 | 只看该作者

他的问题在于算法不完整

无论嵌入式轻型tcp还是pc机上的,流控算法是他的关键,所以有的网上tcp就几百,有个tcp协议栈就可以上万,附带部分算法代码,如果有兴趣可以自己尝试完善zlgip

/*==============================================================
Function:
Description: 
Parameters:
Returns:
Notes:
==============================================================*/
static void TCPRecvSub(PNETBUF pBuf, PTCPINFO pTCP, PTCPHEAD pTCPHead)
{    
    if (pTCPHead->flag & TCP_RST){
    
        TCPSendCloseMsg(pTCP);
        
        return;
    }
      
       if (pTCPHead->flag & (TCP_FIN|TCP_SYN)){
   
          pTCP->nextRecvSeq ++;           
    }

       if ((pTCPHead->flag & (TCP_FIN|TCP_SYN)) || pBuf->totLen){      
          
          pTCP->flag |= TCP_NEED_SENT_ACK;
          pTCP->delayAckTimer = TCP_FASTTIMO;
    }

       if (pTCPHead->flag & TCP_ACK){
                     
          if (pTCPHead->ack != pTCP->lastACK){ 
      
              TCPChkunAckedQueue(pTCP, pTCPHead->ack);
              
            TCPResetTimeout(pTCP);
            
             if (pTCP->dupACKs == 4){ /*快速恢复*/
      
                pTCP->cwnd = pTCP->ssthresh; 
      
             }else{
            
                if (pTCP->cwnd < pTCP->ssthresh){/*慢启动*/
         
                       pTCP->cwnd += pTCP->mss; 
                                
                }else{/*拥塞避免*/
               
                       pTCP->cwnd += pTCP->mss * pTCP->mss / pTCP->cwnd;
                }                
             }
         
             pTCP->lastACK = pTCPHead->ack; 
             pTCP->dupACKs = 0;
      
          }else if (pTCP->unAckedQueue != NULL){
            
             switch (pTCP->dupACKs){
            
                case 3: /*快速重传*/
                       TCPSetSsthresh(pTCP, FALSE);
                       TCPXmit(pTCP, TRUE);
                       pTCP->dupACKs = 4;
                       break;
                case 4: 
                case 5:
                       pTCP->cwnd += pTCP->mss;
                       pTCP->dupACKs = 5;                      
                       break;
                default:
                       pTCP->dupACKs++;
                       break;
             }  
          }              
       }
       
       TCPRenewCwnd(pTCP, pTCPHead->wndSize);          

       switch (pTCP->state){
   
          case TCP_STATE_LISTEN:
             TCPListen(pBuf, pTCP, pTCPHead->flag);    
             break;
          case TCP_STATE_SYNRECVD:
             TCPSYNRecvd(pBuf, pTCP, pTCPHead->flag);    
             break;
          case TCP_STATE_SYNSEND:
             TCPSYNSend(pBuf, pTCP, pTCPHead->flag);    
             break;
          case TCP_STATE_ESTABLISHED:
             TCPEstablished(pBuf, pTCP, pTCPHead->flag);    
             break;
          case TCP_STATE_LASTACK:
             TCPRecvLastACK(pBuf, pTCP);    
             break;
          case TCP_STATE_FINWAIT1:
             TCPFinWait1(pBuf, pTCP, pTCPHead->flag);    
             break;
          case TCP_STATE_FINWAIT2:
             TCPFinWait2(pBuf, pTCP, pTCPHead->flag);    
             break;
          case TCP_STATE_CLOSING:
             TCPClosing(pBuf, pTCP, pTCPHead->flag);    
             break;
          default: 
             break;
       }
}

使用特权

评论回复
板凳
eworker|  楼主 | 2007-4-13 15:36 | 只看该作者

高见!

也就是说,是其TCP部分有问题了,TCP部分我没有看.

使用特权

评论回复
地板
zlg315| | 2007-4-13 20:18 | 只看该作者

没有提供完整版本,用户可以自己补充完善。

    有了开发文档作为基础,补充自己所要的功能还是比较容易的,我们为用户进行二次开发作好了铺垫。
    如果用户从事工控开发,请购买MiniARM系列工控板,我们已经在MiniARM工控板上内嵌了基础驱动函数库,然后就是根据客户的需求嵌入FAT文件管理系统,CF/SD卡,TCP/IP......函数库,用户不需要再花时间看ARM的用户手册,只要会C语言就能够开发出基于ARM的产品,就象在计算机上开发软件一样方便。

使用特权

评论回复
5
eleven11| | 2007-4-15 20:48 | 只看该作者

lz要是想改zlgip源码,我劝你就不要改了,工作量太大

我上面只是随便说说,但我不想误导你真的去修改源码,这个工作量实在太大

我贴出的代码是从lwip改过来的,现在我公司ucos2平台上用的就是lwip的优化版本,真正的零拷贝,从网卡直接到应用层,而一般所谓的零拷贝协议栈只是协议栈没有多余的拷贝,但必须经过网卡-》协议栈,协议栈-》应用层

zlg提供MiniARM系列工控板,那lz还是买这个好了,zlgip,我劝你不要尝试去修改他,看都不需要看了,没什么意思

使用特权

评论回复
6
deeploves| | 2007-4-15 21:51 | 只看该作者

呵呵,楼上只知道会用别人做好的东西就行了

使用特权

评论回复
7
eleven11| | 2007-4-15 22:50 | 只看该作者

公司用的就是lwip的优化版本就是我开发的

lwip本身不支持千M网络,所以我修改他适合千M和零拷贝,修改其他tcp?请你给我个理由?

那个人海茫茫的tcp就是楼上的杰作吧?你的精神很不错,可是说实话,你的tcp仍旧是基于zlgip的机构,仍旧没有最重要的流控算法,你很大程度只是修改了bug,但tcp的骨子没有变

修改一个tcp协议栈到商业应用程度远没有一些人想的那么简单,要付出很大的努力,我不想一些人听了一些什么话去投入那么大的精力,如果你认为我说的是废话,也可以当我是sb在自言自语

使用特权

评论回复
8
zlg315| | 2007-4-17 07:55 | 只看该作者

我们没有完全公开TCP/IP软件,也确实有一些用户使用Lwip。

    NXP网站也提供下载,用户可以尝试选用,所以我们从来不认为ZLG/IP是唯一选择,我们仅仅提供了一个有开发文档的基本TCP/IP DEMO版软件。
    除了TCP/IP没有开源,我们提供的其它软件包全部有开源代码和开发文档。
    

使用特权

评论回复
9
foyyof| | 2007-4-17 08:45 | 只看该作者

所以,指望着买块板子就能用上面的功能就免了吧

能够借鉴一下,就可以了。现在都是大家默认的东西了。

使用特权

评论回复
10
deeploves| | 2007-4-17 09:02 | 只看该作者

这个没什么好争的吧?就当是一句玩笑话!

    我确实是修改ZLGIP,你说的没错,ZLGIP基本架构真的不错,但架构好并不是流程就好,在五层中很多都连接得不是很好,层与层之间的数据及变量传递也不严密,因而就必然会产生BUG,想用好一个TCPIP,那么只有二种方法,一是熟悉这个栈,二是用商业版本,否则你永远也别想用好,因为实验室出来的在现场出现的问题多得是。如果是开源的,不熟悉的话,呵呵,在现场等被骂了。

    还有,我并没有开放我修改后的TCP部分,你怎么知道我没有控制流量?呵呵,TCP层没有控制流量还叫TCP吗?没有流量控制一接主网还能用吗?一会儿就完了。你看到的只是我开放的UDP而已。

    只是一句玩笑话,何必当真呢?

使用特权

评论回复
11
zlg315| | 2007-4-17 13:00 | 只看该作者

我们通过多年的努力,TCP/IP历经几万个产品的考证是可靠的

    我想让客户使用,但谁愿意付费呢?哪怕基本的费用,谁在中国目前的情况下做软件的商业化,谁就成为第二个Keil,关键是使用者希望什么都免费。我们免费提供了很多软件包,很多公司在使用,但又有多少人尊重我们的劳动呢?所以我们不得不成立新公司广州致远电子有限公司全面转向产品开发,否则无法保证投入与产出的结果。

使用特权

评论回复
12
alex3000| | 2007-4-17 22:04 | 只看该作者

71ic放出大量的zlg代码用于商用

http://www.71ic.com/Soft/QRS/uCOS/List_5.html

zlg应该告他,太过分了,用大量的zlg的代码不经授权用于商业目的

使用特权

评论回复
13
JIANBAO| | 2007-4-18 11:18 | 只看该作者

我是个菜鸟,对ARM很感情趣.能给介绍点材料么?

我现在还没有毕业!想多学点ARM,请大家多帮忙!介绍点好方法!

使用特权

评论回复
14
zlg315| | 2007-4-24 03:02 | 只看该作者

我们完整的TCP/IP商业版目前只用于MiniARM,但对于一些好客户

我们是以“库文件”加密的方式提供的。至于目前提供的DEMO板本的结构问题,是商业版本裁减所引起的,因此敬请大家谅解。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

176

帖子

0

粉丝