nat穿透

基于P2P技术实现内网到内网UDP穿透--转载

你说的曾经没有我的故事 提交于 2020-04-06 20:19:11
P2P: 只要是数据量很大,而一般利用中转服务器又需要一定规模投入的应用,我们都可以考虑用 P2P 技术。 好处: 1. 降低成本与投入。 2. 提高传输性能。 一般情况下,我们做网络程序,首先都会考虑用 TCP 的方式来实现,用 TCP 的方式主要的好处有: 1. 编写程序简单,大部分是采用 C-S 模型,也就是客户端对服务器。 2.TCP 的特性保证了数据传输的可靠性,只要适当定制好协议,基本不会有网络丢包与边界的问题。 但同时, TCP 也有缺点,就是通信效率较低。 做好 P2P 应用至少需要解决两个问题: 1. 实现内网之间机器的网络通信。 2. 需要 解决 UDP 出现的数据传输不稳定 问题。 内网穿透 假设一台在 NAT211.133.* 后的 192.168.1.77:8000 要向 NAT211.134.* 后的 192.168.1.88:9000 发送数据,假设你向 211.134.* 这个 IP 地址的 9000 端口直接发送数据包,则数据包在到达 NAT211.134.* 之后,会被当做无效非法的数据包被丢弃, NAT 在此时相当于一个防火墙 , 会对没有建立起有效 SESSION 的数据包进行拒绝转递。 当然,你也不能直接用内网地址 192.168.1.88 进行发送数据包,这就好比你在广州要打电话到上海的某个地方,如果你不加区号

NAT深入浅出-05-灵魂之问

