为什么ack数量减少到1?

问题描述 投票:1回答:1

我想获得TCP。从TCP RFC 793服务器和客户端选择一个随机序列号,并在每次收到一个新字节后增加它(这是错误的,但仅举例)。要转储TCP包我使用tcpdump -n -i eth0 tcp

listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
04:32:20.732914 IP 10.10.0.2.43168 > 10.50.0.2.9: S 372254521:372254521(0) 
    win 5840 <mss 1460,sackOK,timestamp 3644068 0,nop,wscale 1>
04:32:20.766194 IP 10.50.0.2.9 > 10.10.0.2.43168: S 363863555:363863555(0) 
    ack 372254522 win 5792 <mss 536,sackOK,timestamp 3644074 3644068,nop,wscale 1>
04:32:20.766416 IP 10.10.0.2.43168 > 10.50.0.2.9: . 
    ack 1 win 2920 <nop,nop,timestamp 3644073 3644074>
04:32:25.502532 IP 10.10.0.2.43168 > 10.50.0.2.9: P 1:7(6) 
    ack 1 win 2920 <nop,nop,timestamp 3644548 3644074>
04:32:25.503272 IP 10.50.0.2.9 > 10.10.0.2.43168: . 
    ack 7 win 2896 <nop,nop,timestamp 3644548 3644548>
04:32:29.510131 IP 10.10.0.2.43168 > 10.50.0.2.9: F 7:7(0) 
    ack 1 win 2920 <nop,nop,timestamp 3644949 3644548>
04:32:29.513123 IP 10.50.0.2.9 > 10.10.0.2.43168: F 1:1(0) 
    ack 8 win 2896 <nop,nop,timestamp 3644949 3644949>
04:32:29.513356 IP 10.10.0.2.43168 > 10.50.0.2.9: . 
    ack 2 win 2920 <nop,nop,timestamp 3644949 3644949>

前两个包看起来正常,但从第三个,所以它使用ack 1而不是363863556,我不明白为什么?

tcp tcpdump
1个回答
3
投票

它没有。您正在运行tcpdump而没有告诉它您想要查看绝对序列号(-S)。

tcpdump的默认行为是将序列号转换为相对序列号,这样可以查看在任一方向上传输了多少字节的数据。在这种特定情况下,您看到它转到1,因为根据RFC-793,SYN在流中消耗一个字节,因此正确的响应是SEQ + 1。你会看到朝着另一个方向发生同样的事情。 (您还会发现FIN消耗一个字节)。在此之后,ACK将增加发送的字节数。

如果要查看绝对序列号,请再次尝试运行tcpdump -n -i eth0 -S tcp

© www.soinside.com 2019 - 2024. All rights reserved.