tcp數(shù)據(jù)傳輸?shù)恼{(diào)試
當(dāng)建立連接以后,就可以傳輸數(shù)據(jù)了,傳輸數(shù)據(jù)時,a向b傳輸應(yīng)用數(shù)據(jù)的同時,在第48位發(fā)送的應(yīng)該為0x12。然后加上序列號,在b端處理時需要注意兩個問題,1,每次發(fā)送數(shù)據(jù)都應(yīng)該接收一個應(yīng)答,2,收方的應(yīng)答號,是發(fā)方的序列號加上數(shù)據(jù)個數(shù)。
我在調(diào)試的時候,就出現(xiàn)了問題,開始的時候,沒有做應(yīng)答,結(jié)果上位機會連續(xù)發(fā)送多次數(shù)據(jù)。后來我添加了應(yīng)答處理,序列號我是按照握手協(xié)議那么寫的,序列號只加1,結(jié)果發(fā)現(xiàn)上位機會一個一個的重傳。后來通過抓包軟件才發(fā)現(xiàn),原來是b返回的應(yīng)答號,應(yīng)該是a的序列號,加上a所傳輸?shù)臄?shù)據(jù)。
解決了應(yīng)答,剩下的就是數(shù)據(jù)提取了,提取應(yīng)用數(shù)據(jù)首先要計算兩個相關(guān)數(shù)據(jù),1,偏移,2,數(shù)據(jù)個數(shù)。偏移就是真實的應(yīng)用數(shù)據(jù)在一幀的具體位置。只要知道了數(shù)據(jù)位置和個數(shù),就可以獲取數(shù)據(jù)了。
應(yīng)用數(shù)據(jù)偏移計算為 tcp源端口號的位置 + tcp頭長度
應(yīng)用數(shù)據(jù)的長度計算為 ip總長度 - ip頭長度 -tcp頭長度
最后就是四次揮手,對此網(wǎng)上解釋也是亂七八糟的,也許是我的智力低下造成的不理解,但還是通過抓包軟件才看明白的。
首先是a端向b端發(fā)送0x11,然后b端發(fā)送應(yīng)答返回0x10,發(fā)送應(yīng)答后,繼續(xù)發(fā)送0x11。然后等待a端發(fā)送0x10這樣,即完成了揮手操作。
以下是抓包數(shù)據(jù),可以給大家做個參考。
syn
a->b
0000 f0 7d 68 70 04 3c f0 7d 68 60 3b 42 08 00 45 00 .}hp.<.} h`;B..E.
0010 00 34 49 42 40 00 40 06 6d 64 c0 a8 01 69 c0 a8 .4IB@.@. md...i..
0020 01 64 08 89 ea 60 55 ff c5 b6 00 00 00 00 80 02 .d...`U. ........
0030 ff ff dc 5a 00 00 02 04 05 b4 01 03 03 00 01 01 ...Z.... ........
0040 04 02
syn ack
b->a
0000 f0 7d 68 60 3b 42 f0 7d 68 70 04 3c 08 00 45 00 .}h`;B.} hp.<..E.
0010 00 34 81 f7 40 00 40 06 34 af c0 a8 01 64 c0 a8 .4..@.@. 4....d..
0020 01 69 ea 60 08 89 a5 19 17 70 55 ff c5 b7 80 12 .i.`.... .pU.....
0030 44 70 db 4f 00 00 02 04 05 b4 01 03 03 00 01 01 Dp.O.... ........
0040 04 02
ack
a->b
0000 f0 7d 68 70 04 3c f0 7d 68 60 3b 42 08 00 45 00 .}hp.<.} h`;B..E.
0010 00 28 49 43 40 00 40 06 6d 6f c0 a8 01 69 c0 a8 .(IC@.@. mo...i..
0020 01 64 08 89 ea 60 55 ff c5 b7 a5 19 17 71 50 10 .d...`U. .....qP.
0030 ff ff 60 8b 00 00 ..`...
push ack(真實數(shù)據(jù)為 acsii的aa 55,可以注意一下第三行的 55 ff c5 b7)
a->b
0000 f0 7d 68 70 04 3c f0 7d 68 60 3b 42 08 00 45 00 .}hp.<.} h`;B..E.
0010 00 2c 49 45 40 00 40 06 6d 69 c0 a8 01 69 c0 a8 .,IE@.@. mi...i..
0020 01 64 08 89 ea 60 55 ff c5 b7 a5 19 17 71 50 18 .d...`U. .....qP.
0030 ff ff c9 e8 00 00 61 61 35 35 ......aa 55
ack (對于數(shù)據(jù)的應(yīng)答,可以注意一下第三行的 55 ff c5 bb)
b->a
0000 f0 7d 68 60 3b 42 f0 7d 68 70 04 3c 08 00 45 00 .}h`;B.} hp.<..E.
0010 00 28 81 fa 40 00 40 06 34 b8 c0 a8 01 64 c0 a8 .(..@.@. 4....d..
0020 01 69 ea 60 08 89 a5 19 17 71 55 ff c5 bb 50 10 .i.`.... .qU...P.
0030 44 6c 1c 1b 00 00 Dl....
fin ack
a->b
0000 f0 7d 68 70 04 3c f0 7d 68 60 3b 42 08 00 45 00 .}hp.<.} h`;B..E.
0010 00 28 49 3f 40 00 40 06 6d 73 c0 a8 01 69 c0 a8 .(I?@.@. ms...i..
0020 01 64 08 88 ea 60 1d b0 ba ac 0f a9 ae ee 50 11 .d...`.. ......P.
0030 ff ff a1 d8 00 00 ......
ack
b->a
0000 f0 7d 68 60 3b 42 f0 7d 68 70 04 3c 08 00 45 00 .}h`;B.} hp.<..E.
0010 00 28 81 f4 40 00 40 06 34 be c0 a8 01 64 c0 a8 .(..@.@. 4....d..
0020 01 69 ea 60 08 88 0f a9 ae ee 1d b0 ba ad 50 10 .i.`.... ......P.
0030 44 70 5d 68 00 00 Dp]h..
fin ack
b->a
0000 f0 7d 68 60 3b 42 f0 7d 68 70 04 3c 08 00 45 00 .}h`;B.} hp.<..E.
0010 00 28 81 f5 40 00 40 06 34 bd c0 a8 01 64 c0 a8 .(..@.@. 4....d..
0020 01 69 ea 60 08 88 0f a9 ae ee 1d b0 ba ad 50 11 .i.`.... ......P.
0030 44 70 5d 67 00 00 Dp]g..
ack
a->b
0000 f0 7d 68 70 04 3c f0 7d 68 60 3b 42 08 00 45 00 .}hp.<.} h`;B..E.
0010 00 28 49 40 40 00 40 06 6d 72 c0 a8 01 69 c0 a8 .(I@@.@. mr...i..
0020 01 64 08 88 ea 60 1d b0 ba ad 0f a9 ae ef 50 10 .d...`.. ......P.
0030 ff ff a1 d7 00 00
評論