内网的一台电脑要上因特网,就需要端口映射
端口映射分为动态和静态
动态端口映射:内网中的一台电脑要访问新浪网,会向NAT网关发送数据包,包头中包括对方(就是新浪网)IP、端口和本机IP、端口,NAT网关会把本机IP、端口替换成自己的公网IP、一个未使用的端口,并且会记下这个映射关系,为以后转发数据包使用。然后再把数据发给新浪网,新浪网收到数据后做出反应,发送数据到NAT网关的那个未使用的端口,然后NAT网关将数据转发给内网中的那台电脑,实现内网和公网的通讯.当连接关闭时,NAT网关会释放分配给这条连接的端口,以便以后的连接可以继续使用。
动态端口映射其实就是NAT网关的工作方式。
静态端口映射:
就是在NAT网关上开放一个固定的端口,然后设定此端口收到的数据要转发给内网哪个IP和端口,不管有没有连接,这个映射关系都会一直存在。就可以让公网主动访问内网的一个电脑
NAT网关可以是交换机、路由器或电脑。
现在很多关于端口映射的文章都严重的误导人,许多不懂的人把端口映射软件用在自己的电脑上,其实端口映射是要在网关上做的!!!而网关很少是电脑,大部分人也不能控制网关,所以那几个端口映射的软件基本没用。
什么是内网、内网TrueHost、什么是公网、什么是NAT 
公网、内网是两种Internet的接入方式。
  内网接入方式:上网的计算机得到的IP地址是Inetnet上的保留地址,保留地址有如下3种形式:
    10.x.x.x
    172.16.x.x至172.31.x.x
    192.168.x.x
  内网的计算机以NAT(网络地址转换)协议,通过一个公共的网关访问Internet。内网的计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。
  公网接入方式:上网的计算机得到的IP地址是Inetnet上的非保留地址。公网的计算机和Internet上的其他计算机可随意互相访问。
  
NAT(Network Address Translator)是网络地址转换,它实现内网的IP地址与公网的地址之间的相互转换,将大量的内网IP地址转换为一个或少量的公网IP地址,减少对公网IP地址的占用。NAT的最典型应用是:在一个局域网内,只需要一台计算机连接上Internet,就可以利用NAT共享Internet连接,使局域网内其他计算机也可以上网。使用NAT协议,局域网内的计算机可以访问Internet上的计算机,但Internet上的计算机无法访问局域网内的计算机。
  Windows操作系统的Internet连接共享、sygate、winroute、unix/linux的natd等软件,都是使用NAT协议来共享Internet连接。
  所有ISP(Internet服务提供商)提供的内网Internet接入方式,几乎都是基于NAT协议的。
