Sockets 如何将现有udp应用程序迁移到原始套接字

Sockets 如何将现有udp应用程序迁移到原始套接字,sockets,network-programming,udp,raw-sockets,Sockets,Network Programming,Udp,Raw Sockets,是否有从普通udp套接字(linux,C99/C++,使用了recvsyscall)迁移到原始套接字的教程 据 原始套接字比udp快得多 应用程序是客户端服务器。客户机是专有的,必须使用与udp服务器完全相同的procotol。但使用原始套接字时,服务器速度可能会快一点。我必须在服务器中实现udp的哪些部分?是否有“快速迁移”库 原始套接字允许您与较低级别的协议进行通信,如以太网、IP等。是的,降低级别可以给您带来一些优势,但您必须平衡这一点与您正在失去的内容 在本例中,您提到服务器是使用Udp

是否有从普通udp套接字(linux,C99/C++,使用了
recv
syscall)迁移到原始套接字的教程

据 原始套接字比udp快得多


应用程序是客户端服务器。客户机是专有的,必须使用与udp服务器完全相同的procotol。但使用原始套接字时,服务器速度可能会快一点。我必须在服务器中实现udp的哪些部分?是否有“快速迁移”库

原始套接字允许您与较低级别的协议进行通信,如以太网、IP等。是的,降低级别可以给您带来一些优势,但您必须平衡这一点与您正在失去的内容

在本例中,您提到服务器是使用Udp协议编写的,因此在有线网络上,通信必须是Udp。现在,如果要使用原始套接字,则必须确保发送封装在Udp数据包中的应用程序数据。您还需要编写代码以确保遵守Udp协议和状态机,以便在服务器上,您的客户端显示为另一个Udp客户端。完成所有这些都需要编写大量代码,并且有一些缺点,如增加维护、增加使其正常工作的成本等

我没有完全阅读你上面链接的论文,但要问你自己的问题是,你能得到研究论文中给出的收益,并在你的场景中复制它们吗

在我看来,你应该首先试着弄清楚为什么你的客户这么慢。你的要求是什么?关于什么是好的、快速的客户,您有什么标准吗?如果我是你,我会首先测量当前的实现,记住一些对场景有用的指标,例如,传输的字节/秒等。然后我会分析客户机,看看它在哪里花费了太多的时间,并尝试看看我是否可以减少开销,使其更快


总而言之,在进入堆栈之前,在堆栈顶部(即在应用程序中)寻找节省。如果你的应用程序写得不好,那么无论你写得多低,你都看不到预期的性能提升。

原始套接字允许你与较低级别的协议进行通信,如以太网、IP等。是的,降低会给你带来一些好处,但你必须在这一点与你失去的东西之间取得平衡

在本例中,您提到服务器是使用Udp协议编写的,因此在有线网络上,通信必须是Udp。现在,如果要使用原始套接字,则必须确保发送封装在Udp数据包中的应用程序数据。您还需要编写代码以确保遵守Udp协议和状态机,以便在服务器上,您的客户端显示为另一个Udp客户端。完成所有这些都需要编写大量代码,并且有一些缺点,如增加维护、增加使其正常工作的成本等

我没有完全阅读你上面链接的论文,但要问你自己的问题是,你能得到研究论文中给出的收益,并在你的场景中复制它们吗

在我看来,你应该首先试着弄清楚为什么你的客户这么慢。你的要求是什么?关于什么是好的、快速的客户,您有什么标准吗?如果我是你,我会首先测量当前的实现,记住一些对场景有用的指标,例如,传输的字节/秒等。然后我会分析客户机,看看它在哪里花费了太多的时间,并尝试看看我是否可以减少开销,使其更快


总而言之,在进入堆栈之前,在堆栈顶部(即在应用程序中)寻找节省。如果你的应用写得不好,那么无论你写得多低,你都看不到预期的性能提升。

此外,udp工作的哪一部分将受益于rawsockets-发送或接收?速度性能来自IP层的下降,即路由、过滤、端口管理等。RDMAoE是一个好的方向,这就是以太网上的RDMA,请与Mellanox.Steve-o联系,它是软件(RDMAoE)还是硬件?它是否要求两台机器位于同一子网(它们之间只有交换机)?此外,udp工作的哪一部分将受益于rawsockets-发送或接收?速度性能来自于丢弃IP层,即路由、过滤、端口管理等。一个好的方向是RDMAoE,即以太网上的RDMA,跟Mellanox.Steve-o谈谈,它是软件(RDMAoE)还是硬件?它是否要求两台机器都在同一个子网中(它们之间只有交换机)?我的appl现在是基准代码,它正在执行recvfrom/sendto。因此,在客户机/服务器中没有什么可以限制的。操作系统udp/ip堆栈正在限制速率。是的,这是乒乓球测试,真正的应用程序工作在同一风格。客户端和服务器都可以在原始套接字中重写。my appl目前是基准代码,它正在执行recvfrom/sendto。因此,在客户机/服务器中没有什么可以限制的。操作系统udp/ip堆栈正在限制速率。是的,这是乒乓球测试,真正的应用程序工作在同一风格。客户机和服务器都可以在原始套接字中重写。