文章总结: 本文探讨TCP协议的核心价值,通过与UDP加应用层ACK方案的对比,阐明TCP内部自动实现超时重传与保序机制,虽仍需应用层ACK确认数据到达,但已大幅简化开发者工作。文章还深入分析重传超时时间的设计挑战,包括固定超时与基于实时RTT动态计算的权衡,指出冗余重传对带宽、CPU和内存的负担。
综合评分: 75
文章分类: 网络安全,安全意识
TCP的意义是什么?
原创
车小胖谈网络
车小胖谈网络
车小胖谈网络
2026年9月16日 16:01
上海
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
在向socket写的时候,write函数返回成功只能代表数据已拷贝到发送缓冲区,调用方没办法感知到数据到达对端协议栈里。如果想要确保数据对端能收到,还需应用层回个ack。
那为什么我不直接用udp发送和回ack呢?我理解tcp只是暗地里帮我自动超时重试几次以及多次调用的保序,只能说是相对可靠,还得依赖应用层ack去确认。
说的非常对,TCP的那几万行代码干的确实就是题主所描述的内容。
完全可以使用UDP发送packet,对packet进行使用ID进行编号。
接收方的user app对收到的packet ID进行ACK。
发送方立马就知道该ID的packet已经被user app成功接收。
新的挑战来了。。。
每一个Tx的packet,需要缓存,直到被ACK才能释放。准备如何缓存每一个Tx Packet?
如果发出的packet迟迟没有ACK,什么时候重传?使用固定不变的Re-transmit timeout来重传?还是基于实时测量的RTT计算动态得到的Re-transmit timeout来重传? 网络的real time RTT是时刻在变化的,如果Re-transmit timeout < Real Time RTT,意味着ACK可能已经在返程的路上,已经启动packet的重传。换句话说,该packet并没有丢,可是依然被重传了。这个冗余重传的packet对Tx side,Rx side,Internet都是负担,都是减分项(bandwidth、CPU、Memory)。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:车小胖谈网络 车小胖谈网络
车小胖谈网络《TCP的意义是什么?》