NAT路由打洞机制

  首先要注意,路由器有一个保护机制,就是不会无缘无故的接受陌生的IP发送过来的SYN包

  NAT打洞机制:

  1. 当前客户端A想和客户端B建立连接,服务器开了两个端口,一个是主连接端口,一个是辅助连接端口

  2. 首先,A,B与主连接端口建立连接。这个时候A要和B建立连接,首先A要和协助端口建立连接,然后在这个端口启动监听

  3. 然后服务器主连接将A经过NAT-A转换的公网IP和端口号发送给B,B收到之后首先和协助端口建立连接,发送一些数据之后断开,目的是让服务器知道B经过NAT-B转换后的公网IP

  4. 然后B这个时候B已经知道了A的公网IP,然后尝试和A建立连接(如果不是第一次的话,就说明B向A打洞之前已经成功了),但是A这个时候是第一次接收到B发送的SYN包,由于路由器的保护机制,会丢掉这个包,但是会记录B的IP地址和端口号

  5. 做完这些之后,B向服务器主连接端口发送信息“我已经准备好了”,然后服务器端将NAT-B的IP和端口号发送给A,因为之前A已经接受过B的一个SYN包了,所以这次是允许建立的,然后B到A的洞就已经打好了

  6. 关于A到B的洞,这个时候A直接向B发送数据即可,因为第三步的时候,B就已经收到过A的IP和端口号了,所以再收到A发送过来的连接请求的时候,会认为是合法的

TCP打洞机制和NAT类似,但是UDP稍微有些不同,TCP规定一个端口号只能绑定一个套接字,而UDP允许一个端口号可以绑定多个套接字,所以UDP不需要启动额外的端口号

 

原文地址:https://www.cnblogs.com/letlifestop/p/11702782.html

时间: 2024-10-11 00:39:43

NAT路由打洞机制的相关文章

Linux進取之旅2: 一个最基本的 LVS负载均衡架构及配置(NAT路由方式)

平台及环境: LVS1:    srv1.training.cc                       private_IP: 172.25.31.20/24    pub_IP :10.0.0.20/24    OS=rhel6.5 private_Virtual IP: 172.25.31.99/32       pub_Virtual IP:10.0.0.99/32 realserver1 :    srv2.training.cc             private_IP:17

Linux启用nat路由

此配置为精简配置,若要基于安全考虑,请详细设置iptables的策略 eth0 为外网接口,eth1 为内网接口 intranet --> eth1 --> nat --> eth0 -->internet vim /etc/sysctl.conf     net.ipv4.ip_forward=1 sysctl -p iptables -F iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t filte

MVC特性路由的提供机制

回顾:传统路由是如何提供的? 我们知道最终匹配的路由数据是保存在RouteData中的,而RouteData通常又是封装在RequestContext中的,他们是在哪里被创建的呢?没错,回到了UrlRoutingModule,我们知道UrlRoutingModule通过注册HttpApplication的PostResolveRequestCache方法来分发IHttpHandler决定ASP.NET请求最终交给哪个IHttpHandler去处理的.其实在这之前,首先会通过当前请求的HttpCo

【转】NAT路由器打洞原理

什么是打洞,为什么要打洞 由于Internet的快速发展 IPV4地址不够用,不能每个主机分到一个公网IP 所以使用NAT地址转换. 下面是我在网上找到的一副图 一般来说都是由私网内主机(例如上图中“电脑A-01”)主动发起连接,数据包经过NAT地址转换后送给公网上的服务器(例如上图中的“Server”),连接建立以后可双向传送数据,NAT设备允许私网内主机主动向公网内主机发送数据,但却禁止反方向的主动传递,但在一些特殊的场合需要不同私网内的主机进行互联(例如P2P软件.网络会议.视频传输等),

路由的Resolve机制(需要了解promise)

angular的resovle机制,实际上是应用了promise,在进入特定的路由之前给我们一个做预处理的机会 1.在进入这个路由之前先懒加载对应的 .js 1 $stateProvider 2 .state('owner_detail_room',{ 3 url: '/owner_detail_room/{id:[0-9]{1,10}}', 4 views:{ 5 'main' : { 6 templateUrl:function() { return 'templates/owner_det

区域路由的注册机制

AreaRegistration.RegisterAllAreas() 我们新建一个名称为Admin的Area,VS生成下面的代码.        { action = , id = 我们先来看AreaRegistration这个抽象类,实际上,它只有一个核心功能,就是RegisterAllAreas,获取所有继承它的子类类型,然后创建它,在为他创建一个AreaRegistrationContext,在调用它的RegisterArea方法.      TypeCacheName =    Are

vpn配置 最关键的要声明NAT 路由规则

规则如下: sudo iptables -t nat -A POSTROUTING -s 192.168.89.0/24 -o eth0 -j MASQUERADE 修改文件如下: etc pptpd.conf ppp chap-secrets pptpd-options 参考如下: 这里说下ubuntu下安装配置pptpd.首先安装pptpd这个VPN服务器软件,ssh连接登录后用下面这个命令: sudo apt-get install pptpd 安装好了在webmin的网络这一栏里就可以看

NAT穿透(UDP打洞)

1.NAT(Network Address Translator)介绍 NAT有两大类,基本NAT和NAPT. 1.1.基本NAT 静态NAT:一个公网IP对应一个内部IP,一对一转换 动态NAT:N个公网IP对应M个内部IP,不固定的一对一转换关系  1.2.NAPT(Network Address/Port Translator) 现在基本使用这种,又分为对称和锥型NAT. 锥型NAT,有完全锥型.受限制锥型.端口受限制锥型三种: a)Full Cone NAT(完全圆锥型):从同一私网地址

MVC5路由系统机制详细讲解

请求一个ASP.NET mvc的网站和以前的web form是有区别的,ASP.NET MVC框架内部给我们提供了路由机制,当IIS接受到一个请求时,会先看是否请求了一个静态资源(.html,css,js,图片等),这一步是web form和mvc都是一样的,如果不是说明则说明是请求的一个动态页面,就会走asp.net的管道,mvc的程序请求都会走路由系统,会映射到一个Controller对应的Action方法,而web form请求动态页面是会查找本地实际存在一个aspx文件.下面通过一个AS