新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于tcp的握手與數(shù)據(jù)傳輸

        關(guān)于tcp的握手與數(shù)據(jù)傳輸

        作者: 時(shí)間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
        搞了n天的tcp/ip協(xié)議,才漸漸的明白,tcp和ip是兩個(gè)不同層上的協(xié)議,而且也不一樣,tcp是架在ip上的,當(dāng)然,ip不僅可以包含tcp,也可以包含udp,至于他們其中的復(fù)雜關(guān)系,我也不知道,只知道,現(xiàn)在的互聯(lián)網(wǎng),大多數(shù)用tcp協(xié)議。所以就搞了一下。

        對(duì)于tcp而言,2個(gè)問題,第一個(gè)是握手和揮手,第二個(gè)是數(shù)據(jù)傳輸。 握手和揮手時(shí),并不傳輸真正的數(shù)據(jù)。只有在握手后,揮手前,才可進(jìn)行有效數(shù)據(jù)的傳輸。對(duì)于tcp的協(xié)議程序,首先要處理握手,因?yàn)椴贿M(jìn)行握手,是無法傳輸數(shù)據(jù)的,這當(dāng)然只是協(xié)議定義的,如果對(duì)于底層而言,就沒有這么復(fù)雜了,但對(duì)于網(wǎng)絡(luò)這樣龐雜的系統(tǒng)來說,建立一個(gè)有效穩(wěn)定的連接還是挺重要的。

        本文引用地址:http://www.104case.com/article/201611/324061.htm

        那么程序首先,要對(duì)數(shù)據(jù)幀進(jìn)行拆解,核對(duì)去掉以太網(wǎng)幀,核對(duì)去掉ip幀,在ip幀中,判斷協(xié)議是否為tcp協(xié)議(即一幀開始的第23位是否為06),當(dāng)?shù)弥猧p包內(nèi)封裝的是tcp協(xié)議后,我們就可以開始判斷該tcp包是握手揮手包還是數(shù)據(jù)包了。對(duì)于下位機(jī)而言,如果不在程序上做處理,對(duì)于任何包,底層都可以接收。但我們必須要按照tcp協(xié)議規(guī)定的那樣來做,首先要判斷是否建立連接,如果沒有,則只接收握手包,而丟棄數(shù)據(jù)包和揮手包。

        判斷握手包和揮手包在幀的第47個(gè)位,0x01(揮手),0x02(握手),0x10(應(yīng)答),0x11(揮手應(yīng)答),0x12(握手應(yīng)答),0x18(傳輸數(shù)據(jù)),只要判斷47位數(shù)據(jù)符合哪個(gè)即可做相應(yīng)處理。
        握手過程為:
        a:發(fā)送0x02給b,b:回復(fù)0x12給a,a:發(fā)送0x10給b
        同時(shí)a在發(fā)送握手?jǐn)?shù)據(jù)時(shí)會(huì)帶一個(gè)序列號(hào),當(dāng)比收到序列號(hào)時(shí),加1后會(huì)回給a
        握手后建立連接,建立連接后即可發(fā)送數(shù)據(jù)
        發(fā)送數(shù)據(jù)時(shí),判斷幀的第47位是否為0x18,若是,則可將數(shù)據(jù)推入應(yīng)用層。



        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 双江| 铁岭市| 蓝山县| 焉耆| 龙南县| 临朐县| 宕昌县| 桐梓县| 株洲市| 东乡| 调兵山市| 织金县| 谢通门县| 宁都县| 抚州市| 凤凰县| 绵阳市| 三原县| 怀来县| 甘谷县| 柯坪县| 常德市| 五大连池市| 雷山县| 石狮市| 舞阳县| 通榆县| 定兴县| 房山区| 武冈市| 外汇| 汝城县| 牙克石市| 博白县| 凤山市| 商河县| 错那县| 莫力| 天台县| 枣阳市| 久治县|