霸气de小男生 提交于 2020-04-06 05:04:39
先定义接口慢慢写。 引用 对比Cone NAT 和 Symmetric NAT,说明STUN为何不适用于对称型NAT的穿透( https://blog.csdn.net/Rookie_Manito/article/details/85260943 ) 向以上作者致敬 3. 灵魂之问 1. 什么叫打洞,打洞的本质是什么? 要回答这个问题,首先要知道什么是NAT,我们说的NAT通常指路由器将LAN口上的内网地址转换成WAN口上的公网地址。 然而这种单工的转换,对于一般协议是不够的,类似于TCP通常是需要ack的,所以路由器还需要WAN口公网地址转到LAN口内网地址上,这当然将公网地址随便的转换成一个内网地址。 所以我们在防火墙上建立一个映射表,即内网地址与公网地址的映射。而形成这个映射的过程,我们称为"打洞" 2. 圆锥型nat和对称型nat的本质区别 圆锥形: 一旦在路由器上建立内网ip:port与外网ip:port的映射列表,在此列表生成时间内,都会一直采用。即相同的内网ip:port访问任何外网地址都是同样的外网ip:port。 对称型: 相同的内网ip:port在访问不同的外网地址都是不同的外网ip:port。 3. 对称型nat为什么不能P2P穿透 来源: oschina 链接: https://my.oschina.net/lianghao0/blog/3215768

NAT深入浅出-02-NAT的分类(经典STUN分类和RFC5389后续分类)

旧城冷巷雨未停 提交于 2020-04-06 03:51:02
ps: 如果对你有帮助,请点赞,谢谢! 引用: NAT的几种类型( https://blog.csdn.net/phoenix06/article/details/70139756 ) 对比Cone NAT 和 Symmetric NAT,说明STUN为何不适用于对称型NAT的穿透( https://blog.csdn.net/Rookie_Manito/article/details/85260943) 基于STUN协议的NAT穿越技术的研究与应用_郑浩( http://cdmd.cnki.com.cn/Article/CDMD-10497-1019832865.htm ) AR530 V200R005C60 配置指南-NAT配置( https://support.huawei.com/enterprise/zh/doc/EDOC1000061797?section=j008 ) 华为路由器是否支持STUN(RFC3489 )中定义的各种类型的NAT?( https://forum.huawei.com/enterprise/zh/thread-294915-1-1.html ) 向以上大佬致敬! 1. 经典STUN分类 RFC3261定义的分类,但是自从 RFC3489 发布后,经典 STUN 的判断 NAT 类型的分类算法被发现是不完美的,许多 NAT 不完全符合

STUN, TURN, ICE介绍

那年仲夏 提交于 2020-02-28 21:00:41
STUN STUN协议为终端提供一种方式能够获知自己经过NAT映射后的地址,从而替代位于应用层中的私网地址,达到NAT穿透的目的。STUN协议是典型的Client-Server协议,各种具体应用通过嵌入STUN客户端与STUN Server端通讯来完成交互。 在典型的运用STUN进行NAT穿透的场景中,STUN客户端首先向位于公网上的STUN服务器 发送Binding Request消息,STUN服务器接收到请求消息后识别出经过NAT转换后的公网地址60.1.1.1:12345,将其附加在Binding Response消息中返回给客户端。客户端得到这个地址 后用它替换SDP中的私网地址与终端B完成媒体协商。使用STUN进行NAT穿透对应用的要 求是必须使用同样的端口与STUN服务器交互和进行应用层通讯,比如当希望使用端口 37000进行RTP包的NAT穿透时,必须同样使用37000端口与STUN服务器通讯,否则从STUN 服务器获得的NAT映射后的地址一般与实际地址时不一样的。另一个要求是STUN客户端与 服务器端的通讯和应用使用获得的NAT映射地址进行应用层通讯在时间上必须有连贯性, 这源于NAT设备建立的绑定有生存时间,当原绑定消亡后,NAT设备为同一个私网地址建 立的新绑定往往不同,因此转换后的公网地址是不同的。 STUN方案的特性如下表: 特性 说明 实现复杂度 实现简单

webrtc服务器搭建

只谈情不闲聊 提交于 2020-01-28 09:55:35
webRTC服务器搭建 目前主流的ip方式是 ip4 ,地址是有限的,会出现很多内网,通过内网解决ip地址不可分的问题。很多客户端都处在 192.168.1.xx 这种内网。两个客户端之间想要交互,就必须进行内网穿透,进行NAT转换。想要完成NAT 转换,必须通过服务器,才能实现 p2p 通信。 服务器介绍: turn 服务器作用:寻找两个客户端之间最短的网络路径,以便建立p2p通信。 webrtc默认支持 turn服务器 ,只需要搭建一个 turn 服务。只需要通过 webrtc 告诉turn服务地址就可以。对外提供服务,端口是 3478 socket 服务器作用:sdp交换,icecandidate交换,信息交换及业务逻辑。 端口自己定义, 3000 实际项目中,是通过 ngix 进行服务分发。 服务器搭建: 相关介绍: turn服务可以直接在官网获取, ngix服务: socket服务需要自己来写。 socket服务有两个版本,java和nodejs版本 Webrtc服务器搭建后台项目地址 java项目 NodeJs项目 以下所有的【注意:】皆为本人添加的备注。 本搭建是基于centos 7.6 64位系统,系统恢复原始状态,重新装系统,确保人人都能搭建成功** 如果系统安装了基础软件 如git gcc++ 可以跳该步骤 yum update yum install git

比特币源码分析--端口映射

浪尽此生 提交于 2020-01-22 16:05:58
上一篇文章分析了比特币P2P网络中,一个节点是如何发现并连接到相邻节点的。在P2P网络中,一个节点既是客户又是服务器,它还要接受其他节点的连接,为网络中其他节点提供服务。这篇文章着重分析一下比特币P2P网络中是如何通过upnp来实现端口映射的。 1 从腾讯的一道面试题说起 笔者所在团队的总监在面试的时候必然要问面试者这样一个问题: 有两台手机同时连到了一个WIFI上,然后它们都访问了外网中某个服务器,那么网络是如何做到区分出这两台设备,把服务器的应答数据分发到合适的手机上呢? 如果在毫无准备的情况下来回答这个问题,自己还真是答不出来。 再想象一个场景:假设我们自己写了个小的服务器程序,然后在家里的电脑上运行,此时你想让另一个同事连接你的服务器,来验证你的服务器程序是不是能正确运行,但是明显你的网络和同事家的网络是两个不同的局域网,所以除非你去同事家或者让同事提上电脑到你家,否则无法连通。那么有什么办法做到让同事在自己家里就能点对点连上你的服务来调试么? 2 NAT和NAT穿透 上一节提到的两个问题,实际上都和NAT有关。要弄清楚上一节的问题,需要先了解NAT,所以这里先来补点网络课,了解一下NAT以及NAT穿透。 2.1 NAT 2.1.1 NAT是什么 NAT是个什么鬼?它的全称是Network Address Translation,翻译过来就是网络地址转换

Socket——NAT穿透解决方案:UDP打洞

守給你的承諾、 提交于 2020-01-22 16:03:25
目标 路由穿透,实现广域网P2P通讯。 4种典型NAT类型 按照NAT设备在进行地址映射时行为的不同,NAT可以分为以下四种: Full Cone Restricted Cone Port Restricted Cone Symmentric 目前主要的NAT类型有如下几种: 1)Full-cone NAT, also known as one-to-one NAT 一旦一个内网地址 (iAddr:iPort) 被映射到一个外部地址 (eAddr:ePort), 来自 iAddr:iPort 的任何数据包将通过 eAddr:ePort 发送. 任何外部主机能够通过eAddr:ePort这个地址发送数据包到iAddr:iPort. 2)Address-restricted-cone NAT 一旦一个内网地址 (iAddr:iPort) 被映射到一个外部地址 (eAddr:ePort), 来自 iAddr:iPort 的任何数据包将通过 eAddr:ePort 发送. 仅只有接收到主机(iAddr:iPort)通过eAddr:ePort发送的数据包的外部主机通过该主机的任何端口发送到eAddr:ePort的数据包才能够被正确的转发到iAddr:iPort.也就是说主机有关端口无关. 3)Port-restricted cone NAT 类似于address restricted

