TCP最核心的机制
- 可靠传输
- 提高传输效率
延时应答(提高传输效率)
在可靠性的基础上尽量提高窗口大小,也和流量控制和滑动窗口有关
流量控制需要在ACK中反馈接受缓冲区剩余空间的大小,此时采用的策略是:收到数据不立刻返回ACK,而是等一会,等的过程中,程序就能多消费一些缓冲区的数据,导致反馈的窗口大小就要更大一些。
捎带应答(提高传输效率)
建立在延迟应答的基础上,内核反馈ACK的实际和程序反馈响应的时机合二为一,通过同一个数据报同时带上俩方面的信息
面向字节流
粘包问题,由于面向字节流读取数据方式没有具体的约定,很难从接受缓冲区中直接获取到一个完整的应用层数据报。
解决粘包问题只能从应用层角度入手,只要在应用层协议设定的时候,明确包的边界就OK
- 指定分割线
- 指定包的长度
异常情况
- 程序异常结束(没啥影响,四次挥手正常完成)
- 系统关机(没啥影响,本质上就是要强制关闭所有程序)
- 主机掉电/拔网线
- 掉电的是接收方,发送方会触发超时重传,尝试重新建立连接,彻底释放连接。
- 掉电的是发送方,接收方如果一直收不到数据的话,达到一定时间之后,就会给对方发送一个“心跳包”,如果没有心跳包,就会尝试重新建立连接,连接失败就会彻底释放连接