AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[tcp](unix)

Martin Hope
metablaster
Asked: 2024-08-14 15:07:55 +0800 CST

按位构造以匹配 nftables 中的 TCP 标志

  • 5

我找不到任何可以解释以下示例构造的语法和评估的文档:

add rule filter output tcp flags & (syn | ack) == syn | ack
add rule filter output tcp flags & (fin | syn) != 0

我确实在这里阅读了@AB 的回答:记录 TCP 标志。

这只解释了这些构造(匹配标志)的目的TCP,但我想知道语法以及表达式和运算符的评估如何工作。

特别是“按位”运算符的含义以及它们在flags整个表达式中的评估方式。

我还不清楚operator upfront!= 0的作用是什么,特别是它的用途。&

我知道它们是 OR、AND 等等,但不明白这在nftables规则中如何应用。

一些更复杂的例子也可能有帮助。

tcp
  • 1 个回答
  • 20 Views
Martin Hope
user3840019
Asked: 2023-08-15 19:26:45 +0800 CST

Linux 上的条件刷新 TCP 套接字

  • 5

每当我将数据写入 TCP 套接字时,它都会等到填充足够的数据,例如:64k(最大数据包大小),然后将数据发送到线路。这会错过另一端正确时间的数据。

当我设置 TCP_NODELAY 时,写入套接字的任何数据都会立即发送到线路。这会减少带宽,因为我们有很多带有 ACK 的小数据包。

我们可以为linux设置一个规则来有条件地清除套接字吗?前任:

if time gap between last sent packet and current data is greater than 100ms send immediately no matter how much data lendth is
else if current data length is bigger than 50kb send immediately no matter how much time gap is
else do nothing, wait some milliseconds for next decision

我不想减少 tcp 缓冲区大小,想修改 linux 刷新数据的方式。

我们可以通过修改linux配置文件来做到这一点吗?或者这必须在每个编写的软件中实现?

任何直接的答案、帮助、解决方案或文章链接都值得赞赏

tcp
  • 1 个回答
  • 21 Views
Martin Hope
Airwan
Asked: 2022-09-28 00:47:12 +0800 CST

SSH 连接和 TCP 数据包

  • 1

我有一个 IP YY.YY.YY.YY 的 ssh 服务器在端口 5022 上侦听,它显示以下流量(使用 TCPDUMP),其中 XX.XX.XX.XX 是外部未知 IP,

10:34:58.879055 XX.XX.XX.XX.59800 >  YY.YY.YY.YY.5022: S 1093512123:1093512123(0) win 29200 <mss 1460,sackOK,timestamp 4152861140 0,nop,wscale 7> (DF) [tos 0x68]
10:34:58.879222  YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: S 1017497190:1017497190(0) ack 1093512124 win 16384 <mss 1460,nop,nop,sackOK,nop,wscale 6,nop,nop,timestamp 4107297338 4152861140> (DF)
10:34:58.902942 XX.XX.XX.XX.59800 >  YY.YY.YY.YY.5022: . ack 1 win 229 <nop,nop,timestamp 4152861164 4107297338> (DF) [tos 0x68]
10:34:58.902980 XX.XX.XX.XX.59800 >  YY.YY.YY.YY.5022: P 1:24(23) ack 1 win 229 <nop,nop,timestamp 4152861164 4107297338> (DF) [tos 0x68]
10:34:58.916629  YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: P 1:22(21) ack 24 win 271 <nop,nop,timestamp 4107297338 4152861164> (DF)
10:34:58.939061 XX.XX.XX.XX.59800 >  YY.YY.YY.YY.5022: . ack 22 win 229 <nop,nop,timestamp 4152861201 4107297338> (DF) [tos 0x68]
10:34:58.939120  YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: P 22:1054(1032) ack 24 win 271 <nop,nop,timestamp 4107297338 4152861201> (DF)
10:34:58.939603 XX.XX.XX.XX.59800 >  YY.YY.YY.YY.5022: P 24:672(648) ack 22 win 229 <nop,nop,timestamp 4152861201 4107297338> (DF) [tos 0x68]
10:34:58.941607  YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: F 1054:1054(0) ack 672 win 271 <nop,nop,timestamp 4107297338 4152861201> (DF)
10:34:58.961672 XX.XX.XX.XX.59800 >  YY.YY.YY.YY.5022: F 672:672(0) ack 1054 win 245 <nop,nop,timestamp 4152861223 4107297338> (DF) [tos 0x68]
10:34:58.961721  YY.YY.YY.YY.5022 > XX.XX.XX.XX.59800: F 1054:1054(0) ack 673 win 271 <nop,nop,timestamp 4107297338 4152861223> (DF)
10:34:58.963932 XX.XX.XX.XX.59800 >  YY.YY.YY.YY.5022: . ack 1055 win 245 <nop,nop,timestamp 4152861226 4107297338> (DF) [tos 0x68]

