阅读:1751回复:10
2000下数据包有没有可能在ip层分段?
调试中间层驱动程序时,接到的数据包均没有分段标志
不知有没有可能接收到有分段标志的ip数据包 如果有我就惨了。。。得重新改程序了。。 |
|
最新喜欢:moqing... |
沙发#
发布于:2001-12-03 12:10
你用udp发送数据,一次发送8k,难道还没有分段?
|
|
|
板凳#
发布于:2001-12-03 13:52
说的是分片么,如果是的话,那是一定会有的。赶快改吧,改完了贴出来大家分享一下,嘿嘿。
|
|
|
地板#
发布于:2001-12-03 20:45
这个问题我昨天才想起的
不过我在试了很多次发送接收文件都正常 发送一个65500的数据包,在中间层接到数据包长度为1410,ip头中的长度字段为1396 没有分片标志 有没有可能在传输层已经分分成小片给ip层,ip层就加个头就可以。 btw:pmtu的实现机制谁可以帮我讲解一下 我自己发icmp数据包通知pmtu,没有效果。。。 |
|
地下室#
发布于:2001-12-03 20:48
这个问题我昨天才想起的
不过我在试了很多次发送接收文件都正常 发送一个65500的数据包,在中间层接到数据包长度为1410,ip头中的长度字段为1396 没有分片标志 有没有可能在传输层已经分分成小片给ip层,ip层就加个头就可以。 btw:pmtu的实现机制谁可以帮我讲解一下 我自己发icmp数据包通知pmtu,没有效果。。。 |
|
5楼#
发布于:2001-12-05 11:25
你如果就在本地局域网上,并且总是用TCP来试验,可能确实没有分片的标志。
|
|
|
6楼#
发布于:2001-12-05 14:02
我用udp试的
就是中间层驱动接到本机ip层发下来的数据包,只要能保证不是分片的数据包我的程序就可以不改了 到底在什么情况下能接到分片的数据包? |
|
7楼#
发布于:2001-12-05 18:35
我也觉得很奇怪。
如果你用UDP,一次发送65500,在中间层发现是1410。那么,你在接受端收到的还是65500长么?按你的说法应该是。 如果 IP的头没有分片标志,那么,接收端靠什么来重组呢?在UDP的头里根本没有这个标志呀。 难道,在中间层的下方才分片?好像不合情理。 关注! |
|
|
8楼#
发布于:2001-12-06 17:34
今天试了一下 udp数据包要分片 这下真惨了。。。
不过查看分片标志的时候很奇怪 发送一个udp数据包,发送的数据大小为10000 经过ip层分片后,查看ip头 ip标志(frag) 数据包长度 标识 偏移量 0 1396 0x75 0x4 0 1396 0x75 0x1584 1 1396 0x75 0xb04 2 1396 0x75 0x84 2 1396 0x75 0x104 3 1396 0x75 0xb84 4 1396 0x75 0x104 4 396 0x75 0x1680 (偏移量有可能有错误) 在tcp/ip第一卷中 提到frag中第一位保留,第二位为df位 第3位为分片标记,奇怪的是收到数据包的ip标志如上所示 跟踪更大的的情况是偶数出现两次计数一次,大于7回到0 是不是win2000下ip头的实现机制与书上说的不同?? |
|
9楼#
发布于:2001-12-06 19:57
分析了一下你的数据,数据本身没有错,是你的程序错误:
你肯定用了一个短整型变量来分析IP头,而没有考虑字节序的问题, 并且有若干错误 你的算法如下: 以第一帧为例: 在flags/fragmentation offset 16个比特应该是: bit0 ----- bit15 0010 0000 0000 0000 USHORT s = 0x0020 //32; flag 你好像总是取了bit4 ---bit7 offset你好像直接用s除以8 错误一:字节序错误 错误二:offset应该是乘8,而不是除8; 错误三:flag只有3bit; 错误四:计算offset要把flag为置为0 也许分析有误,如果还有问题,可以把代码贴上来看看。 |
|
|
10楼#
发布于:2001-12-10 17:28
谢谢liuhb
真是厉害 这个错误也能看的出来 程序错误找出来了,确实是字序的问题 unsigned short frag:3; offset:13; frag占据了16位中的5――7位,而不是0――2位。 以前都没注意到这个问题 |
|