本帖最后由 VisualEleven 于 2010-12-13 11:20:53 编辑

解决方案 »

  1.   

    你应该好好看下TCP IP协议。TCP分段不晓得神马意思,你带开一个网址,他首先会DNS解析 得到IP,再是那次握手,成功后发送get 请求,服务器返回http头,里面包含接下来数据的长度。浏览器再次按http响应头里面说明的长度接受接下来的数据。包如果大于MTU,则会进行IP分片、还有可以用EtherPeek 抓包。
      

  2.   

    Ethernet Header
      Destination:          00:E0:4C:39:B4:84  Realtek Semi:39:B4:84
      Source:               00:A1:B0:20:02:78
      Protocol Type:        0x0800  IP
    IP Header - Internet Protocol Datagram
      Version:              4
      Header Length:        5  (20 bytes)
      Differentiated Services:%00000000
                            0000 00.. Default
                            .... ..x. Reserved
                            .... ...x Reserved  Total Length:         1480
      Identifier:           30976
      Fragmentation Flags:  %010
                            0.. Reserved
                            .1. Do Not Fragment
                            ..0 Last Fragment  Fragment Offset:      0  (0 bytes)
      Time To Live:         53
      Protocol:             6  TCP - Transmission Control Protocol
      Header Checksum:      0x546F
      Source IP Address:    220.181.111.15  hi.baidu.com
      Dest. IP Address:     192.168.102.83
    TCP - Transport Control Protocol
      Source Port:          80  http
      Destination Port:     1352  lotusnote
      Sequence Number:      2996481576
      Ack Number:           2305855832
      TCP Offset:           5  (20 bytes)
      Reserved:             %000000  TCP Flags:            %010000  .A....
                            0. .... (No Urgent pointer)
                            .1 .... Ack
                            .. 0... (No Push)
                            .. .0.. (No Reset)
                            .. ..0. (No SYN)
                            .. ...0 (No FIN)  Window:               2630
      TCP Checksum:         0xECEF
      Urgent Pointer:       0
      No TCP Options
    HTTP - Hyper Text Transfer Protocol
      Continuation of existing HTTP stream
      Binary Data:
      b....l..p.>A....  62 A9 A8 AE CA 6C 0E A4 70 13 3E 41 DC E3 06 BD
      ...,/..Fl.N... D9 B6 81 2C 2F 1B 0C 46 6C 0D 4E 89 BE EE 5C 45
      YI......`....p.9  59 49 0B 90 B2 1C 1C AE 60 A0 1B 92 CB 70 12 39
      .:....#.'.B.F.,.  96 3A BB B2 B7 FE 23 14 27 95 42 A1 46 0B 2C 04
      .J)...Z...-..P..  A1 4A 29 98 A4 18 5A 80 CA 85 2D 89 0F 50 DE 95
      WK..J.y.. ....z.  57 4B B8 B5 4A E1 79 E8 93 20 93 85 8B 07 7A E8
      .!...d.RnX.V.._.  C1 21 DB B4 07 64 85 52 6E 58 BD 56 05 03 5F B2
      ].P. ..=.o_Nm..Q  5D 9A 50 D8 20 E0 11 3D D9 6F 5F 4E 6D E5 87 51
      ...kA...|..... Y  08 A1 0A 6B 41 05 98 C6 7C F9 84 E6 9A A8 20 59
      ....Y..t0...]..=  94 85 1E ED 59 92 CB 74 30 E9 03 F8 5D 1F D9 3D
      .........,L..&n.  81 92 F5 A8 E1 B6 A0 91 82 2C 4C 1D CB 26 6E F4
      

  3.   

    楼上的兄弟我讨论的是tcp包长度大于mss的情况。没说ip层的问题,更没说ip分片。目前测试为止,发现ethereal检查到一个有数据的ack包的标志位没有置psh标志时确认为 a reassembled pdu。ps:是有数据的ack包。纯ack回应len=0的数据包不会认为是a reassembled pdu。另外如果有类似syn,fin的标志也不会认为是a reassembled pdu。
      

  4.   

    另外,就是tcp/ip三本书翻烂了都找不到才来这请求牛人帮助的。
      

  5.   

    楼主,问题2 找到一个解释
    收到一个报文后如何确定它是一个"TCP segment"?如果有几个报文的ACK序号都一样,并且这些报文的Sequence Number都不一样,并且后一个Sequence Number为前一个Sequence Number加上前一个报文大小再加上1的话,肯定是TCP segment了,对于没有ACK标志时,则无法判断
      

  6.   


    对的哈,ack必须一样这个是个大前提。我倒是忘记说了。
      

  7.   

    但是ethereal不是根据这个来判断的,
    我后来做实验发现,我只发一个包,不带psh标志,就会认为是tcp segment of a reassembled pdu。
      

  8.   

    这是SOCKET的一个机制哈! TcpAckFrequency默认为2