百姓大小事,一呼百应!

百姓网 | 百姓知道

通讯通信

TCP连接中a连b和b连a是一码事吗?

有人问我,TCP连接中,一台内网电脑通过路由器访问外网服务器,那服务器可不可以通过这个连接直接访问到内网电脑?我只知道要做NAT穿透,但是人家跟我说都拿到连接了,直接连不就行了。。。总感觉虽然是我连接了你,但你要用我这个我连你的连接,应该是不行吧。。。唉:-(网络那块学的太差,有没有来个解释的清楚点的,从底层协议剖析剖析?

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。

    本问答由车小胖提供

* 本站部分内容来源自网络,仅作分享之用,侵删。