为什么我只能从一侧执行 TCP 握手?

问题描述

来自我局域网上的两台笔记本电脑(一台是 10.0.0.11,另一台是 10.0.0.15)。在一台笔记本电脑上,我可以通过聆听创建被动连接,一切正常,另一台笔记本电脑ACK 进行通信。但我不能以另一种方式做同样的事情 - 从另一台笔记本电脑制作被动倾听者:

LAP1 = 笔记本电脑(10.0.0.11),LAP2 = 笔记本电脑(10.0.0.15)

LAP1

$ tcpdump -i wlp2s0 -t -n src 10.0.0.15 or src 10.0.0.11 > output &
$ nc -nl 4444
hello
hi
^C

LAP2

$nc -n 10.0.0.11 4444
hello
hi
^C

现在一切正常,输出是:

IP 10.0.0.15.35410 > 10.0.0.11.4444: Flags [S],seq 3649576842,win 64240,options [mss 1460,sackOK,TS val 1557903826 ecr 0,nop,wscale 7],length 0
IP 10.0.0.11.4444 > 10.0.0.15.35410: Flags [S.],seq 2552044612,ack 3649576843,win 65160,TS val 2837963760 ecr 1557903826,TS val 2837964778 ecr 1557903826,TS val 2837966794 ecr 1557903826,length 0
IP 10.0.0.15.35410 > 10.0.0.11.4444: Flags [.],ack 1,win 502,options [nop,TS val 1557907412 ecr 2837963760],length 0
IP 10.0.0.11.4444 > 10.0.0.15.35410: Flags [P.],seq 1:7,win 510,TS val 2837966936 ecr 1557907412],length 6
IP 10.0.0.15.35410 > 10.0.0.11.4444: Flags [.],ack 7,TS val 1557907421 ecr 2837966936],length 0
IP 10.0.0.15.35410 > 10.0.0.11.4444: Flags [P.],seq 1:4,TS val 1557908702 ecr 2837966936],length 3
IP 10.0.0.11.4444 > 10.0.0.15.35410: Flags [.],ack 4,TS val 2837968227 ecr 1557908702],length 0
IP 10.0.0.11.4444 > 10.0.0.15.35410: Flags [F.],seq 7,TS val 2837971235 ecr 1557908702],length 0
IP 10.0.0.15.35410 > 10.0.0.11.4444: Flags [F.],seq 4,ack 8,TS val 1557911933 ecr 2837971235],length 0
IP 10.0.0.11.4444 > 10.0.0.15.35410: Flags [.],ack 5,TS val 2837971644 ecr 1557911933],length 0

到目前为止一切顺利。

但是如果我尝试以相反的方式启动:

LAP2

$nc -nl 4444

LAP1

$ tcpdump -i wlp2s0 -t -n src 10.0.0.15 or src 10.0.0.11 > output2 &
$nc -n 10.0.0.15 4444

我什至没有连接,10.0.0.11 (LAP1) 只是多次尝试发送 SEQ 但对方没有响应,因此握手不完整:

output2输出

IP 10.0.0.11.47928 > 10.0.0.15.4444: Flags [S],seq 2268838313,TS val 2837899323 ecr 0,length 0
IP 10.0.0.11.47928 > 10.0.0.15.4444: Flags [S],TS val 2837900330 ecr 0,TS val 2837902346 ecr 0,length 0
...

如您所见,另一端 (10.0.0.15) 如果是被动连接则不响应。如果它像前一种情况一样活跃(不听,只是连接),没有问题。但如果它在听,它就没有响应。是什么原因造成的?如何解决这种单向连接?为什么主动连接,被动连接不连接?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...