File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -8,14 +8,14 @@ TCP 是个 “流” 协议,所谓流,就是没有界限的一串数据。TC
88
99![ avatar] ( ../../../images/Netty/TCP粘包拆包问题.png )
1010
11- 假设客户端依次发送了两个数据包 DI 和 D2 给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下 4 种情况。
11+ 假设客户端依次发送了两个数据包 D1 和 D2 给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下 4 种情况。
1212
13131 . 服务端分两次读取到了两个独立的数据包,分别是 D1 和 D2,没有粘包和拆包;
14- 2 . 服务端一次接收到了两个数据包,DI 和 D2 粘合在一起,被称为 TCP 粘包;
15- 3 . 服务端分两次读取到了两个数据包,第一次读取到了完整的 DI 包 和 D2 包的部分内容,第二次读取到了 D2 包 的剩余内容,这被称为 TCP 拆包;
14+ 2 . 服务端一次接收到了两个数据包,D1 和 D2 粘合在一起,被称为 TCP 粘包;
15+ 3 . 服务端分两次读取到了两个数据包,第一次读取到了完整的 D1 包 和 D2 包的部分内容,第二次读取到了 D2 包 的剩余内容,这被称为 TCP 拆包;
16164 . 服务端分两次读取到了两个数据包,第一次读取到了 D1 包的部分内容,第二次读取到了 D1 包的剩余内容 和 D2 包的整包。
1717
18- 如果此时服务端 TCP 接收滑窗非常小,而 数据包 DI 和 D2 比较大,很有可能会发生第 5 种可能,即服务端分多次才能将 D1 和 D2 包 接收完全,期间发生多次拆包。
18+ 如果此时服务端 TCP 接收滑窗非常小,而 数据包 D1 和 D2 比较大,很有可能会发生第 5 种可能,即服务端分多次才能将 D1 和 D2 包 接收完全,期间发生多次拆包。
1919
2020### TCP 粘包/拆包发生的原因
2121
You can’t perform that action at this time.
0 commit comments