【问题标题】:TCP receive bufferTCP 接收缓冲区
【发布时间】:2017-04-25 03:22:30
【问题描述】:

C 代码中提到的缓冲区有什么区别

recvfrom(sock, buffer, 20, 0, (struct sockaddr *)&c_addr, &addr_size);

以及可以通过设置套接字选项调整其大小的缓冲区(在 C 中,但我认为其他编程语言具有相同的套接字选项)?

我的困惑来自于在 recvfrom 代码中称为“缓冲区”的缓冲区可以合理地称为接收缓冲区,这也是 TCP 中使用的缓冲区的名称。我想澄清一下 recvfrom 代码中提到的缓冲区是一种不同的缓冲区,也许有什么区别。

假设它们不同,就 5 层网络模型而言,第二种类型的缓冲区基本上仅用于传输层,并且通常不可在应用程序中修改(除了能够更改其一般属性,如大小)层?换句话说,TCP接收缓冲区中的数据是否向上传递到recvfrom代码中称为“缓冲区”的缓冲区?

【问题讨论】:

  • osi 与它无关,或与其他任何 20 年无关。让它安息吧。

标签: c networking tcp


【解决方案1】:

您所指的接收缓冲区是操作系统中的一个内部缓冲区,传入数据在用户空间程序通过recvrecvfrom 函数调用访问它之前存储在其中。

这与上面代码中的buffer 不同,因为它是一个应用程序缓冲区。

如果应用程序读取数据包的速度不快于操作系统接收数据包的速度,则操作系统中的接收缓冲区将填满,数据包将被丢弃。

【讨论】:

  • 数据包不会被丢弃,因为它们不会被发送。 TCP 将关闭他的接收窗口,发送方将停止发送。
猜你喜欢
  • 1970-01-01
  • 2015-03-12
  • 2012-12-05
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多