我害怕的是标志 S、P 和 F,这意味着同步、推送、完成......

我不擅长网络,但我可以认为连接损害了我的服务器吗?该IP和muy服务器之间是否有完整的流量,或者只是连接尝试?

谢谢。

tcp ssh
  • 1 个回答
  • 30 Views
Martin Hope
Ôrel
Asked: 2022-09-20 05:40:49 +0800 CST

CLOSE_WAIT 在 kubernetes 节点上不可见

  • 1

调试一个tcp: out of memory 错误,我发现一个进程(来自一个容器)在CLOSE_WAIT状态上有很多连接,也就是08当我 cat 时/proc/XXX/net/tcp

但是 netstat 或 ss 都没有显示那些泄露的连接。

133: 0E03540A:9D9C 804CC2AD:01BB 08 00000000:00059D7A 00:00000000 00000000 0 0 316215 1 ffff8f677201df00 20 4 0 10 -1
134: 0E03540A:8316 80A7E940:01BB 08 00000000:00000000 00:00000000 00000000 0 0 255647 1 ffff8f67c9592600 20 4 1 10 -1
135:0E03540A:8874 808C7D4A:01BB 08 00000000:00037EED 00:0000000000000000000000000000000000000.000000 0 0 331603 1 FFFFFF68E37A7200 20 4 1 10-1
136: 1 136:0EDEBIDY000BC. 0EE0EBCC. 0EE0BCC.E222222222222222222222222222222222222222。 1 FFFF8F67BD1EDF00 20 4 0 10 -1
137:0E03540A:DAEC 804CC2AD:01BB 08 00000000:0005B41A 00:00000000000000000000000000000000000000000. 0 0 0 0 0 216048 1 FFFFFF567DAF9AF80 20
4.0138:0.0138:0.11 138:0.11 138: 00000000 0 0 243082 1 ffff8f67db637200 20 4 30 10 -1
140: 0E03540A:BAE4 800FB16C:01BB 08 00000000:000D8432 00:00000000 00000000 0 0 245062 1 ffff8f67640f8980 20 4 1 10 -1
141: 0E03540A:9754 804CC2AD:01BB 08 00000000:00003186 00:00000000 00000000 0 0 298890 1 ffff8f676e1a5f00 20 4 1 10 -1
142: 0E03540A:C6FC 800FB16C:01BB 08 00000000:000658C9 00:00000000 00000000 0 0 299343 1 ffff8f68dcef5580 20 4 0 10 -1
143: 0E03540A:CB24 804CC2AD:01BB 08 00000000:0005BBB4 00:00000000 00000000 0 0 316285 1 ffff8f6772019300 20 4 1 10 -1
144: 0E03540A:8204 80A7E940:01BB 08 00000000:0005DD3A 00:00000000 00000000 0 0 217390 1 ffff8f67dbc20000 20 4 0 10 -1
145: 0E03540A:8BC8 80016642:01BB 08 00000000:00059847 00:00000000 00000000 0 0 275095 1 ffff8f67b6d7a600 20 4 1 10 -1
146: 0E03540A:C612 8005FB8E:01BB 08 00000000:0003EC48 00:00000000 00000000 0 0 252281 1 ffff8f67cf014280 20 4 1 10 -1

为什么 netstat 没有显示这些连接以及如何在不深入研究每个进程细节的情况下获取它们?

tcp container
  • 1 个回答
  • 37 Views
Martin Hope
Vijay
Asked: 2021-11-17 00:28:37 +0800 CST

建立 TCP 会话而不终止它(不发送 RST/FIN)

  • 0

我正在寻找一个项目的信息。我正在寻找一个 Linux 工具,它可以只建立一个 TCP 会话并留在那里而不发送 FIN/RST。

我尝试了诸如此类的工具iperf,一旦建立连接,它也会发出 FIN。

请让我知道是否有可用的工具?

linux tcp
  • 1 个回答
  • 67 Views
Martin Hope
Tina
Asked: 2021-10-13 18:20:49 +0800 CST

了解 ACK 号

  • 0

我试图了解无序 ACK 号码的原因。我在wireshark中有以下日志:

