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 阅读(2745)
评论(1) 编辑 收藏 引用