title: tcp的可靠性到底指的是什么？
desc: 问题的产生来自于一次面试。<br><br>当时面试官提了一个这样的问题<br> 如何保证数据在tcp传输过程中的可靠性？换句话说，就是，怎么保证数据在传输过程中不被修改？<br><br>当时，我一通胡扯，说tcp是可靠传输，所以不存在这样的问题。最后问了面试官，他们是怎么处理这种问题？<br><br>亲切的面试官给了一种简单的方案：<br> 在每个 tcp 段的数据部分首部，额外使用若干个字节，用于标示这次要发送的数据的长度，在接收端，通过检测这若干个字节以及数据的长度，来判断此次通信是否被修改。<br><br>基于这次面试，我又开始回顾之前所学的tcpudp等内容，发现大部分博客和教材都只是说了 tcp 是可靠传输，但是仍然没有指明tcp的可靠性到底指的是什么？<br><br>1）保证每个tcp段（segment）都能成功的被接收端接收到吗？只要成功接收，而不管中途有没有被修改？<br><br>2）还是也要保证每个段的内容，在传输过程中不被修改，如果修改过，那么在接收端会选择抛弃该段？
topic: 计算机网络
content: 防意外丢失和防蓄意攻击是两码事。TCP本身主要是针对前者设计的，也就是说传输过程中受到干扰，错了一两位数据丢了一两个包之类的情况，它能比较好地应对，也就是题主你所谓的可靠。但是，这并不能避免你的明文数据被嗅探或被篡改。网络上的各种第三方设备随时可能截获数据包查看内容，或者伪造数据包checksum这种校验非常弱，规则都是透明的，同时篡改数据内容和校验数即可轻而易举地狸猫换太子。也就是我们所谓的不安全
answerer_tags: Obsessive-Compulsive-Personality-Disorde