linux下udp的转发问题

时间:2021-02-22 13:40:42
我在linux下开发了一个代理程序(接收到客户端发的udp包,然后抓发到指定目的地)

功能上没有问题,现在的现象是:
1. 如果只是转发到相同网络环境(比如电信到电信),效率正常, 如果跨网转发(比如从电信到网通),则转发效率低
2. 用相同功能的程序(比如l2tp服务器),跨网转发的效率比我的代理程序高很多

请高手们给点建议:
比如 udp转发设置 什么选项可以提高转发效率?   或者网卡的什么设置可以提高转发效率?  或者控制转发的数据包大小可以提高转发效率?

我能想到的都试过,还是没有效果,现在没有头绪了。

69 个解决方案

#1


你是udp报文的大小都是多大?

#2


你比如的那个第三条  你也试过了?
你可以去研究一下你说可以的软件程序 看看人家是如何处理的

#3


嗯,在看l2tp的代码,不过比较多,还没有找到关键的地方

#4


这几天忙着定位其它问题了,现在继续跟踪这个问题。

#5


效率是什么意思,丢包率高的意思么?

#6


效率是什么意思,丢包率高的意思么?

#7


l2tp可能是在内核里面转发,你应用程序转发效率肯定比不上内核转发效率高哦!

#8


该回复于2011-11-16 10:10:45被版主删除

#9


我要学习了....

#10


udp报文多大??

#11


,,....

#12


谢谢分享,学习

#13


谢谢分享,学习了

#14


学习中!

#15


谢谢!

#16


挺好的

#17


是的,要认真学习了

#18


学习。

#19


谢谢分享,学习了!!!

#20


你的程序能穿越NAT吗?怎么实现的?学习

#21


跨网 应该涉及BGP吧,不是那么简单的事情

#22


非常不错。

#23


mark

#24


好论坛,学到了很多东西

#25


关注下!

#26


我觉得应该是你说的那个L2TP服务器的位置问题吧?本身跨ISP,效率就低。因为两个ISP之间的带宽有限。

你的代理服务器只有网通或者只有电信接口吧?

#27


不会吧,报文如大,分批出。

#28


该回复于2011-08-12 13:49:43被版主删除

#29


学习了

#30


学习了

#31


我也觉得1!!!

#32


跨网什么效率都比网内低吧

#33


好论坛,学到了很多东西

#34


该回复于2011-08-15 10:28:31被版主删除

#35


该回复于2011-08-15 10:29:37被版主删除

#36


该回复于2011-08-15 10:29:37被版主删除

#37


学习中。!~

#38


在驱动层实现呗。

#39


这个问题有点深度!

#40


Mark学习

#41


不了解哦

#42


我是一名网络工程师  如果做网管就还要懂linux 这种服务器系统的管理应用 比如涉及安全方面的东西  需要学很深吗  难学吗   如果没有c java 等的编程基础

#43


该回复于2011-08-15 11:55:36被版主删除

#44


占楼学习

#45


标记下!!学些了!!!

#46


谢谢分享很喜欢

#47


谢谢分享很喜欢

#48


除小包发送外还有别的好建议吗?

#49


以我的经验,要从以下方面着手。

1.SOCKET系统缓冲,这个很重要,因为,哪果缓冲小了的话,可能发过来的包,还没有接收就被丢掉。

2.TTL设置,这个也很重要,因为,包的TTL不同,决定了你转发的路径。

3.就是人为的错,转发上面,尽量IO操作不能被阻塞,稍的耗时的操作另起线程。因为,稍有抖动你的数据就会被复盖或丢掉。

4.socket选项,有些选项可能需要更改,比如质量,延迟,吞吐量。这个可以通过质量选项来设置


其中,第三点难查,其他的,修改后会有明显改善。

应该对你有帮助。

另外,我发个广告。请留意我的UDX协议,
www.goodudx.com.

#50


谢谢分享,学习了!!!

#1


你是udp报文的大小都是多大?

#2


你比如的那个第三条  你也试过了?
你可以去研究一下你说可以的软件程序 看看人家是如何处理的

#3


嗯,在看l2tp的代码,不过比较多,还没有找到关键的地方

#4


这几天忙着定位其它问题了,现在继续跟踪这个问题。

#5


效率是什么意思,丢包率高的意思么?

#6


效率是什么意思,丢包率高的意思么?

#7


l2tp可能是在内核里面转发,你应用程序转发效率肯定比不上内核转发效率高哦!

#8


该回复于2011-11-16 10:10:45被版主删除

#9


我要学习了....

#10


udp报文多大??

#11


,,....

#12


谢谢分享,学习

#13


谢谢分享,学习了

#14


学习中!

#15


谢谢!

#16


挺好的

#17


是的,要认真学习了

#18


学习。

#19


谢谢分享,学习了!!!

#20


你的程序能穿越NAT吗?怎么实现的?学习

#21


跨网 应该涉及BGP吧,不是那么简单的事情

#22


非常不错。

#23


mark

#24


好论坛,学到了很多东西

#25


关注下!

#26


我觉得应该是你说的那个L2TP服务器的位置问题吧?本身跨ISP,效率就低。因为两个ISP之间的带宽有限。

你的代理服务器只有网通或者只有电信接口吧?

#27


不会吧,报文如大,分批出。

#28


该回复于2011-08-12 13:49:43被版主删除

#29


学习了

#30


学习了

#31


我也觉得1!!!

#32


跨网什么效率都比网内低吧

#33


好论坛,学到了很多东西

#34


该回复于2011-08-15 10:28:31被版主删除

#35


该回复于2011-08-15 10:29:37被版主删除

#36


该回复于2011-08-15 10:29:37被版主删除

#37


学习中。!~

#38


在驱动层实现呗。

#39


这个问题有点深度!

#40


Mark学习

#41


不了解哦

#42


我是一名网络工程师  如果做网管就还要懂linux 这种服务器系统的管理应用 比如涉及安全方面的东西  需要学很深吗  难学吗   如果没有c java 等的编程基础

#43


该回复于2011-08-15 11:55:36被版主删除

#44


占楼学习

#45


标记下!!学些了!!!

#46


谢谢分享很喜欢

#47


谢谢分享很喜欢

#48


除小包发送外还有别的好建议吗?

#49


以我的经验,要从以下方面着手。

1.SOCKET系统缓冲,这个很重要,因为,哪果缓冲小了的话,可能发过来的包,还没有接收就被丢掉。

2.TTL设置,这个也很重要,因为,包的TTL不同,决定了你转发的路径。

3.就是人为的错,转发上面,尽量IO操作不能被阻塞,稍的耗时的操作另起线程。因为,稍有抖动你的数据就会被复盖或丢掉。

4.socket选项,有些选项可能需要更改,比如质量,延迟,吞吐量。这个可以通过质量选项来设置


其中,第三点难查,其他的,修改后会有明显改善。

应该对你有帮助。

另外,我发个广告。请留意我的UDX协议,
www.goodudx.com.

#50


谢谢分享,学习了!!!