34936 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=3595656117 TSecr=0 WS=128
    2   0.003662105 192.168.1.1 192.168.1.2 TCP 66  80 → 34936 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=32
    3   0.003691751 192.168.1.2 192.168.1.1 TCP 54  34936 → 80 [ACK] Seq=1 Ack=1 Win=64256 Len=0
    4   0.003803721 192.168.1.2 192.168.1.1 HTTP    767 POST /jrd/webapi?api=GetSystemStatus HTTP/1.1* (application/x-www-form-urlencoded)
    5   0.024447941 192.168.1.1 192.168.1.2 TCP 54  80 → 34936 [ACK] Seq=1 Ack=714 Win=32128 Len=0
    6   0.052296708 192.168.1.1 192.168.1.2 TCP 70  80 → 34936 [PSH, ACK] Seq=1 Ack=714 Win=32128 Len=16 [TCP segment of a reassembled PDU]
    7   0.052296845 192.168.1.1 192.168.1.2 HTTP/JSON   528 HTTP/1.1 200 OK , JavaScript Object Notation (application/json)
    8   0.052364039 192.168.1.2 192.168.1.1 TCP 54  34936 → 80 [ACK] Seq=714 Ack=17 Win=64256 Len=0
    9   0.052930703 192.168.1.2 192.168.1.1 TCP 54  34936 → 80 [FIN, ACK] Seq=714 Ack=492 Win=64128 Len=0
    10  0.061251843 192.168.1.2 192.168.1.1 TCP 74  34938 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=3595656179 TSecr=0 WS=128
    11  0.064187519 192.168.1.1 192.168.1.2 TCP 54  80 → 34936 [ACK] Seq=492 Ack=715 Win=32128 Len=0
    12  0.064187779 192.168.1.1 192.168.1.2 TCP 66  80 → 34938 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=32
    13  0.064330872 192.168.1.2 192.168.1.1 TCP 54  34938 → 80 [ACK] Seq=1 Ack=1 Win=64256 Len=0
    14  0.065632767 192.168.1.2 192.168.1.1 HTTP    772 POST /jrd/webapi?api=GetSMSStorageState HTTP/1.1* (application/x-www-form-urlencoded)
    15  0.066381036 192.168.1.2 192.168.1.1 TCP 74  34940 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=3595656184 TSecr=0 WS=128
    16  0.074954073 192.168.1.1 192.168.1.2 TCP 66  80 → 34940 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=32
    17  0.075028197 192.168.1.2 192.168.1.1 TCP 54  34940 → 80 [ACK] Seq=1 Ack=1 Win=64256 Len=0
    18  0.075349695 192.168.1.2 192.168.1.1 HTTP    772 POST /jrd/webapi?api=GetConnectionState HTTP/1.1* (application/x-www-form-urlencoded)
    19  0.080664337 192.168.1.1 192.168.1.2 TCP 70  80 → 34938 [PSH, ACK] Seq=1 Ack=719 Win=32128 Len=16 [TCP segment of a reassembled PDU]
    20  0.080664489 192.168.1.1 192.168.1.2 HTTP/JSON   304 HTTP/1.1 200 OK , JavaScript Object Notation (application/json)
    21  0.080744236 192.168.1.2 192.168.1.1 TCP 54  34938 → 80 [ACK] Seq=719 Ack=17 Win=64256 Len=0
    22  0.081363475 192.168.1.2 192.168.1.1 TCP 54  34938 → 80 [FIN, ACK] Seq=719 Ack=268 Win=64128 Len=0
    23  0.084534363 192.168.1.1 192.168.1.2 TCP 54  80 → 34938 [ACK] Seq=1 Ack=719 Win=32128 Len=0
    24  0.084606985 192.168.1.2 192.168.1.1 TCP 54  [TCP Dup ACK 22#1] 34938 → 80 [ACK] Seq=720 Ack=268 Win=64128 Len=0
    25  0.084649572 192.168.1.1 192.168.1.2 TCP 54  80 → 34940 [ACK] Seq=1 Ack=719 Win=32128 Len=0
    26  0.084649729 192.168.1.1 192.168.1.2 TCP 54  80 → 34938 [ACK] Seq=268 Ack=720 Win=321
    27  0.086781498 192.168.1.1 192.168.1.2 TCP 70  80 → 34940 [PSH, ACK] Seq=1 Ack=719 Win=32128 Len=16 [TCP segment of a reassembled PDU]
  1. 在字符串编号 8 Seq=714 Ack=17。但在字符串编号 9 Seq=714 Ack=492 中。我认为这里的 Ack 是 714+17=731。Ack 在这里是如何计算的,为什么是 492?关于在字符串 22 中计算 Ack 编号的相同问题,其中 Ack=268,而不是我预期的 736。

  2. 在字符串编号 9 中,有 FIN ASK 标志,后面是 SYN 标志。但在字符串编号 13 中,我看到 ASK 标志后面跟着 SYN 标志。我没有看到 FIN 标志。

非常感谢您的任何回答。我需要了解低级 TCP 基础。

linux tcp
  • 1 个回答
  • 160 Views
Martin Hope
Diavel
Asked: 2020-03-11 22:27:13 +0800 CST

使用 ipvs 进行 L4 平衡:丢弃 RST 数据包 - 故障转移

  • 0

我有一个 L4 ipvs 负载平衡器和 L7 特使平衡器设置。假设我的一个 L4 平衡器出现故障,并且由于一致的散列,现在由另一个 L4 平衡器处理(感谢 BGP)的流量被代理到同一个 L7 节点。

这应该没有任何问题,我认为这是一个常见的设置。

问题在于长时间运行的连接。当新的 L4 节点接收到流量(只是数据 - ACK/PUSH 数据包)并且该节点没有收到 SYN 数据包时,该节点只是将 RST 数据包发送到终止连接的客户端。下图说明了这一点。

这不应该发生,我的问题是,有没有办法(sysctl 配置或其他东西)是这个原因?我知道我也许可以使用 iptables 丢弃 RST 数据包,但这听起来不对。

在此处输入图像描述

tcp load-balancing
  • 1 个回答
  • 426 Views
Martin Hope
Sandeep kumar singh
Asked: 2020-02-14 01:30:26 +0800 CST

哪些 linux 服务在数据包登陆以太网后管理数据包

  • 0

我试图了解进行 tcp 3 次握手所涉及的 linux 服务/进程。例如,谁为 SYN 请求发送拒绝标志 [R.]。

示例:端口 8088 正在侦听并且 8089 已打开。在两个端口上发出连接请求后,下面的 tcpdump 输出。

对于 8089:

$ sudo tcpdump -i any -nn port 8088 or port 8089
04:23:12.260621 IP 192.168.112.129.52298 > 192.168.112.129.8089: Flags [S], seq 300539809, win 43690, options [mss 65495,sackOK,TS val 19840756 ecr 0,nop,wscale 7], length 0
04:23:12.260637 IP 192.168.112.129.8089 > 192.168.112.129.52298: Flags [R.], seq 0, ack 300539810, win 0, length 0

对于 8088:

$ sudo tcpdump -i any -nn port 8088 or port 8089
04:23:21.680070 IP 192.168.112.129.42814 > 192.168.112.129.8088: Flags [S], seq 670408355, win 43690, options [mss 65495,sackOK,TS val 19850176 ecr 0,nop,wscale 7], length 0
04:23:21.680087 IP 192.168.112.129.8088 > 192.168.112.129.42814: Flags [S.], seq 1185731197, ack 670408356, win 43690, options [mss 65495,sackOK,TS val 19850176 ecr 19850176,nop,wscale 7], length 0
04:23:21.680098 IP 192.168.112.129.42814 > 192.168.112.129.8088: Flags [.], ack 1, win 342, options [nop,nop,TS val 19850176 ecr 19850176], length 0

那么这里哪个 linux 服务发送 8089 的 [R.] 和 8088 的 [S.] SYN-ACK?数据包如何到达侦听器,流量是多少?添加防火墙规则(使用 iptables)以在 8089 上丢弃数据包时的流程是什么?

提前致谢 :)

