TCP 为什么要粘包和拆包

98 阅读1分钟

TCP 是一个传输层协议。TCP 发送数据的时候,往往不会将数据一次性发送

为了稳定性,一次发送的数据越多,出错的概率越大。为了效率,网络中有时候存在着并行的路径,拆分数据包就能更好地利用这些并行的路径。再有,比如发送和接收数据的时候,都存在着缓冲区。

在传输层封包不能太大。这种限制,往往是以缓冲区大小为单位的。也就是 TCP 协议,会将数据拆分成不超过缓冲区大小的一个个部分。每个部分有一个独特的名词,叫作 TCP 段(TCP Segment)。

数据经过拆分,然后传输,然后在目的地重组,俗称拆包。

有时候,如果发往一个目的地的多个数据太小了,为了防止多次发送占用资源,TCP 协议有可能将它们合并成一个 TCP 段发送,在目的地再还原成多个数据,这个过程俗称粘包。

此文章为7月Day10学习笔记,内容来源于极客时间《趣谈网络协议》,强烈推荐该课程!