关于TCP的三次握手中seq字段的相关问题与理解

一、一道相关综合题

1.题目简述

在这里插入图片描述

2.解答

在这里插入图片描述
这个题综合了传输层的TCP协议、网络层的IP协议和数据链路层的以太网,难度比较大,但是实际上只要熟记帧的格式、IP包的格式、TCP段的格式,然后把这5个IP分组(就是IP包)全都解析出来,实际上答案也基本能够写出来。


二、做题时的疑问

在做这个题的时候有个地方难以理解:经过解析能够发现,前三个IP包实际上就是实现了TCP协议中的3次握手,由第1次握手的序号84 6b 41 c5和第2次握手的确认号84 6b 41 c6可知,A端的一个序号(简称为c5)被使用了,因为它被正常确认了,但是奇怪的是,这个IP包并没有数据部分(由IP头中的长度字段和TCP头中的头长度字段可以确定),这里可能会对(2)题产生一定的误导。
此外,第2、3个IP包也都没有数据部分,第2个IP包类似于第1个,其序号也被使用了,但第3个IP包序号没有被使用,因为第4个数据包(包含数据部分)的seq与第三个IP包的seq字段是相同的,如果考虑为B端没有收到,又存在第3个IP包与第4个IP包并不相同这样的疑虑(没有收到应该重发才对)。


三、解释

回顾TCP3次握手

在这里插入图片描述
这里我们只讨论上图左下角的情况。
注意图中的最后一句话,SYN只消耗了1个字节的序号空间,所以它可以被毫无异议地确认。刚看到这句话实际上并没有理解为什么被毫无异议地确认,直到看到下面的解释:
在这里插入图片描述
上面的解释来自于协议规范。对上述解释的理解为:
TCP A开始发送一个SYN段并且seq字段为100(第1次握手),TCP B发送了一个SYN段并在这个段中确认了A发送给B的SYN段(第2次握手)。需要注意的是,确认号字段表明B下一个希望接收到的序号为101,说明B确认了A的100这个序号。
之后,TCP A再次回复一个空段(前面几次握手也是空段,因为没有 < D A T A > <DATA> <DATA>,这是第3次握手),包含了一个对B的SYN的确认(确认了B的序号),之后TCP A发送一些数据。需要注意的是,这个第一个包含数据的段的序号和第3次握手的段的序号字段值相同,这说明第3次握手实际上并不占用序号空间(如果占用,则在B发送第2个段的时候会把第3次握手也一起确认)。

针对问题的具体解释

1.为什么前两次握手没有数据但是占用了序号?

从协议标准我们就能看出,这是协议的规定,记住就好。

2.为什么第3次握手不需要确认?

个人粗浅理解(可能不对),有可能是因为其内部确认机制的原因。个人这样理解的其内部机制:如果B收到A一个段,要么接着回发一个ack确认这个段,要么不回发,但不允许出现一个ack确认两个段的情况。所以说B端没有对第3次握手进行ACK,就是不想对第3次握手进行确认而占用一个序号空间(确认了这个序号就不能用了)。如果没有确认,那么下一次A端的发送就还应该从这个没有确认的序号开始,否则B端对这个段的确认就相当于也对第3次握手进行了确认,相当于一次确认了两个段。

2.第3次握手不需要确认如果丢失怎么办?

如果第3次握手丢失,那么B端就会认为其发送的SYN段并没有被收到,就会重复发,此时A端也就知道了第3次握手丢失,就可以重新发送了。

如果真的有确认,按照这种思路走下去,岂不是就陷入套娃了= =

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值