繁体   English   中英

TCP - 确认

[英]TCP — acknowledgement

TCP标头上的32位确认字段(比如说x)告诉另一个主机“我收到了所有字节,直到并包括x-1,现在期望x和on的字节”。 在这种情况下,接收器可能已经接收了一些其他字节,比如x + 100到x + 180,但它还没有接收到第x个字节。

有没有这样的情况,虽然接收器没有收到x到x + 100字节,但收到的字节比如x + 100到x + 180,接收器是否确认收到了x + 180?

我读取的一个资源表示尽管在前面的字节中存在间隙,但仍接收到字节的确认。 然而,其他所有消息来源都说

“确认x告诉所有字节,直到收到x-1”。

有没有例外情况? 我想验证这一点。

TIA。

这可以通过称为SACK的TCP选项来实现。

在这里,客户端可以通过重复的ACK来说明它只有特定的包号2(包的序列号),并且对于接收的连续包的范围附加SACK(选择性确认)选项,如编号为4到5的包(序列)数)。 这又将使服务器能够仅重传未被客户端接收的分组(3个序列号)。

下面提供了RFC 2018的摘录:TCP选择性确认选项

SACK选项由数据接收器发送,以通知数据发送器已接收的非连续数据块和
排队。 数据接收器等待接收数据(可能是通过
重传方式)填补序列空间之间的空白
收到块。 收到丢失的段时,数据
接收器通过推进左窗口来正常确认数据
TCP标头的确认号字段中的边缘。 SACK选项不会更改确认号的含义
领域。

来自https://www.rfc-editor.org/rfc/rfc793.txt上的TCP RFC:

3.3。 序号

设计中的一个基本概念是通过TCP连接发送的每个八位字节数据都有一个序列号。 由于每个八位字节都是有序的,因此每个八位字节都可以被确认。 所采用的确认机制是累积的,因此序列号X的确认表明已经接收到所有八位组但不包括X.

这对我来说非常清楚,序列号在第一个缺失的数据处停止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM