新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 建立TCP連接:三次握手

        建立TCP連接:三次握手

        作者: 時間:2016-11-30 來源:網絡 收藏
        TCP是面向連接的,在面向連接的環境中,開始傳輸數據之前,在兩個終端之間必須先建立一個連接。建立
        連接的過程可以卻確保通信雙方在發送應用數據包之前靜靜準備好了傳送和接收數據。對于一個要建立的連
        接,通信雙方必須用彼此的初始化序列號seq和來自對方成功傳輸確認的應答號ack來同步。(ack號致命希望收到的下一個八位組的編號)習慣上將同步信號寫為SYN,應答信號為ACK。整個同步的過程稱為三次握手
        1)主機A發送SYN給主機B:我的序列號seq是X。
        2)主機B發送SYN、ACK給主機A:我的序列號seq是X+1,應答號是X+1(等待接收第X+1號八位組)。
        3)主機B發送SYN、ACK給主機B:我的序列號seq是X+1,應答號是Y+1.
        通過以上3個步驟(三次握手),TCP連接連接建立,開始傳輸數據。任何機器上的TCP都能被動地等待握手或主動地發起握手。一旦連接建立,數據可以對等地雙向流動。

        如果TCP使用1作為每次建立連接的初始化序列號,當本地系統重啟后,遠程系統會認為以前的連接依然存在。所以每次連接時,主機都會隨機選擇一個初始化序列號,用它來辨別所傳輸的八位組在數據流中的位置。然后雙方要對各自的序列號進行協商,因為接收收到第一個SYN時,他并不知道這是否一個被延遲的舊信號。所以它必須要求發送驗證這個SYN。

        一般情況下,TCP使用最少信息的報文段來實現三次握手,這對減少網絡通信流量是有效的。總之,三次握手使通信雙方做好了傳輸數據的準備,并且使通信通信雙方統一了初始化序列號。

        關閉TCP連接:改進的三次握手
        對于一個已經建立的連接,TCP使用改進的三次握手來結束通話(使用一個帶有FIN附加標記的報文段)。
        1)當主機A的應用程序通知TCP數據已經完畢時,TCP向主機B發送一個帶有FIN附加標記的報文段(FIN理解為
        finish)。
        2)主機B收到這個FIN報文段之后,并不立即用FIN報文段回復主機A,而是向主機A發送一個確認ACK,同時
        同時通知自己相應的應用程序:對方要求關閉連接(先發送ACK為了防止在這段時間內,對方重傳FIN報文段)。
        3)主機B的應用程序告訴TCP:我要徹底的關閉的關閉連接,TCP向主機A送第二個FIN報文段。
        4)主機A收到第二個FIN報文段后,向主機B發送一個ACK表示連接徹底關閉。

        TCP的可靠性
        TCP是面向流的,即數據段被當作字節的序列化進行傳輸。
        在通過三次握手建立連接時,序列號被初始化。在傳輸過程中,TCP繼續使用這個序列號來標記每一個發送的數據段每發送一個數據段,序列號加1.接收站點一句序列號重新組裝縮所收到數據段。為什么要依靠序列號來重組數據段呢?
        例如,在一個告訴高速鏈路與低速鏈路并存的網絡上,可能會出現高速鏈路比低速鏈路上的數據段提前到達的情況,此時就必須依靠序列號來重組數據段,這就是序列號的作用之一。

        在傳輸過程中,確認號ACK的作用是告訴發送端那些數據包已經成功接收,并且確認號會向發送端指出了接收端希望收到的下一個數據段的序列號,這種機制稱為預期確認,即確認號等于下一個預期的位元組。

        在 TCP/IP網絡中,存在超時與重傳兩種現象。如果在傳輸過程中丟失了某個序列號的數據段,導致發送端在給定時間間隔內得不到那個數據段的應答,那么那個丟失數據段就會被要求重發。數據段會被保存在發送端的緩沖區中,直到發送端接收到應答號,它才會釋放這個緩沖區。這種機制被稱為肯定確認與重新傳輸 (Positive Acknowledgement and Retransimission,PAR),他是虛脫通信協議用來確保可信度的一種技術。

        序列號的第二個作用就是消除網絡中的重復包(同步復制)。例如在網絡擁塞時,發送端遲遲沒有收到接收端某個數據段的ACK包,它可能會認為這個序列號的數據段丟失了,于是它會重新發送,這種情況可能會導致接收端在網絡恢復正常后收到兩個同樣序列號的數據段,此時接收端會自動丟棄第二個一樣數據段。

        序列號和應答號為TCP提供了一種糾錯機制,提高了TCP的可靠性。


        關鍵詞: TCP連接握

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 黄石市| 台北县| 育儿| 斗六市| 崇文区| 万安县| 日喀则市| 仪征市| 麦盖提县| 凤台县| 南汇区| 深州市| 屏东县| 二手房| 马关县| 大埔县| 定远县| 万荣县| 肃北| 长岛县| 盱眙县| 鲁甸县| 汶上县| 五河县| 东乌| 乐平市| 永仁县| 常山县| 瓮安县| 怀宁县| 达州市| 永康市| 秭归县| 合阳县| 汉沽区| 道真| 鄂尔多斯市| 阿克陶县| 文水县| 桦甸市| 盖州市|