资讯详情

tcp数据传输的调试

这两天还是再调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 ......

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台