社区
C++ 语言
帖子详情
P2P為什麼要連接對方的局域網本地IP地址??
tclcf
2011-06-18 10:29:05
P2P為什麼要連接對方的局域網本地IP地址??
我上次測試了個沒有連接對方局域網本地IP,單純互連接廣宇IP和客戶UDP的外網IP,沒有成功。還是說只要再多連接個局域網本地IP就能P2P成功了?
...全文
87
5
打赏
收藏
P2P為什麼要連接對方的局域網本地IP地址??
P2P為什麼要連接對方的局域網本地IP地址?? 我上次測試了個沒有連接對方局域網本地IP,單純互連接廣宇IP和客戶UDP的外網IP,沒有成功。還是說只要再多連接個局域網本地IP就能P2P成功了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
辰岡墨竹
2011-06-21
打赏
举报
回复
[Quote=引用 3 楼 tclcf 的回复:]
對方的IP和端口是對方UDP連接過來後,我獲取在數據報裏的對方IP和端口,就是說對方本地端口為16478但在數據報裏的端口則是其路由器真實發送的端口,所以我獲得的是其真實映射在路由器的IP端口。但和有的網吧的電腦可以P2P連接成功的,有的卻不行。
[/Quote]
你注意看那个Wikipedia,NAT有4种。对于完全圆锥型的,UDP打洞是可以的。但是对于其他类型的,路由器不会一直保持UDP的打开和映射关系,下次发送肯呢会动态选择其它的端口,所以肯定会失败。
辰岡墨竹
2011-06-19
打赏
举报
回复
你可以去看看
http://zh.wikipedia.org/wiki/%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2
一般来说如果路由器支持UPNP,那么是最好选择。不过由于NAT有很多种实现方式,有的时候真的无法建立直接连接,只能依靠其它机器来中转。
辰岡墨竹
2011-06-19
打赏
举报
回复
那肯定不行,因为中间路由器有NAT机制。对方机器开的端口和路由器上开放的端口很可能不一致。
比如内网里有两台机器都开放80端口,那么在NAT的路由器上,对应的端口有可能是9001和9002。NAT会拆开IP封包按照自己的规则去修改端口号和网络地址。
要想P2P成功,需要NAT穿透机制,比如UDP打洞或者UPNP什么的……
飞天御剑流
2011-06-19
打赏
举报
回复
[Quote=引用 3 楼 tclcf 的回复:]
引用 1 楼 bokutake 的回复:
那肯定不行,因为中间路由器有NAT机制。对方机器开的端口和路由器上开放的端口很可能不一致。
比如内网里有两台机器都开放80端口,那么在NAT的路由器上,对应的端口有可能是9001和9002。NAT会拆开IP封包按照自己的规则去修改端口号和网络地址。
要想P2P成功,需要NAT穿透机制,比如UDP打洞或者UPNP什么的……
對方的IP和端口是對方……
[/Quote]
在UPNP出现以前,NAT是只转换报头的IP和端口,不会转换包内的ip和端口的。但有些应用发送和接收数据不使用同一个端口,接收数据使用的ip和端口会发送给对方供对方发送数据,而且这个端口通常是动态的,不是固定的,动态端口意味着无法直接使用端口影射(除非你每打开一次应用就手工重新修改一次这个端口影射表,当然是不切实际的),这个ip和端口是放在ip包内的,因此对于不支持UPNP的NAT,对方只会收到己方的内网IP和端口,当然连接不成功。
UPNP就是为了解决这个问题而出现的技术。UPNP不仅转换报头的ip和端口,同时也转换包内的ip和端口,还有更重要的一点,会为此动态端口自动建立端口影射,这样就能保证连接成功了。
tclcf
2011-06-19
打赏
举报
回复
[Quote=引用 1 楼 bokutake 的回复:]
那肯定不行,因为中间路由器有NAT机制。对方机器开的端口和路由器上开放的端口很可能不一致。
比如内网里有两台机器都开放80端口,那么在NAT的路由器上,对应的端口有可能是9001和9002。NAT会拆开IP封包按照自己的规则去修改端口号和网络地址。
要想P2P成功,需要NAT穿透机制,比如UDP打洞或者UPNP什么的……
[/Quote]
對方的IP和端口是對方UDP連接過來後,我獲取在數據報裏的對方IP和端口,就是說對方本地端口為16478但在數據報裏的端口則是其路由器真實發送的端口,所以我獲得的是其真實映射在路由器的IP端口。但和有的網吧的電腦可以P2P連接成功的,有的卻不行。
java源码包---java 源码 大量 实例
1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...
java源码包2
1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...
P2P
原理与实现(含NAT穿透)
本套课程主要讲解
P2P
开发,因为
P2P
开发无论是就业还是创业都是一个很好的方向,只是因为
P2P
开发中NAT穿透掌握的人很少,所以才导致真正掌握
P2P
开发技术的人很少。
p2p
开发中比较有价值的技术点: 1 NAT穿透 2 分布式...
两台设备(手动)设置相同的
局域
网
IP地址
会怎么样?
两台设备(手动)设置相同的
局域
网
IP地址
1. 引入 现在的家庭路由器都配备了 「NAT 网络地址转换技术」,通过将私有(专用)网络地址转换为公有地址,从而对外隐藏「内部管理」的 IP 地址,有效地解决了
IP地址
不足的...
如何查看
局域
网内所有IP
要如何查看
局域
网内正在使用的电脑的IP一共分以下几个步骤: 第一步:点击电脑左下角的“开始”,然后再点击“运行...”。 第二步:在运行窗口里填入“cmd”,然后点击确定。 第三步:在cmd命令窗口输入“ipconfig...
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章