• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天下

            記錄修行的印記

            TCP與UDP的不同接包處理方式

            TCP與UDP的不同接包處理方式


            1.UDP發包的問題
            問:udp 發送兩次數據,第一次 100字節 ,第二次200字節, 接包方一次recvfrom( 
            1000 ), 收到是 100,還是200,還是300?
            答:UDP是數據報文協議,是以數據包方式,所以每次可以接收100,
            200,在理想情況下,第一次是無論recvfrom多少都是接收到100。當然,可能由于網絡原因,第二個包先到的話,有可能是200了。對可能會由于網絡原因亂序,所以可能先收到200,所以自定義的udp協議包頭里都要加上一個序列號,標識發送與收包對應

            2.TCP的發包問題
            問:同樣如果換成tcp, 第一次發送 100字節 ,第二次發送200字節,recv( 
            1000 )會接收到多少?
            答:tcp是流協議,所以recv( 
            1000 ),會收到300 tcp自己處理好了重傳,保證數據包的完整性

            3.有分片的情況下如下處理
            問:如果MTU是1500,使用UDP發送 
            2000,那么recvfrom(2000)是收到1500,還是2000?
            答: 還是接收2000,數據分片由ip層處理了,放到udp還是一個完整的包。接收到的包是由路由路徑上最少的MTU來分片,注意轉到UDP已經在是組裝好的(組裝出錯的包會經crc校驗出錯而丟棄),是一個完整的數據包

            4.分片后的處理
            問:如果500那個片丟了怎么辦?udp又沒有重傳
            答:udp里有個crc檢驗,如果包不完整就會丟棄,也不會通知是否接收成功,所以UDP是不可靠的傳輸協議,而且TCP不存在這個問題,有自己的重傳機制。在內網來說,UDP基本不會有丟包,可靠性還是有保障。當然如果是要求有時序性和高可靠性,還是走TCP,不然就要自己提供重傳和亂序處理( UDP內網發包處理量可以達 7w
            ~10w/s )

            5.不同連接到同一個端口的包處理
            問:TCP
            -> C 發100
            -> C 發200
            AB同時同一端口
            C recv(
            1000) ,會收到多少?
            答:A與C是一個tcp連接,B與C又是另一個tcp連接, 所以不同socket,所以分開處理。每個socket有自己的接收緩沖和發送緩沖

            6.什么是TCP粘包

            由于TCP是流協議,對于一個socket的包,如發送 10AAAAABBBBB兩次,由于網絡原因第一次又分成兩次發送, 10AAAAAB和BBBB,如果接包的時候先讀取10(包長度)再讀入后續數據,當接收得快,發送的慢時,就會出現先接收了 10AAAAAB,會解釋錯誤 ,再接到到BBBB10AAAAABBBBB,也解釋錯誤的情況。這就是TCP的粘包。
               解決的辦法TLV方式,先接收包頭,在包頭里指定包體長度來接收。設置包頭包尾的檢查位(如群空間0x2開頭,0x3結束來檢查一個包是否完整)。對于TCP來說:
            1)不存在丟包,錯包,所以不會出現數據出錯 2)如果包頭檢測錯誤,即為非法或者請求,直接重置即可
            7.

            For message-oriented sockets, data is extracted from the first enqueued message, up to the size of the buffer specified. If the datagram or message is larger than the buffer specified, the buffer is filled with the first part of the datagram, and recvfrom generates the error WSAEMSGSIZE. For unreliable protocols (for example, UDP) the excess data is lost.

            posted on 2012-01-06 17:03 天下 閱讀(1817) 評論(1)  編輯 收藏 引用 所屬分類: Socket

            評論

            # re: TCP與UDP的不同接包處理方式[未登錄] 2015-11-05 17:50 12

            粘包那瞎寫  回復  更多評論   

            <2013年6月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            導航

            統計

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評論

            亚洲av成人无码久久精品| AV无码久久久久不卡蜜桃| 亚洲精品无码久久毛片| 色偷偷91久久综合噜噜噜噜| 99久久国产精品免费一区二区| 日韩av无码久久精品免费| 久久精品男人影院| 一级女性全黄久久生活片免费| 蜜臀久久99精品久久久久久小说 | 久久人做人爽一区二区三区| 香蕉久久夜色精品升级完成| 久久精品国产国产精品四凭| 波多野结衣AV无码久久一区| 9191精品国产免费久久| 久久无码专区国产精品发布| 日本精品久久久久中文字幕| 国产精品久久久久a影院| 久久久精品日本一区二区三区| 色诱久久久久综合网ywww | 亚洲精品无码成人片久久| 久久免费小视频| 亚洲精品无码成人片久久| 少妇被又大又粗又爽毛片久久黑人 | 精品久久久久香蕉网| 久久无码中文字幕东京热| 久久99精品久久久久久水蜜桃| 久久无码AV一区二区三区| 久久成人影院精品777| 国产亚洲精久久久久久无码77777| 青青草原1769久久免费播放| 伊人久久精品无码二区麻豆| 伊人久久大香线蕉综合5g| 久久黄视频| 久久久久人妻精品一区三寸蜜桃| 久久国产精品成人免费| 亚洲成色999久久网站| 久久精品国产只有精品2020| 狠狠干狠狠久久| 一本久久a久久精品综合夜夜| 亚洲av成人无码久久精品| 亚洲AⅤ优女AV综合久久久|