gpt4 book ai didi

TCP 握手失败——服务器的回复有什么问题?

转载 作者:可可西里 更新时间:2023-11-01 02:31:42 25 4
gpt4 key购买 nike

我正在用 ENC28J60 构建服务器芯片和一个 PIC18F4620 .该芯片通过以太网连接到我的电脑。目前,我正在尝试建立 TCP 连接,稍后我将通过它建立 HTTP 连接。我以前从未使用过 TCP。

我只在嵌入式设备上实现 TCP,而不是在 PC 上。

发送所需的 ARP 请求和回复后,我打开浏览器,输入芯片的 IP 地址,然后按回车键。在 wireshark 中,我看到发出了带有 SYN 标志的 TCP 请求1。我相信 SYN 标志表示新的握手启动,这很好,不是吗?

我的芯片的回复1 启用了 SYN 和 ACK 标志。来自 what I understood ,这是回复带有 SYN 标记的请求的正确方法。芯片发送的确认号是正确的。现在,根据相同的引用资料,芯片应该会收到启用了 ACK 标志的回复。

但是,这个过程似乎重新开始:PC 发送与第一个数据包完全相同的数据包1,只是“标识”发生了变化。我对我的芯片进行了编程,当它在同一个套接字上不断收到 SYN 请求时停止回复,所以这是传输的结束,在浏览器中我读到无法访问服务器。

此连接同时在四个套接字上建立,结果相同。

因为我只是将我的 PC 用作客户端(并且我的以太网端口/驱动程序没有任何问题),问题一定出在服务器上,因此与第二个数据包有关。

第二个数据包有什么问题?Wireshark 没有将任何内容标记为不正确,但客户端没有发送 ACK。


1:这是 wireshark 拾取的数据包:

Client: 3085 > 80 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=8 TSval=0 TSecr=0 SACK_PERM=1
0000 00 13 d4 c6 53 16 00 1a a0 03 c7 21 08 00 45 00 ....S... ...!..E.
0010 00 40 de 48 40 00 80 06 9a e1 c0 a8 00 01 c0 a8 .@.H@... ........
0020 00 3c 0c 0d 00 50 88 ab 7e 18 00 00 00 00 b0 02 .<...P.. ~.......
0030 ff ff a1 4f 00 00 02 04 05 b4 01 03 03 03 01 01 ...O.... ........
0040 08 0a 00 00 00 00 00 00 00 00 01 01 04 02 ........ ......

Server: 80 > 3085 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=1460 WS=8
0000 00 1a a0 03 c7 21 00 13 d4 c6 53 16 08 00 45 00 .....!.. ..S...E.
0010 00 30 88 10 40 00 7f 06 f2 29 c0 a8 00 3c c0 a8 .0..@... .)...<..
0020 00 01 00 50 0c 0d 00 00 00 01 88 ab 7e 19 70 12 ...P.... ....~.p.
0030 ff ff ef 77 00 00 02 04 05 b4 01 03 03 03 ...w.... ......

Client: 3085 > 80 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=8 TSval=0 TSecr=0 SACK_PERM=1
0000 00 13 d4 c6 53 16 00 1a a0 03 c7 21 08 00 45 00 ....S... ...!..E.
0010 00 40 de 6f 40 00 80 06 9a ba c0 a8 00 01 c0 a8 .@.o@... ........
0020 00 3c 0c 0d 00 50 88 ab 7e 18 00 00 00 00 b0 02 .<...P.. ~.......
0030 ff ff a1 4f 00 00 02 04 05 b4 01 03 03 03 01 01 ...O.... ........
0040 08 0a 00 00 00 00 00 00 00 00 01 01 04 02 ........ ......

所有这一切都与其他三个客户端的源端口类似。

为了比较,我向 google.com 发出了一个请求,这里是 TCP 流:

Client: 49562 > 80 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
0000 00 1a a0 03 c7 21 08 9e 01 30 ee 69 08 00 45 00 .....!.. .0.i..E.
0010 00 34 32 3f 40 00 80 06 38 ab c0 a8 00 3c 4a 7d .42?@... 8....<J}
0020 84 78 c1 9a 00 50 74 b8 31 9c 00 00 00 00 80 02 .x...Pt. 1.......
0030 20 00 56 f7 00 00 02 04 05 b4 01 03 03 08 01 01 .V..... ........
0040 04 02 ..

Server: 80 > 49562 [SYN, ACK] Seq=0 Ack=1 Win=62920 Len=0 MSS=1430 SACK_PERM=1 WS=64
0000 08 9e 01 30 ee 69 00 1a a0 03 c7 21 08 00 45 00 ...0.i.. ...!..E.
0010 00 34 9e e3 00 00 2e 06 5e 07 4a 7d 84 78 c0 a8 .4...... ^.J}.x..
0020 00 3c 00 50 c1 9a f4 5e 12 bc 74 b8 31 9d 80 12 .<.P...^ ..t.1...
0030 f5 c8 7a 22 00 00 02 04 05 96 01 01 04 02 01 03 ..z".... ........
0040 03 06 ..

Client: 49562 > 80 [ACK] Seq=1 Ack=1 Win=65536 Len=0
0000 00 1a a0 03 c7 21 08 9e 01 30 ee 69 08 00 45 00 .....!.. .0.i..E.
0010 00 28 32 49 40 00 80 06 38 ad c0 a8 00 3c 4a 7d .(2I@... 8....<J}
0020 84 78 c1 9a 00 50 74 b8 31 9d f4 5e 12 bd 50 10 .x...Pt. 1..^..P.
0030 01 00 af 9e 00 00 00 00 00 00 00 00 ........ ....

最佳答案

我使用 text2pcap 将您的捕获加载到 wireshark。

如果启用 TCP 校验和验证和绝对序列号,您将在芯片的 SYN-ACK 数据包中看到错误的 TCP 校验和。

此外,从绝对序列号 0 开始的芯片非常弱。

关于TCP 握手失败——服务器的回复有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16354278/

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