问题描述: 当我建立一个HTTP连接的时候,我给远程服务器发送包的TCP序号是连续的,远程服务器给我确认的序号也是连续的,但是当同 一个远程服务器端口给我的进程的同一个端口发送数据包的时候,所显示的数据包的TCP序号却是不连续的,如:本地时间 00:25:15,用时(us)608391  帧长度:1484
源网络 203.208.39.99 端口:80 ->目的网络 125.218.44.66 端口:3177
TCP包序号: 1437596698
HTTP/1.1 200 OK
Date: Mon, 23 Nov 2009 16:25:08 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=UTF-8
Server: gws
X-XSS-Protection: 0
Content-Encoding: gzip
Transfer-Encoding: chunkedee5
:ksu鱓`.@7)pzZZKZQ7@HgZ'4vkN2l7Mgw3;q黖\<HV;V#syZfWf-lSYzY|T'y.)<Mcf!?Ty+PW]l.O<
ZiGwT+%鼽Qujk~}@_h0U"4O麶oZJ??5\2Fb;XMLwF;=PU%Ml#C_!KXv+mM2:鱙_"=zBS%mL1g;Xfw5
E{/!B2fT3Gux:iCLCv2cD1F鱌I))S8?mzMK"J)SGQ%cLf`B@;f8|Hl[)o1[]X+'bduM*!l鵱n?ebjE'J
Lu5>qLA-9?)LaSl!1}X_S^lG鴠H05?jSy?#N黲9DrT`|^2l.UWoITI6 FdT#v|l)@NO\K#cZ9.^#%/y#
zCr68?p)yZVw%kf:E,eu~h1:h;(N{r?qJ01_U]JZ3SZ8^I82*$Hv%"1Up6ZA/LpjUOx,xM.pms#>e齈H
EuGqB>qA$K"]\i02n8B&jdvpLV"I6t F+OrB[YTTJ,:abSmR "鵷"K@8D=<LTHK-uJ*aI.XxO鵥Du8!b
ra+i1wC7Orxz[JSkKIri本地时间 00:25:15,用时(us)608513  帧长度:1484
源网络 203.208.39.99 端口:80 ->目的网络 125.218.44.66 端口:3177
TCP包序号: 1437598128
|yNl' {X&Ce&&@6+鸼8PtM%ia]!H-6]^E&,/I?+.lGp!Kj*WY3*jY%w$鱝xXWL}/@@鼬K #%0%F8|"CQ
ad3"'2Qt?E齈>p#XTYthj\M]Gy`tOp6B<tj\8]a9~8@h41Q@*an鵰l "a$f9C5Nc9'QP!*1hB鱐(Ufur
 0N1AUfWi6+T鵪nNP(<;r1]Cu`{s"h6CQ Pb=G9t10f~xO"pvo?-??(8-\\x9@H_6?wx8~j{
uM$bb;zb!G+86Wd|tTwCyQ<;(/6~WqTA鳸CH>oxY={}qO_l%]LNY鱕|?X?1PoB2Qft>7S8?>Jp{=
鵦RqrB a?nU#Y$s>f'4>E[jm2d M`?:k鱍"Wb,?}mi/~9<8\ooo^{?40q}9U8?qVa'J8Hn/1
131293Y-Y;鸼z`*鵠hfynNK'xw|lv5^!Q{o{vw_am{S^q55gx/^|{?\Jk/:":vA4VU>@BV 0Qj:c
oZq}Mb)NMrq[(鳦M$(Yg7dQ$kg2pD齛$m7sP+Hk8Pf|#uw*G<0@/"H86|~PD9[WC[?Cju:u!$xDMkK#I
66U本地时间 00:25:15,用时(us)608547  帧长度:54
源网络 125.218.44.66 端口:3177 ->目的网络 203.208.39.99 端口:80
TCP包序号: 4171041206
kK|I本地时间 00:25:15,用时(us)608636  帧长度:1264
源网络 203.208.39.99 端口:80 ->目的网络 125.218.44.66 端口:3177
TCP包序号: 1437599558
Y~|:t21+h,X?JM '?Gr;鹢~鸚?|/LD {R2r]uO鱨A?=D0tv&/~齘kw(X7TfR+[HE!`_Bx鼂/>;齉:>
\4p4?YT6pS`?'-tL+@u`(^c,  oN[|cqn,MO?w[}鴀<Y^ZbmyW1[BpxXUww6.6h{zag=.O鹀tw
pK;c%!#q5eGlks[[c';kG鱒|ksl&W3[iy'X9?.VDW_齏_Cb":!^\kEx2^k/~A2%GC5>cbyn}ELSEv+
ka鱢,/4.OIWRT7YXBsV\LO~p>{8TJ5BTGX1/GQU(?8}麿Y``*﨣/I鸻g&O4/LQDjPb?<Z \{$})5:bIX
Ld鳸_6>&M}5)-6q07>鸄Dke~8]uTswv_:0鱯?TkUOoTp[b鱥嗀$y?uXSil". 1%l&7Ya$Sq@b鵙_UW
HU%{33CJ鱆wWVA$}G[O_]{鳹:Aj(\)ob0s;xT,cr)<"W>a}wO齶:\hy+
a
:J&"
0203.208.39.99 端口:80是远程服务器,125.218.44.66 端口:3177是我的主机,
第一个包是服务器给我的,TCP包序号: 1437596698
第二个包是服务器给我的,TCP包序号: 1437598128
第三个包是我给服务器的,略去
第四个包是服务器给我的,TCP包序号: 1437599558
按理说,同一个服务器的同一个端口给我的主机进程的同一个端口所传的数据应能组成连续序列,可是为什么我的相差那么大呢?(已经用ntohl函数转换过了)这个是Google首页的数据包

解决方案 »

  1.   

    这个问题我已经解决了,为了能对别人有所帮助,我把我的心得写出来。是这样的:在本地主机呼叫远程服务器进行HTTP连接的时候,要进行3次握手,本地主机先向远程服务器发送TCP连接请求,TCP包序号为3315034686,只后远程服务器响应,响应TCP包序号为1437596697,然后本地主机再次发送TCP连接请求,TCP包序号为3315034687,这就是所说的“3次握手”机制。我们看到本地主机发送第二次的TCP包序号比前一次增1.但是当传送正式的数据时,这个增1的理解就不对了。我发现在远程服务器给本地主机传送真实数据时,并不是按照增1的方法,而是从一个长整型数为起始,下一个包序号为“起始序号+TCP包数据长度”例如上面所出现的第一个包序号1437596698,帧长度为1484;第二个包序号为1437598128,帧长度也为1484;第四个包序号为1437599558,帧长度为1264。(其中帧长度=以太网帧头14B+IP头20B+TCP头长度20B+TCP数据长度)。第一包比第二个包序号小1430,第二个包比第四个包小1430,这个1430就是TCP包数据长度(去掉TCP头的)!就是说包序号只与上一个TCP包数据长度和其包序号有关系。不知道我的理解对不对,愿和大家分享。(此数据为实验时真实数据)