每次客户端发送或接收数据包时,UDP 连接是否通过 NAT 重置超时,或者是否有任何(常见)实现要求客户端主动发送某些内容以保持连接活动?
我正在开发一个 UDP 流应用程序,我想知道如果没有有效负载数据,除了服务器已经发送的心跳之外,我是否还必须让客户端发送一个定期心跳。
我在 Google Cloud 网络负载均衡器后面(在虚拟机上)设置了 UDP 服务器。服务器绑定到0.0.0.0. UDP 服务器可以接收发送到平衡器的消息,但回复不会返回到客户端。没有报告任何错误,并且tcpdump没有显示任何异常情况。我已确保所有防火墙规则都允许此流量,并且负载均衡器设置为转发所有端口。
我绝不是网络专家,但我怀疑UDP 服务器出了问题,因为接收消息的地址与用于回复的地址不同 ( sendto())。
socketserver我正在使用标准库中的 Python 模块作为回显服务器来测试所有这些:
import SocketServer
class MyUDPHandler(SocketServer.BaseRequestHandler):
def handle(self):
data = self.request[0].strip()
socket = self.request[1]
print "{} wrote:".format(self.client_address[0])
print data
socket.sendto(data.upper(), self.client_address)
if __name__ == "__main__":
HOST, PORT = "0.0.0.0", 5029
server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)
虚拟机只有一个网络接口,具有本地IP 10.240.x.x。如果我将 UDPServer 绑定到该本地 IP,则该服务器甚至不会接收消息。
如果没有负载均衡器,一切都会正常工作,即消息会正确回显给客户端。
问题:我应该怎样做才能让我的 UDP 服务器回复消息?
编辑: 这个讨论可能是相关的。
networking load-balancing udp google-cloud-platform google-cloud-network-load-balancer
我有一个带有Debian 8和的 OpenVPN 服务器OpenVPN 2.3.14 x86_64-pc-linux-gnu。今天我发现丢包了。我的服务器位于 TCP 端口 443 上。
Ping statistics for 144.76.41.103:
Packets: Sent = 1135, Received = 1121, Lost = 14 (1% loss),
Approximate round trip times in milli-seconds:
Minimum = 29ms, Maximum = 961ms, Average = 51ms
Run Code Online (Sandbox Code Playgroud)
其他统计:
Ping statistics for 144.76.41.103:
Packets: Sent = 1135, Received = 1121, Lost = 70 (5% loss),
Approximate round trip times in milli-seconds:
Minimum = 29ms, Maximum = 961ms, Average = 51ms
Run Code Online (Sandbox Code Playgroud)
服务器配置:
port 443 …Run Code Online (Sandbox Code Playgroud) 在使用wireshark上的ICMP过滤器后,我注意到我的机器定期向路由器发出ICMP请求,但总是失败:
我注意到随后失败的 ICMP 请求在端口 53 上使用 UDP。有人可以解释一下我正在查看的内容吗?
在指向另一个域的 CNAME 查找的附加部分中返回根名称服务器是否配置不佳?特别是我看到的一个是由 Network Solutions 托管的 CNAME,CNAME 指向不同的域和 TLD。
我问这是否是糟糕的配置,因为所有这些额外的记录都会导致超过 UDP 数据包的大小,从而迫使使用 TCP 重新完成查询。
dig www.unitedstatesartists.org +trace
名称服务器响应:
example.org. 86400 IN NS ns15.worldnic.com.
example.org. 86400 IN NS ns16.worldnic.com.
;; Received 95 bytes from 199.249.120.1#53(b2.org.afilias-nst.org) in 79 ms
;; Warning: Message parser reports malformed message packet.
;; Truncated, retrying in TCP mode.
www.example.org. 7200 IN CNAME load-01-123.us-west-1.elb.amazonaws.com.
. 518400 IN NS a.root-servers.net.
. 518400 IN NS b.root-servers.net.
. 518400 IN NS c.root-servers.net.
. 518400 IN NS d.root-servers.net.
. 518400 IN NS …Run Code Online (Sandbox Code Playgroud) 例如,我们有一个通过代理的 VPN TCP 传输连接。我想知道如何通过此 TCP 连接模拟 UDP?如何模仿其不可靠的性质?
我知道 UDP 是一种不可靠的协议,它可能会无序到达、无法完全到达等。
我还知道,当将 UDP 用于 traceroute 之类的东西时,到达路由器的 TTL=1 的数据包和到达目的地为非开放端口的终端主机的数据包会生成 ICMP 错误消息,这些消息会传输回发送方。
我的问题是 - 发件人是否有办法知道标准数据包是否被丢弃?我知道该协议是不可靠的,但是接收方在 UDP 协议中发回的任何类型的“确认”是否允许发送方知道丢弃的数据包?
这是基本 UDP 的一个直接协议问题,我不想知道我“能做什么”。我现在已经通读了一些东西,虽然我基本上 100% 确定答案是否定的,但你看不出来,我读了一些让我对此感到不安的东西。
如何使用 iperf3 设置 UDP 数据包大小?标志“-M”不适用于 iperf3。有替代方案吗?
我正在通过 iperf3 测量 tcp 和 udp 吞吐量。我在虚拟机中运行 iperf3,一台作为服务器,另一台作为客户端。VM 通过 10 Gbps 链路进行连接。结果表明tcp比udp获得更高的吞吐量。然而,正如我们所知,TCP 运行更多的算法和计算,并且还具有三向握手,那么为什么 udp 吞吐量小于 tcp?这与 tcp 和 udp 的缓冲区大小有关吗?下面是 tcp 和 udp 测量的结果。很明显,iperf 在特定时间内为 tcp 发送的数据比 udp 发送的数据多,但为什么呢?
TCP:8.88 Gbps
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 922 MBytes 7.73 Gbits/sec 1 3.04 MBytes
[ 4] 1.00-2.00 sec 1.04 GBytes 8.92 Gbits/sec 0 3.04 MBytes
[ 4] 2.00-3.00 sec 1.07 GBytes 9.15 Gbits/sec 0 3.04 MBytes
[ 4] 3.00-4.00 sec 1.05 GBytes 8.99 Gbits/sec 0 …Run Code Online (Sandbox Code Playgroud) 在过去的几周里,我收到了无数次 ddos 攻击。刚才我在运行iptraf的时候抓到了一个。通常,我服务器上使用的 99.9% 的数据包是 TCP 数据包,而不是 UDP。我看到使用了一些,但通常几乎没有。
现在,当攻击发生时,我注意到每秒有数千个传入的 UDP 数据包。tcpdump 也显示了这个:http : //pastebin.com/raw.php?i=QaybC8C1。
我运行 CENTOS 5.6,我只将它用于 nginx (80,443)、ssh (22)、ftp (21)。我不运行名称服务器、电子邮件或类似的东西。
我的问题是。我可以通过 iptables 阻止所有传入的 UDP 流量吗?这对 UDP ddos 攻击有效吗?如果我可以阻止所有 UDP 流量,这会在 linux 中导致任何问题吗?