- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我使用带有 OpenWRT 的 TP-Link 路由器 TL-WR710N 作为 IPv4 到 IPv6 的转换器/网关,使用以下 socat 命令:
socat TCP4-LISTEN:80,fork,su=nobody TCP6:[xx:xx:xx::xx]:80
在 IPv4 端是一台通过 TCP 发送大量数据(例如 300kB)的 PC。 Ipv6 端是一个堆栈非常小的嵌入式设备,一次只能处理一个以太网帧。
路由器缓存最多 300k 的数据并将其逐帧发送到嵌入式设备。有时路由器会以错误的顺序发送 TCP 数据包,例如:
Sender(TP-Link router) Receiver(embedded sys)
packet 1 Ack 1
packet 3 Ack 1
packet 2 Ack 2
packet 4 Ack 2
transmission pause (400ms)
packet 3 Ack 3
packet 5 Ack 3
packet 4 Ack 4
packet 6 Ack 4
transmission pause (1,2s)
packet 5 Ack 5
packet 7 Ack 5
packet 6 Ack 6
packet 8 Ack 6
transmission pause (5s)
...
在具有大接收缓冲区的系统中,这不是问题,因为它可以重新排序接收到的包。但在我的小型嵌入式设备中,重新排序是不可能的。 (重新)传输暂停时间越来越长,直到嵌入式设备超时。
为了解决这个问题,我尝试在 ipv6 端将路由器的 socat-buffer 减少到一个数据包的大小,因此它必须在发送新数据包之前接收一个新数据包。但是这种方法没有用,因为 socat-application-buffer 不是唯一的缓冲区,还有 router-buffer。有人有管理这个的想法吗?
actual state:
1. [ PC (300kB) ] ------ [ Router ] ------ [ Embedded-device ]
2. [ PC ] ------ [ (300kB) Router ] ------ [ Embedded-device ]
3. [ PC ] ------ [ Router (299kB) ] ------ [ (1kB) Embedded-device ]
4. [ PC ] ------ [ Router (298kB) ] ------ [ (2kB) Embedded-device ]
5. .....
should state:
1. [ PC (300kB) ] ------ [ Router ] ------ [ Embedded-device ]
2. [ PC (299kB) ] ------ [ Router ] ------ [ (1kB) Embedded-device ]
3. [ PC (298kB) ] ------ [ Router ] ------ [ (2kB) Embedded-device ]
4. [ PC (297kB) ] ------ [ Router ] ------ [ (3kB) Embedded-device ]
5. .....
我也对(重新)传输暂停小于 1 秒且不会增加的解决方案感兴趣。
最佳答案
以下选项减少了缓冲区和 paketsize,它对我有用
echo "net.ipv4.tcp_wmem= 700 700 700"$'\n'"net.ipv4.tcp_rmem= 700 700 700" >> /etc/sysctl.conf
或每个编辑:
net.ipv4.tcp_wmem= 700 700 700
net.ipv4.tcp_rmem= 700 700 700
关于tcp - Socat - 无缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43684185/
在我的服务器上使用 Socat 我有当前命令: socat -u tcp-l:7767,fork system:/app/getmsg.sh 所有 getmsgh.sh 所做的是: read MESS
外部数据提供者与我们的其中一台服务器建立 tcp 连接。 我想使用 socat 来“多路复用”传入的数据,以便多个程序可以接收从外部数据提供者发送的数据。 socat -u TCP4-LISTEN:4
我正在使用 socat 命令在我的嵌入式 linux 设备上创建一个 tty 接口(interface),例如: socat pty,link=/dev/ttyS9 TCP:10.0.10.1:999
我一直在尝试使用socat通过虚假的HTTP答复对正在侦听的套接字的每个连接进行响应。我无法正常工作。可能是因为我使用的是Socat的Cygwin版本?我不知道。 问题的一部分是我不希望将第二个参数写
一段时间后,我终于让 socat 以与 putty 相同的方式运行,使用: stty -F /dev/ttyS2 115200 cs8 ixoff socat $(tty),raw,echo=0,es
我在我的 ubuntu 笔记本上创建了两个虚拟串行端口。 -> sudo socat/dev/ttyUSB7/dev/ttyUSB8 现在我想删除串行端口以及它们之间的连接。 我找不到执行此操作的命令
我要模拟 3 个不同的应用程序,每个都连接到不同的串行调制解调器 (rs232)。我希望每个应用程序都通过在“虚拟”串行线上写入来与其他应用程序通信我尝试配置 socat 应用程序,但现在我只能使用以
我正在运行这样的隧道: socat TCP-LISTEN:9090,fork TCP:192.168.1.3:9090 我想运行一个脚本来执行带有通过隧道的字符串的代码。 脚本不改变字符串,只独立处理
我使用带有 OpenWRT 的 TP-Link 路由器 TL-WR710N 作为 IPv4 到 IPv6 的转换器/网关,使用以下 socat 命令: socat TCP4-LISTEN:80,for
我使用以下代码接收连接: socat TCP-LISTEN:4000,fork EXEC:./myscrpit" 我的脚本中需要一个发件人的 IP 地址,但是 SOCAT_PEERADDR 没有设置,
我正在编写 JUnit 测试来测试我的应用程序。该应用程序是用 Java 编写的,并使用 purejavacomm 库。为了测试串行解析器,我想设置一个虚拟串行端口,以便测试可以与解析器通信。除了简单
我在 kubernetes 的一个端口上运行 pyspark。我正在尝试转发到我的本地机器。执行 python 文件时出现此错误。 Forwarding from 127.0.0.1:7077 ->
我正在使用 socat 版本 1.7.3.2 从 VLAN 以太网设备创建字符设备以进行通信。我使用以下命令创 build 备: socat INTERFACE:wwan0.vlan_dev1,typ
我想用 socat 创建一个端口转发器,以便通过单个 openssl channel 重定向多个分支连接。我可以在不使用任何 tun 或 vpn 的情况下在 socat 中执行此操作吗? 到目前为止,
如何用socat测试远程端口是否可达? 通过 netcat 我们可以 nc -zv 192.168.1.15 22 如何使用 socat 做到这一点? 最佳答案 由于 OP 请求等效于 -z,因此以下
我正在使用 Windows 的 socat 作为客户端通过 SSH 隧道 DNS,它可以完美地工作,直到 ssh 连接终止或暂时不可用 - 当这种情况发生时 socat Windows 客户端终止并需
目标是使用串行接口(interface)连接到嵌入式设备。到目前为止,我使用过: stty -F /dev/ttyS2 115200 cs8 ixoff socat readline,history=
此命令(串行端口重定向器)接受 TCP:11313 上的单个连接: socat PTY,link=/dev/ttyV1,echo=0,raw,unlink-close=0 TCP-LISTEN:113
我有一个开放端口的服务器,每秒接收 50 到 1000 条消息。我所说的消息是指发送单行文本。 本质上,我们希望将这些消息记录在一个文件中,该文件将每小时(或 x 分钟)处理一次。 我已经创建了一个在
我只想要一个进程打开 socat 创建的 PTY 设备。 我使用以下内容创建 my_ser设备,但它可以被多个进程读/写。 socat -t 0 INTERFACE:my_nw,type=2 PTY,
我是一名优秀的程序员,十分优秀!