TCP或许不是“可靠”的

你可能以为TCP是可靠的,从发送端看,send函数总是能把数据发送到接受端;而从接收端来看,总能把发送端接受的数据流完整传递给应用程序来处理。
可是我们认真分析过之后,发现“TCP是可靠的”这个论断是不正确的。
若是使用send发送信息的时候,send函数只是把想要发送的信息放到TCP协议栈里边,并不是真的已经发送到网络上边,而是存储在当前套接字的发送缓冲区里边,由网络协议栈决定何时和如何发送。当相应的数据流发送给接收端,接收端回复ACK,存储在发送端发送缓冲区的对应数据就可以删除了,但是,发送端并无法获取对应数据流的 ACK 情况,也就是说,发送端无办法判断对端的接收方是否已经接收发送的数据流,如果需要知道这部分信息,就应该由开发者自己在应用层添加处理逻辑,比如显式的报文确认机制。
从接收端这方面来说,也没有ACK 过的数据部分一定被应用程序处理的保证,因为数据需要接收端程序从接收缓冲区中拷贝到应用缓冲区,可能出现的状况是,已经 ACK 的数据存储在接收端缓冲区中,接收端处理程序突然崩溃了,这部分数据就没有办法被应用程序继续处理。
而TCP没有向上层反馈异常的能力偏弱,这是因为TCP刚开始是为美国军方服务,而军方希望TCP能够以无人值守的方式工作。
内容来源于极客时间《网络编程实战》

相关推荐

  1. TCP或许可靠

    2023-12-18 10:48:02       74 阅读
  2. TCP如何保证可靠传输

    2023-12-18 10:48:02       27 阅读
  3. 可靠重传 tcp 新魔改

    2023-12-18 10:48:02       42 阅读
  4. TCP协议如何保证数据可靠传输

    2023-12-18 10:48:02       28 阅读
  5. TCP可靠传输

    2023-12-18 10:48:02       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-18 10:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-18 10:48:02       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-18 10:48:02       82 阅读
  4. Python语言-面向对象

    2023-12-18 10:48:02       91 阅读

热门阅读

  1. 【力扣100】2.两数相加

    2023-12-18 10:48:02       73 阅读
  2. 流行的 React 相关库和框架

    2023-12-18 10:48:02       48 阅读
  3. Function

    2023-12-18 10:48:02       71 阅读
  4. C语言:高精度减法

    2023-12-18 10:48:02       74 阅读
  5. layui中,table行里加载图片,高度不够的样式处理

    2023-12-18 10:48:02       65 阅读
  6. 设计模式策略模式讲解和代码示例

    2023-12-18 10:48:02       58 阅读