为什么我没有通过 tcpdump 命令获得三次握手?

网络工程 tcp tcpdump
2022-03-02 07:46:05

我就是做这个的 。

1、打开tcpdump命令sudo tcpdump -i lo0 tcp port 20009

2、启动示例服务器nc -l 20009

3、连接20009端口telnet localhost 20009

4、tcpdump命令得到:

○ → sudo tcpdump  -i lo0 tcp port 20009
Password:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes
17:38:42.778304 IP6 localhost.58951 > localhost.20009: Flags [S], seq 4206287588, win 65535, options [mss 16324,nop,wscale 5,nop,nop,TS val 461712269 ecr 0,sackOK,eol], length 0
17:38:42.778341 IP6 localhost.20009 > localhost.58951: Flags [R.], seq 0, ack 4206287589, win 0, length 0
17:38:42.778536 IP localhost.58952 > localhost.20009: Flags [S], seq 2745154881, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 461712269 ecr 0,sackOK,eol], length 0
17:38:42.778614 IP localhost.20009 > localhost.58952: Flags [S.], seq 3385478755, ack 2745154882, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 461712269 ecr 461712269,sackOK,eol], length 0
17:38:42.778629 IP localhost.58952 > localhost.20009: Flags [.], ack 1, win 12759, options [nop,nop,TS val 461712269 ecr 461712269], length 0
17:38:42.778643 IP localhost.20009 > localhost.58952: Flags [.], ack 1, win 12759, options [nop,nop,TS val 461712269 ecr 461712269], length 0

ack为什么客户端(localhost.58952 )在第三步中不将(值1)发送回服务器(localhost.20009)?

1个回答

您的系统已将 localhost 定义为 ::1 (ipv6) 和 127.0.0.1 (ipv4),因此 telnet 首先尝试 ipv6,如果失败则尝试 ipv4。第一个数据包是对 ::1 的 SYN,但由于没有进程正在侦听该地址和端口,因此系统以 RST(数据包 2)进行响应。然后数据包 3 是到 127.0.0.1 的 SYN,数据包 4 是 SYN+ACK 等。