You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Netcat服务器未响应客户端SYN请求:为何未生成SYN-ACK?

服务器未返回SYN-ACK报文的排查指导

上下文

  • 客户端:STM32U585,搭载ENC28J60以太网控制器与NetX TCP/IP协议栈
  • 服务器:Ubuntu系统,运行netcat服务器,启动命令:netcat -l -p 6001 -s 192.168.1.2 -v
  • 网络环境:客户端与服务器以太网直连(无路由器),NetX未配置PPP,客户端硬编码服务器MAC与IP地址
  • 验证信息:Wireshark确认服务器已收到SYN报文;该服务器可与其他Linux机器的netcat客户端正常建立连接

问题

服务器收到SYN报文后未生成SYN-ACK报文,以下是服务器端Wireshark捕获的SYN报文详情(目的MAC地址已编辑,与服务器硬件MAC一致):

Frame 1: 62 bytes on wire (496 bits), 62 bytes captured (496 bits) on interface enx00e121212121, id 0
Interface id: 0 (enx00e121212121)
    Interface name: enx00e121212121
Encapsulation type: Ethernet (1)
Arrival Time: Mar  1, 2023 14:30:32.775293348 IST
[Time shift for this packet: 0.000000000 seconds]
Epoch Time: 1677661232.775293348 seconds
[Time delta from previous captured frame: 0.000000000 seconds]
[Time delta from previous displayed frame: 0.000000000 seconds]
[Time since reference or first frame: 0.000000000 seconds]
Frame Number: 1
Frame Length: 62 bytes (496 bits)
Capture Length: 62 bytes (496 bits)
[Frame is marked: False]
[Frame is ignored: False]
[Protocols in frame: eth:ethertype:ip:tcp]
[Coloring Rule Name: TCP SYN/FIN]
[Coloring Rule String: tcp.flags & 0x02 || tcp.flags.fin == 1]
Ethernet II, Src: Coherent_8b:10:11 (00:1b:1c:8b:10:11), Dst: RealtekS_68:05:03 (00:XX:XX:XX:XX:XX)
Destination: RealtekS_68:05:03 (00:XX:XX:XX:XX:XX)
    Address: RealtekS_68:05:03 (00:XX:XX:XX:XX:XX)
    .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
    .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
Source: Coherent_8b:10:11 (00:1b:1c:8b:10:11)
    Address: Coherent_8b:10:11 (00:1b:1c:8b:10:11)
    .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
    .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 192.168.1.13, Dst: 192.168.1.2
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
    0000 00.. = Differentiated Services Codepoint: Default (0)
    .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
Total Length: 48
Identification: 0x0001 (1)
Flags: 0x00
    0... .... = Reserved bit: Not set
    .0.. .... = Don't fragment: Not set
    ..0. .... = More fragments: Not set
...0 0000 0000 0000 = Fragment Offset: 0
Time to Live: 128
Protocol: TCP (6)
Header Checksum: 0xb767 [validation disabled]
[Header checksum status: Unverified]
Source Address: 192.168.1.13
Destination Address: 192.168.1.2
Transmission Control Protocol, Src Port: 6000, Dst Port: 6001, Seq: 0, Len: 0
Source Port: 6000
Destination Port: 6001
[Stream index: 0]
[Conversation completeness: Incomplete, SYN_SENT (1)]
[TCP Segment Len: 0]
Sequence Number: 0    (relative sequence number)
Sequence Number (raw): 4106063055
[Next Sequence Number: 1    (relative sequence number)]
Acknowledgment Number: 0
Acknowledgment number (raw): 0
0111 .... = Header Length: 28 bytes (7)
Flags: 0x002 (SYN)
    000. .... .... = Reserved: Not set
    ...0 .... .... = Nonce: Not set
    .... 0... .... = Congestion Window Reduced (CWR): Not set
    .... .0.. .... = ECN-Echo: Not set
    .... ..0. .... = Urgent: Not set
    .... ...0 .... = Acknowledgment: Not set
    .... .... 0... = Push: Not set
    .... .... .0.. = Reset: Not set
    .... .... ..1. = Syn: Set
        [Expert Info (Chat/Sequence): Connection establish request (SYN): server port 6001]
            [Connection establish request (SYN): server port 6001]
            [Severity level: Chat]
            [Group: Sequence]
    .... .... ...0 = Fin: Not set
    [TCP Flags: ··········S·]
Window: 512
[Calculated window size: 512]
Checksum: 0x5053 [unverified]
[Checksum Status: Unverified]
Urgent Pointer: 0
Options: (8 bytes), Maximum segment size, No-Operation (NOP), No-Operation (NOP), No-Operation (NOP), End of Option List (EOL)
    TCP Option - Maximum segment size: 1460 bytes
        Kind: Maximum Segment Size (2)
        Length: 4
        MSS Value: 1460
    TCP Option - No-Operation (NOP)
        Kind: No-Operation (1)
    TCP Option - No-Operation (NOP)
        Kind: No-Operation (1)
    TCP Option - No-Operation (NOP)
        Kind: No-Operation (1)
    TCP Option - End of Option List (EOL)
        Kind: End of Option List (0)
[Timestamps]
    [Time since first frame in this TCP stream: 0.000000000 seconds]
    [Time since previous frame in this TCP stream: 0.000000000 seconds]

排查方向

  1. 校验码合法性检查

    • TCP校验码:报文显示TCP校验码0x5053未通过验证,Linux内核会直接丢弃校验失败的TCP包。需确认NetX协议栈计算SYN包校验码时,是否正确包含了IP伪头部(源IP、目的IP、协议号、TCP长度)的内容。
    • IP校验码:IP头部校验码0xb767状态为未验证,部分Linux内核配置会严格校验IP校验码,需检查客户端IP校验码生成逻辑是否符合RFC 791标准。
  2. TCP选项格式验证
    报文中TCP选项包含连续3个NOP后接EOL,虽然标准允许该格式,但部分内核或协议栈对冗余选项的兼容性有限。可尝试修改NetX配置,只保留MSS选项,去掉多余的NOP,测试是否能触发SYN-ACK。

  3. 服务器网络配置确认

    • 确认服务器网卡enx00e121212121已正确绑定192.168.1.2地址,无多IP冲突或地址配置错误。
    • 执行arp -an查看服务器ARP缓存,确认存在192.168.1.13对应的客户端MAC条目,若缺失可手动添加静态ARP条目测试。
  4. NetX协议栈参数调整

    • 客户端SYN包窗口大小为512,虽Linux一般不会因此拒绝,但可尝试调整NetX的默认TCP窗口大小至更大值(如1460)测试。
    • 检查NetX协议栈是否正确处理了SYN包的序列号生成,确保无异常值导致内核丢弃报文。

内容的提问来源于stack exchange,提问作者Vivek Vijayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:15:09