主机A向主机B连续发送了两个TCP报文段,其序号分别为70和100。试问: (1)第一个报文段携带了多少个字节的数据? (2)主机B收到第一个报文段后发回的确认中的确认号应当是多少? (3)如果主机B收到第二个报文段后发回的确认中的

admin2012-06-26  75

问题 主机A向主机B连续发送了两个TCP报文段,其序号分别为70和100。试问:
    (1)第一个报文段携带了多少个字节的数据?
    (2)主机B收到第一个报文段后发回的确认中的确认号应当是多少?
    (3)如果主机B收到第二个报文段后发回的确认中的确认号是180,试问A发送的第二个报文段中的数据有多少字节?
    (4)如果A发送的第一个报文段丢失了,但第二个报文段到达了B。B在第二个报文段到达后向A发送确认。试问这个确认号应为多少?

选项

答案(1)第一个报文段携带了30个字节的数据。 (2)主机B收到第一个报文段后发回的确认中的确认号应当是100。 (3)如果主机B收到第二个报文段后发回的确认中的确认号是180,A发送的第二个报文段中的数据有80字节。 (4)如果A发送的第一个报文段丢失了,但第二个报文段到达了B。B在第二个报文段到达后向A发送确认。这个确认号应为70。

解析 本题考查TCP的可靠连接,重点是报文段的确认字段:
    (1)第二个报文段的开始序号是100,说明第一个报文段的序号是70到99,故第一个报文段携带了30个字节的信息。
    (2)由于主机已经收到第一个报文段,即最后一个字节的序号应该是99,故下一次应当期望收到第100号字节,故确认中的确认号是100。
    (3)由于主机B收到第二个报文段后发回的确认中的确认号是180,说明已经收到了第1 79号字节,也就说明第二个报文段的序号是从100到179,故第二个报文段有80字节。
    (4)确认的概念就是前面的序号全部收到了,只要有一个没收到,都不能发送更高字节的确认,所以主机B应该发送第一个报文段的开始序号,即70。
    特别注意在使用TCP传输数据时,如果有一个确认报文段丢失了,是不是一定会引起与该确认报文段对应的数据的重传?答案是不一定,例如某个确认丢失了,但是在该报文的重传计时器到时之前,却收到了更高序号的确认,因为如果接收方没有收到低号的报文是不可能会发出高序号的确认的,所以说发送方此时不会在重传那个丢失确认的报文了。例如主机A连续发送两个报文段:(SEQ=92,共8字节的数据)和(SEQ=100,共20字节的数据),均正确达到主机B。B连续发送两个确认:(ACK=100)和(ACK=120),但是前者在传送时丢失了。假如A在第一个报文段超时之前收到了对第二个报文段的确认,此时A知道,120号之前的所有字节(当然包括第一个报文段中的所有字节)均已被B正确接收,因此A不会再重传第一个报文段。
转载请注明原文地址:https://kaotiyun.com/show/ufxi777K
0

最新回复(0)