搜索
bottom↓
回复: 20

普及一下互联网的NAT和P2P常识!

[复制链接]

出870入263汤圆

发表于 2014-8-27 23:15:04 | 显示全部楼层 |阅读模式
互联网架构基本如下图所示:

图中,内网设备A和内网设备B处于不同的局域网,因此它们之间不能直接通信,它们通过各自的路由器连接到广域网;路由器A和路由器B通常都有临时可用的公网IP,它们的通信界面直接与服务器接触。由于通过NAT实现内外网的穿透,因此服务器只能接触到路由器A和路由器B;在服务器看来,所有来自设备A和设备B的报文,都是由路由器发出的,因此服务器也只是应答报文给路由器而已(进而报文被路由器通过NAT机制转发给内网设备)。
P2P就是要使设备A和设备B之间直接通信,不用通过服务器传递报文。那如何实现呢?
首先,由于路由器A和路由器B都具备公网IP,它们之间是可以直接通信的。那么能否借助这个通道来实现设备A和设备B的数据传输呢?答案当然是肯定的,而且这正式目前的P2P唯一的传输通道!但受限于安全需求,路由器A直接发送数据包给路由器B,这个报文是会被路由器B丢弃的,反之亦然。这个过程就如同外网无法主动访问内网一样:只有设备先发出报文给服务器,这时路由器记录了设备到服务器的通路信息,之后才允许从服务器返回的数据报文转发给设备。
         于是,我们就要求服务器作为中介,给设备A介绍路由器B的IP;给设备B介绍路由器A的IP。此后设备A发出报文给路由器B,同时设备B发出报文给路由器A。那么,在路由器A这头,就记录了设备A到路由器B的通路;而路由器B就记录了设备B到路由器A的通路。经过这样几次尝试之后,路由器A和路由器B就会接受对方传来的报文了!从而设备A和设备B就打通了一个传输通路,而不再需要服务器转发了。
         现实中,路由器有很多中NAT类型,有:完全圆锥型、IP约束圆锥型、IP与Port共同约束圆锥型、对称点对点型。
完全圆锥型
这种路由器最容易搞定了,但是也最不安全。如果设备A向服务器发送过报文,那么服务器就知道路由器A的IP和源端口了,这记作一个tuple;从此之后,任何主机以任何源端口都可以向这个tuple发送报文了,当然包括路由器B!这些报文理所当然被转发给设备A。
IP约束圆锥型
这种路由器在完全圆锥型的基础上作了主机IP的限制。也就是,上面的情况下,只有服务器(以任何源端口)才可以向这个tuple发送报文。路由器B没屁。
IP与Port共同约束圆锥型
这种路由器在IP约束圆锥型的基础上又作了进一步限制,也就是主机IP和源端口都限制了。此时,服务器只有用之前设备发出报文时用作目标端口的值来作为源端口,才能向tuple发送报文。
对称点对点型
这中路由器是最最安全的,也是最难搞定的。上面的三种都是属于圆锥型的,而这个是对称型的。对称和圆锥的字面区别就能说明问题!我来详细说明一下吧。我们都知道,报文需要指定源IP和端口,目标IP和目标端口;我们把一对IP和Port叫做终结点(EndPoint);那么报文就有源终结点和目标终结点。如果设备以终结点A发送报文到外网的不同的终结点,路由器为它分配同一个tuple,这中路由器就是圆锥型;如果设备以终结点A发送到n个外部不同的终结点,路由器就为它分配n个不同的tuple,这就是对称型!说到这里,对称点对点型路由器不言自明了。

那么,如何设计一个能应用于任何类型路由器的P2P架构呢?
且待我梦醒后分解!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出870入263汤圆

 楼主| 发表于 2014-8-27 23:24:19 | 显示全部楼层
沙发自己抢!NAT和P2P是物联网时代技术员必须面对的知识,得知道。

出0入0汤圆

发表于 2014-8-27 23:28:46 | 显示全部楼层
求楼主头像视频名称

出0入0汤圆

发表于 2014-8-27 23:40:24 | 显示全部楼层
我刚好是这种  IP与Port共同约束圆锥型  怎么办啊,,服务器能记住 A 和B 的IP和端点,,,,但是用这个IP和端点只能和服务器通信,,,,A 和 B 用对方的IP和端点,,都没有搞头,,,
请教

出0入0汤圆

发表于 2014-8-28 00:02:10 | 显示全部楼层
对网路传输不是很了解的,有一点点晕

出0入4汤圆

发表于 2014-8-28 08:09:14 来自手机 | 显示全部楼层
没看懂,不了解

出0入0汤圆

发表于 2014-8-28 13:45:58 | 显示全部楼层
打洞技术

出0入0汤圆

发表于 2014-8-28 14:01:11 | 显示全部楼层
继续等待裸体女转圈圈

出870入263汤圆

 楼主| 发表于 2014-8-28 21:54:13 | 显示全部楼层
天哪!看我都说了些什么梦话

出870入263汤圆

 楼主| 发表于 2014-8-28 21:59:20 | 显示全部楼层
本帖最后由 armstrong 于 2014-8-28 22:03 编辑
hongfadg 发表于 2014-8-27 23:40
我刚好是这种  IP与Port共同约束圆锥型  怎么办啊,,服务器能记住 A 和B 的IP和端点,,,,但 ...