移动网络优化

感情迁移 提交于 2019-12-18 03:38:36
NAT IPv4地址只有32位,最多只能提供大致42.9亿个唯一IP地址,当设备越来越多时,IP地址变得越来越稀缺,不能为每个设备都分配一个IP地址。于是,作为NAT规范就出现了。NAT(Network Address Translation,网络地址转换)是1994年提出的,其当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。每个NAT设备负责维护一个包含本地IP、端口和外网IP、端口的映射表。所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。其大致过程如下: NAT的实现方式有如下三种,即: 静态转换(Static NAT):将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址; 动态转换(Dynamic NAT):将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址,当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式; 端口多路复用(Port NAT):改变外出数据包的源端口并进行端口转换,即端口地址转换

初窥IM通信协议

匿名 (未验证) 提交于 2019-12-02 22:56:40
QQ就是使用UDP协议进行发送和接收消息的。当你的机器安装了OICQ以后,实际上,你既是服务端(Server),又是客户端(Client)。当你登录OICQ时,你的OICQ作为Client连接到腾讯公司的主服务器上,当你看谁在线时,你的OICQ又一次作为Client从QQ Server上读取在线网友名单。当你和你的OICQ伙伴进行聊天时,如果你和对方的连接比较稳定,你和他的聊天内容都是以UDP的形式,在计算机之间传 送。如果你和对方的连接不是很稳定,QQ服务器将为你们的聊天内容进行中转。其他的即时通信软件原理与此大同小异。 首先,用户A输入自己的用户名和密码登录即时通讯服务器,服务器通过读取用户数据库来验证用户身份,如果用户名、密码都正确,就登记用户A的IP地址、IM客户端软件的版本号及使用的TCP/UDP端口号, 然后返回用户A登录成功的标志,此时用户A在 IM系统中的状态为在线(Online Presence)。 其次,根据用户A存储在IM服务器上的好友列表 (Buddy List),服务器将用户A在线的相关信息发送到也同时在线的即时通讯好友的PC机,这些信息包括在线状态、IP地址、 IM客户端使用的TCP端口(Port)号等,即时通讯好友PC机上的即时通讯软件收到此信息后将在PC桌面上弹出一个小窗口予以提示。 第三步,即时通讯服务器把用户A存储在服务器上的好友列

Iptables防火墙规则使用梳理

匿名 (未验证) 提交于 2019-12-02 21:53:52
Iptables防火墙规则使用梳理 iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。在日常Linux运维工作中,经常会设置iptables防火墙规则,用来加固服务安全。以下对iptables的规则使用做了总结性梳理: iptables首先需要了解的: 1) 规则概念 规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。 当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept),拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作是添加,修改和删除等规则。 其中: 匹配(match):符合指定的条件,比如指定的 IP 地址和端口。 丢弃(drop):当一个包到达时,简单地丢弃,不做其它任何处理。 接受(accept):和丢弃相反,接受这个包,让这个包通过。 拒绝(reject):和丢弃相似,但它还会向发送这个包的源主机发送错误消息。这个错误消息可以指定