如何检测公网和内网
输入网址:
[url=http://dheart.51.net/ip/]
[url]http://dheart.51.net/ip/[/url] [/url]

查 询 结 果
你当前的IP为:221.234.154.183
湖北省武汉市 电信ADSL
电信用户高速查询:
[url=http://www.dheart.net/ip/]
[url]http://www.dheart.net/ip/[/url] [/url]

教育网用户高速查询:
[url=http://edu.dheart.net/ip/]
[url]http://edu.dheart.net/ip/[/url] [/url]

请用上面介绍的查看IP地址的办法,检查一下您的电脑里有没有这个IP地址。如果有,您就是通过公网接入Internet,否则,就是通过内网接入Internet。
请注意:
1、如果您的浏览器里设置了使用代理服务器,请清除代理服务器设置,并刷新本页面,之后再检测。
2、有些学校或大型的机关单位虽然分配公网IP给用户,但学校或单位为了安全起见,会封闭校外对校内的访问请求。这部分用户虽然有公网IP地址,但依然要用内网动态域名来建网站。如果您通过校园网或机关单位的网络上网,并检测到自己有公网IP,请您在本机调试好网站后,把防火墙打开,请外网的朋友通过IP地址来访问您的网站。如果能访问,就是公网;如果不能访问,就是内网。
3、如果您使用带端口映射功能的ADSL共享器/路由器上网,或通过其他有公网IP的电脑上网,而且您对网关电脑有设置端口映射的操作权限,这种情况虽然属于内网,但也可以设置成为公网。
上面讲了一些原理性的东西, 现在进入实际的端口映射操作。
首先,在BC的设置里面必须打开监听端口这个选项, 不然会大大降低传输速度。
并且,这个端口十分的重要!
因为下面的设置都是围绕这个端口展开的!
我们可以随意设置这个端口, 填入自己喜欢的数值。
但一般推荐为10000以上的高端端口比较好。
一些常用大猫的设置:
阿尔卡特Speed Touch 515的端口设置方法
1、先进入Modem的Web设置页面。
2、打开左边的“Configuration”菜单,点击“Security”项。
3、点击右下方格中的“Configure NAT to internal interfaces”。
4、点击中间的“Configure Global Address Pools and Reserved Mappings”。
5、点击第四项“Add Reserved Mappings”
6、“Global IP Address”(公网IP)填上“0.0.0.0”。
7、“internal IP Address”(内网IP)填上你的PC内网IP(一般为10.0.0.*)
8、“Transport”(网络协议)选“TCP”。
9、“Port Number”(端口)填上BT的端口(BC监听的端口 )。
10、点击“Apply”保存数据。
11、点击左边菜单中的“Save Config”保存设置。
阿尔卡特SpeedTouch HomePlus511 ADSL端口映射方法
1、在地址栏输入10.0.0.138进入ADSL的Web设置页面,点左边的Advanced-NAT
2、进入NAT的设置界面后,点右边的New创建新的端口映射
3、需要注意的是,Protocol一定要选Tcp,Inside IP填10.0.0.1,Outside IP填0.0.0.0,Inside Port和Outside IP要填一样的,默认BT端口为BC监听的端口 ,具体要看你的BT客户端设定。按Apply确认。
4、按了Apply后,我们刚才设置的端口映射就出现在NAPT Settings下方。此时若要再进行端口映射,可以点New,步骤和上面一样。
注意:设置完毕后,点左上角的Save All保存设置,否则Modem的NAT会自动清空,还要再进行设置。
ADSL(全创1100
白色那种)Modem端口映射的设置方法
在浏览器地址栏里输入这个地址
[url=http://192.168.0.2/doc/setvs.htm]
[url]http://192.168.0.2/doc/setvs.htm[/url] [/url]

如果提示你输入用户和密码,一般默认的是用户:admin密码:12345678(或者123456)
就可以看到上面的界面
然后可以开始设置了。
1、“公共端口”、“私有端口”都填上要做的端口(BC监听的端口)。
2、“端口类型”选“TCP”。
3、“主机IP地址”填自己PC的内网IP。然后按一下“添加此设置”。直到你全部做完要做的端口。
4、再在浏览器中输入“192.168.0.2”进入下面这界面,点击“保存设置”,ADSL会重启,一切OK!
ADSL 实达 2110EH ROUTER端口设置方法
实达 ADSL 2110EH ROUTER
IP=192.168.10.1
在IE中用http://192.168.10.1进入 实达ADSL2110EH ROUTER 管理配置面页,选择Services——NAT Rule Configuration——NAT——NAT Options:NAT Rule Entry——Add——进入端口映射添加设置面页,各项设置如下:
BT端口映射设置参数如下:
Rule ID:  2 (做第二个端口时改为3。依此类推)
Rule Flavor:  RDR 
IF Name:  ALL 
Protocol:  ANY 
Local Address From:  192.168.10.* (内网IP)
Local Address T  192.168.10.* (内网IP)
Global Address From:  0.0.0.0
Global Address T  0.0.0.0
Destination Port From: (BC监听的端口 )
Destination Port T  (BC监听的端口 )
Local Port:  (BC监听的端口 )
设置完后,选择 Submit 提交,最后选择Admin——Commit & Reboot——重启Modem。
ADSL 华硕 6000EV/6005HW MODEM的端口映射方法
根据说明书上的Web地址进入Modem的Web设置页。在主菜单中点“NAT”,会有个“natchannellist”,在natchannellist里面的mupltipleportforwarding里面填写以下内容:
action: add
channeln 1 (做第二个时改为2,依此类推)
protocol: TCP
incomingport,begin: (BC监听的端口 ), end: (BC监听的端口 )
newportbegin: (BC监听的端口 ), end: (BC监听的端口 )
newipaddress: 192.168.1.*(内网IP)
最后别忘了保存设置。
说明:假如你的Modem开启了路由功能,也就是常说的自动拨号、开机上网、浏览器上网等等。为了充分体现BT速度的魅力,才需要进行端口映射。
路由器设定: 大亚科技DB-108和102路由器的端口映射方法
一、路由设置方法:
1.先硬件连接,现在的交换机没有UPLINK口了确认正确与否:看设备的PC指示灯是否亮起!亮起就OK!
2.网络的配置,注意一定要有适配器和TCP/IP都正确安装协议才行!在IP地址标签下将你的IP设定在(192.168.1.2----192.168.1.254)之间,因为要和你的设备同在一个网段下才行!
DNS也记得设哦。不知道啊,自己打电信的电话去问下。
确认正确与否:在运行中敲入下列命令"ping 192.168.1.1"看是否连接超时!不超时就OK!
如果您的系统是2000或XP,那就只需选择自动获取IP及DNS。但是话说回来两台机子要联网的话你也搞设IP地址吧,呵呵。
3. 打开IE浏览器,在地址栏处输入"192.168.1.1",随后出现的窗口输入你的用户名和密码!在你的说明书上能找到!这里我输入的是"admin"和"dare"出厂的默认的用户和密码!有的密码是:dareadsl
如果不能进入,请在通电情况下用别针连戳后面复位孔三次,即可进入(猫已为出厂设置)!
4.单击左侧配置下的WAN,这是有侧页面进入设置界面!这里是最重要的,我是福州的用户,具体设置还要询问各位的当地电信部门!
最下方虚电路选"0"后点"提交",
最上方的启用选YES,VPI填0,VCI填200,(我这个是按照福州电信设置的,具体的数字去问当地的电信局)静态IP和子网掩码都填"0.0.0.0",
封装协议选"PPPOE LLC"
桥选"DISABLED"
用户名和口令添入你在电信申请的!
断开连接间隔输入你想要的数值,输入0时永久连接!
审核选"AUTO"即可!
自动连接副选框选中!
DHCP依你的情况而定!我没设!
网关保持默认"0.0.0.0"
点一次提交.
5.继续来到WAN这个界面下,这次虚电路选"1"后点提交,将启用设"NO",VCI填0,VPI填0,静态IP和子网掩码都填"0.0.0.0",封装协议选"PPPOE LLC",桥选"DISABLED",自动连接副选框不选!好了其他的保持默认!再次点提交,然后保存设置,设备重启!如此反复一直到虚电路为7才行!我的是这样设,麻是麻烦了些,别的方法好象行不通。不这样设好像有时网页会打不开但像QQ还是可以用的。这点我一真不明白为什么。有的人说6.7可以不设是关的但是VCI和VPI也是要设0其它的一样的设。
6.设备稳定后,现在点WAN下面的"NAT",在右侧的下拉菜单中选"NAPT",点提交,保存,设备重启!
7. 最后一步,点击NAT下的DNS,随后的右侧界面中DNS代理选择"USE AOTO DISCOVERED DNS SERVERS ONLY",其它不动,提交,保存设置,设备重启!这里好像莫认的就是USE AOTO DISCOVERED DNS SERVERS ONLY还过还是要看下是不是哦。现在应该可以上网了!如果不行你就要在"系统日志"和"诊断测试"里面看看是哪里出错
二、大亚DB108和102端口映射设置方法:
既然已经把这个设备开启了路由功能,但是问题又来了,我自己电脑想变成一个网站,能够叫别人来访问我的电脑或者是FTP呢?其实很简单!进入它设备里面的高级配置也就可以了.IP地址:
[url=http://192.168.1.1/doc/index1.htm]
[url]http://192.168.1.1/doc/index1.htm[/url]
[/url]

看见上面有个虚拟服务器没有?进去后添加你想做成站的IP也就行了!填写端口 也就算设置成功了,提交保存,这时候你的电脑可以说映射出去了.先别忙,不要激动,还有最关键一个问题没有解决,也就是这个设备的ADSL管理端口和你做站的电脑端口都是80,这样别人访问的时候还是不能访问你的指定服务器的,如何解决这个问题呢?
那就有要找到这个设备里面的其它配置了,点进去后啥都不去管直接看见HTTP 服务器端口 80 把它修改成你自己想的一个端口也就OK了!这时候提交保存,那你也就能够叫别人从外面访问你的站点了.最后保存后你在访问你的ADSL就不能打:
[url=http://192.168.1.1/]
[url]http://192.168.1.1/[/url] [/url]
了!这样你是进不了你的ADSL设备的,假如我把端口修改成为81了,以后想进ADSL设备里面管理的话,那就只有在IE上敲:
[url=http://192.168.1.1:81/]
[url]http://192.168.1.1:81/[/url] [/url]
用这个端口进去管理你的ADSL设备!
1. 通过192.168.1.1/doc/index1.htm进入Modem的高级设置界面。用户名:admin 密码:dare
2. 进入“虚拟服务器”选项
3. 填入“公有端口”、“私有端口”,(BC监听的端口 )
4. “主机IP地址”填你那台服务器的局域网内的IP
5. “端口类型” (TCP)
6. 保存设置
注:你测试的时候请用外网的机子来访问你这个外网的IP,内网的机器是无法访问那个外网IP的。
阿尔卡特(ALCATEL) Speedtouch 511E路由器设置心得
首先,在浏览器窗口输入10.0.0.138,进入路由设置窗口。
然后依次:选择“高级配置”----“NAPT”---“新增”
然后选择:
通讯协议为TCP
内部IP为网卡IP,如果不知道请使用10.0.0.1
内部和外部端口都为BC监听的端口
外部IP0.0.0.0不变
最后点“应用”
然后同上
点击“新增”
通讯协议为“UDP”
IP地址同上
内部和外部端口均填“BC监听的端口 ”
最后点“新增”
然后一定记得点左上角“保存所有设置”选项
大功告成,请关机,ADSL Modem断电。
DrayTek Vigor2200/2500/2900系列路由器的端口映射
DrayTek Vigor路由器的隐含默认地址是192.168.1.1,如果该地址已经被改动,请看这篇文章以得到路由器地址和内网IP。
然后在IE的地址一栏输入你的路由器地址,例如192.168.1.1,点击GO
IE会弹出窗口要求你输入路由器的登录名和密码
DrayTek Vigor出厂时没有设置任何密码,所以如果密码没有被用户改动过的话,直接点击"OK"
进入DrayTek Vigor的设置页面后,点击"NAT Setup"
进入"NAT SETUP"后,点击"Configure Port Redirection Table"
进入Port redirection table里后,我们需要为设置两个端口映射,一个是TCP端口,另外一个是UDP端口,所以我们要增加两条端口映射规则
在第1条里
Servive name: 随便取个名字
Protocol: 我们首先做TCP的端口映射,所以这里选TCP
Public Port:.这里要填入BC监听的端口
Private IP:填入你的内网IP地址(其实就是你在顶楼的那个帖子里得到的内网IP地址). 这里示范的是192.168.1.10(要改成你自己的)
Private Port: 这里必须跟前面填的Public Port一致
Active: 点击勾上.
在第2条里
Servive name: 随便取个名字
Protocol: 前面已经做了TCP的端口映射,这里我们要做UDP的端口映射,所以这里选UDP
Public Port:这里要填入BC监听的端口 Private IP:填入你的内网IP地址(其实就是你在顶楼的那个帖子里得到的内网IP地址). 这里示范的是192.168.1.10(要改成你自己的)
Private Port: 这里必须跟前面填的Public Port一致Active: 点击勾上.
填完上面的两条映射规则后,点击"OK"保存。
点击"Main Menu"回到主页面
回到主页面后,点击"reboot system"重新启动猫. 端口映射就算做完了。



有些朋友设置成功了端口映射以后,常常发现网页打不开,QQ不能上,但BC可以正常下载等问题,很大原因是DNS没有设置好,这里提供一些常用的DNS,列出来供大家参考
,也可以上
[url]http://www.google.com[/url]
 深圳 ns.shenzhen.gd.cn 202.96.134.133
202.96.154.8
202.96.154.15
北京 ns.bta.net.cn 202.96.0.133
ns.spt.net.cn 202.96.199.133
ns.cn.net 202.97.16.195
202.106.0.20
202.106.148.1
202.106.196.115
广东 ns.guangzhou.gd.cn 202.96.128.143
dns.guangzhou.gd.cn 202.96.128.68
上海 ns.sta.net.cn 202.96.199.132
202.96.199.133
202.96.209.5
202.96.209.133
浙江 dns.zj.cninfo.net 202.96.102.3
202.96.96.68
202.96.104.18
陕西 ns.snnic.com 202.100.13.11
天津 ns.tpt.net.cn 202.99.96.68
辽宁 ns.dcb.ln.cn 202.96.75.68 202.96.75.64 202.96.64.68
202.96.69.38
202.96.86.18
202.96.86.24
江苏 pub.jsinfo.net 202.102.29.3 202.102.13.141 202.102.24.35
安徽: 202.102.192.68
202.102.199.68



四川 ns.sc.cninfo.net 61.139.2.69
河北 ns.hesjptt.net.cn 202.99.160.68



山西 ns.sxyzptt.net.cn 202.99.198.6
吉林 ns.jlccptt.net.cn 202.98.5.68
山东 202.102.152.3 202.102.128.68
福建 dns.fz.fj.cn 202.101.98.55
湖南 202.103.100.206
广西 10.138.128.40 202.103.224.68 202.103.225.68
江西 202.109.129.2 202.101.224.68 202.101.240.36
云南 ns.ynkmptt.net.cn 202.98.160.68
河南: 202.102.227.68 202.102.224.68 202.102.245.12
新疆: 61.128.97.73
乌鲁木齐 61.128.97.73 61.128.97.74
武汉: 202.103.24.68 202.103.0.117
厦门两个 202.101.103.55 202.101.103.54
山东的: 202.102.134.68
网络管理常用资料:各品牌型号ADSL MODEM用户名密码大全
各品牌型号ADSL MODEM用户名密码大全
在日常的网络管理中,调试 ADSL 设备时,需要使用到默认的用户名/密码,但往往又没有文字记载下来,这里我们将主要的ADSL Modem的工厂默认参数列出来,供大家参考。
首先要先把网卡的IP地址设置成跟这些ADSL设奋相同的网段
1、全向QL1680在IE浏览器的地址栏里面敲入IP地址10.0.0.2,的用户名是admin出厂时默认值:
密码是qxcomm1680,管理员密码是 qxcommsupport
2、全向QL1880在IE浏览器的地址栏里面敲入IP地址192.168.1.1,的用户名是root出厂时默认值:密码是root
3、全向QL1688在IE浏览器的地址栏里面敲入IP地址10.0.0.2,用户名为admin;出厂时默认值:密码为qxcomm1688
4、CyberLink 6307/6309KG 它使用在随Cyberlink6307/6309KG带的光盘中DSLCom.exe, 出厂时默认值:
路由IP地址 : 192.168.1.1密码: stm
5、TP-LINK TD-8800在IE输入192.168.1.1,户名admin,密码admin.
6、合勤zyxel 642 在运行输入telnet 192.168.1.1 密码1234,一直按住机身后面的的RESET复位键然后开机,保持几十秒就可以恢复出厂默认值。
7、Ecom ED-802EG 在IE输入192.168.1.1,用户名和密码都为root
8、神州数码6010RA,在IE输入192.168.1.1 用户名为ADSL,密码为ADSL1234
9、华为SmartAX MT800的初始IP是192.168.1.1,用户名和密码都为ADMIN,恢复默认配置的方法有两种,一种是连续按MODEM背后的RESET键三次,另一种是在配置菜单的SAVE&REBOOT里选择恢复默认配置。
华硕
[url]http://192.168.1.1/[/url]
用户名:adsl
密码:adsl1234
阿尔卡特
[url]http://192.168.1.1/[/url]

一般没有密码
忘记密码的解决办法:
使用超级终端的Xmodem方式重写Vxworks.dlf,密码恢复成:12345
UTStar的ut-300R

[url]http://192.168.1.1[/url]
username:root or admin
password:utstar
具体的步骤是(BitMap映射):
点服务->点Nat->选Nat Rule Entry->添加->
Rule Flavor:BitMap Rule ID:没用过的整数,我添的是1,
因为我把别的都删除了。 IF Name:ALL Local
地址:本地的IP地址(就是你要映射到哪个机子上就添哪个)
Global 地址:0.0.0.0 然后提交就可以了
NAPT ,RDR ,BIMAP



1 、 NAPT规则:转化私有和公网间的IP地址 
  以下这些步骤可以创建一个用来转换你局域网上的私有IP地址为你公网IP地址的,这种类型规则使用NAT中的NAPT,在你设备上的缺省配置中是用NAPT的,NAPT能很好地把私有的源IP地址转换到一个单独的公网IP地址上;NAPT规则也能把源端口号码转换为在NAT总配置页(详看查看你的NAT的设定和统计)上设定的端口号码。
2、RDR规则:让外部用户有权使用局域网计算机
  RDR方式允许你让你的局域网中的计算机做为如一个网站或FTP服务器,互联网上的用户不必向你请求便可以获得这台计算机的公网IP地址,在所有进入和输出的数据包中,这计算机的私有IP地址都转换为你的公网IP地址。
  没有使用RDR规则(或Bimap规则)设备可防止外网的计算机试图访问你的局域网计算机。
3、Basic规则:执行1:1转换
  Basic方式转换私有(局域网边)IP地址为公网(广域网边)地址,象NAPT规则,然而却不同于NAPT规则,Basic规则不转换数据包头部的端口号,它们是直通不转换的,所以Basic规则无法提供象NAPT规则一样的安全级别。 
4、过滤规则:配置有附加标准的Basic规则
  像Basic规则方式,过滤规则式转换公共和私有IP地址是在1:1基础上的,过滤规则方式扩大的Basic规则的范围,可参照“Basic规则”有关综合说明。
  仅当你的局域网计算机开始访问明确目标文件时如果你想让一个地址转换则你可以使用过滤方式,通过它们的IP地址可以识别目标文件的服务器类型(如是FTP或网站服务器),或者二者都是。
5、Bimap规则:实现二个方向转换
  它不同于其它NAT方式,Bimap方式能执行输出和输入二个方向的地址转换。
  在输入方向上,当设备特定接口接收到一个使用你的公网IP地址作为目标地址的数据包时,这个地址将要转换为你局域网计算机上的私有IP地址,它看似是访问公网IP地址上的计算机,实际它是和一台局域网计算机进行通信。
  在输出方向上,一个数据包的私有原IP地址被转换为你的局域网的公网IP地址,在互联网上测试它好像数据包来自那个公网IP地址。
  Bimap规则可以用来提供外网访问局域网设备,他们不能提供象RDR规则那样级别的安全,因为RDR规则还能依靠端口号把进入数据包改送,而Bimap规则无法依靠端口号,因此它允许外网访问而不管进来的数据包的目标端口。
6、Pass直通规则:允许指定地址不经转换直通
  你可以创建一条直通规则允许一个范围的IP地址保持不经转换,即使其它规则已经指定要转换它们的IP地址也可以保持不经转换。
理想之光ADSL-CA81R_84R端口映射
。进入虚拟服务器设定
虚拟服务器能够让您设定公共服务(如网络服务器、FTP、E-mail等等)以供外部的 Internet 使用者存取。每项服务都由一台专用的网络计算机(固定的 IP 地址)提供。
设定私有网络的计算机以执行服务器功能,每台服务器皆设定一个固定的 IP 地址。
在公用端口和私用端口字段中,输入所需服务的埠数,再指定埠的类型为 TCP 或 UDP。
设定完成后,点选「加入此项设定值」(Add this setting),再按「储存设定值」以储存所有设定。
一些常用的DNS,列出来供大家参考
DNS并不是按电信,联通,铁通等来的



现在我们就来讲讲什么是TCP和UDP。

面向连接的TCP 
“面向连接”就是在正式通信前必须要与对方建立起连接。比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。
我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用TCP协议传输数据。

我们来做一个实验,用计算机A(安装Windows 2000 Server操作系统)从“网上邻居”上的一台计算机B拷贝大小为8,644,608字节的文件,通过状态栏右下角网卡的发送和接收指标就会发现:虽然是数据流是由计算机B流向计算机A,但是计算机A仍发送了3,456个数据包,如图2所示。这些数据包是怎样产生的呢?因为文件传输时使用了TCP/IP协议,更确切地说是使用了面向连接的TCP协议,计算机A接收数据包的时候,要向计算机B回发数据包,所以也产生了一些通信量。

如果事先用网络监视器监视网络流量,就会发现由此产生的数据流量是9,478,819字节,比文件大小多出10.96%(如图3所示),原因不仅在于数据包和帧本身占用了一些空间,而且也在于TCP协议面向连接的特性导致了一些额外的通信量的产生。

面向非连接的UDP协议 
“面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。这与现在风行的手机短信非常相似:你在发短信的时候,只需要输入对方手机号就OK了。
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包(如图2所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。

TCP协议和UDP协议各有所长、各有所短,适用于不同要求的通信环境。而是按地域来的


以架设web server为例,路由器内网地址192.168.1.1,web server的内网地址为192.168.1.2:
首先登陆路由器Web管理界面:
在服务表单单击网络地址转换,在NAT Option选择NAT Rule Entry。点击添加,并填入相应参数设置完成后点击提交就行了。

具体参数说明如下:
Rule Flavor: 规则种类。
Basic Rule:提供保留IP到WAN IP的地址翻译,但是端口不发生变化。
Filter Rule:象Basic Rule一样提供保留IP到公网IP的转换,但是这种翻译只有当本地相应IP发出访问特定IP和特定服务(Web/FTP)时才发生。
NAPT Rule:系统的出厂缺省设置。这种设置将局域网的保留IP地址和端口翻译为公网的单一IP地址和在NAT全局配置中规定的端口。这种方式提供对LAN的最安全的保护。
Bimap Rule:此方式将局域网中的某台PC(IP)完全透明对应到公网的IP,这样许多复杂的应用如MSN话音,网络游戏可以在这台PC正常运行。
RDR Rule:通过地址和端口的配置,使Internet上的用户可以通过访问路由器的广域网IP来访问内部网络提供的诸如Web Server或FTP Server服务。
Pass Rule:尽管很多设定的规则会翻译局域网保留IP到公网IP,但可以通过设置PASS rule将某些固定IP不能翻译为WAN IP。
Rule ID: 判断地址翻译规则的序号,最小的序号最先执行,如有规则符合,不再向更高的ID判断执行。
IF Name: 请选择相应的广域网接口,如PPP,1483B等。协议: 选择相应协议(TCP/UDP/ICMP等)。
Local 地址 From: 使用规则的本地IP起始值,如果选择全部则填0.0.0.0。
Local 地址 To: 使用规则的本地IP终结值,如果是单一IP,填入IP起始值。如果选择全部则填255.255.255.0。
Global 地址 From: 不用修改。
Global 地址 To: 不用修改。
目的端口起始值: 目标IP的端口起始值。
目的端口终止值: 目标IP的端口终结值。
Local端口: 本地IP端口。

再次申明:

ADSL上网是有区别的, 有的可以得到公网IP,这时采用端口映射是有效的。有的不可以得到公网IP, 只能得到10.*.*.*的内网IP,这时就是内网中的内网,那就不用费力去搞映射了。 因为就算你能穿透第一层NAT网关,也没办法穿透电信那边的网关的。
唯一的选择就是——换网

偶然发现的东西,也不知道有没有用(反正我也不懂 ),放上来给有兴趣的参详吧……
还有看到文中提到的《P2P 之 UDP穿透NAT的原理与实现(附源代码)》,会不会是……嘿嘿


P2P 之 TCP穿透NAT的原理



由于工作需要,在网上找了很长时间P2P的资料,好像只有《P2P 之 UDP穿透NAT的原理与实现(附源代码)》比较有实际意义,可惜又是用UDP实现的,无奈只好找了份英文资料啃,发现很有参考价值,就根据理解翻译了一部分,分享给大家,由于水平有限,有错望多多包涵。如果有人能够继续翻译下去别忘了通知我哦呵呵,
摘要
防火墙和网络地址转换(NAT)设备对于传统的P2P协议存在一定的问题。一些中间设备抑制了来自外部网络到内部网络的TCP请求,这篇文章的目的就是寻找一个能够在两个NAT设备内部的主机间建立TCP连接的方法。我们已经在两个普通的硬件条件下实现了这个功能。

1.入门
由于32位IP地址的减少,现在出现了很多通过一个internet地址代理内部网络上网的设备,这就是NAT技术。这些设备对于INTERNET已经越来越重要了,但是它们的独立发展因为缺乏标准而对现在的internet协议造成危害。

2.技术
典型的NAT和防火墙设备都是不允许外部地址主动请求而进入内部网络的,如果用户的程序需要在两个内部网络间建立直接性的连接,那么两个内部设备之间必须是相互信任的。如果A和B两个部分都初始化了TCP连接,NAT设备就会认为它们之间是相互信任的,也就允许它们之间的连接了。
图1是一个例子,目标是能够让A和B(分别在NATA和NATB后)建立TCP连接。
我们讨论了多种在特定的NAT设备环境下的TCP连接方案。
如果我们的情况如下:
1、可预测NA的端口,可预测NB的端口,可指定源IP的特定路由
2、可预测NA的端口,可预测NB的端口,不可指定源IP的特定路由
3、随机的NA端口,可预测NB的端口,可指定源IP的特定路由
4、随机的NA端口,可预测NB的端口,不可指定源IP的特定路由
5、随机的NA端口,随机的NB端口,可指定源IP的特定路由
6、随机的NA端口,随机的NB端口,不可指定源IP的特定路由

我们必须作出这4种假设:
1、 两个主机都不受NAT设备所限制;
2、 我们可以配置网络设备使得主机看不到来自外部网络的ICMP包(TTL超过限制),因为这些ICMP数据包无论被任何一方接收到都是中断TCP连接。我们讨论的一些解决方案就依赖通过发送一个初始TTL很小的SYN包来建立TCP连接。一旦SYN包被路由器丢弃,ICMP TTL 超时包就会被传送到NAT设备,我们不允许NAT设备将这个超时TTL的返回包传送到内部网络,即使NAT会将这个包传送到内部,也需要通过配置防火墙来限制这个包到达主机;
3、 即使NAT设备看到ICMP超时的数据包,设备本身的映射表将不会作任何改动;
4、 内部网络的其它主机不会占用抢占这个端口,因为如果网络特别繁忙,这个端口可能会无效。

3.1第一种情况
我们可以通过图2表示的顺序解决问题:
1)A和B可以设定LSR(IP报头中的一个选项)通过X路由发送SYN数据包.
2)X可以缓存它们的数据包并且发送欺骗的SYN+ACKS给NA和NB.
3)A和B可以通过由X发送来的数据进行应答.
4)X丢弃这两个ACK包,因为它已经可以确定A和B相互应答成功.

图2是假设A和B都事先彼此的NAT的通信端口,A知道B的通信端口是NB:5000,B知道A的是NA:4000,并且要求X不在任何NAT设备的后面.实际中这两个端口是预测得到的,预测过程如图3:

3.2第二种情况
第一种情况依赖与自由设定路由,但是现在很多路由器大多都限制这样做,并且会丢弃这样的服务请求包。因此在实际应用中,这种方案失败的可能性很大。如果自由设定路由不可行,我们可以通过out-of-band通道(他们预先与X连接好的TCP连接)来传送原本必须将数据包路由到X才能看到的包。注意在图二的第二步X已经知道了TCP的序号Q和P,因为X已经收到了这两个SYN包,但是如果数据包没有路由经过X就不可能收到它们。为了初始化这个连接,两个主机发送初始SYN包,并且他们都知道是不可能到达目标的,但是它们都可以记住自己的SYN号(个人看法,通过钩子获得发送的数据SYN包)并且可以发送给X,X得到了它们的SYN包,就可以欺骗它们发送ACK包了。有两种方法可以发送无法到达目标的数据包。简单的方法就是每个主机发送一个SYN给对方,要求应答包不会到达内部网络.如果NAT(防火墙)会将应答包传回给内部网络,通常是发送TCP的reset包(RST),如果NAT生成RST包,A和B就不能简单地发送一个向图2中SYN给彼此,因为如果这样NA和NB就无法打洞了呵呵,如果NAT不发送RST包,那么这个TCP连接就不会被中断。另外一个发送无法到达目标网络的SYN包的方法是减小TTL值,使它们无法彼此到达。如果用户无法配置防火墙丢弃这个ICMP应答包,或者NAT不继续传送这个ICMP,这个TCP就不会立即关闭。这个解决方案不能使用一种简单的欺骗,因为我们必须保证源地址的SYN包发送者不会没有收到ICMP的RST包,否则会导致中间设备建立错误路由.仅仅依靠SYN包,NAT就可以建立从internet IP和端口到外部IP和端口的路由.由于欺骗的SYN包是错误的源IP(并非发出者X),这个路由将不会发送到X而是发送到NA或者NB。另外,这种方案都需要设置TTL到足够小,以便于对方的NAT不会收到到各自发出的初始SYN包,否则就无法完成打洞。(图4)

3.3第三种情况
比前两种简单,但是X将无法预见NA或者NB的端口。B将先给X发送一个SYN包告诉以便于X知道它所选用的端口号,然后X将这个信息发送到A,A就可以向这个确定的地址和端口发送SYN,图5是第一种情况的变形::
1)X向图3一样预测端口,但是它不能预测到NA的下一个端口号,但是可以预测NB的下一个端口号是5000,并且可以通知A和B这个节点已经建立了连接;
2)A和B同步节点X;
3)X可以欺骗A和B;
4)A和B相互发送ACK;
5)X丢弃发给它的ACK,因为它已经可以确认它们已经建立连接。