IP和Port共同约束圆锥型还是挺容易解决的。就是让路由器A和路由器B相互对打几次洞就行了!比如,路由器A给B发送,这时B不接受;接着路由器B又给A发送,这时路由器A是接受的,因为先前刚向B发送过;反复对打几次,这洞就打通了。

要特别注意的是:设备A和设备B的源终结点不能变动,必须与发送给服务器时所用的一致。目的是让这种路由器为其重用同一个tuple。

出0入0汤圆

发表于 2014-8-28 23:38:00 | 显示全部楼层
armstrong 发表于 2014-8-28 21:59
IP和Port共同约束圆锥型还是挺容易解决的。就是让路由器A和路由器B相互对打几次洞就行了!比如,路由器A ...

我试过也打不通不知道为什么,
路由器每次对外通信的端口都是变化的啊,,比如和服务器通信 用的是50001,,,,就算B知道A和IP 和端口,, B发给A时用的端口和发给服务器用的端口不一样,,端口是变化的,,,,由于第一次A是不会接收B发来的信息
所以就不知道B用的是什么端口,,,所以也不可能把信息返回给A

请问怎么解决这个问题呢,,谢谢。

出870入263汤圆

 楼主| 发表于 2014-8-30 18:19:20 | 显示全部楼层
你这个就是对称点对点型的,不是IP与Port共同约束圆锥型。

出0入0汤圆

发表于 2015-11-27 16:26:03 | 显示全部楼层
ipv6才是未来王道。。。

出0入0汤圆

发表于 2022-5-14 12:13:45 | 显示全部楼层
楼主位的讲解很好,我能明白。
我现在想做一个视频通话器,放在远地监视老家房内的情况。老家有装了上网路由器,也有WiFi。但没有电脑,家人也不会弄电脑。
我要在远地通过电脑或手机能看到老家的图像,听到对方的声音。最好对方也能听到我的声音。

我如何能发出网络连接到这个视频通话器呢? 还是只能由视频通话器发起?又如何发起?

另外,我怎样能知道我的路由器是哪种 NAT 方式?

出0入148汤圆

发表于 2022-5-14 15:38:10 来自手机 | 显示全部楼层
imliyucai 发表于 2022-5-14 12:13
楼主位的讲解很好,我能明白。
我现在想做一个视频通话器,放在远地监视老家房内的情况。老家有装了上网路 ...

(引用自14楼)

可以了解一下webrtc相关的技术,比较通用且成熟

出0入4汤圆

发表于 2022-5-16 10:56:43 | 显示全部楼层
打洞应该只有用UDP吧? 我的理解是TCP会建立链路, 路由器NAT会阻挡TCP的非链接数据包.

有个问题想问下: 如果服务在北京, 2个客户分别在广州,深圳. 如果两个客户打洞成功, 其链路会在北京那边绕圈吗? 还是会广州,深圳直连??

出0入224汤圆

发表于 2022-5-17 08:46:27 来自手机 | 显示全部楼层
qinxg 发表于 2022-5-16 10:56
打洞应该只有用UDP吧? 我的理解是TCP会建立链路, 路由器NAT会阻挡TCP的非链接数据包.

有个问题想问下: 如 ...

(引用自16楼)

绕圈就不算打洞了,打洞就是直连。

出0入148汤圆

发表于 2022-5-17 09:01:44 来自手机 | 显示全部楼层
qinxg 发表于 2022-5-16 10:56
打洞应该只有用UDP吧? 我的理解是TCP会建立链路, 路由器NAT会阻挡TCP的非链接数据包.

有个问题想问下: 如 ...

(引用自16楼)

一般是基于udp,应用层可以套dtls

打洞实际上就是从各种可能性中优先选择最好的方式,打洞不成功的话还是需要依赖服务器relay转发

出0入309汤圆

发表于 2022-5-17 09:22:56 | 显示全部楼层
imliyucai 发表于 2022-5-14 12:13
楼主位的讲解很好,我能明白。
我现在想做一个视频通话器,放在远地监视老家房内的情况。老家有装了上网路 ...
(引用自14楼)

听起来你是要自用,不是要做产品。
那直接买个像小蚁智能摄像机这种产品即可。网络服务全部都带,只要配个wifi就行。我猜你也可以在自己家搞一个ssid和密码一样的热点先配置好再发回老家。除了云录制要钱,看视频和双向通话都不要钱。

出0入0汤圆

发表于 2022-5-17 20:26:06 | 显示全部楼层
iamseer 发表于 2022-5-17 09:22
听起来你是要自用,不是要做产品。
那直接买个像小蚁智能摄像机这种产品即可。网络服务全部都带,只要配 ...
(引用自19楼)

谢谢。粗看了下,这个小蚁好像能满足我的需求。

出0入37汤圆

发表于 2022-5-18 11:50:38 | 显示全部楼层
imliyucai 发表于 2022-5-14 12:13
楼主位的讲解很好,我能明白。
我现在想做一个视频通话器,放在远地监视老家房内的情况。老家有装了上网路 ...
(引用自14楼)

给家里的路由器申请一个动态域名,可以通过域名服务器找到你家的路由,然后把你视频通话用到的端口映射给这个设备,就可以通过域名加端口的方式直接找到你家的摄像头。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 22:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表