关于TCP中对于ACK报文是否需要确认的理解
2024-08-26 01:05:30
首先,TCP是一个面向字节流的协议,它不会对自己的内容做出任何的解释,也不需要做出解释,具体的解释由上层的协议来处理。
其次,TCP是一个面向字节流的协议,它会对它发送的每一个字节负责,确保每一个字节都可以正确的发送。在TCP协议中,SYN与FIN字节是占用字节序列号的,因此TCP协议必须对其负责,如果他们在发送的过程中出现了任何的意外,导致最后并没有发送成功,TCP会对此进行处理(比如重传)。而ACK是不占用字节序列号的,TCP是不会对一个只含有ACK标志的TCP报文做任何保证。
最后,直观上看,如果真的需要确认ACK,会形成一个死循环,一直反复确认。本质上说,TCP是一个面向字节流的协议,之所以不用确认ACK报文,是因为ACK报文在TCP连接中是不占用字节序列号的(当然其本身包含在TCP头部中是需要占有物理内存的,就好比卡车运沙,我们只需要确认沙子的量,而卡车则不用去关心),ACK报文本身是用来确认上次的报文是否发送成功,如果ACK出现了问题没发送到对方手中,那对方会认为自己的数据没有发送成功从而重新发送,从而导致己方再次发送ACK报文(相当于回退到两步之前,对方发送数据,己方发送ACK报文(此时再次发送ACK报文相当于ACK重传)),实际上,由于累计确认机制的存在,当己方的ACK报文发送成功时,对方继续发送新的数据报,此时该数据报中更新的字节序列号就是对之前的ACK报文的确认,只有你成功告诉我我发送成功了(ACK报文成功到达),我才会发送新的数据。
最新文章
- PHP的流程控制结构
- Java 入门(一) - 环境变量
- [源码]String StringBuffer StringBudlider(2)StringBuffer StringBuilder源码分析
- Ubuntu Kylin15下PHP环境的搭建(LAMP)
- 项目分布式部署那些事(1):ONS消息队列、基于Redis的Session共享,开源共享
- java取整和java四舍五入方法 转自董俊杰
- VPW协议解析
- 通过WMI配置IP
- PHP程序开发人员要掌握的知识
- Knight Tournament
- 【JSON异常系列】new JSONObject对象时卡死原因
- 搭建typescript开发环境最详细的全过程
- Linux系列教程(二十二)——Linux的bash变量
- mysql之查询
- Junit集成测试
- robotframework测试用例加入注释
- 爬虫案例(js动态生成数据)
- 3P - Snooker
- PWN入门
- 如何优化Mysql数据库