一、简单了解TCP
二、为什么要分包?
这里的分包我表示的是两层意思,第一层意思:比如我们定义每一次发送的数据大小为8k(因为在真正的项目编程中基本都是要进行封装的,所以发送的大小基本固定),那如果我们要发送一个25k的数据,我们是不是得分成8+8+8+1四个包发送,前三个包都是8k,最后一个包是小于8k;第二层意思:我记得在大一的计算机网络中讲过,TCP是以段(Segment)为单位发送数据的,建立TCP链接后,有一个最大消息长度(MSS).如果应用层数据包超过MSS,就会把应用层数据包拆分,分成两个段来发送.这个时候接收端的应用层就要拼接这两个TCP包,才能正确处理数据。相关的,路由器有一个MTU( 最大传输单元)一般是1500字节,除去IP头部20字节,留给TCP的就只有MTU-20字节。所以一般TCP的MSS为MTU-20=1460字节,当应用层数据超过1460字节时,TCP会分多个数据包来发送。
但第二层意思(TCP会根据消息长度自动分包)的分包会有很几种情况。
情况一:分两次发送,第一次发送的数据包含第二个包的包信息。
情况二:第一次发送和第二次发送正好是两个包的大小
情况三:第一次发送的信息大小 第二个包的大小(包含第一个包一部分消息)