我对TCP有一些疑问,但尚未找到任何详细的答案。 在全双工环境下,TCP在以下情况下应如何运行。
为什么在连接请求期间没有关于两个主机(主机A,主机B)的窗口大小的任何信息?
为了识别重复项,是否足以跟踪其他主机的当前预期序列号?
在我使用的文献中,据记载,确认也可以包含数据。这是否意味着在主机A尚未确认ACK段(带有数据)的同时,不允许主机B发送另一个数据段?
是正确的,ACK段主动使用WIN数据字段,设置了ACK标志并且没有序列号,而数据段仅提供有关当前序列号的信息吗?
非常感谢您。希望您能在这种情况下为我提供帮助!
我的想法: 1.在连接请求期间,主机A向主机B发送带有已设置SYN-Flag的网段,并提供其初始序列号x。主机B通过发送一个ACK段(其个人初始序号y为x + 1)和一个ACK标记来接收数据,并接受CONNECTION ACCEPTED的请求,从而接受请求。主机A通过发送ACK-number = y + 1和序列号= x + 1的数据包来验证主机B的初始序列号。 这里没有提供有关双方可用缓冲区大小的任何信息,因此主机可能会发送字节流,从而导致缓冲区溢出。
这已经足够了,因为每个字节都分配了一个32位序列号,这意味着接收到的序列号低于预期的数据必须是重复的。
应该以这种方式处理它,因为它可能最终导致对副本的错误肯定标识。 例: 主机B首先发送ACK,然后发送数据。数据段首先到达主机A,导致主机B发送带有新的预期序列号z_1的ACK。 现在,如果主机A收到带有数据的ACK,它将发送另一个ACK,该ACK再次具有更新的预期序列号z_2。如果第一个带有现在过期序列号z_1的ACK(主机A->主机B)到达主机B,主机B可能会使用它进行新的数据传输,导致主机A识别重复项,因为它使用了过期的序列数字。