讨论/《计算机网络面试突击》 - TCP 粘包问题/
《计算机网络面试突击》 - TCP 粘包问题
共 3 个回复

个人理解,欢迎指正~
这个问题从不同层的角度看是不一样的:

  1. 单看传输层,TCP是「面向字节流」传输的,本身是没有「包」的概念的,接收方将接收的报文段(segment)的数据提取出来按序放置在缓存中。
  2. 但是从应用层的角度看是有「包」的概念的,例如http/1.1中采用了「管道(pipeline)」的思想,即可以多个http数据流「复用」同一个TCP,因此各个http数据流之间是「纠缠」的,那么就需要在应用层进行处理,「区分不同」的数据流,自然就需要处理「粘包」的问题。
  3. 个人认为TCP层没有「包」的概念反映了TCP层对应用层「多数据流」的支持较弱,这恰恰导致了粘包问题。而这种弱势也导致了HTTP/3转向了QUIC,也就是基于UDP,自行实现更好的「多数据流复用/分用」。
5

我现在很是疑惑。不是说TCP根本就没有包这个概念吗?
我在网上搜这个问题,有说TCP粘包这个问题不存在。有的说的“头头是道”......

3

说是粘包, 应该是在说send 多次和 recv一次的问题是吗?
就从怎么分割每一次send说起, 这个思路有问题吗?