wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:960回复:0

关于数据包的流程,我跟踪了一下,欢迎指点一二!

楼主#
更多 发布于:2004-02-20 15:10
操作系统:w2k server
我跟踪了一下TCPIP.SYS,发现:
(1)发送数据
发送数据包用的是struct _NDIS_OPEN_BLOCK 结构中的SendHandler,此时的数据包大小最大值为1472,如果发送大的数据包,例如2000,那么系统要调用2次SendHandler!

(2)接收数据
接收数据走的流程是:
    《1》如果就1个包(没有分片),那么调用struct _NDIS_OPEN_BLOCK 结构中的PostNt31ReceiveHandler和PostNt31ReceiveCompleteHandler;
    《2》如果多于1个包(发送过来的数据包经过分片),那么调用的顺序为:
 PostNt31ReceiveHandler;
 TransferDataHandler()  <===也是struc_NDIS_OPEN_BLOCK 结构中
 PostNt31ReceiveCompleteHandler;

(3)结论
发送包的时候,只调用SendHandler;
接收包的时候,一定调用PostNt31ReceiveHandler和PostNt31ReceiveCompleteHandler,但是如果是分片包,那么调用 TransferDataHandler()。

不知道我的结论和其他人的是否一致?


[编辑 -  2/20/04 by  wywwwl]
琢磨悟真知
游客

返回顶部