阅读:1987回复:19
关于ndis工作方式的问题
我现在想把在中间层处理过的数据信息送回到ip层(也就是送回给上层的协议),请问我这么做能行的通么?
请各位兄弟多多给些意见,给些帮助。 |
|
|
沙发#
发布于:2003-12-15 11:03
可以
|
|
|
板凳#
发布于:2003-12-15 11:14
能告诉我怎么做么?
|
|
|
地板#
发布于:2003-12-15 11:20
imd收到数据包后,分配新的packet,将数据包拷贝出来;
向协议驱动指示该数据已经发完; 处理数据包; 向协议驱动指示,收到了一个包; |
|
|
地下室#
发布于:2003-12-15 11:22
我只把处理过的上层来包送回给ip想重新作一下分片。把未处理过的下层来包先送入ip做一次分片重组,然后再送到中间层处理,然后再送回到ip。这能行么?!
|
|
|
5楼#
发布于:2003-12-15 11:31
我只把处理过的上层来包送回给ip想重新作一下分片。把未处理过的下层来包先送入ip做一次分片重组,然后再送到中间层处理,然后再送回到ip。这能行么?! “把处理过的上层来包送回给ip”? 怎么送!ip为什么会重新对它作分片呢? “把未处理过的下层来包先送入ip做一次分片重组,然后再送到中间层处理,”ip为什么会送回给中间层处理呢! 我觉得好不理解啊 |
|
|
6楼#
发布于:2003-12-15 11:42
不好意思,我说的不对劲,
我的意思是把中间层的得到的包中的ip可以接受的信息先剥离出来,再回送给ip,比如我把加密过的ip报文部分的信息送回给ip让他再给分片; |
|
|
7楼#
发布于:2003-12-15 14:31
我觉得不行。
但是,为什么要这样呢?是因为加密后的ip长度变大,超过了网卡的最大包长(比如1500)么?如果是这样,把mtu改小就可以了的 |
|
|
8楼#
发布于:2003-12-15 14:53
1500已经是最大了,不可以再大了,一般的一个以太桢的最大长度是1518,去掉18个字节的桢头和桢尾信息就剩下1500字节了
|
|
|
9楼#
发布于:2003-12-15 15:18
再大传输过程中就可能由路由器把我的包分片了。我不想有这样的事情发生。
|
|
|
10楼#
发布于:2003-12-15 16:08
是啊,所以要把mtu该小,比如改成1400字节,上面下来的包就最大只有1414字节,加密后不超过1500就可以了
|
|
|
11楼#
发布于:2003-12-15 16:30
楼主可能是想让IP帮你分片再发出去吧。
我想你这样在两层来回转是不现实的,我认为不可以。你要实现分片要自己写个函数就行了。 将变大的IP包的包头拆掉,将净苛分片,然后再给每个分片加上刚才拆掉包头,当然每个包头里还要改一下序列号。就是完全模仿IP分片嘛,呵呵~~ :D |
|
12楼#
发布于:2003-12-15 16:41
hehe,我原意是这样的,你说的也有些小毛病,被分片的包序列号应该是一样的,只是他们的片偏移是不同的。另外他们分段标识都被标识了。
还是要写代码啊。 :P谁能帮俺找一个分片-重组的函数,小弟当感激不尽。 |
|
|
13楼#
发布于:2003-12-15 16:45
发包时还好说,我收包时呢?我得再这层作一次重组才可以把重组过的包上传给协议层。
|
|
|
论坛版主
|
14楼#
发布于:2003-12-15 17:01
哈哈,做VPN的吧,看来做这个东西大家要的东西都一样喔:)我知道你的意思,这样做试试:在IM中的QUERYINFORMATION的时候在QUERY下层NIC的MTU告诉上层一个合适的值,这样确保IM做完处理的MAC帧小于1500(不加头部和帧同步码);对于在中途的分片,强行置IP头部的位,不许它在IP子网内部分片,如果是X.25或别的可以不管,让他们自己分了在装,只要保证在接受处IP包是完整的就行。进入的包不用管,长度不回大于你要的!
|
|
论坛版主
|
15楼#
发布于:2003-12-15 17:04
自己做分组重装一点儿问题也没有,但是原来协议栈的功能浪费了,插不进协议栈就不做分片重装了吧,做WIN上的是不太方便
|
|
16楼#
发布于:2003-12-15 17:40
我直接改注册表也可以限制mtu的大小,让他在加密之后不知过大。
|
|
|
17楼#
发布于:2003-12-15 17:47
谢谢,可是我分都给完了,以后再送上吧
|
|
|
18楼#
发布于:2003-12-15 17:50
但是如果我收到的包是被在传输过程中分片了的呢?
|
|
|
19楼#
发布于:2003-12-15 18:10
但是如果我收到的包是被在传输过程中分片了的呢? 上面有位仁兄说了在IP头中禁止这样做 :cool: |
|