tcp
  • 1 个回答
  • 67 Views
Martin Hope
binakh
Asked: 2019-12-07 04:52:48 +0800 CST

记录 TCP 标志

  • 1

我使用 nftables 作为我的规则。

我的问题:如何记录 tcp 标志?

这是我的规则:

nft add rule filter input tcp dport 22 ct state new tcp flags \& \(fin\|syn\) ==\( fin \| syn\) accept

我总是得到的结果:

Dec 6 13:40:19 my_host my_FIN IN=eth0 OUT=eth1 MAC= SRC=x.1.1.1 DST=x.2.2.2 LEN=40 TOS=00 PREC=0x00 TTL=127 ID=17695 DF PROTO=TCP SPT=54049 DPT=422SEQ=2558094232 ACK=0 WINDOW=8192 SYN URGP=0 MARK=0

编辑 我的规则:

 chain FORWARD {

      ip saddr 1.1.1.1 ip daddr . tcp dport @myset tcp flags & (fin | syn) == fin | syn counter packets 0 bytes 0 log prefix " myprefix " group 1 accept 

}

tcp logs
  • 1 个回答
  • 299 Views
Martin Hope
user2284570
Asked: 2019-11-27 05:05:31 +0800 CST

如何使用 netcat 或 socat 或 curl 恢复文件传输?

  • 2

我必须通过 Internet 将一个包含单个文件的 400Gb 数据库从我可以完全控制的服务器传输到海洋对面边界的另一台计算机(但它使用慢速连接)。传输需要整整一周,为了减少所有协议开销(即使使用 ftp 也会有 10 分钟的开销),我使用的是原始 tcp 连接。

我已经传输了 10% 的文件,但我了解到在几个小时内会发生预定中断。

我如何要求 netcat 或 socat 或curlFILE:database.raw在它被中断的偏移量处提供服务?或者

tcp networking
  • 1 个回答
  • 682 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve