udp包通过路由器

来源:百度知道 编辑:UC知道 时间:2024/06/17 21:39:48
一个ADSL猫加一8口路由器,,没有设置端口映射
QQ的udp数据包可以正常发送到我的电脑
但是我自己发出的udp包却无法返回
(说明:我是向WAN口的公网IP发送udp数据包,,
当将我的电脑设置成DMZ主机是可以收到发出去的包)
究竟我发的udp包同QQ收到的udp包有什么不同呢?
为什么它的可以穿过路由器,而我的不能呢?
要如何做才能使我的也能??
楼下的大哥,,UDP包里面好像是没有MAC信息的,,我虽然不太懂,,你也不用忽悠我吧
http://www.networkdictionary.com/chinese/protocols/udp.php

把目的MAC地址改成你的PC的MAC地址

呵呵,不好意思,没看仔细。

我是这样理解的:

QQ或者其他应用程序发送的UDP包是给外部服务器的,路由器在收到由内向外的UDP包后,对UDP包做适当的调整,然后为其建立端口转发,外部服务器回复UDP包(目的IP是路由器的),根据刚刚建立的端口转发规则,把目的IP改成你的PC的IP,然后转发给你的PC。

再看你单独发送的UDP包,路由器收到后可能会建立端口转发(我说的是可能,因为还有一种可能,路由器为安全考虑会不为指向自身的连接建立端口转发),但是这条端口转发规则根本不会被使用,因为路由器没有义务响应这个UDP包,收到这个UDP包之后就丢弃了,不会有任何回复,也就不会转发给你的PC。

换种说法,PC收到通过路由器的UDP包有两个必备条件:1是有UDP包从外网发到路由器;2是路由器里存在相应的转发规则。你发的UDP包可能建立了第2个条件,但是一直都不具备第1个条件,因为你的UDP包是从内网发出来(它是从内网发出的,目的地址就是路由器,路由器把它交给自己就完成任务了,如果穿透然后到你的PC反而不对了;而QQ服务器答复的UDP是从外网发出的,路由器有责任根据转发规则把这个包发到内网)。

设置成DMZ可以收到你发出的UDP包也就很容易理解,那是因为路由器在收到这个UDP包之后,检查到设置了DMZ,于是发给路由器的不管任何端口上的数据包都要发给你的PC,所以路由器先把这个UDP包发给你的PC,然后在自己的系统内丢弃这个包。

当然,你在路由器里手动添加一条端口映射规则,也可以收到这个UDP包,需要映射的端口号就是你的UDP包使用的端口号。