2 个回答
-
| 2017-10-18 08:45:30 广告
首先我们来看一下 《TCP/IP详解 卷一》 中关于TCP的服务的介绍。
TCP提供一种面向连接的,可靠的字节流服务。 面向连接意味着使用TCP的应用(通常是客户和服务器)在彼此数据之前必须先建立一个TCP连接。这一过程与打电话很相似…………
题主可以这样想:你打电话给某人,电话接通( TCP 三次握手完成),然后你们两个人就可以随意说话了。
而不是题主先打给某人那么只有题主能说话,某人只能听,如果某人想说话还需要另一部电话机打给题主。
更细节的情况是这样的:
假设:
题主通过浏览器访问百姓知道,TCP 三次握手已经完成。
浏览器发出一个包 :[ 目标:百姓知道服务器 IP , 80 端口。来源:题主机器内网 IP, 端口 a 。]
包很快就送到路由器。路由器查询路由器里的 NAT 表可以得到:
题主机器内网IP ,端口 a <----> 路由器公网IP ,端口 b
路由器把包修改成:[ 目标:百姓知道服务器 IP , 80 端口。来源:路由器公网 IP, 端口 b 。]
包来到百姓知道服务器。服务器一番处理后返回包 :[ 目标:路由器公网 IP ,端口 b 。来源:百姓知道服务器 IP , 80 端口。]
包很快来到题主的路由器上,路由器再次查询路由器里的 NAT 表可以得到:
路由器公网IP ,端口 b <----> 题主机器 IP ,端口 a
路由器把包修改成:[ 目标:题主机器内网 IP , a 端口。来源:百姓知道服务器 IP, 端口 80 。]
这样题主的机器就收到了百姓知道服务器发出包。
而平时说的 「做 NAT 穿透」就是手动在路由器上 NAT 表上添加规则
路由器公网IP ,端口 b <----> 题主机器内网 IP ,端口 a
这样外网的机器就可以直接通过公网 IP 端口 b 与 题主的机器建立连接。
如果没有「做 NAT 穿透」,题主的机器主动向外网的机器发起 TCP 连接时路由器会自动在 NAT 表里写入规则。但是外网的机器不能主动连接题主的机器,因为路由器 NAT 表里没有相关规则,而外网的机器也没有办法告诉路由器:包应该送到内网哪个机器的哪个端口。
不知道这样说题主明白吗?
本问答由车小胖提供
-
| 2017-10-18 08:33:00 广告
本故事纯属虚构,如有雷同,纯属巧合。
古时有一情国,为了保护臣民不为外敌侵扰,建了城墙,城内的子民无事不得外出城外,如果出城,则需要获得特别通行证,通行证有效期为5天,五天之内可以自由出入,每张通行证都有一个唯一的序列号,避免混淆。
城内的一名字叫小明的男子,最近适逢情人节,犯了相思病,因为自己的梦中情人小美嫁人了,嫁了一个富二代,小明每逢佳节倍思小美,茶饭不思,卧床不起,急坏了父母大人,于是差人去城外请神医华佗前来医治,小明的家人在门卫处获得了特别通行证,序列号为201702140520,于是带着这个通行证出城了,很快就找到了华佗,由于拥有特别通行证,并且在有效期内,所以顺利进城,华佗查看了小明的病情,对小明耳语了一番,小明听了一惊,旋即从床上坐起,对华佗说:多谢神医,我的病好了…
以上故事里的序列号就是NAT映射表里的TCP端口号,城里的人出去,自然有序列号,所以双向通行无障碍。
如果这个序列号在NAT表里不存在,意味着通行证过期了(五分钟超时删除),或序列号本来就是非法的(门卫从来没有颁发过这个序列号),城外的人(外部主机)会拒绝进入城内。
但如果序列号是合法的,意味着在有效期内,且门卫颁发过,那城外的服务器可否连接城内的主机呢?
如果城内的主机使用自己的初始端口号2000监听连接(即允许外部连接),这个端口号是主机A连接服务器B的端口号,主机A和B的连接已经关闭,服务器B可以主动连接主机A。
总结一下:
A主动连接B,是在NAT表生成一个允许外部服务器B向内连接的表相,如果A可以使用同一个端口号监听外部连接,则服务器B可以主动连接A。本问答由车小胖提供
更多
- 仙桃小规模代理记账去哪里办
- 29
- 3
- 海北小规模代理记账代办联系方式
- 17
- 3
- 成都注册公司去哪里办
- 55
- 3
- 蚌埠公司注销代办联系方式
- 24
- 3
- 临汾公司注册营业执照流程是什么
- 76
- 3
- 商用燃气灶可以加装熄火保护吗?
- 17
- 3
- 鹤岗公司注销流程是什么
- 97
- 3
- 攀枝花注册公司流程是什么
- 4
- 3
- 和田小规模代理记账去哪里办
- 31
- 3
- 鸡西小规模代理记账代办联系方式
- 80
- 3