小编Xzo*_*rax的帖子

如何设置 linux 内核不发送 RST_ACK,以便我可以在原始套接字中提供 SYN_ACK

我想问一个关于原始套接字编程和 linux 内核 TCP 处理的经典问题。我已经对一些相同的线程进行了研究,例如linux raw socket programming question如何正确地使用原始套接字重现 TCP 协议 3 次握手?, 和TCP ACK spoofing,但仍然无法得到解决方案。

我尝试制作一个不侦听任何端口的服务器,而是从远程主机嗅探 SYN 数据包。服务器做一些计算后,它会向对应的SYN包发送一个SYN_ACK包,这样我就可以手动创建TCP连接,不包括内核的操作。我创建了原始套接字并通过它发送 SYN_ACK,但数据包无法通过远程主机。当我在服务器 (Ubuntu Server 10.04) 上执行 tcpdump 并在客户端 (Windows 7) 上执行wireshark 时,服务器返回 RST_ACK 而不是我的 SYN_ACK 数据包。在做了一些研究之后,我得到信息,我们不能抢占内核的 TCP 处理。

还有其他方法可以破解或设置内核不响应这些数据包的 RST_ACK 吗?我在服务器的本地 ip 添加了一个防火墙来告诉内核防火墙后面可能有东西在等待数据包,但仍然没有运气

sockets linux kernel tcp

5
推荐指数
1
解决办法
5469
查看次数

优化Linux套接字

我想问一些关于优化linux socket的问题.我尝试使用boost和简单的linux套接字来制作多线程负载均衡器.负载均衡器的工作原理与这些步骤一样简单:

  1. 一个请求进来,tcp监听器将接受一个套接字,只需说它clientSocket并创建一个新线程
  2. 当线程启动时,它会创建一个后端套接字,只需将serverSocket称为后端服务器(服务)
  3. serverSocket建立之后,我产生了一个新的线程来从serverSocket读取并将数据/响应发送到clientSocket
  4. 对于主线程,我调用一个将从clientSocket读取并发送到serverSocket的函数
  5. 当这两个插座中的一个变为无效时,工作人员将关闭两个插座并死亡

我也使用来自使用epoll的ting库的Waitset来使recv方法处于阻塞模式,这样它就会等到发生事件然后从套接字读取数据.

问题是当我用AB测试负载均衡器时,-n 10000 -c 100 -k,结果非常令人失望.我只有~1600 tps.我试着记录每个请求的请求时间,但结果很好.每次往返得到<1000微秒/ 1毫秒.

但是当我记录传入的请求间隔时,下一个请求处理的当前请求大约> 5000微秒/ 5毫秒.也许任何人都可以建议一个更好的解决方案来优化套接字操作?谢谢.

c++ sockets performance multithreading boost

2
推荐指数
1
解决办法
1552
查看次数

标签 统计

sockets ×2

boost ×1

c++ ×1

kernel ×1

linux ×1

multithreading ×1

performance ×1

tcp ×1