专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

tcp数据传输的调试

作者:刘温电   来源:本站原创   点击数:  更新时间:2013年11月23日   【字体:

这两天还是再调tcp,网上的资料也不全,大多是关于tcp握手连接的东西,而且都说的是,所以只好摸索着来,首先,关于握手,各大资料都说是3次,握手,握手应答,应答,然后建立连接。对于握手连接的处理,有两点,假设主动连接端为a端,被动连接端为b端,第一点是判断这一帧的第48位,a端b主机发送0x02,b主机向a主机发送0x12,然后a主机在向b主机发送0x10,对于b端,首先要判断来端是否为0x02如果是,则向a端的此位发送0x12,同时第二点就是序列号,将a的序列号加1以后,放在b端回应的应答号中去。回应的序列号中放入一个生成的序列号。序号的位置在38-41位,应答号的位置在42-45位。发送握手应答后,b只要在判断其返回帧的第48位是否为0x10和应答号是否加一即可。若不对,丢包或者发送重传即可。
当建立连接以后,就可以传输数据了,传输数据时,a向b传输应用数据的同时,在第48位发送的应该为0x12。然后加上序列号,在b端处理时需要注意两个问题,1,每次发送数据都应该接收一个应答,2,收方的应答号,是发方的序列号加上数据个数。
我在调试的时候,就出现了问题,开始的时候,没有做应答,结果上位机会连续发送多次数据。后来我添加了应答处理,序列号我是按照握手协议那么写的,序列号只加1,结果发现上位机会一个一个的重传。后来通过抓包软件才发现,原来是b返回的应答号,应该是a的序列号,加上a所传输的数据。
解决了应答,剩下的就是数据提取了,提取应用数据首先要计算两个相关数据,1,偏移,2,数据个数。偏移就是真实的应用数据在一帧的具体位置。只要知道了数据位置和个数,就可以获取数据了。
应用数据偏移计算为 tcp源端口号的位置 + tcp头长度 
应用数据的长度计算为  ip总长度 - ip头长度 -  tcp头长度
最后就是四次挥手,对此网上解释也是乱七八糟的,也许是我的智力低下造成的不理解,但还是通过抓包软件才看明白的。
首先是a端向b端发送0x11,然后b端发送应答返回0x10,发送应答后,继续发送0x11。然后等待a端发送0x10这样,即完成了挥手操作。
以下是抓包数据,可以给大家做个参考。

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(真实数据为 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 (对于数据的应答,可以注意一下第三行的 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                                  ......      

关闭窗口

相关文章