jasonxia74
驱动牛犊
驱动牛犊
  • 注册日期2004-10-29
  • 最后登录2005-06-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3010回复:7

eth头是谁加的?包包屁股上的0是谁加的?

楼主#
更多 发布于:2005-01-14 11:04
我在NDIS IM驱动中得到的packet已经是eth包了,问题是这个头是谁加上的呢?
是ndis framework加的还是其他什么神秘的东西加上去的?
那位老大给个详细一点的解释,就说ETH包好了,加头/去头和分帧/组装都在哪里做的啊?一脑子浆糊!
令外我在测试中发现有时我的包包屁股后会被加上几个0,看着挺像padding的,可是为什么呢,我不想要啊。代码出什么错误会导致这样啊?跪求答案!
我本将心向明月 奈何明月照沟渠
jasonxia74
驱动牛犊
驱动牛犊
  • 注册日期2004-10-29
  • 最后登录2005-06-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-19 09:22
关于第二个问题,已经找到答案了:
包尾的0是因为包太小,eth包最小46bytes,所以加了写padding。
(谁在丢西红柿!问题蠢不是我的错!)
第一个问题还没搞定,大家帮忙啊
我本将心向明月 奈何明月照沟渠
hlpsl
驱动牛犊
驱动牛犊
  • 注册日期2003-02-27
  • 最后登录2015-01-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望30点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-19 09:58
我觉得是TCP/IP协议栈添上去的吧,NDIS库只是对包的管理
jasonxia74
驱动牛犊
驱动牛犊
  • 注册日期2004-10-29
  • 最后登录2005-06-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-20 09:34
可是eth头是LLC这一层的东西,按说不应该归tcpip.sys管啊。
我再详细解释一下我的问题,希望这次能说明白

下面这个示意图没有考虑windows协议栈的细节,只考虑NDIS相关:

    tcp/ip
-------------------
  NDIS Framework
-------------------
miniport interface
   IM Driver
protocol interface
-------------------
  NDIS Framework
-------------------
  Miniport Driver

IM Driver从prtocol interface获得的包带有eth头还可以理解,因为
IM Driveer对于下层驱动看来应该在LLC层以上。
可是对于从miniport interface获得的包来说,已经带eth头就有点怪
了,因为tcp/ip层不知道下层协议是什么,按说不应该加LLC层的头啊,
所以觉得应该是NDIS或其他什么机制加了这个头。
感觉上packet应该先过NDIS,然后是IM Driver,最后才过minport。
所以觉得NDIS有机会加这个头,但实际内幕到底如何呢?

还是疑惑啊!





我本将心向明月 奈何明月照沟渠
hlpsl
驱动牛犊
驱动牛犊
  • 注册日期2003-02-27
  • 最后登录2015-01-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望30点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-20 18:57
windows 的TCP/IP协议栈实现了几层啊,如果只实现了网络层以上,那么ETH头就不应该是协议栈添的。
cndustin
驱动牛犊
驱动牛犊
  • 注册日期2004-07-23
  • 最后登录2006-03-03
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-06-06 15:14
我觉得应该是在miniport driver及以下的驱动中完成添加的
nolasterror
驱动牛犊
驱动牛犊
  • 注册日期2004-09-22
  • 最后登录2006-06-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-06-08 09:25
应该是tcp ip加的吧。
用nidssend直接发包时不就是自己写ether头吗,
tcpip最终也是 调用nidssend来发包,
所以应该是由tcpip来写ehter头。
force_eagle
驱动小牛
驱动小牛
  • 注册日期2002-05-06
  • 最后登录2009-02-26
  • 粉丝0
  • 关注0
  • 积分387分
  • 威望61点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-07-11 15:33
我想MiniPort 驱动添加的
游客

返回顶部