TCP并不一定是可靠的
- 发送端并不能确定传送给接收端的数据流是否已到达接送端。
- 接收端也不能保证ACK过的数据部分可以被应用程序处理,因为已经ACK过的数据一开始是保存在接收缓冲区中。
感知TCP链路的方式
主要是通过read和write系统调用
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4857f2b1b1c5f5bbb0d32c79a5b78857.png)
总结:
应对故障,若对端无FIN包,需要通过巡检或超时来发现;若对端有FIN包,需要通过增强read或write操作的异常处理,帮助我们发现此类异常。
TCP协议栈为FIN包插入一个文件结束符EOF到接收缓冲区,应用程序可以通过read调用来感知这个FIN包。