TCP是流協議,不像UDP那樣sendto發一次消息,另一端必然會收到完整消息,或者沒有收到任何消息。
當用TCP send發一次消息的時候,可能另一端在某時刻可能只收到一部分消息,下一時刻才能收到另一部分。那如果一個消息很小,是否可以保證另一端在某時刻能收到這條完整消息?
- 調用send后,TCP將數據拷貝到緩沖區。緩沖區內可能不止一條用戶消息。
-
TCP按照一定算法,將緩沖區的數據打包到1-n個TCP報文中,交給IP層發送。TCP報文是TCP協議的最小發送單位,大小應該是可變的,并且丟失的話會重發。
- #并不能保證一個TCP報文中必然包含一條用戶消息的全部,所以即使消息很小,另一端也有可能在某時刻只收到部分
-
IP層將TCP報文裝進IP包,然后再交給鏈路層發送以太幀
- #理論上IP包的大小應該會選擇比MTU小。一旦IP包比MTU大,意味著網絡上的路由要幫你緩存多個以太幀,拼出IP包后才知道如何路由到下一個節點。向下一節點路由的時候還要再拆分成多個以太幀發送
- #所以TCP報文應該會比選擇比MTU小
全文收集到
我的知識共享
posted on 2013-03-21 11:02
LOGOS 閱讀(2768)
評論(1) 編輯 收藏 引用