3.5. Simultaneous TCP open(TCP同时打开)
在一对节点都在已存在middlebox后,有一种建立直接P2P TCP连接的方法有时候会被使用。大多数TCP连接都是从一个终端发从一个SYN包到另一个终端,另一个中断同步响应一个SYN-ACK包。无论怎样,对于两个终端来说,同时通过发送同步包到对方然后用一个ACK包应答来建立一个TCP连接是可行的。这种过程就被称为"simultaneous open"(同时打开)

如果一个middlebox从尝试建立一个TCP连接的私有网络的外面接受一个TCP SYN包,middlebox通常以丢弃这个SYN包或者发送一个TCP RST(连接复位)包的方式来拒绝这个连接尝试。但是,如果同步包与源和目的地址端口一起到达,那么会让middlebox相信一个TCP连接已经建立起来,然后middlebox将会允许数据包通过。特别是如果middlebox刚刚得到并转换了一个从同样地址和端口来的SYN包,它将认为连接是成立的并允许进来的SYN通过。如果客户端A和B能彼此预测公共端口,它们各自的middlebox将分配下一个TCP连接端口,如果其中一个客户端和另一个客户端建立一个外部的TCP连接,可以在对方SYN到达本地middlebox之前就发送SYN包通过它本地自己的middlebox,那么P2P TCP连接就可以工作了。

