C# TCP 瞭解

來源:互聯網
上載者:User

標籤:socket   sock   現象   優勢   緩衝區   等於   伺服器   www.   net   

參考:http://www.jb51.net/article/118682.htm

一: TCP 

  粘包原理:發送方發送若干資料給接收方時粘成一包。從接收緩衝區看,後一包的頭緊接前一包的資料的尾。

      發送方引起:TCP協議本身造成,TCP為提高傳輸效率,將連續發送幾次的資料包小的緊湊的,合并為一個包。(Nagle最佳化演算法)

      接收方引起:接收方進程不及時接收資料,從而導致粘包現象。因為接收方先把收到的資料放到系統緩衝區,進程從該緩衝區取資料,若下一包到達時前一包資料尚未被使用者進程取走。這樣一次取多包資料。

 

  解決方案:修改Socket配置

        Nodelay,不採用最佳化演算法,發送端解決粘包。

        缺點:降低網路傳輸效率。

 

        使用代碼解決:

         一個完整的資料包  = 包頭 +包體長度。(數值壓縮儲存方法,減少包頭位元組數,一般為2位位元組即可)

        設定緩衝區,判斷不等於包頭的位元組儲存在緩衝區,等待下一資料包,串連起來。

       

 

  三向交握原理:

      第一次握手:用戶端發送syn包到伺服器,並進入SYN_SEND狀態,等待伺服器確認。

·      第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack = j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK

,此時,伺服器進入SYN_RECV狀態。

      第三向交握:用戶端收到伺服器端SYN+ACK包,向伺服器發送確認包ACK(ack = k+1),此包發送完畢,用戶端與伺服器進入ESTABLISHED狀態,完成三向交握。

  註:握手過程中傳送的包中不包含資料,三向交握完畢後,用戶端才向伺服器端正式發送資料。

 

優勢:保證順序,保證穩定。

C# TCP 瞭解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.