【问题标题】:Is there any RFC document about the backlog behaviour of listening TCP socket?是否有任何关于监听 TCP 套接字的积压行为的 RFC 文档?
【发布时间】:2015-12-13 15:51:16
【问题描述】:

最近我正在研究RFC 793 以了解 TCP 和套接字行为。

我的一个问题是: 当收到SYN时,监听socket应该立即发送ACK还是等待APP层调用accept函数。

RFC 793 中没有解释这些行为,所以有任何 RFC 解释监听套接字的积压/接受行为。

【问题讨论】:

  • "连接的 TCP 客户端套接字的远程端口将与您传递给连接函数的端口不同。" - 这不是真的。请出示 RFC 的相关部分,让您认为它应该是这样的。
  • @SteffenUllrich,我从MAC平台的实验中得到了这个,我认为这是有道理的。如果有两个连接进来并被接受,它们不应该使用同一个端口。附上代码。
  • 抱歉,您的代码有误。它只是打印随机地址和端口。我对 sockaddr_storage 不熟悉,但如果我使用简单的 sockaddr_in 并跳过所有这些转换,一切正常。
  • @SteffenUllrich,谢谢。我将编辑问题。如果有多个客户端连接到服务器,这是否意味着服务器将使用远程客户端端口和本地端口将数据包发送到内部 tcp 套接字?
  • 服务器套接字绑定到服务器上的特定IP和端口,然后接收以该IP和端口为目的地的所有数据。到此套接字的不同连接将具有相同的目标但不同的源(IP 和/或端口)。

标签: sockets tcp protocols rfc


【解决方案1】:

我的一个问题是:当收到一个SYN时,listen socket应该立即发送ACK还是等待APP层调用accept函数

通常,无论应用程序当前是否调用接受,操作系统内核都会进行 TCP 握手。但它可能与某些用户空间 TCP/IP 实现有所不同,其中完整的 IP 堆栈在应用程序内完成。我不认为任何 RFC 都在此处强制执行特定行为,因为此细节与协议无关。

【讨论】:

  • 那么如果发送了SYN+ACK,如果远程开始发送数据,但是没有接收者存在,会发生什么。
  • @ZijingWu:数据将在套接字缓冲区假脱机。如果缓冲区已满,则数据将被丢弃,并且不会发送 ACK。如果服务器关闭了套接字,客户端将重新获得连接。
  • 没有。如果缓冲区已满,则通告的接收窗口将关闭,发送方将停止发送。如果到达的数据不适合套接字接收缓冲区,这将是一个主要的协议错误。
猜你喜欢
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 2020-09-17
  • 2013-12-19
  • 1970-01-01
  • 2017-04-27
  • 2017-10-16
相关资源
最近更新 更多