阅读:960回复:0
关于数据包的流程,我跟踪了一下,欢迎指点一二!
操作系统: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] |
|
|