gpt4 book ai didi

sockets - TCP 中的 send() 函数是否保证按顺序到达?

转载 作者:可可西里 更新时间:2023-11-01 02:33:59 26 4
gpt4 key购买 nike

众所周知,send()的返回值可以小于length,表示到达的是消息的一部分,而不是全部。我应该发送2个数据包,内容分别为“ABC”和“DEF”,长度为3。我想在调用send()传输“ABC”后通过send()发送“DEF”。但是,有一种情况是“ABC”的 send() 的返回值小于它的长度 3。我认为消息可能没有按顺序传递。例如,如果“ABC”的返回值为 2,则接收到的消息为“ABDEF”。

TCP 中的 send() 函数是否保证按顺序到达?

最佳答案

首先,send() 本身不保证任何东西,send() 只是将您要通过网络发送的数据写入套接字的缓冲区。它由操作系统分段(放置在 TCP 段中),操作系统管理传输的可靠性。如果底层缓冲区已满,那么您将获得一个低于您要写入的字节数的返回值。这通常表明缓冲区没有被操作系统足够快地清空,即您将数据写入缓冲区的速率高于将数据发送到网络(或由另一方读取)的速率).

其次,TCP 是一种流协议(protocol),如果您先发送 ()“ABC”,然后发送“DEF”,则无法保证数据将如何分段,它可能会以一个数据包或六个数据包结束。就像将数据写入文件一样。

第三,网络堆栈(操作系统中的 TCP/IP 实现)保证按顺序交付,以及 TCP promise 的其他好处 - 可靠性、拥塞控制、流量控制等。

关于sockets - TCP 中的 send() 函数是否保证按顺序到达?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25405821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com