令人遗憾的是,这个方法也可能比上面说的UDP端口号预测方法更脆弱并对时效更加敏感。首先,除非在进行TCP连接时,两个middleboxes是简单的防火墙或者cone NAT,在各自尝试猜测公共端口号来让NAT分配新的连接时,和上面(UDP端口预测)说到的完全一样的事情会导致连接失败。另外,如果有一方的客户发送的同步包太迅速的到达对面的middlebox,远端middlebox可能会用一个RST包拒绝SYN包,接下来就会导致本地的middlebox关闭对话并且在将来SYN重发时使用了相同但无用的端口号。最终,对simultaneous open的支持作为一个TCP的特殊应用,没有在广泛的系统中被使用。因此,这个方法也只为历史因素在这里被同样提及;它不建议被应用程序使用。在现有NAT上想要实现P2P直接通讯的应用程序应该使用UDP。
4.4 TCP P2P applications (TCP P2P应用程序)

被程序员们广泛使用的SOCKET API,常用于C/S结构应用设计中。在它的通常使用方式中,一个SOCKET能绑定一个TCP或UDP端口。一个应用程序不会被允许用同样的端口(TCP or UDP)和多个SOCKET绑定来和多个外部主机同时建立连接(或)用一个SOCKET在端口上监听而其他SOCKET来建立外部连接。但是上述单个SOCKET的端口绑定限制在UDP上不是问题,因为UDP是基于数据报文的协议。UDP P2P应用程序设计者可以用recvfrom()和sendto()函数来让一个SOCKET不仅发送而且可以从多个主机上接受数据报文。

这不是TCP具有的情况。由于TCP,每个输入和输出连接都要和一个单独的SOCKET有联系。Linux Sockets API用SO_REUSEADDR选项的帮助来解决这个问题(是不是应该这么说?),这个选项好象不起作用,但可以
(在标准Single Unix里没有这个函数)。Win32 API提供了一个相同的调用SetReuseAddress。使用任何上述的选择,应用程序可以复用一个TCP端口的多个SOCKET。就是说,可以打开两个绑定在同样端口上的TCP stream Socket,一个用与listen(),另一个用与其它主机connect()