tcpdump使用时tcp三次握手抓包,ack置1的一些说明

在使用tcpdump抓包的时候,发现tcp的三次握手,第三次的时候竟然将ack置1了,百思不得其解,难道是现在tcp的协议变了吗,让我困惑不已,直接上结果

[root@www test_cpp]# tcpdump -i any port 53 -nn -v

tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
17:09:32.524005 IP (tos 0x0, ttl 64, id 30266, offset 0, flags [DF], proto TCP (6), length 60)
    127.0.0.1.46894 > 127.0.0.1.53: Flags [S], cksum 0x3e3d (correct), seq 3479715283, win 65495, options [mss 65495,sackOK,TS val 20728809 ecr 0,nop,wscale 7], length 0
17:09:32.524066 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
    127.0.0.1.53 > 127.0.0.1.46894: Flags [S.], cksum 0x74c2 (correct), seq 729305304, ack 3479715284, win 65483, options [mss 65495,sackOK,TS val 20728809 ecr 20728809,nop,wscale 7], length 0
17:09:32.524100 IP (tos 0x0, ttl 64, id 30267, offset 0, flags [DF], proto TCP (6), length 52)
    127.0.0.1.46894 > 127.0.0.1.53: Flags [.], cksum 0x9b7e (correct), ack 1, win 512, options [nop,nop,TS val 20728809 ecr 20728809], length 0

首先握手先在本地启了一个dns server,用tcpdump抓53端口的包,然后使用dig 命令+tcp进行查询,然后就出现了上面的结果,当然,通过Telnet,也可以重现这个现象。

现象就是三次握手的最后一次,ack 1????

第一次客户端127.0.0.1.46894 发送seq 3479715283,随机生成的

第二次服务器 127.0.0.1.53 发送seq 729305304, ack 3479715284 ,,ack是前一次的seq+1

第三次客户端127.0.0.1.46894发送ack 1,这不科学,按理来说应该是第二次的seq+1。

重复了几次,都是这样的,通过telnet也是一样的,自己开个网页,去访问抓包也是这样的,这怎么办!!

然后将抓包的报文保存下来-w ,在wireshark上打开,是这样的:


只看前三条,是三次握手的过程在这里:

第一次客户端127.0.0.1.46894 发送seq 0,随机生成的

第二次服务器 127.0.0.1.53 发送seq 0, ack 1 ,,ack是前一次的seq+1

第三次客户端127.0.0.1.46894发送seq 1,ack 1, ack是第二次的seq+1。

再看下面的详细解释:

第一条:

看第二条的解释:


第三条:


原来seq,ack,还是用的原来的tcp协议,没有改变,只不过在wireshark中使用了相对量来显示,

第一次seq:30 aa 5d 22 

第二次seq: 8a 5d 87 9b  ack:30 aa 5d 23     ack恰好是上一次的seq➕1

第三次seq:30 aa 5d 23  ack: 8a 5d 87 9b ack恰好是上一次的seq➕1。

那么现在可以知道了,抓包本身确实是没有问题的,那问题就只能是tcpdump自己显示的功能有问题了,

应该是tcpdump,前两次都是用的绝对量,第三次然后使用了个相对量,ack 1,这逻辑也是没谁了!!!!无力吐槽,还以为是tcp协议改了呢。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
首先,我们来解释一下TCP三次握手的过程: 1. 客户端向服务器发送一个SYN(同步)包,其中包含一个随机生成的初始序号(ISN)2. 服务器收到SYN包后,会回复一个SYN+ACK(同步+确认)包,其中确认号是客户端发送的ISN加1,并且服务器也会生成一个自己的随机序列号。 3. 客户端再次回复一个ACK(确认)包,其中确认号是服务器发送的ISN加1。 这样,TCP连接就建立起来了。现在我们来分析一下抓包数据。 在抓包工具中,你可以使用Wireshark或者tcpdump来捕获网络数据包。当你开始抓包后,你会看到大量的数据包被捕获和显示。 对于TCP三次握手抓包分析,你需要过滤出与目标IP地址和端口相关的数据包。使用过滤器表达式"tcp.dstport == 目标端口 && ip.dst == 目标IP地址"可以帮助你过滤出特定的数据包。 在抓包的结果中,你应该能够看到三个关键的数据包: 1. SYN包:这是客户端发送的第一个数据包,源IP地址是客户端的IP地址,目标IP地址是服务器的IP地址,源端口是随机生成的,目标端口是服务器监听的端口。 2. SYN+ACK包:这是服务器作为对SYN包的回复发送的数据包,源IP地址是服务器的IP地址,目标IP地址是客户端的IP地址,源端口是服务器监听的端口,目标端口是客户端发送SYN包的源端口。 3. ACK包:这是客户端作为对SYN+ACK包的回复发送的数据包,源IP地址是客户端的IP地址,目标IP地址是服务器的IP地址,源端口是客户端发送SYN+ACK的源端口,目标端口是服务器监听的端口。 通过分析这些数据包的源、目标IP地址、端口号以及序列号和确认号等信息,你可以看到TCP三次握手过程中的交互步骤。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值