<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > tcp數(shù)據(jù)傳輸?shù)恼{(diào)試

          tcp數(shù)據(jù)傳輸?shù)恼{(diào)試

          作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò) 收藏
          這兩天還是再調(diào)tcp,網(wǎng)上的資料也不全,大多是關(guān)于tcp握手連接的東西,而且都說(shuō)的是,所以只好摸索著來(lái),首先,關(guān)于握手,各大資料都說(shuō)是3次,握手,握手應(yīng)答,應(yīng)答,然后建立連接。對(duì)于握手連接的處理,有兩點(diǎn),假設(shè)主動(dòng)連接端為a端,被動(dòng)連接端為b端,第一點(diǎn)是判斷這一幀的第48位,a端b主機(jī)發(fā)送0x02,b主機(jī)向a主機(jī)發(fā)送0x12,然后a主機(jī)在向b主機(jī)發(fā)送0x10,對(duì)于b端,首先要判斷來(lái)端是否為0x02如果是,則向a端的此位發(fā)送0x12,同時(shí)第二點(diǎn)就是序列號(hào),將a的序列號(hào)加1以后,放在b端回應(yīng)的應(yīng)答號(hào)中去。回應(yīng)的序列號(hào)中放入一個(gè)生成的序列號(hào)。序號(hào)的位置在38-41位,應(yīng)答號(hào)的位置在42-45位。發(fā)送握手應(yīng)答后,b只要在判斷其返回幀的第48位是否為0x10和應(yīng)答號(hào)是否加一即可。若不對(duì),丟包或者發(fā)送重傳即可。

          當(dāng)建立連接以后,就可以傳輸數(shù)據(jù)了,傳輸數(shù)據(jù)時(shí),a向b傳輸應(yīng)用數(shù)據(jù)的同時(shí),在第48位發(fā)送的應(yīng)該為0x12。然后加上序列號(hào),在b端處理時(shí)需要注意兩個(gè)問(wèn)題,1,每次發(fā)送數(shù)據(jù)都應(yīng)該接收一個(gè)應(yīng)答,2,收方的應(yīng)答號(hào),是發(fā)方的序列號(hào)加上數(shù)據(jù)個(gè)數(shù)。
          我在調(diào)試的時(shí)候,就出現(xiàn)了問(wèn)題,開(kāi)始的時(shí)候,沒(méi)有做應(yīng)答,結(jié)果上位機(jī)會(huì)連續(xù)發(fā)送多次數(shù)據(jù)。后來(lái)我添加了應(yīng)答處理,序列號(hào)我是按照握手協(xié)議那么寫(xiě)的,序列號(hào)只加1,結(jié)果發(fā)現(xiàn)上位機(jī)會(huì)一個(gè)一個(gè)的重傳。后來(lái)通過(guò)抓包軟件才發(fā)現(xiàn),原來(lái)是b返回的應(yīng)答號(hào),應(yīng)該是a的序列號(hào),加上a所傳輸?shù)臄?shù)據(jù)。
          解決了應(yīng)答,剩下的就是數(shù)據(jù)提取了,提取應(yīng)用數(shù)據(jù)首先要計(jì)算兩個(gè)相關(guān)數(shù)據(jù),1,偏移,2,數(shù)據(jù)個(gè)數(shù)。偏移就是真實(shí)的應(yīng)用數(shù)據(jù)在一幀的具體位置。只要知道了數(shù)據(jù)位置和個(gè)數(shù),就可以獲取數(shù)據(jù)了。
          應(yīng)用數(shù)據(jù)偏移計(jì)算為 tcp源端口號(hào)的位置 + tcp頭長(zhǎng)度
          應(yīng)用數(shù)據(jù)的長(zhǎng)度計(jì)算為 ip總長(zhǎng)度 - ip頭長(zhǎng)度 -tcp頭長(zhǎng)度
          最后就是四次揮手,對(duì)此網(wǎng)上解釋也是亂七八糟的,也許是我的智力低下造成的不理解,但還是通過(guò)抓包軟件才看明白的。
          首先是a端向b端發(fā)送0x11,然后b端發(fā)送應(yīng)答返回0x10,發(fā)送應(yīng)答后,繼續(xù)發(fā)送0x11。然后等待a端發(fā)送0x10這樣,即完成了揮手操作。
          以下是抓包數(shù)據(jù),可以給大家做個(gè)參考。

          本文引用地址:http://www.ex-cimer.com/article/201611/324073.htm

          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í)數(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 (對(duì)于數(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



          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();