<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                TCP 是一個可靠的(reliable)、面向連接的(connection-oriented)、基于字節流(byte-stream)、全雙工的(full-duplex)協議。 ## TCP 協議是可靠的 IP 是一種**無連接、不可靠**的協議:它盡最大可能將數據報從發送者傳輸給接收者,但并不保證包到達的順序會與它們被傳輸的順序一致,也不保證包是否重復,甚至都不保證包是否會達到接收者。 TCP 要想在 IP 基礎上構建可靠的傳輸層協議,必須有一個復雜的機制來保障可靠性。 主要有下面幾個方面: * 對每個包提供校驗和 * 包的序列號解決了接收數據的亂序、重復問題 * 超時重傳 * 流量控制、擁塞控制 **校驗和(checksum)**每個 TCP 包首部中都有兩字節用來表示校驗和,防止在傳輸過程中有損壞。如果收到一個校驗和有差錯的報文,TCP 不會發送任何確認直接丟棄它,等待發送端重傳 ![](https://img.kancloud.cn/10/4c/104c09968fe4c56c1e95f4ccb5d2b7d9_1976x582.png) **包的序列號保證了接收數據的亂序和重復問題** 如果因為網絡的原因導致后發的包先到,TCP 會根據他們的序號進行重新的排列然后把結果傳遞給上層應用程序。如果因為超時重傳等原因,導致TCP接收到重復數據,也能根據包序號丟棄重復數據 **超時重傳**TCP 發送數據后會啟動一個定時器,等待對端確認收到這個數據包。如果在指定的時間內沒有收到 ACK 確認,就會重傳數據包,然后等待更長時間,如果還沒有收到就再重傳,在多次重傳仍然失敗以后,TCP 會放棄這個包。 ## TCP 是面向連接的協議 * 面向連接(connection-oriented):面向連接的協議要求正式發送數據之前需要通過「握手」建立一個**邏輯**連接,結束通信時也是通過有序的四次揮手來斷開連接。 * 無連接(connectionless):無連接的協議則不需要 ### 三次握手 ![](https://img.kancloud.cn/b9/8c/b98c577b4cc145156ddd226232852003_1304x978.png) SEQUENCE NUM 序列號 ACK NUM 確認號 第一次握手:客戶端向服務端發送SYN請求包,攜帶數據SEQUENCE NUM: 0和ACK NUM:0, 第二次握手:服務端向客戶端返回SYN+ACK包,攜帶序列號(['sikw?ns]SEQUENCE NUM: 0)和ACK NUM:1(攜帶的數據是 將第一次握手時客戶端發送的數據中ACK NUM的值加1,其他數據不變返回) 第三次 :客戶端向服務端發送ACK確認包,攜帶數據SEQUENCE NUM: 1和ACK NUM:1(攜帶的數據是 服務端剛剛返回的數據中SEQUENCE NUM的值加1,其他數據不變發送) ## TCP 是面向字節流的協議 TCP 是一種字節流(byte-stream)協議,流的含義是沒有固定的報文邊界。接收方從 TCP 套接字讀數據時,它是沒法得知對方每次寫入的字節是多少的。路徑最大傳輸單元 MTU、發送窗口大小、擁塞窗口大小等都會導致每次報文的字節數不同。 ## TCP 是全雙工的協議 在 TCP 中發送端和接收端可以是客戶端/服務端,也可以是服務器/客戶端,通信的雙方在任意時刻既可以是接收數據也可以是發送數據,每個方向的數據流都獨立管理序列號、滑動窗口大小、MSS 等信息。 ## 小結與思考 ![](https://img.kancloud.cn/bf/2a/bf2a12e469717e7f07898c1806f1fff7_1354x630.png) TCP 是一個可靠的(reliable)、面向連接的(connection-oriented)、基于字節流(byte-stream)、全雙工(full-duplex)的協議。發送端在發送數據以后啟動一個定時器,如果超時沒有收到對端確認會進行重傳,接收端利用序列號對收到的包進行排序、丟棄重復數據,TCP 還提供了流量控制、擁塞控制等機制保證了穩定性。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看