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