gpt4 book ai didi

sockets - tcp 两端尝试同时连接

转载 作者:可可西里 更新时间:2023-11-01 02:30:14 24 4
gpt4 key购买 nike

考虑 TCP 的三次握手。说明here .

现在上面的文章提到两侧可能会尝试同时连接,并且三向握手在这种情况下可以正常工作。

我们可以使用 sockets api 来模拟这种情况吗?我们通常使用套接字编码的是被动打开(服务器)和主动打开(客户端)?

最佳答案

使用套接字 API 可以同时打开 TCP。正如 Nikolai 所提到的,这是一个执行以下序列的问题,其时间安排使得初始 SYN 相互交叉。

bind addr1, port1
connect addr2, port2
bind addr2, port2
connect addr1, port1

下面是我如何使用单个 Linux 主机实现同时打开。

  1. 使用 netem 减慢环回接口(interface)速度

    tc qdisc add dev lo root handle 1:0 netem delay 5sec
  2. 运行 netcat 两次

    netcat -p 3000 127.0.0.1 2000
    netcat -p 2000 127.0.0.1 3000

两个 netcat 进程相互连接,形成一个 TCP 连接

$ lsof -nP -c netcat -a -i # some columns removed 
COMMAND PID NAME
netcat 27911 127.0.0.1:2000->127.0.0.1:3000 (ESTABLISHED)
netcat 27912 127.0.0.1:3000->127.0.0.1:2000 (ESTABLISHED)

这是 tcpdump 向我展示的内容(为清楚起见对输出进行了编辑)

127.0.0.1.2000 > 127.0.0.1.3000: Flags [S], seq 1139279069
127.0.0.1.3000 > 127.0.0.1.2000: Flags [S], seq 1170088782
127.0.0.1.3000 > 127.0.0.1.2000: Flags [S.], seq 1170088782, ack 1139279070
127.0.0.1.2000 > 127.0.0.1.3000: Flags [S.], seq 1139279069, ack 1170088783

关于sockets - tcp 两端尝试同时连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2231283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com