穿透内网,连接动态ip,内网ip打洞-----p2p实现原理
转:http://blog.csdn.net/suhuaiqiang_janlay/article/details/60466333
本人找几篇讲得好的来整理一下。
(1)问题的由来:
(2)动态ip具体分析:
有一个私有网络192.168.0.2,client a是其中的一台计算机,这个网络的网关natA(一个nat设备)的外网ip是202.103.142.29(应该还有一个内网的ip地址,比如10.0.0.10)。如果client a中的某个进程(这个进程创建了一个socket,这个socket绑定1234端口)想访问外网主机129.208.12.38的2000端口,那么当数据包通过nat时会发生什么事情呢?
(192.168.0.2:1234->129.208.12.38:2000)
(202.103.142.29:62000->129.208.12.38:2000)。
其他的ip发送到这个端口的数据将被nat抛弃,这就是真正头痛的问题)这样client a就与server s1建立以了一个连接。
答案是net决定的,不同的net有不同的答案。
NAT设备的类型对于TCP穿越NAT,有着十分重要的影响,根据端口映射方式,NAT可分为如下4类,前3种NAT类型可统称为cone类型。
(1)全克隆( Full Cone) : NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。任何一个外部主机均可通过该映射发送IP包到该内部主机。
(2)限制性克隆(Restricted Cone) : NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。但是,只有当内部主机先给IP地址为X的外部主机发送IP包,该外部主机才能向该内部主机发送IP包。
(3)端口限制性克隆( Port Restricted Cone) :端口限制性克隆与限制性克隆类似,只是多了端口号的限制,即只有内部主机先向IP地址为X,端口号为P的外部主机发送1个IP包,该外部主机才能够把源端口号为P的IP包发送给该内部主机。
(4)对称式NAT ( Symmetric NAT)
:这种类型的NAT与上述3种类型的不同,在于当同一内部主机使用相同的端口与不同地址的外部主机进行通信时,
NAT对该内部主机的映射会有所不同。对称式NAT不保证所有会话中的私有地址和公开IP之间绑定的一致性。相反,它为每个新的会话分配一个新的端口号。
所以关键是第二和第三种net类型。
只有当内部主机先给IP地址为X的外部主机发送IP包,该外部主机才能向该内部主机发送IP包”
同时在该端口号上启动侦听(保证net类型3也能成功)
B尝试与A的经过NAT-A转换后的公网IP地址和端口进行connect(这就是所谓“打洞”)
(4)让内网主机做服务器

(5)花生壳是什么
数据库),是用不上这个软件的。
但是还有一种办法,如果你已经有一台有静态ip的服务器,在上面部署一个代理服务器(比如nginx),然后把这个动态的ip通知它就可以了。
穿透内网,连接动态ip,内网ip打洞-----p2p实现原理的更多相关文章
- 穿透内网,连接动态ip,内网ip打洞-----p2p实现原理(转)
源: 穿透内网,连接动态ip,内网ip打洞-----p2p实现原理
- Android根据内网外网连接情况配置服务器访问IP
新项目的app,可通过内网和外网的服务器ip进行请求访问,但是客户提供了专业终端,终端在wifi情况下走外网内网都可以,但关闭wifi则只能走4G专网,也就是只能走内网. 可前往我的小站查看:Andr ...
- 内网ip打洞-----p2p实现原理
网上找了非常多.代码大堆,原理讲清楚透彻的不多. 本人找几篇讲得好的来整理一下. 一片技术文章,最基本的讲清楚原理.假设再有完整的能执行的源码也可,关键是要把核心部分代码分析清楚. (1)问题的由来: ...
- (转)内网网站发布到外网-nat123动态公网IP动态域名解析
环境描述: 路由器分配的是动态公网IP,且有路由器登录管理权限,网站服务器部署在路由器内部网络.如何将内网网站发布到外网大众访问? 解决方案: 内网使用nat123动态域名解析,将域名实时固定解析到路 ...
- 没固定公网 IP 的公司内网实现动态域名解析( 阿里云万网解析 )
情景说明 前段时间应公司需求,需要将内网的服务映射到公网.由于公司使用的是类似家庭宽带的线路,没有固定的公网 IP 地址,所以决定使用域名来完成. 当时有几种方案: 1.花生壳:但是目前需要乱七八糟的 ...
- 公司内网静态IP,外网无线动态IP 同时上网,不必再切换网卡啦 route 命令给你搞定。
一: 公司内网:192.168.55.101 255.255.255.0 192.168.55.1 网关 外网:192.168.20.101 255.255.255.0 192.16 ...
- 内网服务器设置NAT123端口映射,方便外网连接;如何测试端口连通情况。
一.nat123设置端口映射. 1)首先去nat123官网注册账号. http://www.nat123.com/ 2)下载nat123客户端 http://www.nat123.com/Pages_ ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 云主机不能外网ssh连接,只能内网ssh连接的问题处理
某台服务器外网无法ssh,内网可以ssh连接,ping值延时比较大 安装iftop查看流量 yum install -y iftop iftop界面含义如下 第一行:带宽显示 中间部分:外部连接列表, ...
随机推荐
- Java与JS判断请求来是否来自移动端
Java public boolean JudgeIsMoblie(HttpServletRequest request) { boolean isMoblie = false; //String[] ...
- 2018牛客网暑期ACM多校训练营(第三场) H - Diff-prime Pairs - [欧拉筛法求素数]
题目链接:https://www.nowcoder.com/acm/contest/141/H 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...
- Python排列函数:sort、sorted
排序函数介绍:sort()和sorted()都属于Python list的排序方法 区别:sort()属于永久性排列,直接改变该list: sorted属于暂时性排列,会产生一个新的序列. #sort ...
- startuml 2.6注册
参考:http://bbs.chinapyg.com/thread-79022-1-1.html 各平台版本均适用,本文更改的为Mac版本. 1,打开对应 mac版本的安装包位置,在对应目录/App ...
- keepalived的log
vrrp_script chk_http_port { script "</dev/tcp/127.0.0.1/8088" interval 1 weight -2 } ke ...
- 7 jmeter之参数化
badboy里参数化(前面4 jmeter badboy脚本开发技术详解已讲过) jmeter里参数化-1 用户参数 1.打开badboy工具,点击红色按钮开始录制,在地址栏目中输入地址:www.so ...
- ssm返回jsonp数据格式
为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数 ...
- [py][mx]xadmin注册切换主题功能和网站名称修改
注册主题 这里将基础的设置放到users模块 users/adminx.py from xadmin import views class BaseSetting(object): enable_th ...
- (转)spring boot整合redis
一篇写的更清晰的文章,包括redis序列化:http://makaidong.com/ncjava/330749_5285125.html 1.项目目录结构 2.引入所需jar包 <!-- Sp ...
- Civil and Evil Engineer(普林姆)
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=198#problem/E 水题一道,题意就是让求一遍最小生成树与最大生成树,但我 ...