随笔 - 119  文章 - 290  trackbacks - 0

博客搬家了哦,请移步
叫我abc

常用链接

留言簿(12)

随笔分类

我的博客

搜索

  •  

积分与排名

  • 积分 - 301994
  • 排名 - 84

最新评论

阅读排行榜

TCP是流协议,不像UDP那样sendto发一次消息,另一端必然会收到完整消息,或者没有收到任何消息。
当用TCP send发一次消息的时候,可能另一端在某时刻可能只收到一部分消息,下一时刻才能收到另一部分。那如果一个消息很小,是否可以保证另一端在某时刻能收到这条完整消息?

  1. 调用send后,TCP将数据拷贝到缓冲区。缓冲区内可能不止一条用户消息。
  2. TCP按照一定算法,将缓冲区的数据打包到1-n个TCP报文中,交给IP层发送。TCP报文是TCP协议的最小发送单位,大小应该是可变的,并且丢失的话会重发。

    • #并不能保证一个TCP报文中必然包含一条用户消息的全部,所以即使消息很小,另一端也有可能在某时刻只收到部分
  3. IP层将TCP报文装进IP包,然后再交给链路层发送以太帧

    • #理论上IP包的大小应该会选择比MTU小。一旦IP包比MTU大,意味着网络上的路由要帮你缓存多个以太帧,拼出IP包后才知道如何路由到下一个节点。向下一节点路由的时候还要再拆分成多个以太帧发送
    • #所以TCP报文应该会比选择比MTU小

全文收集到我的知识共享
posted on 2013-03-21 11:02 LOGOS 阅读(2745) 评论(1)  编辑 收藏 引用

FeedBack:
# re: TCP协议流的理解 2013-03-25 18:14 nscboy
TCP是流协议:所以上层应用应该做自己的封包处理.
按照自己的协议,从流拆分出数据包.而不是依赖系统.  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理