TCP接收缓冲区

TCP接收缓冲区,c,networking,tcp,C,Networking,Tcp,C代码中提到的缓冲区与 recvfrom(sock, buffer, 20, 0, (struct sockaddr *)&c_addr, &addr_size); 缓冲区的大小可以通过设置套接字选项进行调整(在C语言中,但我认为其他编程语言也有相同的套接字选项) 我的困惑来自recvfrom代码中称为“buffer”的缓冲区可以合理地称为接收缓冲区,这也是TCP中使用的缓冲区的名称。我想澄清recvfrom代码中提到的缓冲区是一种不同类型的缓冲区,可能有什么区别 假设它们是不

C代码中提到的缓冲区与

recvfrom(sock, buffer, 20, 0, (struct sockaddr *)&c_addr, &addr_size);
缓冲区的大小可以通过设置套接字选项进行调整(在C语言中,但我认为其他编程语言也有相同的套接字选项)

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


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

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

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


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

数据包不会被丢弃,因为它们不会被发送。TCP将关闭接收窗口,发送方将停止发送。20年来与它或其他任何事情都没有关系。让它安息吧。