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