嵌入式TCP/IP数据帧结构定义?

braverywu 2009-07-02 05:25:22
在一般的代码中都可以看到如下定义的帧结构
struct ip { uint EtherHead[9];
uchar VerandIphLen;
uchar ServerType;
uint TotalLen;
uint FrameIndex;
uint Segment;
uchar ttl;
uchar NextProtocal;
uint Crc;
uint SourceIp[2];
uint DestId[2];
uchar packet[1498];
};
struct IpPacket { uint EtherHead[9];
uint IpPacket[720];
};
此处的ip和IpPacket有什么不同,packet[1498];IpPacket[720];这两个字节数也不一样啊!另外校验和计算公式中的
unsigned int createtcpcrc()//生成TCP包CRC校验
{
unsigned int crc;

crc=checksum(&txdnet.ippacket.ippacket[4],txdnet.ipframe.crc+12);
return (crc);
}
txdnet.ippacket.ippacket[4],为什么计算校验和要从这里开始呢?

新手刚接触,请高手指点下,谢谢!
...全文
96 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
libaizhang 2009-07-02
  • 打赏
  • 举报
回复
IP是用来你访问IP头部用的,比如我有个地址,打个比方是0x300, 而且这个地方就是我的IP包数据的开始,那我可以用:
struct ip *iphdr = 0x300;

iphdr->Totallen等访问到这个包总长度是多少,类推;

而且IPPacket是一个完整的数据包不但有以太网的头,还要有IP的头,那这个结构可以
分辩出一个以以太网头开始的数据包,从哪里开始是ip头。

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